inux 驱动程序开发中输入子系统总共能产生哪些事件类型(EV_KEY,EV_ABS,EV_REL)

转载地址:http://blog.csdn.net/liuxd3000/article/details/43952883

inux 驱动程序开发中, 输入子系统总共能产生哪些事件类型?,以及分别是什么意思?详见如下:

Linux中输入设备的事件类型有
EV_SYN 0x00 同步事件
EV_KEY 0x01 按键事件,如KEY_VOLUMEDOWN
EV_REL 0x02 相对坐标,   如shubiao上报的坐标
EV_ABS 0x03 绝对坐标,如触摸屏上报的坐标
EV_MSC 0x04 其它
EV_LED 0x11 LED
EV_SND 0x12 声音
EV_REP 0x14 Repeat
EV_FF 0x15 力反馈 
~~~~~~~~~~~~~~~~~~~~~~~~
EV_PWR       电源
EV_FF_STATUS   状态

比如
EV=3 , 3=2+1, 也就是 (2<<1+1) 说明是设备有按键 EV_KEY/EV_SYNC;
EV=b, 11= 2<<3+2<<1+1 , 也就是设备支持 EV_ABS/EV_KEY/EV_SYNC 设备有按键,触摸屏/板;
MISC 设备不好判断;

这段代码存在以下错误: 1. 没有包含必要的头文件。该函数使用了 `input_event`、`read`、`EV_ABS`、`ABS_X`、`ABS_Y`、`EV_KEY`、`BTN_TOUCH` 和 `KEY_RESERVED` 等变量和类型,但是没有包含相关的头文件。建议添加 `linux/input.h` 和 `linux/uinput.h` 头文件。 2. `ts_fd` 变量未定义。该函数使用了 `ts_fd` 变量,但是该变量未在该函数定义或声明。建议在该函数定义该变量或将其作为参数传入该函数。 3. 函数的返回值没有使用。该函数的返回值为 `0`,但是没有在函数调用处使用该返回值。建议检查函数调用处是否需要使用该返回值。 4. 函数的 `if` 语句逻辑有误。在函数,存在以下的 `if` 语句: ```c if (ts.type == EV_KEY) { if (ts.code == BTN_TOUCH) { if (ts.value == KEY_RESERVED) { break; } } break; } ``` 该 `if` 语句的逻辑是:如果输入事件类型是 `EV_KEY`,则判断事件代码是否为 `BTN_TOUCH`,如果是,则判断事件值是否为 `KEY_RESERVED`,如果是,则退出循环;否则,直接退出循环。这样的逻辑是有问题的,因为如果输入事件类型是 `EV_KEY` 且事件代码不为 `BTN_TOUCH`,则会直接退出循环,而不会再执行后续的逻辑。建议将第二个 `if` 语句移到第一个 `if` 语句的外面,如下所示: ```c if (ts.type == EV_KEY && ts.code == BTN_TOUCH) { if (ts.value == KEY_RESERVED) { break; } } ``` 这样修改后,只有当输入事件类型是 `EV_KEY` 且事件代码是 `BTN_TOUCH` 时,才会执行后续的逻辑。 5. 函数的变量命名有误。在函数,存在以下的变量定义: ```c int x_read = 0, y_read = 1; ``` 这样的命名方式不太合适,因为变量名应该准确地反映出变量的含义。建议将变量名修改为 `x_already_read` 和 `y_already_read`,以更好地反映出变量的含义。 希望以上分析对您有所帮助!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值