0

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

就我的程序而言,我想kIOHIDOptionsTypeSeizeDevice在打开IOHIDManager实例并在回调设置中发送 UDP 消息时使用IOHIDManagerRegisterInputValueCallback.

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

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

更准确地说:

  • 设备匹配正确(即使多次拔出)
  • 正确处理第一个接收到的字符
  • 该设备有一个 LED 来指示它何时准备好进行新的滑动,通常在滑动后它会变回绿色,但在这种情况下,在发送第一个事件后,它会保持关闭
  • 使用内部键盘时,一切都按预期工作kIOHIDOptionsTypeSeizeDevice
  • 将读卡器与kIOHIDOptionsTypeNone而不是一起使用时,一切都按预期工作kIOHIDOptionsTypeSeizeDevice(即使事件仍传递给焦点应用程序)
  • 在变得无响应后,拔下并重新插入设备会重复描述的行为
  • 该程序以root权限运行

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

https://gist.github.com/3783042

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

4

1 回答 1

0

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

于 2012-10-13T15:25:12.320 回答