纠结一天的失去了,终于把能过熟悉使用触屏了,再次感谢前人开源。
由于触屏驱动的分辨率和实际使用显示器的分辨率不同所以要将触屏坐标映射到显示器上的坐标(PS:触屏的分辨率往往要大于显示器的分辨率)
映射公式:Sx = (Tx - Txmin)*Sxmax/(Txmax - Txmin);
Sy = (Ty - Tymin)*Symax/(Tymax - Tymin);
其中:Sy为显示器y坐标值,Symax为已知显示器y坐标最大值,Tx为触屏驱动x值,Txmax为触屏校准时x最大值
程序如下
#include <stdio.h>
#include <fcntl.h>
#include <linux/input.h>
int main()
{
struct input_event ev;
int ts[3] = {0};
int ret = 0;
int fd;
if((fd=open("/dev/event1",O_RDONLY))<0)
{
printf("Can't open touch\n");
return -1;
}
while(1)
{
ret = read(fd, &ev, sizeof(struct input_event));
if(ret<sizeof(struct input_event)){printf("read ts error\n");break;}
if(ev.type==EV_ABS)
switch (ev.code)
{
case ABS_X:
ts[0]=(ev.value-2800)/14;break; //value x
case ABS_Y:
ts[1]=(ev.value-5430)/11;;break; //value y
case ABS_PRESSURE:
ts[2] = ev.value;break; //pressure
}
if((!ts[2])&&(ts[0]>390&&ts[0]<410)&&(ts[1]<250&&ts[1]>230))
printf("press the key!\n");
}
return 0;
}