在OS X中对HID设备的原始访问

时间:2011-06-25 11:18:19

标签: device-driver hid osx-snow-leopard

在OS X上获取HID设备原始访问权限的最简单方法是什么?

我一直在查看IOKit示例,但即使打开一个设备似乎也不必要复杂,涉及多个回调并包含来自六个库的内容。
libusb可用于OS X,但是内核会抓取所有HID设备以进行独占访问,并且在尝试使用无代码.kext阻止它与我的设备关联时,我一直遇到奇怪的行为(它阻止内核抓取设备最初,但任何调用配置设备似乎都会导致内核从我正在测试的小python libusb脚本中抓取设备。

基本上,我有一个只传输数据的HID设备。我想打开它(理想上是独占的)访问,然后获取数据流。

我在IOKit文档中找到的所有示例都非常复杂,与libusb中的~8行相比。必须有一种更简单的方法,而不是第三方的图书馆。

值得注意的是,我完全不熟悉任何功能的OS X编程。

Python支持将是一个很好的加号

2 个答案:

答案 0 :(得分:3)

不幸的是除了使用HID Manager apis之外别无他法。在OS X中对HID设备的原始访问权限不受支持。

documentation表明了这一点:

HID family. Through the HID Manager, the HID family provides a device
interface for accessing a variety of devices, including joysticks and other 
game devices, audio devices, non-Apple displays, and UPS (uninterruptible 
power supply) devices. 

通过POSIX apis进行原始访问只对存储,网络和串行设备available进行访问:

Using POSIX APIs
For each storage, network, and serial device the I/O Kit dynamically
creates a device file in the file system’s /dev directory when it discovers 
a device and finds a driver for it, either at system startup or as part of 
its ongoing matching process. If your device driver is a member of the I/O 
Kit’s Storage, Network, or Serial families, then your clients can access your 
driver’s services by using POSIX I/O routines.

因此,您可以直接使用HID Manager api,也可以使用libusb或(正如其他答案所提及的)hidapi,这些只不过是HID Manager上的包装库蜜蜂。使用这些库的好处是它们抽象了大多数低级调用,从而使它们更易于使用。

答案 1 :(得分:1)