EC11驱动源代码是一份详细的编程资源,专注于EC11编码器设备在操作系统中的驱动程序开发与优化。此源码为开发者提供了深入了解硬件控制和软件集成的机会,适用于希望提升设备兼容性和性能的进阶用户和技术爱好者。
在gpioc-keyc的基础上改写了旋转按钮EC11的驱动程序,并已通过测试。支持自定义左旋和右旋的键值设置。如果按键输入涉及第三个引脚,该驱动还包含一个头文件gpio_ec11.h。
```cpp
#ifndef _GPIO_EC11_H
#define _GPIO_EC11_H
struct device;
struct gpio_desc;
/**
* struct gpio_ec11_button - 配置参数结构体定义
*
* @leftcode: 旋转编码器左旋方向输入事件代码 (KEY_*, SW_* 等)
* @rightcode: 旋转编码器右旋方向输入事件代码 (KEY_*, SW_* 等)
* @gpio: A引脚的GPIO编号,如果该按键不支持GPIO,则值为-1
* @subgpio: B引脚的GPIO编号,同上规则
* @active_low: true表示当GPIO低电平时按钮被视为按下状态
* @desc: 与按钮关联的描述字符串标签
* @type: 输入事件类型 (%EV_KEY, %EV_SW, %EV_ABS)
* @wakeup: 配置按键为唤醒源选项
* @debounce_interval: 去抖动间隔时间(毫秒)
* @can_disable: true表示用户空间允许通过sysfs禁用按钮
* @value: 轴值,用于%EV_ABS事件类型
* @irq: 中断号,仅适用于中断按键
* @gpiod: GPIO描述符指针
*/
struct gpio_ec11_button {
unsigned int code;
unsigned int leftcode; /* 记录左旋键值 */
unsigned int rightcode; /* 记录右旋键值 */
int gpio; /* 旋转编码器A引脚的GPIO号*/
int subgpio; /* 旋转编码器B引脚的GPIO号*/
int active_low;
const char *desc;
unsigned int type;
int wakeup;
int debounce_interval;
bool can_disable;
int value;
unsigned int irq;
unsigned int irq_flags;
struct gpio_desc *gpiod; /* GPIO描述符指针 */
};
/**
* struct gpio_ec11_platform_data - 用于gpio_ec11驱动的平台数据结构体
*
* @buttons: 按钮数组,每个元素为&gpio_ec11_button类型,表示连接到设备上的按钮配置信息
* @nbuttons: 数组@buttons中的元素数量
* @poll_interval: 轮询间隔时间(毫秒),仅用于轮询驱动程序
* @rep: 启用输入子系统自动重复功能的标志位
* @enable: 设备启用平台钩子函数指针
* @disable: 设备禁用平台钩子函数指针
* @name: 输入设备名称字符串常量
*/
struct gpio_ec11_platform_data {
struct gpio_ec11_button *buttons;
int nbuttons; /* 按钮数组元素数量*/
unsigned int poll_interval; /* 轮询间隔时间,毫秒为单位 */
unsigned int rep : 1; /* 自动重复功能标志位 */
// 设备启用和禁用的平台钩子函数指针
int (*enable)(struct device *dev);
void (*disable)(struct device *dev);
const char *name;
};
#endif
```