我正在编写一个驱动程序来使用 Apple 的 IOKit 工具处理来自平面触摸屏(在 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,有时它不会报告任何内容。是否有基于“框架”的方法来测试手指是否仍然向下?
感谢++的任何建议!