指定EV_ABS
值,则dx和dy包含0
到65,535
之间的归一化绝对坐标
。 事件过程将这些坐标映射到显示表面上。 坐标 (0,0) 映射到显示表面的左上角(65535,65535) 映射到右下角。
未指定EV_ABS
值,则dx和dy指定从生成最后一个点击事件(最后报告的位置)开始的相对运动
。 正值表示光标向右(或向下)移动; 负值表示光标向左(或向上)移动。
Linux中输入设备的事件类型
EV_SYN
0x00 同步事件EV_KEY
0x01 按键事件,如KEY_VOLUMEDOWNEV_REL
0x02 相对坐标,如鼠标上报的坐标EV_ABS
0x03 绝对坐标,如触摸屏上报的坐标EV_MSC
0x04 其它EV_LED
0x11 LEDEV_SND
0x12 声音EV_REP
0x14 RepeatEV_FF
0x15 力反馈
获取鼠标坐标值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| #include <stdio.h> #include <stdlib.h> #include <linux/input.h> #include <fcntl.h> #include <sys/time.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h>
int main(int argc,char **argv) { int fd, retval; char buf[6]; fd_set readfds; struct timeval tv;
fd = open( "/dev/input/mice", O_RDONLY ); if(fd<0) { printf("Failed to open \"/dev/input/mice\".\n"); exit(1); } else { printf("open \"/dev/input/mice\" successfuly.\n"); }
while(1) { tv.tv_sec = 5; tv.tv_usec = 0;
FD_ZERO(&readfds); FD_SET(fd, &readfds);
retval = select(fd+1, &readfds, NULL, NULL, &tv); if(retval == 0) { printf("Time out!\n"); } if(FD_ISSET(fd,&readfds)) { if(read(fd, buf, 6) <= 0) { continue; } printf("Button type=%d, X=%d, Y=%d, Z=%d\n", (buf[0] & 0x07), buf[1], buf[2], buf[3]); } }
close(fd); return 0; }
|