2011-06-25 13 views
6

Jaki jest najprostszy sposób uzyskania surowego dostępu do urządzeń HID w systemie OS X?Surowy dostęp do urządzeń HID w systemie OS X

Przeglądałem przykłady IOKit, ale nawet otwarcie urządzenia wydaje się niepotrzebnie skomplikowane, angażujące wiele wywołań zwrotnych i zawierające informacje z pół tuzina bibliotek.
Libusb jest dostępny dla OS X, ale jądro zbiera wszystkie urządzenia HID do wyłącznego dostępu, a ja otrzymywałem dziwne zachowanie, próbując użyć bezkodowego .kext, aby zablokować go przed powiązaniem z moim urządzeniem (uniemożliwia to pobieranie jądra urządzenie początkowo, ale wszelkie wywołania do konfiguracji urządzenia wydają się powodować, że jądro odbierze urządzenie spod skryptu pythonowego libusb, który testuję).

Zasadniczo mam urządzenie HID, które po prostu przesyła dane. Chcę go otworzyć dla (idealnie wyłącznego) dostępu i po prostu uzyskać strumień danych.

Wszystkie przykłady, które znalazłem w dokumentach IOKit są naprawdę skomplikowane, w porównaniu z ~ 8 liniami, które zajęłoby libusb. Musi istnieć prostszy sposób, który nie jest trzecią biblioteką partyjną.

Warto zauważyć, że nie jestem całkowicie obeznany z programowaniem dla OS X w żadnej z możliwości.

wsparcie Python byłoby plusem

Odpowiedz

1

Niestety nie ma innego sposobu, niż przy użyciu HID Manager API . Surowy dostęp do urządzeń HID w systemie OS X nie jest obsługiwany.

documentation jasno:

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. 

Raw dostęp przez POSIX apis to tylko available do przechowywania, sieci i urządzeń szeregowych:

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. 

Więc można użyć HID Manager API bezpośrednio lub może używać libusb lub (jak w innej odpowiedzi wspomina) hidapi, które są niczym więcej niż bibliotekami wrapperów w stosunku do apisów HID Manager. Zaletą korzystania z tych bibliotek jest to, że abstrakcyjne większość wywołań niskiego poziomu sprawia, że ​​są łatwiejsze w użyciu.

Powiązane problemy