在内核2.6.30开始,添加了对多点触摸的支持。在ENAC(http://lii-enac.fr/en/architecture/linux-input/)中给出来多点触摸的例子,支持Ubuntu10.10、Fedora14、Android。而且还直接支持win7的HID多点协议,加载相关驱动后,只需VID/PID对应上,那么支持WIN7多点的,在LINUX中也可实现多点触摸了。
整个处理过程就是:touch screen-->drivers-->input subsystem-->evdev-->user space。由于touchscreen的不同,要使Linux支持多点触摸,还是要搭配或开发驱动。在驱动层中主要是把数据接收下来,然后根据多点触摸协议,上传到input 子系统。
下面是多点触摸协议:
for (i=0; i<pointNumber;i++){ input_event(input, EV_ABS, ABS_MT_TOUCH_MAJOR, point[i].valid); //如果当前点有效,则point[i].valid大于0的数即可 input_event(input, EV_ABS, ABS_MT_POSITION_X, point[i].x); input_event(input, EV_ABS, ABS_MT_POSITION_Y, point[i].y); input_mt_sync(input); }
//一帧数据发送完成,发送一个同步信号
input_sync(input);
具体的协议说明,可参照source code中的文档(Documentation/input/multi-touch-protocol.txt)。
如果想在低版本,需移植多点部分的协议进去,主要是input.h和input.c文件。可参照ENAC上的说明或者http://blog.csdn.net/tjd0227/archive/2010/06/13/5669620.aspx。