Input event驱动

Linux 专门对输入设备。
键盘,鼠标,手柄,触摸屏。按键。封装一个类驱动。
主要统一与应用程序接口。这一类的设备结点都是在/dev/input/eventn( 0<=n)
用户程序读驱动的输入都采用统一格式,即struct input_event,方便应用程序来读写

Linux/input.h

struct input_event {
    struct timeval time;
    __u16 type;
    __u16 code;
    __s32 value;
};

INPUT驱动查看

查看设备结点
ls -l /dev/input
查看设备信息
ls -l /proc/bus/input/
cat /proc/bus/input/devices
查看input class信息

ls /sys/class/input

input device 优点

统一应用程序使用外部输入设备的接口。这样简化编程。
Input core是没有缓存队列的,如果应用程序没有及时取事件,则事件被丢弃。

input输入驱动编程

输入驱动数据结构
 struct input_dev *input_dev;
在驱动中必须动态分配input_dev结构,这里使用
input_allocate_device();
初始化input_dev的参数
调用 input_register_device()注册,
退出时调用 input_unregister_device()

与应用程序的交互

Input 驱动的子系统已经控制I/O,换句话read/write不需要驱动直接.
驱动只需要input_report_xxx()上传信息
input_report_key()上传按键
input_report_abs() 绝对坐标
它们最终调用input_event来向input core上传信息,并最后转交给应用程序.
Input core没有缓存事件信息,这样在应用程序开始read前的信息全部被丢弃.

input_dev 的初始化

evbit 表示这个驱动支持哪一些事件,有两种等效的方法
set_bit(EV_KEY, input_dev->evbit); set_bit(EV_REL, input_dev->evbit);
input_dev->evbit  = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);

初始化/proc/bus/input/devices的信息

#define DEVICE_NAME "s3c6410 gpio button"

myinput_dev->name = DEVICE_NAME;
    myinput_dev->phys = "gpio-button/input100";
    
    myinput_dev->id.bustype = BUS_HOST;  //设备
    myinput_dev->id.vendor =  0x0001;
    myinput_dev->id.product = 0x0001;
    myinput_dev->id.version = 0x0001;

cat /proc/bus/input/devices

I: Bus=0019 Vendor=0001 Product=0001 Version=0001
N: Name="s3c6410 gpio button"
P: Phys=gpio-button/input100
S: Sysfs=/class/input/input2
U: Uniq=
H: Handlers=kbd event2
B: EV=3
B: KEY=1680 0 0 10000002

[root@urbetter 01]# insmod myinput.ko
 myinput_init 08:
myinput_register_irq: rquest_irq: irq 101,name KYE1-UP
myinput_register_irq: rquest_irq: irq 102,name KYE2-LEFT
myinput_register_irq: rquest_irq: irq 103,name KYE3-RIGHT
myinput_register_irq: rquest_irq: irq 104,name KYE4-DOWN
myinput_register_irq: rquest_irq: irq 105,name KYE5-ESC
myinput_register_irq: rquest_irq: irq 106,name KYE6-RETURN
myinput_init: sizeof(evbit)=4,EV_CNT 32,BITS_LONGS 1
myinput_init: sizeof(keybit)=96,KEY_CNT 768,BITS_LONGS 24
input: s3c6410 gpio button as /class/input/input2
[root@urbetter 01]# ls -l /dev/input
crw-rw----    1 root     root      13,  64 Mar 23  2000 event0
crw-rw----    1 root     root      13,  65 Mar 23  2000 event1
crw-rw----    1 root     root      13,  66 Mar 23 12:08 event2
crw-rw----    1 root     root      13,  63 Mar 23  2000 mice
crw-rw----    1 root     root      13,  32 Mar 23  2000 mouse0

USB键盘测试

USB键盘是在 hid/usbhid/usbkbd.c

I: Bus=0003 Vendor=413c Product=2003 Version=0110
N: Name="Dell Dell USB Keyboard"
P: Phys=usb-s3c24xx-1/input0
S: Sysfs=/class/input/input2
U: Uniq=
H: Handlers=kbd event2
B: EV=120013
B: KEY=10000 7 ff9f207a c14057ff febeffdf ffefffff ffffffff fffffffe
B: MSC=10
B: LED=7

[root@urbetter 01]# ls -l /dev/input
crw-rw----    1 root     root      13,  64 Mar 23  2000 event0
crw-rw----    1 root     root      13,  65 Mar 23  2000 event1
crw-rw----    1 root     root      13,  66 Mar 23 14:17 event2
crw-rw----    1 root     root      13,  67 Mar 23 14:19 event3
crw-rw----    1 root     root      13,  63 Mar 23  2000 mice
crw-rw----    1 root     root      13,  32 Mar 23  2000 mouse0

usb 1-1: new low speed USB device using s3c2410-ohci and address 2
usb 1-1: configuration #1 chosen from 1 choice
input: Dell Dell USB Keyboard as /class/input/input2
generic-usb 0003:413C:2003.0001: input: USB HID v1.10 Keyboard [Dell Dell USB Ke
yboard] on usb-s3c24xx-1/input0

