我正在编写一个驱动程序,使用Apple的IOKit工具处理来自Planar触摸屏(在OSX中)的触摸事件。驱动程序能够接收x和y坐标,但我无法确定坐标属于哪个手指。
在我的回调函数中,我查询最近值的父级以确定手指ID,但该值始终是最近的手指 - 如果有3个手指向下则为3,如果有2个手指向下则为2,等等,这是回调的样子:
void touchCallback(void *context, IOReturn result, void *sender, IOHIDValueRef value) {
IOHIDElementRef element = IOHIDValueGetElement(value);
IOHIDDeviceRef device = IOHIDElementGetDevice(element);
IOHIDElementRef parent = IOHIDElementGetParent(element);
IOHIDElementRef parent2 = IOHIDElementGetParent(parent);
CFArrayRef parentChildren = IOHIDElementGetChildren(parent2);
IOHIDValueRef fingerVal;
IOHIDDeviceGetValue(device, (IOHIDElementRef)CFArrayGetValueAtIndex(parentChildren, 5), &fingerVal);
long fingerID = IOHIDValueGetIntegerValue(fingerVal);
}
是否有其他推荐的方法来确定x和y坐标属于哪个手指?
同样,是否有任何建议的做法来确定哪个手指被释放?
我收到的事件表明手指已被抬起,但数字不一致 - 有时它会报告相同的手指ID 2x,有时则不会报告任何内容。是否存在基于“框架”的方法来测试手指是否仍在下降?
感谢++提供任何建议!