7

私は数日間Macでゲームパッドとジョイスティックのサポートを行う方法を探していましたが、見つけたすべてのリソースは、AppleのHID APIを使用するとともに、プリインストールされたドライバーを示唆しているようです。

このアプローチの欠点は、各ジョイスティックとゲームパッドに別のカーネル拡張機能をロードする必要があるため、HIDマネージャー、または少なくともInfo.plist以前にインストールされたドライバーに準拠しているとは言えないコードで認識できることです。たとえば、360 XboxドライバーKEXTを社内に持っている場合、MicrosoftのXboxコントローラーは機能しますが、Logitechのコントローラーは機能しません(F710を試しました)。

Appleが提案しているように、ゲームパッドまたはジョイスティックを使用するアプリケーションは、KEXTのものを導入することなく、ユーザースペースで自分で実行できる必要があります。それを行う方法はありますか?

私が念頭に置いていたのは、IORegistryまたはIOUSB APIを使用して、デバイスが接続されたときにデバイスを取得するようなものでした(USB Proberは少なくともそれを示しています)。次に、何らかの方法でデバイスの説明を取得し、その説明を使用してデバイスをHIDとして登録します。その後、HIDManager全体を使用できます。

私は正しい方向に進んでいますか?または、これを行う他の方法はありますか?

IOKit APIは実際にはkHIDUsage_GD_Joystickのようなキーワードを提供し、ForceFeedback.hライブラリがあるので、Appleはジョイスティックと強制フィードバックを念頭に置いてHIDAPIを設計したと思います。それは私がこれがうまくいくかもしれないという細い希望です。

いくつかのリファレンスドキュメントとオープンソースプロジェクト:

4

1 に答える 1

2

After revisiting this, I found out the solution to be operating directly on the file descriptors of the device. libusb is an excellent library which greatly simplify your life on this and they have Mac supported.

xboxdrv link is a great example on how to operate on file socket using libusb.

In pseudo code, it should look like this:

  1. enumerate device
  2. detect kernel driver and detach it if possible
  3. open device
  4. file off a initial transfer
  5. wait on the callback function to handle msg and error properly
  6. start run loop or select on fd to call libusb_event_handle

Check libusb for more info link.

于 2013-01-24T19:13:52.890 に答える