USBデバイスを取り外したり再接続したりせずに切断する

USBデバイスを取り外したり再接続したりせずに切断する

dangerousprototypes から購入した IRTOY を持っています。WinLirc 0.9c を使って Windows 7 x64 で実行しています。しかし、デバイスが突然ハングアップすることがあり、デバイスを取り外して再度接続しないと再び動作しません。デバイス マネージャーから COM ポートを無効にしたり有効にしたりすると、デバイスをアクティブ化できなかったというエラー メッセージが Windows に表示されることがよくあります。

どうやら、IRTOY に関連するハードウェアの問題のようです。現在、USB 経由の電力を遮断するデバイスを探しています。デバイスへの電力をリモートで遮断できるはずです。オスとメスの USB コネクタを備えたリレーのように、USB ポートからデバイスを物理的に取り外す操作を実際にシミュレートする必要があります。

この問題の解決策はありますか?

答え1

どうやら IRTOY にはバグがあり、完全に再起動する必要があり、電源をオフにすることが唯一の手段です。まずい。

ソフトウェアで VBUS 電源を切り替える 1 つの解決策は、切り替え可能なポート電源コントローラを備えた USB ハブを使用することです (通常、これらは見つけるのが困難ですが、ポート電源コントローラを備えた PC メインボードを見つけるよりも簡単です)。次に、IRTOY が接続されているポートに ClearPortFeature(PORT_POWER) を発行し、次に SetPortFeature(PORT_POWER) を発行する必要があります。

アプリケーションスペースからこれを正確に行う方法はよく分かりませんが、無料のUSBデバイスツリービューア(ウーヴェ・ジーバー) は、ポップアップ オプション「デバイスの再起動」を使用してポート VBUS のオン/オフを設定できます。USB ポートには通常、かなり大きなコンデンサが接続されているため、VBUS を放電するのに時間がかかる場合があります。そのため、Clear コマンドと Set コマンドは適切な間隔で実行する必要があります。残念ながら、USBTreeView はこれを高速に実行します。または、ハブ全体を再起動することもできます。ただし、ダウンストリーム ポートで VBUS をオフにするには、十分な時間がかかります。

Uweがソースコードを公開していない場合は、マイクロソフト SDKメインの USBView ソース コードを調べ、ポートの無効化/有効化コマンドをドライバーに発行する方法を理解します。

関連情報