博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
input 子系统(三) 文件接口
阅读量:4285 次
发布时间:2019-05-27

本文共 3074 字,大约阅读时间需要 10 分钟。

文件接口概览

/dev/input//sys/class/input//proc/bus/input/
到底有几个input 设备,    有几个 eventX 总共就有几个 input 设备一个 input 设备可能在 /dev/input/ 下面生成1或多个节点监听设备上报的事件可以监听什么接口  /dev/input/eventX 设备的 sys device 在哪里 /sys/class/input/event5/device/device设备的 sys driver 在哪里 /sys/class/input/event5/device/device/driver利用 /proc/bus/input/handlers 查看 注册的 input handlers利用 /proc/bus/input/devices  查看 注册的 input devices

dev

  • /dev/input/eventX
static const struct file_operations evdev_fops = {
.owner = THIS_MODULE, .read = evdev_read, .write = evdev_write, .poll = evdev_poll, .open = evdev_open, .release = evdev_release, .unlocked_ioctl = evdev_ioctl, #ifdef CONFIG_COMPAT .compat_ioctl = evdev_ioctl_compat, #endif .fasync = evdev_fasync, .flush = evdev_flush, .llseek = no_llseek, };一般监听事件,流程为 open poll read ,很少用到其他write 用来模拟 内核 上报事件 一般上报事件是从内核上报的 可以利用write从用户空间上报事件给内核,然后内核再上报给用户空间ioctrl 进行一些iotrl 操作 获取 input 版本号 ...

sys

//todo

proc

/proc/bus/input/handlers
// 注册的handlers列表//input_handlers_seq_show# cat /proc/bus/input/handlersN: Number=0 Name=kbdN: Number=1 Name=sysrq (filter)N: Number=2 Name=mousedev Minor=32N: Number=3 Name=evdev Minor=64
/proc/bus/input/devices
// 注册的device 列表// input_devices_seq_showcat /proc/bus/input/devicesI: Bus=0011 Vendor=1111 Product=2222 Version=5555N: Name="I am simplest input subsystem"P: Phys=S: Sysfs=/devices/virtual/input/input56U: Uniq=H: Handlers=kbd event2 B: PROP=0B: EV=3B: KEY=100000 0 0 0
  • I
button_dev->id.bustype=BUS_I8042;                                                   button_dev->id.vendor=0x1111;                                                       button_dev->id.product=0x2222;                                                      button_dev->id.version=0x5555;
  • N
button_dev->name="I am simplest input subsystem";
  • handlers
set_bit(EV_KEY, button_dev->evbit); event2 肯定是必须有的
  • PROP
set_bit(INPUT_PROP_DIRECT,button_dev->propbit); // 表明设备的坐标直接和屏幕坐标向对应
  • EV
button_dev->evbit[0] = BIT_MASK(EV_KEY); // 0x01EV_SYNC // 0x002^1 + 2^0 = 3
  • KEY
因为  在 这个调用的基础上 button_dev->evbit[0] = BIT_MASK(EV_KEY);做了下面的动作button_dev->keybit[BIT_WORD(KEY_UP)] = BIT_MASK(KEY_UP);// //该句是 device 匹配了  kbd handlerB: KEY=1 1000 0 0 40-31 号的 KEY_XXX 位与 为 432-63 号的 KEY_XXX 位与 为 0128- 号的 KEY_XXX 位与 为 0

转载地址:http://hxigi.baihongyu.com/

你可能感兴趣的文章
pthread man page
查看>>
Linux 如何修改 root 密碼
查看>>
nc 傳輸
查看>>
vi 與 vim 的指令整理
查看>>
console & telnet判斷
查看>>
sqlite3
查看>>
關於如何快速切換目錄(Linux)
查看>>
Save Time with minicom macros
查看>>
svn : how to set the executable bit on a file?
查看>>
vim 取代指令
查看>>
git 修改過檔案後,如何commit上server
查看>>
git log 應用
查看>>
Git 版本控制系統(3) 還沒 push 前可以做的事
查看>>
Git 基礎 - 檢視提交的歷史記錄
查看>>
wifi 連ap command
查看>>
git clean reset checkout
查看>>
[轉載]6個超強網站讓你查到最道地的英文
查看>>
HUB 與 Switch 差別
查看>>
linux產生 core dump文件方法及設置
查看>>
How to pass macro definition from “makefile” command line arguments to C source code?
查看>>