#include "drivers/chip/gpio.h"

#include "driver/gpio.h"

#define SYS_LOG_DOMAIN "gpio"
#include "sys_log.h"

void drv_gpio_enable_all(void)
{
}

void drv_gpio_disable_all(void)
{
}

int drv_gpio_pin_configure(uint8_t pin, gpio_dir_t dir, gpio_pud_t pull)
{
    gpio_config_t io_conf;
    static __typeof__(io_conf.mode) const mode_tab[] = {
        [_GPIO_DIR_IN] = GPIO_MODE_INPUT,
        [_GPIO_DIR_ANALOG] = GPIO_MODE_INPUT,
        [_GPIO_DIR_OUT] = GPIO_MODE_OUTPUT,
        [_GPIO_DIR_OPEN_DRAIN] = GPIO_MODE_OUTPUT_OD,
    };
    io_conf.intr_type = GPIO_INTR_DISABLE;
    io_conf.mode = mode_tab[dir];
    io_conf.pin_bit_mask = (1ULL << pin);
    io_conf.pull_up_en = pull == _GPIO_PUD_PULL_UP;
    io_conf.pull_down_en = pull == _GPIO_PUD_PULL_DOWN;
    gpio_config(&io_conf);
    return 0;
}

int drv_gpio_pin_read(uint8_t pin)
{
    return gpio_get_level(pin);
}

void drv_gpio_pin_write(uint8_t pin, int value)
{
    gpio_set_level(pin, value);
}

void drv_gpio_exti_callback_enable(gpio_exti_cb_fn cb)
{
}

void drv_gpio_exti_callback_disable(void)
{
}

void drv_gpio_exti_irq_enable(uint8_t pin, gpio_exti_edge_t polarity, int priority)
{
}

void drv_gpio_exti_irq_disable(uint8_t pin)
{
}

int drv_gpio_exti_get_pin(void)
{
    return 0;
}
