input子系统学习笔记四 软件设计流程及相关API

接下来,我们就开始看Input子系统的软件设计流程,我在阅读的时候同时整理设计代码中的相关API,并在下一篇文章详细介绍 input子系统的代码实现
input子系统的软件设计流程

        软件设计流程如下所示:

        分配一个输入设备——注册一个输入设备——上报输入事件——注销一个输入设备——释放一个输入设备

设计有关的API

分配一个输入设备

C/C++代码
  1. struct input_dev *input_allocate_device*(void);  

注册一个输入设备

C/C++代码
  1. int input_register_device(struct input_dev *dev); 

驱动实现-事件支持

C/C++代码
  1. Set_bit(EV_KEY,button_dev.evbit) 
  2. //Set_bit告诉inout子系统它支持哪些事件 
  3. //Struct input_dev中有两个成员,一个是evbit;一个是keybit;分别用来表示设备所支持的事件类型和按键类型。 

         事件类型

        Linux中输入设备的事件类型有(这里只列出了常用的一些,更多请看linux/input.h中):

C/C++代码
  1. EV_SYN 0x00 同步事件 
  2. EV_KEY 0x01 按键事件 
  3. EV_REL 0x02 相对坐标 
  4. EV_ABS 0x03 绝对坐标 
  5. EV_MSC 0x04 其它 
  6. EV_LED 0x11 LED 
  7. EV_SND 0x12 声音 
  8. EV_REP 0x14 Repeat 
  9. EV_FF 0x15 Force feedback事件 

        按键类型

        当事件类型为EV_KEY时,还需指明按键类型:

C/C++代码
  1. BTN_LEFT 鼠标左键 
  2. BTN_RIGHT 鼠标右键 
  3. BTN_MIDDLE 鼠标中键 
  4. BTN_0 数字0键 
  5. BTN_1 数字1键 

        上述set_bit函数实则完成了把EV_KEY赋值到button_dev.evbit

        驱动实现-报告事件

C/C++代码
  1. Void input_event(struct input_dev *dev,unsigned int type,unsigned int code,int value);//报告指定type,code的输入事件 
  2. Void input_report_key(struct input_dev *dev,unsigned int code,int value);/*报告键值,code : 事件的代码,如果事件是ev_key,该代码则为设备的键盘代码。例如鼠标按键代码为0x110~0x116,其中0x110(BTN_LEFT),0x111(BTN_RIGHT),0x112(BTN_MIDDLE)。其它带按摩含义参考include/linux/input.h文件*/ 
  3. value : 事件的值,如果事件的类型是EV_KEY,当按键按下时值为1,松开时为0。 
  4. Void input_report_rel(struct input_dev *dev,unsigned int code,int value);//报告相对坐标 
  5. Void input_report_abs(struct input_dev *dev,unsigned int code,int value);//报告绝对坐标 
  6. Void input_sync(struct input_dev *dev);/*报告同步事件,input_sync()用于高速input core 此次报告已经结束,能够根据上报的信息往后面处理了*/ 

        在触摸屏驱动设计中,一次坐标及按下状态的整个报告过程如下:

C/C++代码
  1. Input_report_abs(input_dev,ABS_X,x);//X坐标 
  2. Input_report_abs(input_dev,ABS_Y,y);//Y坐标 
  3. Input_report_abs(input_dev,ABS_PRESSURE,pres);//压力 
  4. input_sync(struct input_dev *dev);//同步  

释放与注销设备

C/C++代码
  1. Void input_free_device(struct input_dev *dev); 
  2. Void input_unregister_device(struct input_dev *); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值