USB プロジェクト - デバイス・ドライバを入れ替える [USB]
hamayanさんも、お悩みになったように USBデバイスのプログラムを書き換えたとき、PC側は「PIDとVIDだけを確認して同じデバイスであると認識する」ので、PC側デバイス・ドライバは更新されません。 これでは、デバッグにならないので、PCに「昔のことは忘れて」もらいましょう。
以下、Windows XP の場合の操作例です。
デバイス・マネージャを呼び出す
デバイス・ドライバ入れ替えの第一歩は、デバイス・マネージャの呼び出しから始まります。
コントロールパネル → システム → ハードウェア → デバイスマネージャ
デバイスのツリーが表示されますので、ここから該当するデバイスを探します。 この時、 ツリーには接続されているデバイスしか表示されないので、 当該デバイスはUSBポートに接続しておいてください。
プロパティ・ダイアログを操作する
探し出したデバイスの所で右クリックし、プロパティ・ダイアログを出します。 詳細タブで「デバイスインスタンスID」を確認して当該デバイスであることを確認しておきましょう。
確認したらドライバ・タブを出します。 ここではドライバの変更に関するボタンが並んでいます。
デバイス・ドライバを削除するために、「削除」をクリックします。 HIDデバイスの場合、ここでUSBデバイスから採取された各種デスクリプタの情報が削除されているようです。 逆にいうと、PC側は、USBデバイスを抜き差ししただけでは、デスクリプタを再読み込みしたりしないようです。
USBデバイスを再認識させる
この工程は簡単です。 単にUSBデバイスを抜いて挿しなおします。 すると、オペレーティング・システムが新しいUSBデバイスを認識して、 勝手にデバイス・ドライバができます。
問題はどこに
Windows XPの場合には、以上の手順でデバイスの入れ替えが行われるようなのですが、問題は、当該デバイスが存在しないとドライバの削除も行えないというところです。 昔使った事があるデバイスドライバが山のように残されていて、すでに壊れた・捨てた場合には、二度と削除できないというすばらしいシステムです。
また、USBデバイスを挿しなおしただけではデスクリプタの読み込みや検証はされていないようなので、一度怪しいデバイスドライバを入れられたら、正規デバイスに対しても怪しいデバイスドライバが反応するので、危険な香りがします。
他の方法もある
デバイス・マネージャの右クリックメニューには、「ドライバの更新」や「ハードウェア変更のスキャン」という項目もあって、使える時には使えるようです。 ただ、「役に立たないこともある」ようなので、削除してしまった方が確実であろうと思います。
> 一度怪しいデバイスドライバを入れられたら、正規デバイスに
> 対しても怪しいデバイスドライバが反応するので、危険な香り
> がします。
と言うか、デバック時に思いっきりそれで嵌りそう。
by hamayan (2008-03-07 09:10)
やっと、トラックバックが受け付けてもらえました。
今、思い出してみると、キーボードのフリをするデバイスで各種イベントに対してLEDに反応が無かったのは、デバイスドライバが正しく構成されていなかったためではなかったかと考えています。もういちど、試してみようかな。
by noritan (2008-03-07 09:45)
> やっと、トラックバックが受け付けてもらえました。
リニューアル後、なんか細かい所で不安定になっていますね。
左右のペインの更新も、ページによってまちまちだったり。
まあソネブロの特徴とも言えますが。(※昔に比べれば、、、マシ)
by hamayan (2008-03-07 09:52)
>問題は、当該デバイスが存在しないとドライバの削除も行えないというところです。
現在接続していないUSBデバイスのインスタンス(Hidden あるいはPhantom device)をデバイスマネージャー上で見るためのチップスです。
1)次の2行を、例えば DevManager.bat 等の.batファイルにコピーして下さい。
set devmgr_show_nonpresent_devices=1
start devmgmt.msc
環境変数を設定して(1行目)、デバイスマネージャを呼び出します(2行目)
2)DevManager.batをダブルクリックします。
- 一瞬DOS窓が出て、デバイスマネージャーが立ち上がります。
3)「表示」メニューの下で、「非表示デバイスの表示」を選びます。
- これで、現在接続していないデバイスがやや薄めのアイコンとして表示されます。
USB の開発ではデバイスマネージャを頻繁に呼び出すので、ダブルクリック一発で呼び出せる点だけでもこの方法は結構便利です。無くなってしまったUSBシリアルケーブルの COMポート番号の回復にも役立つでしょう。
Tsuneo
by Tsuneo (2008-03-13 18:14)
おぉ、これは良いことを教えていただきました。
試してみたら、記憶の片隅に追いやってしまったデバイスたちが、ワンサカ出てきました。
必要なやつを消してしまわないように心して使わせていただきます。
by noritan (2008-03-13 18:24)
上記のチップスの元ネタはこのMSDN KBです。
"Device Manager does not display devices that are not connected to the Windows XP-based computer"
http://support.microsoft.com/kb/315539/en-us
コマンドラインをバッチファイルにしただけです。
怪しいものではありません :-)
Tsuneo
by Tsuneo (2008-03-13 18:42)