while(1) { int r4 =read(fd4,&ev4,sizeof(ev4)); if(r4 != sizeof(ev4)) { perror("read ev error\n"); return -1; } if(ev4.type == EV_ABS && ev4.code ==ABS_X) { x4 = ev4.value ; } if(ev4.type == EV_ABS && ev4.code ==ABS_Y) { y4 = ev4.value ; } if( ev4.type == EV_KEY && ev4.code == BTN_TOUCH && ev4.value != 0) { printf("down(%d,%d)",x4,y4); x_start = x4; y_start = y4 ; } if( ev4.type == EV_KEY && ev4.code == BTN_TOUCH && ev4.value == 0) { printf("up(%d,%d)",x4,y4); x_stop = x4; y_stop = y4; break; } } if( abs(x_start - x_stop) - abs(y_start - y_stop) > 0 && abs(x_start - x_stop) > 30 ) { if(x_stop - x_start > 0 ) { return 4 ; } else return 3; } }
时间: 2024-04-27 09:19:46 浏览: 96
这段代码是一个死循环,不断从文件描述符fd4中读取输入事件ev4。如果读取的字节数不等于ev4结构体的大小,则输出错误信息并返回-1。如果输入事件类型是EV_ABS,且代码是ABS_X,则将x4变量设置为输入事件的值;如果输入事件类型是EV_ABS,且代码是ABS_Y,则将y4变量设置为输入事件的值。
接下来,如果输入事件类型是EV_KEY,且代码是BTN_TOUCH,并且值不为0,则输出“down(x4,y4)”并将x_start和y_start变量设置为当前的x4和y4的值。如果输入事件类型是EV_KEY,且代码是BTN_TOUCH,并且值为0,则输出“up(x4,y4)”并将x_stop和y_stop变量设置为当前的x4和y4的值,然后跳出循环。
最后,如果横向移动距离大于纵向移动距离,并且横向移动距离大于30个单位,则根据横向移动的方向返回4或3。如果向右移动,则返回4,否则返回3。
阅读全文