2

Windows 7で、キーボード用のカスタム「ドライバー」(重要な場合はHID)を作成しようとしています。最終的な目標は、2つのキーボードをコンピューターに接続することですが、そのうちの1つのキーをすべて特別なものにマッピングします。 (カスタム)関数。

私の考えは、libusb-win32を2番目のキーボードのドライバーとして使用し、キーボードからデータを読み取ってそれに基づいて動作する小さなプログラムを作成することです。ドライバを正常にインストールし、デバイスはプログラムから認識されますが、キーを押しているにもかかわらず、すべての転送がタイムアウトします。

これが私のコードです:

     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つだけです。エンドポイントにはbmAttributes = 3、割り込み転送を使用する必要があることを意味します(右?)

では、なぜ私は何も得られないのですか?私はlibusbを誤用していますか?libusbなしでこれを行う方法を知っていますか?

4

1 に答える 1

4

実際には非常に簡単です。USBデバイスから読み取るときは、正確に正しいバイト数を読み取る必要があります。あなたはその量が何であるかを読むことによって知っていますwMaxPacketSize

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

于 2012-01-11T17:14:48.630 に答える