Необработанный доступ к HID-устройствам в OS X - PullRequest
10 голосов
/ 25 июня 2011

Какой самый простой способ получить необработанный доступ к HID-устройствам в OS X?

Я просматривал примеры IOKit, но даже открытие устройства кажется излишне сложным, включающим множественные обратные вызовы и включающее вещи из полдюжины библиотек.
libusb доступен для OS X, но ядро ​​захватывает все устройства HID для эксклюзивного доступа, и я получаю странное поведение, пытаясь использовать код без кода .kext, чтобы заблокировать его связь с моим устройством (это препятствует тому, чтобы ядро ​​захватило устройство изначально, но любые вызовы для настройки устройства, похоже, заставляют ядро ​​вырывать устройство из-под маленького скрипта python libusb, с которым я тестирую).

По сути, у меня есть HID-устройство, которое просто передает данные. Я хочу открыть его для (в идеале эксклюзивного) доступа и просто получить поток данных.

Все примеры, которые я нашел в документации по IOKit, действительно сложны, по сравнению с ~ 8 строками, которые потребуются в libusb. Должен быть более простой способ, чем сторонняя библиотека.

Стоит отметить, что я совершенно незнаком с программированием для OS X в любых возможностях.

Поддержка Python будет хорошим плюсом

Ответы [ 2 ]

3 голосов
/ 09 февраля 2015

К сожалению, нет другого способа, кроме использования HID Manager apis. Необработанный доступ к HID-устройствам в OS X не поддерживается.

Документация разъясняет:

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, он доступен только для устройств хранения, сетевых и последовательных устройств:

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 apis напрямую, либо вы можете использовать libusb или (как упоминается в другом ответе) hidapi , которые являются не более чем библиотеками-оболочками над HID Manager Apis. Преимущество использования этих библиотек состоит в том, что они абстрагируют большинство низкоуровневых вызовов, что упрощает их использование.

1 голос
/ 02 июля 2011

Взгляните на бэкэнд Hidapi Mac

http://www.signal11.us/oss/hidapi/

https://github.com/signal11/hidapi

...