最近、PS3コントローラーを搭載したMacでIOKitのHID部分をいじっています。サンプルコードを調べてコントローラーに接続し、データのストリームを受信して解析することができました (加速度計とジャイロを含むすべて)。
しかし、今日、デバイスの背面にある LED の設定を開始し、ランブル モーターをトリガーしたいと決めましたが、動作させることができません!
Apple が IOHID 用に提供しているサンプル コードを調べてみると、HID デバイスでの設定についてはあまり見ることができず、データを受信するだけです。Web を調べたところ (ほんの半日)、IOHIDDeviceSetReport()
. ただし、どのデータを送信すればよいかわかりません。
データの例をリストしているサイトをいくつか見つけました。
- http://www.circuitsathome.com/mcu/ps3-and-wiimote-game-controllers-on-the-arduino-host-shield-part-2
- https://github.com/ribbotson/USB-Host/blob/master/ps3/PS3USB/ps3_usb.h
- http://wiibrew.org/wiki/Sixaxis
(これらの例のすべてが Mac と PS3 コントローラーの間の場合ではないことはわかっています)
多くの人がこれについて話しているようで、それを実行しているようです (誰もこれを機能させたとは信じられません) が、実際に機能する方法については何も見つけられないようです!
ここで簡単な手順が欠けているように感じます。アイデア、ヘルプ、または解決策があれば教えてください。
ありがとう。
レポートを送信しようとしている方法のコード例(成功を返している):
CFIndex len = 64;
uint8_t report[64] = {0x0};
IOReturn tIOReturn = IOHIDDeviceSetReport(deviceRef,
kIOHIDReportTypeOutput,
reportID,
report,
len);
これは(文字通り)何も送信していないだけですが、正しくない場合に備えて私が使用しているものの単なる例です。
おまけ:アップルの定義IOHIDDeviceSetReport
が、与えられた例とは異なることにも気づきました。
そこにはreport
、「レポートバッファのアドレス」であるべきだと書かれています。しかし...
そこには*report
、(ポインタである) と書かれていますが、「デバイスに送信されるレポート バイトです。」