【问题标题】:kIOHIDOptionsTypeSeizeDevice causes device to become unresponsivekIOHIDOptionsTypeSeizeDevice 导致设备无响应
【发布时间】:2012-09-25 16:46:48
【问题描述】:

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

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

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

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

更准确地说:

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

比较简单的程序可以在这里找到:

https://gist.github.com/3783042

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

【问题讨论】:

  • 这几乎就是我为我的 MagTech 阅读器所做的。如果你插上它并在没有驱动程序的情况下刷卡,它会键入密钥吗?另外,您是否尝试过 IOHIDDeviceRegisterInputValueCallback?那是我用来代替 IOHIDManagerRegisterInputValueCallback 的。它应该按照您的方式工作。
  • @ThaneNorton 是的,没有驱动程序一切正常。我没有尝试过设备本身的回调,但我开始怀疑这是设备的错(它很便宜:D)。

标签: macos hid iokit


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多