52 lines
939 B
C++
52 lines
939 B
C++
//
|
|
// Created by erki on 11/02/24.
|
|
//
|
|
|
|
#pragma once
|
|
|
|
#ifdef SKULLC_USE_HAL_ESP
|
|
|
|
#include <peripherals_hal_concepts.hpp>
|
|
|
|
#include <driver/gpio.h>
|
|
|
|
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<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 */
|