永发信息网

input 子系统应该理解到什么层次

答案:1  悬赏:40  手机版
解决时间 2021-04-07 16:39
  • 提问者网友:半生酒醒
  • 2021-04-07 10:53
input 子系统应该理解到什么层次
最佳答案
  • 五星知识达人网友:罪歌
  • 2021-04-07 11:40
在linux下,按键、触摸屏、鼠标等都可以利用input接口函数来实现设备驱动。

从上图可知:
输入子系统由三部分构成:
1 驱动
2 输入子系统
3 处理函数
其中2,3都是内核已经完成,我们要完成的就是1驱动
设备用input_dev结构体描述,使用input子系统实现输入设备驱动的时候,驱动的核心工作是向系统报告按键、触摸屏、键盘、鼠标等输入事件(event,通过input_event结构体描述),不再需要关心文件操作接口,因为input子系统已经完成了文件操作接口。驱动报告的事件经过InputCore和Eventhandler最终到达用户空间。
Input_dev 结构中比较重要的域有:
Name:名字
Evbit:设备所支持的事件类型
Keybit:按键类型
注册输入设备的函数为:
int input_register_device(struct input_dev *dev)
注销输入设备的函数为:
void input_unregister_device(struct input_dev *dev)
设备所支持的事件类型有:
EV_RST Reset EV_KEY 按键
EV_REL 相对坐标EV_ABS绝对坐标
EV_MSC 其它EV_LED LED
EV_SND 声音EV_REP Repeat
EV_FF 力反馈
并使用set_bit(EV_KEY, button_dev.evbit)告知结构体支持哪种设备类型
用于报告EV_KEY、EV_REL和EV_ABS事件的函数分别为:
void input_report_key(struct input_dev *dev,unsigned int code, int value)
void input_report_rel(struct input_dev *dev,unsigned int code, int value)
void input_report_abs(struct input_dev *dev,unsigned int code, int value)
code:
事件的代码。如果事件的类型是EV_KEY,该代码code为设备键盘代码。代码值0~127为键盘上的按键代码,0x110~0x116为鼠标上按键代码,其中0x110(BTN_LEFT)为鼠标左键,0x111(BTN_RIGHT)为鼠标右键,0x112(BTN_ MIDDLE)为鼠标中键。其它代码含义请参看include/linux/input.h文件
value
事件的值。如果事件的类型是EV_KEY,当按键按下时值为1,松开时值为0。
input_sync()用于事件同步,它告知事件的接收者:驱动已经发出了一个完整的报告。
在中断中,使用input_report_key等函数想用户空间报告,在应用程序中直接读取状态。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