kIOHIDOptionsTypeSeizeDevice导致设备无响应

时间:2012-09-25 16:46:49

标签: macos hid iokit

我正在尝试编写一个简单的命令行程序,它将给定键盘上的击键发送到UDP服务器。我正在使用IOKit框架及其IOHIDManager类对OSX进行编程。

出于我的程序的目的,我想在打开kIOHIDOptionsTypeSeizeDevice实例时使用IOHIDManager并使用IOHIDManagerRegisterInputValueCallback在回调设置中发送UDP消息。

当我通过IOHIDManagerSetDeviceMatching功能设置过滤以匹配MacBook Pro的内部键盘时,一切正常:按键不会再传递到焦点应用程序,而且事件通过UDP正确发送。< / p>

当我尝试匹配USB读卡器(http://www.gitak.com/GIT-200USB.PDF)时,一切正常,直到刷卡时设备发送的第一个事件。在第一个字符之后,不再调用已注册的回调。

更确切地说:

  • 设备已正确匹配(即使多次拔出插头)
  • 首先收到的字符已正确处理
  • 该设备有一个指示灯,用于指示何时准备进行新的滑动,通常在滑动后它会变回绿色,但在这种情况下,在发送第一个事件后,它仍然关闭
  • 使用内部键盘kIOHIDOptionsTypeSeizeDevice
  • 时,一切正常
  • 使用带有kIOHIDOptionsTypeNone而不是kIOHIDOptionsTypeSeizeDevice的读卡器时,所有内容都按预期工作(即使事件仍然传递到有针对性的应用程序)
  • 在无响应后,拔出并重新插入设备会重复上述行为
  • 程序以root权限运行

可以在这里找到相对简单的程序:

https://gist.github.com/3783042

如何修改它以便在发送第一个事件后不会导致读卡器无响应?

1 个答案:

答案 0 :(得分:0)

事实证明,这是设备有缺陷。我点了一个新的,现在一切正常!