3#include "driver/gpio.h"
12 explicit ESP32GPIO(gpio_num_t gpio_num) : gpio_num_(gpio_num) { map_[gpio_num_] =
this; }
14 bool Read()
override {
return gpio_get_level(gpio_num_) != 0; }
16 ErrorCode
Write(
bool value)
override
18 gpio_set_level(gpio_num_, value ? 1 : 0);
24 if (!isr_service_installed_)
26 gpio_install_isr_service(0);
27 isr_service_installed_ =
true;
30 gpio_isr_handler_add(gpio_num_, ESP32GPIO::InterruptDispatcher, (
void*)gpio_num_);
31 gpio_intr_enable(gpio_num_);
37 gpio_intr_disable(gpio_num_);
38 gpio_isr_handler_remove(gpio_num_);
44 gpio_config_t io_conf = {};
45 io_conf.pin_bit_mask = 1ULL << gpio_num_;
50 io_conf.mode = GPIO_MODE_INPUT;
53 io_conf.mode = GPIO_MODE_OUTPUT;
56 io_conf.mode = GPIO_MODE_OUTPUT_OD;
59 io_conf.mode = GPIO_MODE_INPUT;
60 io_conf.intr_type = GPIO_INTR_NEGEDGE;
63 io_conf.mode = GPIO_MODE_INPUT;
64 io_conf.intr_type = GPIO_INTR_POSEDGE;
67 io_conf.mode = GPIO_MODE_INPUT;
68 io_conf.intr_type = GPIO_INTR_ANYEDGE;
75 io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
76 io_conf.pull_up_en = GPIO_PULLUP_DISABLE;
79 io_conf.pull_up_en = GPIO_PULLUP_ENABLE;
80 io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
83 io_conf.pull_down_en = GPIO_PULLDOWN_ENABLE;
84 io_conf.pull_up_en = GPIO_PULLUP_DISABLE;
88 gpio_config(&io_conf);
93 static void IRAM_ATTR InterruptDispatcher(
void* arg)
95 auto gpio_num =
static_cast<gpio_num_t
>(
reinterpret_cast<uintptr_t
>(arg));
96 auto gpio = map_[gpio_num];
104 gpio_num_t gpio_num_;
105 static inline bool isr_service_installed_ =
false;
106 static inline ESP32GPIO* map_[GPIO_NUM_MAX];
void Run(bool in_isr, PassArgs &&...args) const
执行回调函数,并传递参数。 Executes the callback function, passing the arguments.
bool Read() override
读取 GPIO 引脚状态。Reads the GPIO pin state.
ErrorCode Write(bool value) override
写入 GPIO 引脚状态。Writes the GPIO pin state.
ErrorCode DisableInterrupt() override
禁用 GPIO 引脚中断。Disables the GPIO pin interrupt.
ErrorCode SetConfig(Configuration config) override
配置 GPIO 引脚参数。Configures the GPIO pin settings.
ErrorCode EnableInterrupt() override
使能 GPIO 引脚中断。Enables the GPIO pin interrupt.
通用输入输出(GPIO)接口类。General Purpose Input/Output (GPIO) interface class.
Callback callback_
GPIO 事件的回调函数。Callback function for GPIO events.
@ OUTPUT_PUSH_PULL
推挽输出模式。Push-pull output mode.
@ RISING_INTERRUPT
上升沿中断模式。Rising edge interrupt mode.
@ FALL_RISING_INTERRUPT
双沿触发中断模式。Both edge interrupt mode.
@ OUTPUT_OPEN_DRAIN
开漏输出模式。Open-drain output mode.
@ FALL_INTERRUPT
下降沿中断模式。Falling edge interrupt mode.
@ NONE
无上拉或下拉。No pull-up or pull-down.
@ DOWN
下拉模式。Pull-down mode.
LibXR Color Control Library / LibXR终端颜色控制库
存储 GPIO 配置参数的结构体。Structure storing GPIO configuration parameters.
Pull pull
GPIO 上拉/下拉配置。GPIO pull-up/pull-down configuration.
Direction direction
GPIO 引脚方向。GPIO pin direction.