#ifndef __DRV_BTN_INTERFACE_H__
#define __DRV_BTN_INTERFACE_H__

#include <stdint.h>
#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif  

/**
 * @brief 按键底层驱动接口结构体
 *
 * @details 所有类型的按键（GPIO, ADC, Matrix 等）都需要实现此接口  
 */
typedef struct btn_drv_interface_t btn_drv_interface_t;

/**
 * @brief 按键底层驱动接口定义
 *
 * @details 所有类型的按键（GPIO, ADC, Matrix 等）都需要实现此接口
 */
struct btn_drv_interface_t {
    uint8_t (*get_key_level)(btn_drv_interface_t *intf);  /**< (必须) 获取按键电平状态函数指针 (返回 1 表示按下，0 表示释放) */
    bool (*del)(btn_drv_interface_t *intf);               /**< (可选) 删除硬件驱动并清理资源的回调函数指针 */
};

/**
 * @brief 按键驱动参数结构体
 *
 * @details 该结构体定义了按键驱动的参数，用于初始化按键设备。
 */ 
typedef struct {
    uint16_t long_press_time;                           /**< 长按触发时间 (ms)，如果为 0 则默认使用 Kconfig 中的 BUTTON_LONG_PRESS_TIME_MS */
    uint16_t short_press_time;                          /**< 短按触发时间 (ms)，如果为 0 则默认使用 Kconfig 中的 BUTTON_SHORT_PRESS_TIME_MS */
} btn_drv_params_t;

#ifdef __cplusplus
}
#endif  

#endif  /* __DRV_BTN_INTERFACE_H__ */


