Linux输入子系统及触摸屏驱动分析

Linux输入子系统及触摸屏驱动分析

ID:40559269

大小:44.50 KB

页数:4页

时间:2019-08-04

Linux输入子系统及触摸屏驱动分析_第1页
Linux输入子系统及触摸屏驱动分析_第2页
Linux输入子系统及触摸屏驱动分析_第3页
Linux输入子系统及触摸屏驱动分析_第4页
资源描述:

《Linux输入子系统及触摸屏驱动分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux输入子系统前面章节讲解按键设备驱动,实际上,在Linux系统中,一种更值得推荐的实现这类设备驱动的方法是利用input子系统。Linux系统提供了input子系统,按键、触摸屏、鼠标都可以利用input接口函数来实现设备驱动。linput子系统体系结构设备描述:在Linux内核中,input设备用input_dev结构体描述,使用input子系统实现输入设备驱动的时候,驱动的核心工作是向系统报告按键、触摸屏、鼠标等输入事件(event,通过input_event结构体描述),不再需要关心文件操作接口,因为input子系统那个已经完成了文件操作接口。驱

2、动报告的事件经过InputCore和Eventhandler最终到达用户空间。设备注册/注销:注册输入设备的函数为:intinput_register_device(structinput_dev*dev)注销输入设备的函数为:voidinput_unregister_device(structinput_dev*dev)驱动实现—事件支持设备驱动通过set_bit()告诉input子系统它支持哪些事件,如下所示:set_bit(EV_KEY,button_dev.evbit)structiput_dev有两个成员,一个是evbit,一个是keybit。分别用

3、来表示设备所支持的事件类型和按键类型。事件类型:EV_RSTResetEV_REL相对坐标EV_MSC其它EV_SND声音EV_FF力反馈EV_KEY按键EV_ABS绝对坐标EV_LEDLEDEV_REPRepeat驱动实现—报告事件:用于报告EV_KEY、EV_REL、EV_ABS事件的函数分别为:voidinput_report_key(structinput_dev*dev,unsignedintcode,intvalue)voidinput_report_rel(structinput_dev*dev,unsignedintcode,intvalue)

4、voidinput_report_abs(structinput_dev*dev,unsignedintcode,intvalue)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,松开时值

5、为0input_sync()用于事件同步,它告知事件的接收者:驱动已经发出一个完整的报告。例如:在触摸屏设备驱动中,一次坐标及按下状态的整个报告过程如下:input_report_abs(input_dev,ABS_X,x);//X坐标input_report_abs(input_dev,ABS_Y,y);//Y坐标input_report_abs(input_dev,ABS_PRESSURE,pres);//压力input_sync(input_dev);//同步l实例分析/*在按键中断中报告事件*/staticvoidbutton_interrupt(in

6、tirq,void*dummy,structpt_regs*fp){input_report_key(&buton_dev,BTN_0,intb(BUTTON_PORT0));input_report_key(&buton_dev,BTN_0,intb(BUTTON_PORT1));input_sync(&button_dev);}staticint__initbutton_init(void){/*申请中断*/if(request_irq(BUTTON_IRQ,button_interrupt,0,“button”,NULL))return–EBUSY;se

7、t_bit(EV_KEY,button_dev.evbit);//支持EV_KEY事件set_bit(BTN_0,button_dev.keybit);//设备支持两个键set_bit(BTN_1,buton.dev.keybit);input_register_device(&button_dev);//注册input设备}应用程序:structinput_event{structtimevaltime;//按键时间_u16type;//类型_u16code;//要模拟成什么按键_s32value;//是按下还是释放}structinput_eventev_

8、mouse[2];fd=open(”/

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。