Linux/Android 多点触摸支持


在内核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上的说明或者。

相关内容