arm linux设备驱
这是一个读取触摸屏触摸事件的例子
实验程序:
#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_Y
#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)
#define BIT_MASK(nr)
现在该明白问题在哪儿了吧,^_^
当然这个代码不是linux内核源码,这是天嵌科技提供的驱动代码。