2017-11-05 6 views
1

シングルボードコンピュータ(BeagleBone BlackまたはBeagleBoard X15のいずれか)を経由してMacに接続するプロジェクトに取り組んでいます。 USB OTGを使用し、基本的なマウス/タッチ入力(ポインタ座標と左/右クリックイベント)を提供します。IOKit:USB-OTGデバイスの座標入力を提供するためのMacOSデバイスインスタンスの作成

このプロセスは、マウス(正確には正確なマウス座標を受け取るタッチスクリーンスタイルのデバイス)と通常のHID入力をMacOSに渡すことと技術的に非常に似ています。だから私はIOKitの複雑さの大部分を必要としません - 私はカーネル拡張を作成する必要はないと思います。私は、MacOSがすでに一般的なカーネル拡張機能を持っているHIDのインスタンスを作成することができます。

私はデバイスインスタンスの作成方法と入力方法を理解するためにIOKitを掘り下げています。しかし、私がIOKitについて読んでいるほとんどのものには、新しいカーネル拡張、サービスなどの作成と登録が含まれています。

これまでのところ、I/O Registry Explorerと/ System/Library/Extensionsの内容しか関連していません。 AppleDHIDMouse.kextなど、いくつかの項目が有望です。しかし、私は、USB接続デバイスがどのようにカーネル拡張機能に接続し、それ自身のためのインスタンスを作成し、コマンドを送ることができるかというギャップを埋めるコードの例は見つけられません。

助けが必要ですか?前もって感謝します。

答えて

0

デバイスが完全にUSB HIDに準拠している場合は、Mac側でコードを一切必要としないか、カーネル拡張を作成する必要があります。

あなたはどのくらいですか?あなたのデバイスはioreg/IORegistryExplorerでどのように見えますか? (後者は「Xcodeの追加ツール」にあり、https://developer.apple.com/download/more/からダウンロード可能)

USBデバイスのインターフェイスはHIDとしてレポートされますか? (bInterfaceClass 3)デバイス自体は通常、複合デバイス(bDeviceType 0)としてレポートします。 bInterfaceProtocolとbInterfacSubClassもHIDのコンテキストで意味を定義しており、おそらく "タブレット"スタイルのデバイスでは両方とも0であるべきです。これで、macOSはあなたのデバイスをHIDデバイスとしてピックアップし、内蔵のHIDデバイスドライバの1つを使ってそのデバイスを駆動しようとします。

HIDデバイスの仕組みは、デバイスの「レポート記述子」で定義された柔軟なフォーマット/レイアウトのイベントデータ構造である「レポート」を通じて行われます。あなたのデバイスが持っているボタンや入力軸などはそこに定義されています。

macOSで動作するUSB​​ "タブレット"デバイス(絶対座標ポインティングデバイス)の例として、code for the USB Tablet device that Qemu emulatesをチェックしてください。これは、自分のデバイスのレポート記述子の出発点になるかもしれません。

デバイスが一般的なUSB HID規約に準拠せず、カスタムプロトコルを使用している場合は、IOHIDDeviceサブクラスを実装するカスタムkextが必要です。そのようなドライバの例は、open source Mac driver for the Xbox 360's game controllerであり、標準のUSB HIDデバイスのように動作しません。

関連する問題