DriverKitドライバを適切なUSBデバイスと一致させる

紫の背景にプリンター、キーボード、とカメラ

ソフトウェアドライバは、システムがマウス、キーボード、ヘッドフォンなどのハードウェア周辺機器と通信するのに役に立ちます。DriverKitドライバをUSBデバイスとマッチングさせる場合、いくつかの異なる方法があり、適切なタイプを探すのが難しい場合があります。完全にマッチングできるものをもう少し早く見つけられるよう、ドライバを適切なUSBデバイスとマッチングするためのクイックスタートガイドをまとめました。

DriverKit

Learn more about the USB Common Class Specification

Learn more about USB device architecture

I/Oレジストリを探求する

I/Oレジストリは、ドライバでサポートする物理デバイスの正しいplistキーを見つける最も簡単な方法です。Appleは、「Xcodeの追加ツール」パッケージの一部としてダウンロードできるI/Oレジストリエクスプローラと呼ばれるAppを提供しています。「ioreg」コマンドを使用して、TerminalからI/Oレジストリにアクセスすることもできます。

Download I/O Registry Explorer

I/Oレジストリは、デバイス、フックできるインターフェイス、および照合に使用できるすべての可能なキーに関する情報を提供します。Terminal内でこのコマンドを使用して、レジストリにクエリを実行し、必要なすべての情報を取得できます。

// -b bolds the object name, nice to have
// -n lets us specify the name of the device we are trying to match
// -r shows us all of the sub-interfaces advertised under our device
// -l shows us all of the details for those sub-interfaces
ioreg -b -n “My Device Name-r -l

サポートするデバイスの名前がわからない場合は、デバイスをコンピュータに接続し、メニューバーのアップルメニューに移動して、「アップル」> 「このMacについて」> 「システムレポート」を選択します。レポートが開いたら、USBセクションに移動します。

一部のデバイスは、複数のルートエントリを表示する場合があります。1つは「AppleUSBDevice」クラス、もう1つは「 IOUSBHostDevice」クラスです。ドライバを作成するには、「IOUSBHostDevice」の下にある情報が必要です。後でその情報が必要になるため、クラス「IOUSBHostInterface」と「IOHIDInterface」の下のエントリを控えてください。

Learn more about the I/O Registry

HIDデバイスを識別してマッチングさせる方法

デバイスをドライバにマッチングさせる場合、USBプロパティで一致させるか、デバイスがHIDに準拠している場合は、HIDマッチングキーを使用してマッチングさせることができます。HIDプロパティは、より一般的なアクセスを提供し、ドライバがより少ない作業でより多くのデバイスをサポートできるようにします。例えば、すべてのHID準拠のマウスをサポートする汎用的なドライバや、1つのマウスのみをサポートするような特定のドライバを作成できます。対照的に、USBプロパティとマッチングさせるには、あなたがサポートしたい既存のマウスごとに特定の情報を提供する必要があります。

サポートするデバイスがHIDに準拠しているかどうかは、I/Oレジストリで確認できます。デバイスがHIDをサポートしている場合は、「IOHIDInterface」クラスが、ドライバにマッチングさせるために使用できるさまざまなキーや値とともに表示されます。これらには、 「VendorID」「 ProductID」「PrimaryUsagePage」「PrimaryUsage」などのアイテムがあります。ベンダーIDと製品IDはデバイスを具体的に識別するキーですが、primary usage page(主な使用ページ)とusage keys(使用キー)はデバイスの種類の一般的な識別子です。

前述の例を使用して、コンピューターに接続されているすべてのHID準拠のマウスをサポートするドライバを作成する場合、1(一般的なデスクトップ)の「PrimaryUsagePage」と2(マウス)の「PrimaryUsage」を持つデバイスに一致させることができます。ただし、特定のマウスに対応させる場合は、その 「VendorID」と「ProductID」の組み合わせのみとマッチングさせるほうがよいかもしれません。


注:「USBDriverKit」フレームワークでは、特定の「VendorID」とマッチングさせるためにアクセスをリクエストする必要がありますが、これは非HIDデバイスにのみ必要です。HIDデバイスに接続するときは、どのベンダーIDでも自由にマッチングさせることが可能です。


非HID USBデバイスとマッチングさせる方法

非HID USBデバイス用のドライバを作成する場合は、代わりに「IOUSBHostDevice」クラスと「IOUSBHostInterfaces」クラスにマッチングさせる必要があります。

「IOUSBHostDevices」の場合、特定のマッチングスキームに従い、リストに含まれているキーの正確な組み合わせの1つを指定する必要があります。そうしないとマッチングが発生せず、ドライバが機能しません。一致は優先度の降順でリストが作成されるため、ベンダーと製品IDの組み合わせを持つドライバは、デバイスクラスとサブクラスに基づいてマッチングするドライバよりもデバイスにマッチングする優先度が高くなります。

Learn more tips for matching USB drivers with macOS

非HID USBデバイスで一致させるためにベンダーIDを使用する場合は、AppleにDriverKit資格を要求するときに、そのベンダーIDへのアクセスを指定する必要があることに注意してください。

Resources

Requesting Entitlements for DriverKit Development