structinput_polled_dev{void*private;void(*open)(structinput_polled_dev*dev);void(*close)(structinput_polled_dev*dev);void(*poll)(structinput_polled_dev*dev);unsignedintpoll_interval;/* msec */unsignedintpoll_interval_max;/* msec */unsignedintpoll_interval_min;/* msec */structinput_dev*...
卸载input驱动的时候需要先使用input_unregister_device函数注销掉注册的input_dev,然后使用 input_free_device 函数释放掉前面申请的 input_dev。 input_dev 注册过程示例代码如下所示: structinput_dev*inputdev;/* input 结构体变量 */ /* 驱动入口函数 */ staticint__initxxx_init(void) { ... inputdev=in...
在使用 input 子系统的时候我们只需要注册一个 input 设备即可,input_dev 结构体表示 input设备,此结构体定义在 include/linux/input.h 文件中,定义如下(有省略): struct input_dev { const char *name; const char *phys; const char *uniq; struct input_id id; unsigned long propbit[BITS_TO_LONGS(IN...
voidinput_sync(structinput_dev *dev) 驱动实例 #include<linux/device.h>#include<linux/input.h>#include<linux/interrupt.h>#include<linux/module.h>#include<linux/timer.h>#include<linux/poll.h>#include<linux/fs.h>#include<linux/errno.h>#include<linux/miscdevice.h>#include<linux/kernel.h>#i...
#include <linux/wait.h> #include <linux/input.h> #include <linux/init.h> static gpio_base = 96; //gpio的基址,看不同的平台而定的。 static pow_btn = 18; //按键的中断号,也是依赖于平台的 struct input_dev *btn_dev; //input设备的结构体,这里定义了btn_dev ...
我们可以看到,input_device和input_handler中都有一个h_list,而input_handle拥有指向input_dev和input_handler的指针,也就是说input_handle是用来关联input_dev和input_handler的。 那么为什么一个input_device和input_handler中拥有的是h_list而不是一个handle呢?因为一个device可能对应多个handler,而一个handler也不能...
都定义在include/linux/input.h中。 struct input_dev: 对输入设备的抽象描述,继承自struct device struct input_handler: 代表输入设备的处理方法 struct input_handle: 用来关联某个input_dev和input_handler struct input_dev input_dev 代表底层的输入设备,比如按键或鼠标,所有输入设备的input_dev对象保存在一个全...
INIT_LIST_HEAD(&dev->h_list); //初始化handle链表 INIT_LIST_HEAD(&dev->node); //初始化输入设备链表 } } 通过input_allocate_device()函数,我们设备驱动现在持有的input_dev里面就被赋予了input的“形象”,但是还需要我们去充实一下“内在”,因此,设备驱动程序,还需要为自己的设备增加自己的特性,才能创...
#include <sys/stropts.h> #include <fcntl.h> #include <poll.h> #define NPOLL 2 /* number of file descriptors to poll */ int main() { struct pollfd pollfds[NPOLL]; char buf[1024]; int count, i; if ((pollfds[0].fd = open("/dev/ttya", O_RDWR|O_NONBLOCK)) < 0) { pe...
int __must_check input_register_device(struct input_dev *); void input_unregister_device(struct input_dev *);void input_reset_device(struct input_dev *);int input_setup_polling(struct input_dev *dev, void (*poll_fn)(struct input_dev *dev));...