本文共 1697 字,大约阅读时间需要 5 分钟。
这是一个读取触摸屏触摸事件的例子
实验程序:
#include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <fcntl.h> #include <signal.h> #include <unistd.h> #include <linux/input.h> #include <stdlib.h> #include <string.h>
int fd; struct input_event event;
void input_handler(int signum) {
main() {
上图是在等待触摸屏按下。
这些信息是如何产生的:
看触摸屏驱动程序中当触摸屏按下时有如下事件报告函数:
#define EV_SYN
#define EV_ABS
code:
#define ABS_X
#define ABS_PRESSURE
#define SYN_REPORT
value:
分别是x坐标值300,y坐标值239,按下事件值1,同步事件值0。
还有就是事件发生时的时间值,秒,毫秒。
还有一个键盘事件的值没有打印出来一开始我也很纳闷儿,仔细一检查才发现驱动程序有bug。
在驱动源程序中有这样一句代码:
dev->keybit[BITS_TO_LONGS(BTN_TOUCH)] = BIT(BTN_TOUCH);
将其更改如下:
dev->keybit[BITS_TO_LONGS(BTN_TOUCH)] |= BIT_MASK(BTN_TOUCH);
BTN_TOUCH的定义是:
#define BTN_TOUCH
上面两个宏的定义在文件linux/bitops.h中
#define BIT(nr)
现在该明白问题在哪儿了吧,^_^
当然这个代码不是linux内核源码,这是天嵌科技提供的驱动代码。
转载地址:http://rxsci.baihongyu.com/