// Copyright 2015-2021 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef MAIN_ESP32_HAL_GPIO_H_ #define MAIN_ESP32_HAL_GPIO_H_ #ifdef __cplusplus extern "C" { #endif #include "esp32-hal.h" #define LOW 0x0 #define HIGH 0x1 //GPIO FUNCTIONS #define INPUT 0x01 #define OUTPUT 0x02 #define PULLUP 0x04 #define INPUT_PULLUP 0x05 #define PULLDOWN 0x08 #define INPUT_PULLDOWN 0x09 #define OPEN_DRAIN 0x10 #define OUTPUT_OPEN_DRAIN 0x12 #define SPECIAL 0xF0 #define FUNCTION_1 0x00 #define FUNCTION_2 0x20 #define FUNCTION_3 0x40 #define FUNCTION_4 0x60 #define FUNCTION_5 0x80 #define FUNCTION_6 0xA0 #define ANALOG 0xC0 //Interrupt Modes #define DISABLED 0x00 #define RISING 0x01 #define FALLING 0x02 #define CHANGE 0x03 #define ONLOW 0x04 #define ONHIGH 0x05 #define ONLOW_WE 0x0C #define ONHIGH_WE 0x0D typedef struct { uint8_t reg; /*!< GPIO register offset from DR_REG_IO_MUX_BASE */ int8_t rtc; /*!< RTC GPIO number (-1 if not RTC GPIO pin) */ int8_t adc; /*!< ADC Channel number (-1 if not ADC pin) */ int8_t touch; /*!< Touch Channel number (-1 if not Touch pin) */ } esp32_gpioMux_t; extern const esp32_gpioMux_t esp32_gpioMux[40]; extern const int8_t esp32_adc2gpio[20]; #define digitalPinIsValid(pin) ((pin) < 40 && esp32_gpioMux[(pin)].reg) #define digitalPinCanOutput(pin) ((pin) < 34 && esp32_gpioMux[(pin)].reg) #define digitalPinToRtcPin(pin) (((pin) < 40)?esp32_gpioMux[(pin)].rtc:-1) #define digitalPinToAnalogChannel(pin) (((pin) < 40)?esp32_gpioMux[(pin)].adc:-1) #define digitalPinToTouchChannel(pin) (((pin) < 40)?esp32_gpioMux[(pin)].touch:-1) #define digitalPinToDacChannel(pin) (((pin) == 25)?0:((pin) == 26)?1:-1) void pinMode(uint8_t pin, uint8_t mode); void digitalWrite(uint8_t pin, uint8_t val); int digitalRead(uint8_t pin); void attachInterrupt(uint8_t pin, void (*)(void), int mode); void attachInterruptArg(uint8_t pin, void (*)(void*), void * arg, int mode); void detachInterrupt(uint8_t pin); #ifdef __cplusplus } #endif #endif /* MAIN_ESP32_HAL_GPIO_H_ */