// // Created by erki on 11/02/24. // #pragma once #ifdef SKULLC_USE_HAL_ESP #include #include namespace Peripherals::Hal::Esp { struct Gpio { gpio_num_t gpio; const bool inverted = false; Gpio() = delete; explicit Gpio(gpio_num_t gpio, const bool inverted) : gpio(gpio), inverted(inverted) { } void set(const bool& state) { gpio_set_level(gpio, inverted ? !state : state); } void toggle() { gpio_set_level(gpio, !gpio_get_level(gpio)); } bool read() const { return inverted ? !bool(gpio_get_level(gpio)) : bool(gpio_get_level(gpio)); } }; static_assert(Peripherals::Hal::Gpio); #define CREATE_GPIO(name) \ Peripherals::Hal::Esp::Gpio{name, false} #define CREATE_INV_GPIO(name) \ Peripherals::Hal::Esp::Gpio{name, true} } #else # warning "ESP HAL included without SKULLC_USE_HAL_ESP being defined." #endif /* SKULLC_USE_HAL_ESP */