Open7

HID over なんとかの一覧

okuokuokuoku

結構いっぱいあるな。。

一瞬HID over MIDIを作ろうと思ったけど、やっぱりKey on/Key off等正常なMIDIメッセージにマップしといた方が既存のMIDIメッセージ加工ツールを使えるので没に。

okuokuokuoku

Bluetooth上のHID

USB同様、Bluetooth上のHID規格も共著になっている。HID自体はMSが設計したプロトコルだと思うけど、USBやBluetoothでは東芝のようなインターフェースベンダやDECのような最終製品のベンダも著者に入っている。

HIDプロファイル

レガシーなBluetoothにおけるHIDはHIDプロファイルでサポートされる。

https://www.bluetooth.com/ja-jp/specifications/specs/human-interface-device-profile-1-1-1/

仕様がかなりの大作で100ページ以上ある。(元のHID over USBが97ページ)

HID over GATT プロファイル (HOGP)

Bluetooth LEでは、GATTプロファイルを使用した HOGP として提供される。

https://www.bluetooth.com/ja-jp/specifications/specs/hid-over-gatt-profile-1-0/

コネクションの確立といった処理はGATT側で規定されるため、仕様書は38ページとかなりコンパクトになっている。

okuokuokuoku

HID over SPI

2019年にfirst draftとかなり新しいプロトコルになっている。MSがin-boxドライバでサポートするHID実装としては現状最もあたらしい。

https://learn.microsoft.com/en-us/windows-hardware/drivers/hid/hid-over-spi

SPIはHIDが実装されているバスの中では最も低機能だが、常識的な実装であることは要求している(バイト単位のトランスポートでなければならない)。いわゆるDual-SPIやQuad-SPIも想定している; パディングが 8クロック と規定されているため、Dual-SPIやQuad-SPIではパディングの長さを延長しなければならない。

バス上でのディスカバリプロトコルは規定されないので、ACPIテーブルに存在を記述しておく必要がある。

ACPIがバイトコードインタプリタを持っていることを生かして、リセットについては専用のメソッドをACPIテーブル側に持たせる想定になっている(_RST ACPI 6.0 7.3.25)。また、GPIOへの割り込み線の接続や、SPIのクロック極性(いわゆるmode)の指定もACPI経由で行う。

okuokuokuoku

HID over I2C

割と最近は採用例の多いHID over I2C。2010年にドラフトされた比較的新しいトランスポートではある。

https://learn.microsoft.com/en-us/windows-hardware/drivers/hid/hid-over-i2c-guide

なぜか仕様へのリンクが無い。。word形式の仕様書が公開されている。

https://learn.microsoft.com/en-us/previous-versions/windows/hardware/design/dn642101(v=vs.85)

SPI同様に、割り込み線の接続についてはACPI側に記述する。リセットは通常のI2Cメッセージとして実施する。

okuokuokuoku

  • ベンダーID / プロダクトIDはUSB以外の仕様でも要求されている。 ... 名前空間は規定が無い。たぶんUSBのを流用せよということだと思うが。。
  • 何故かHID over UARTは存在しない。 (一部のデバイスでは "Serial HID" というのが存在するらしいが。。)