0

我正在编写一个驱动程序来使用 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,有时它不会报告任何内容。是否有基于“框架”的方法来测试手指是否仍然向下?

感谢++的任何建议!

4

0 回答 0