2012-01-03 31 views
2

Windows 7では、キーボードのカスタムドライバ(問題があればHID)を書こうとしています。最後の目標は、コンピュータに2つのキーボードを接続することですそれらのうちの1つのすべてのキーを特殊(カスタム)関数にマッピングします。libusb-win32 - キーボードから読み取ることができない

私の考えは、第2キーボードのドライバとしてlibusb-win32を使用し、キーボードからデータを読み込んで動作する小さなプログラムを書くことです。私はドライバのインストールに成功し、デバイスからプログラムが認識されますが、キーを押していてもすべてのタイムアウトが転送されます。ここ

は私のコードです:

 struct usb_bus *busses; 
    struct usb_device *dev; 
    char buf[1024]; 

    usb_init(); 
    usb_find_busses(); 
    usb_find_devices(); 

    busses = usb_get_busses(); 
    dev = busses->devices; 

    cout << dev->descriptor.idVendor << '\n' << dev->descriptor.idProduct << '\n'; 

    usb_dev_handle *h = usb_open(dev); 
    cout << usb_set_configuration(h, 1) << '\n'; 
    cout << usb_claim_interface(h, 0) << '\n'; 
    cout << usb_interrupt_read(h, 129, buf, 1024, 5000) << '\n'; 
    cout << usb_strerror(); 
    cout << usb_release_interface(h, 0) << '\n'; 
    cout << usb_close(h) << '\n'; 

、それが返されます。

1133 
    49941 
    0 
    0 
    -116 
    libusb0-dll:err [_usb_reap_async] timeout error 
    0 
    0 

(私はそれらの5秒でキーの多くを押しています)

唯一のバス、1つのデバイスがあります1つの構成、1つのインターフェース、および1つのエンドポイントを含む。 エンドポイントはbmAttributes = 3です。これは割り込み転送を使用する必要があることを意味します(右)

なぜ私は何も取得できませんか?私はlibusbを悪用していますか?あなたはlibusbなしでこれを行う方法を知っていますか?

+0

あなたは "...目標は2つのキーボードを持っています...そのうちの1つのすべてのキーを特別な(カスタム)機能にマッピングしています。"あなたはそのプロジェクトを終えましたか?それはどこかで利用可能ですか?私はしばらくの間、まったく同じアイディアを持ち、それを攻撃することはなかった。ありがとう!! –

+0

@JonasHeidelberg [gist](https://gist.github.com/xorserer/481356fa586fcaa426f5)をチェックしてください。プロジェクト自体はC#であり、いくつかのクラスは要点から欠けていますが、私はそれがこのフォームで使えると思います。 (プロジェクト全体が公開されておらず、公開できません) – nirbruner

答えて

4

実際には、USBデバイスから読み取るときは、と正確にはのバイト数を読み取る必要があります。その金額はwMaxPacketSizeと読んで分かります。

他のサイズの読み取り要求は、明らかにタイムアウトになります。

関連する問題