Input输入型驱动程序设计

Input输入型驱动程序设计

         Linux系统提供了input子系统,按键、触摸屏、鼠标等度可以利用input接口函数来实现设备驱动。体系结构如下图所示

         设备描述

         在Linux内核中,input设备用input_dev结构体描述,使用input子系统实现输入设备驱动的时候,驱动的核心工作是向系统报告按键、触摸屏、键盘、鼠标等输入事件((event,,通过过input_event结构体描述),不再需要关心文件操作接口,因为input子系统子系统已经完成了文件操作接口。驱动报告的事件经过过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。分别用来表示设备所支持的事件类型和按键类型。

事件类型:

EV_RST   Reset      EV_KEY  按键

EV_REL  相对坐标          EV_ABS  绝对坐标

EV_MSC 其它            EV_LED LED

EV_SND 声音            EV_REP Repeat

EV_FF力反馈

 

驱动实现-报告事件

用于报告EV_KEY、EV_REL和EV_ABS事件的函数分别为:

voidinput_report_key(struct input_dev*dev,unsigned int code,int value)

void input_report_rel(struct input_dev*dev,unsigned int code,int value)

voidinput_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_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);//同步

 

代码示例

/*在在按键中断中报告事件事件*/

staticvoidbutton_interrupt(int irq,void*dummy,struct pt_regs * fp)

{

input_report_key(&button_dev,BTN_0,inb(BUTTON_PORT0));

input_report_key(&button_dev,BTN_0,inb(BUTTON_PORT1));

input_sync(&button_dev);

}

static int __initbutton_init(void){

/*申请申请中断断*/

if(request_irq(BUTTON_IRQ,button_interrupt,0,"button",NULL))

return-EBUSY;

set_bit(EV_KEY,button_dev.evbit)//支持EV_KEY事件事件

set_bit(BTN_0,button_dev.keybit);//设备设备支持两个键

set_bit(BTN_1,button_dev.keybit);

input_register_device(&button_dev);//注注册册input设备设备

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值