#ifndef GPIO5_TIANWEN_H
#define GPIO5_TIANWEN_H

#include "esp_err.h"
#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "freertos/queue.h"
#include "freertos/task.h"
#include "driver/gpio.h"  // 确保包含此头文件（定义了ESP_INTR_FLAG_DEFAULT）
#define ESP_INTR_FLAG_DEFAULT 0

class Gpio5InterruptHandler {
private:
    static QueueHandle_t s_gpio_evt_queue;   // 中断事件队列（静态，供ISR使用）
    
    gpio_num_t m_gpio_num;                   // GPIO引脚号
    TaskHandle_t m_task_handle;              // 中断处理任务句柄

    // 中断服务程序（ISR），必须为静态函数
    static void IRAM_ATTR isr_handler(void* arg);

    // 任务包装函数（静态），用于转发到成员函数
    static void task_wrapper(void* arg);

    // 实际的中断事件处理任务（成员函数）
    void task_handler();

public:
    // 构造函数：初始化GPIO引脚为GPIO5
    Gpio5InterruptHandler();

    // 析构函数：释放资源
    ~Gpio5InterruptHandler();

    // 初始化函数：配置GPIO和中断服务
    esp_err_t init();
};

#endif // GPIO5_INTERRUPT_H