USB HID入力遅延とレポート欠落のデバッグ:キーボード、ゲームパッド、スキャナ、独自HIDデバイス

USB HID入力遅延、レポート欠落、キー連打、ゲームパッド遅延、バーコードスキャナの取りこぼし、インタラプトエンドポイントのタイミング、ポーリング間隔、レポートディスクリプタ問題を診断する方法を解説します。

USB HID入力遅延, HIDレポート欠落, USBキーボード遅延, ゲームパッド遅延, HIDレポートディスクリプタ, USB診断

USB HIDの不具合は、ユーザーの言葉で語られることが多いです。キーボード遅延、キー抜け、連打、バーコードスキャナの取りこぼし、ゲームパッド遅延、フットペダルが反応しない、独自HIDデバイスはレポートを送っているのにアプリに届かない。検索ワードは USB HID input lagmissed HID reportsHID interrupt endpoint delaykeyboard repeated keys USBgamepad latency USB capture のように並びますが、エンジニアリング上の必要事は同じです。「アプリイベントではなく、HIDレポートフローを観察すること」。

HIDデバイスは通常インタラプトエンドポイントを使います。デスクトップ的な意味でのハードウェア割り込みではなく、ホストが一定間隔でエンドポイントをポーリングする仕組みです。レポートが壊れている、遅い、頻度が高すぎる、サイズが大きすぎる、正しく記述されていない——そうした状態だと、アプリは遅延や欠落を目にすることになります。

Bus Scopeが効くのは、HID診断には「ディスクリプタ/エンドポイント/ポーリング/レポート」をまとめて見る必要があるからです。

HIDレポートディスクリプタが重要

HIDレポートディスクリプタは、レポートが何を意味するかを定義します。Usage、Report Size、Report Count、論理範囲、Report ID、Input/Output/Featureの各レポートを記述します。

ディスクリプタがデバイスの実バイトと噛み合わないと、症状は奇妙なものになります。

  • アプリが入力を受け取れない
  • 一部のボタンは効くが他は無反応
  • 軸が飛んだり飽和したりする
  • キーボードのキーが連打される
  • Report IDが期待されているのに送られていない
  • レポート長がディスクリプタと異なる
  • ホストがレポートを拒否または無視

デバイスはバイトを送っているのに、ホストが誤って解釈しているケースです。

インタラプトエンドポイントのポーリング間隔

HID Interrupt INエンドポイントにはポーリング間隔があります。Low-Speed/Full-Speed/High-Speedで振る舞いが異なります。ポーリング間隔が遅すぎると、デバイス構成の時点で入力遅延が確定的に組み込まれます。

ゲームパッドやリアルタイム制御デバイスではレポート間隔が重要。バーコードスキャナなら散発的レポートでも問題ないものの、レポートフレーミングは信頼性必須です。

エンドポイントディスクリプタで確認すべき項目:

  • エンドポイントアドレス
  • インタラプト転送タイプ
  • 最大パケットサイズ
  • ポーリング間隔
  • デバイス速度

アプリUIだけから遅延を推測しないでください。

レポート欠落とアプリイベント欠落は別物

レポートはいくつかのレイヤーで「欠落」し得ます。

  • デバイスファームウェアが送らなかった
  • USB転送が失敗した
  • ホストのポーリングが遅すぎた
  • レポートは送られたが壊れていた
  • ドライバが解釈を誤った
  • アプリがフィルタで落とした
  • フォーカスやOSの入力ルーティングがイベントを落とした

バスレベルの証拠は最初の4つに答えます。バス上にレポートが正常にいるなら、ドライバ/アプリ側に話を進める。バス上にレポートがないなら、ファームウェア・エンドポイントタイミング・電源状態を疑ってください。

キー連打とスティッキーなボタン

「キー押し下げ」レポートが送られたまま「キー離す」レポートが来ない/壊れていると、連打になります。ゲームパッドのボタンが押しっぱなしに見えるのも同じ理由です。

イベント周辺のキャプチャ例:

Report: key A down
Report: no keys down

離すレポートが出てこなければ、デバイスまたはUSBパスが疑わしい。バス上で離すレポートが出ているのにアプリがまだ押しっぱなしと判断するなら、ドライバ/アプリのマッピングを確認。

バーコードスキャナの取りこぼし

多くのバーコードスキャナはキーボードをエミュレートします。スキャン時にはHIDレポートの高速シーケンスが発生します。アプリ側が速さに追いつけないなら、問題はUSBではないかもしれません。ただし、トレースに「欠落したキーレポート」「誤ったReport ID」「エンドポイントエラー」が出ているなら、スキャナまたはハブ経路が疑わしい。

有用な証拠:

  • スキャン全体のレポートシーケンス
  • レポート間隔
  • 離すレポートの欠落
  • エンドポイントエラー
  • スキャン中のデバイス再接続やサスペンド

デバッグチェックリスト

次の流れで作業すると、原因に早くたどり着けます。

  1. 接続時から列挙をキャプチャする
  2. HIDレポートディスクリプタを保全する
  3. Interrupt INエンドポイントとポーリング間隔を特定する
  4. 既知の入力シーケンスをキャプチャする
  5. 実際のレポート長をディスクリプタと比較する
  6. Report IDを確認する
  7. 押し下げ/離すのペア抜けを探す
  8. エンドポイントエラーが発生していないか確認する
  9. ポート直結とハブ経由を比較する
  10. バスの証拠をアプリログと突き合わせる

最終的な診断

USB HID入力遅延とレポート欠落には、HIDディスクリプタ・インタラプトエンドポイント・ポーリング間隔・実レポートバイトの証拠が必要です。UI症状は「デバイス/バス/ドライバ/アプリ」のどれが犯人かを証明しません。

Bus ScopeはHIDレポートシーケンスを可視化するので、キーボード/ゲームパッド/スキャナ/独自HIDの問題を「USBの事実」からデバッグできます。