誰もが助けることができるのだろうか、それに専門家の問題が少しあります。Windows USB Class Driverをカスタムドライバに置き換えますか?
私は、多数のUSBデバイスを読み込んで分析する必要があるアプリケーションを持っています(同時ではなく、それぞれ別々のテストで実行され、理論上は異なるマシンで実行できます)。
各USBデバイスはUSB HIDクラスに基づいており、異なる会社によって製造されていますが、これらのUSBデバイスはいずれもPC上で動作するようには設計されていませんが、異なるプラットフォーム用ですクライアントがテストアプリケーションがPCから実行されることを要求したデバイスをテストします。
一部のデバイスが起動し、ウィンドウに組み込まれた汎用HIDクラスドライバを使用して正しく初期化され、起動されるウィンドウで認識され、テスト対象のデータの正しいデータパケットが送信されます。
デバイスのいくつかは起動し、起動しようとするウィンドウで認識されますが、完全に初期化されずに半初期化された状態になります。ビーグルプロトコルアナライザーを使って本物のプラットフォームから初期化パケットを取得し、LibUSBDotNetライブラリーを使用して初期化シーケンスの残りのパケットを複製し、パケットを正しく送信するようにすることができます。
私が持っている問題は、ある特定のデバイスにあります(しかし、まだいくつかテストされていませんので、それらのうちの1つでは同じ問題が発生する可能性があります)。問題は、Windows HIDクラスドライバがデバイスを認識して初期化して起動しようとすることです。これはファッションの後に動作し、デバイスはデータの送信を開始します。
問題は、送信されるデータが正規のプラットフォーム(完全なデータのサブセットのみを含む)に送信されるデータと異なることです。 Windowsがデバイスを別のモードに初期化したようです。
USBプロトコルアナライザを使用してPCと純正プラットフォームの両方から初期化パケットをキャプチャすると、Windowsはわずかに異なる初期化パケットを送信しています。一度Windowsが既にデバイスを起動してしまえば、LibUSBDotNetを使って正しいパケットを再送信することは効果がないようです。
私の問題は、標準のHIDクラスドライバを使用してデバイスを初期化しようとするのを止める必要があることです。デバイスマネージャでドライバを削除しようとしましたが、まだ初期化しています(そしてドライバは魔法のようにデバイスマネージャー)。私はいくつかの調査を行ってきたし、可能な選択肢があります。その後、私は正しいを送信するためにLibUSBDotNetを使用することができ、
は、Windowsが特定のVIDデバイスの/ PIDに割り当てる固有のドライバを作成しますが、それは何もしません私自身のコードからデバイスへの初期化シーケンス。
使用1.
のようなデバイスのための適切なドライバを作成する(または多分「死んだ」ドライバを作成するためのWinUSBのようなものは、特定のVID/PIDを持つドライバーはで使用される定義されますUSBハイドのクラスドライバを優先して設定していますか?そうでなければ、このルートを辿る時間が無駄になりますか?
my macは問題のデバイスを正しく初期化しています。アプリケーションはMac向けに開発することができ、彼らの答えはWindowsだけで欲求不満でした。
私は比較的低レベルでUSBと話をした経験がありますが(私はその部分があまり心配しないように)、適切なWindowsドライバを書いた経験はありません。誰もが私の選択した行動コースが私が必要なものを提供することができないことを見つけるためにのみPCのためのドライバを書く方法を調べる潜在的に何週間も無駄にする前に、行動の良いコースを提案することができます。
何か助けてください、または非常に感謝してください。
おかげで、 リッチ
追加は下の提案を試した後:
私はLibUsbDotNet INFウィザード必要なファイルを作成し、それらをインストールして使用してみました、これは仕事に登場 - 確かにデバイスでしたlibusb-win32デバイスとしてDevice Managerに表示され、HIDデバイスではなく、関連付けられたドライバはlibusbドライバでした。これを行った後も、デバイスは初期化されて間違ったタイプのデータパケットを送信し始めているように見えますが、これらのパケットはもはやクラスドライバによって処理されなくなり、失われます。
また、WinUSB用の同様のinf作成ウィザードを持つZadigも出てきましたが、まったく同じ結果でした。
同僚は、デバイスをこのモードに切り替えるウィンドウ自体ではなく、デバイスがWindowsマシンに接続されていることを識別し、このモードに切り替えることを示唆しています。私はこれが事実だと思う。その場合、私は立ち往生している - クライアントと別の会話をする時間です。
多くのご協力ありがとうございます。
この質問をより簡潔にすることはできますか?私は多くの人がそれをすべて読むとは思っていません。 –