Input event驱动的更多相关文章

  1. 如何读取Linux键值,输入子系统,key,dev/input/event,dev/event,C语言键盘【转】

    转自:https://blog.csdn.net/lanmanck/article/details/8423669 相信各位使用嵌入式的都希望直接读取键值,特别是芯片厂家已经提供input驱动的情况下 ...

  2. Linux input子系统学习总结(三)----Input设备驱动

    Input 设备驱动 ---操作硬件获取硬件寄存器中设备输入的数据,并把数据交给核心层: 一 .设备驱动的注册步骤: 1.分配一个struct  input_dev :          struct ...

  3. input子系统驱动学习之中的一个

        刚開始学习linux这门课就被分配编写一个设备的input子系统驱动.这对我的确有点困难.只是实际的操作中发现困难远比我想象的要大的多.本以为依照老师课上的步骤就行非常快的完毕这项任务.后来发 ...

  4. input子系统驱动

    input子系统驱动 框架分析 核心层 文件为:/drivers/input/input.c: 首先找到入口函数为**static int __init input_init(void)**,在该函数 ...

  5. 如何区分/dev/input/event

    方法是把每一个/dev/input/event打开.通过ioctl函数来读取设备name,每一个设备name是固定的,可以根据name区分event.我这是查找触摸事件为例:代码如下: static ...

  6. Exception dispatching input event. use XlistView

    今天上午解决Bug,一个上午的时间: log: 11-01 14:49:14.826: E/InputEventReceiver(30810): Exception dispatching input ...

  7. 利用input event 实时监听input输入的内容

    <div id="addNumber"> <p>How many people would you like to invite?</p> &l ...

  8. js & input event & input change event

    js & input event & input change event vue & search & input change <input @click=& ...

  9. Linux-hexdump命令调试event驱动—详解(13)

    hexdump: 查看文件的内容,比如二进制文件中包含的某些字符串,通常用来调试驱动用 1.调试 键盘驱动 讲解 当我们insmod挂载了键盘驱动后,找到键盘驱动被放在event1设备里, 此时没有按 ...

随机推荐

  1. Mail搭建

    Mail搭建 一.本章结构 1.postfix概念与原理 2.postfix配置文件解析 3.邮件服务器端配置与客户端使用 4.垃圾邮件过滤 5.邮件自动回复 二.邮件服务器概述 1.邮件服务器概念 ...

  2. 房间声学原理与Schroeder混响算法实现

    一.混响时间的计算与预测 所谓混响就是声音的直达声与反射声很紧凑的重合在一起时人耳所听到的声音,这个效果在语音的后期处理时特别有用.能产生混响最常见的场景就是房间内,尤其是空旷的房间中. 混响有直达声 ...

  3. QTREE3 spoj 2798. Query on a tree again! 树链剖分+线段树

    Query on a tree again! 给出一棵树,树节点的颜色初始时为白色,有两种操作: 0.把节点x的颜色置反(黑变白,白变黑). 1.询问节点1到节点x的路径上第一个黑色节点的编号. 分析 ...

  4. Jquery图片轮播和CSS图片轮播

    学习Jquery以后,很多时候觉得比写源生代码要简单一点.我们用JQuery做了一个图片轮播的动画,感觉比写CSS要简单一些.下面我来具体讲一下是怎么用JQuery来写. <body> & ...

  5. 【CSS3】---:before :after生成内容

    在Web中插入内容,在CSS2.1时代依靠的是JavaScript来实现.但进入CSS3进代之后我们可以通过CSS3的伪类“:before”,“:after”和CSS3的伪元素“::before”.“ ...

  6. list笔记总结

    1.list是一个复合的复制函数,可以将一个数组一次赋给多个变量.我们常用以下语句遍历一个数组. $arr = array('东','男','西','北'); while(list($k,$v)=ea ...

  7. Android 手势滑动,多点触摸放大缩小图片

    效果展示: 基本思路: <1>首先写一个图片控制类ImageControl,实现对图片控制的的基本操作,我们的图片控制类ImageControl是继承自ImageView自定义的视图: & ...

  8. Part 82 to 85 Talking about Generic queue, stack collection class

    Part 82   Generic queue collection class Part 83   Generic stack collection class Part 84   Real tim ...

  9. SQL Server 远程备份数据库

    在一些涉及到数据库的项目中,经常会有定时备份数据库的需要.定时备份到本机的话,还是挺容易的,计划任务就可以完成,但如果是整机挂了,那备份到本机是没意义的,那么就需要来考虑备份到局域网中,其它电脑里. ...

  10. Android里viewpager切换页面存在页面不相邻的页面被销毁的问题

    我之前一直因为viewpager+fragment时,所有页面的状态都会被自动保存 这次自己做了一个添加了5跟fragment的viewpager 测试时发现当从第一个切换到第四个页面时,再回到第一个 ...