libusb-win32 - не может читать с клавиатуры - PullRequest
2 голосов
/ 04 января 2012

Я пытаюсь написать собственный «драйвер» для клавиатуры (HID, если это имеет значение) под Windows 7. Конечная цель - подключить к компьютеру две клавиатуры, но сопоставить все клавиши одной изих для специальных (пользовательских) функций.

Моя идея состоит в том, чтобы использовать 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 секунд)

Есть только одна шина, одно устройство, одна конфигурация, один интерфейс и одна конечная точка.Конечная точка имеет bmAttributes = 3, что означает, что я должен использовать передачу прерываний (верно?)

, так почему я ничего не получаю?Я неправильно использую libusb?Вы знаете способ сделать это без libusb?

1 Ответ

4 голосов
/ 11 января 2012

На самом деле это довольно просто - при чтении с USB-устройства вы должны прочитать точно нужное количество байтов.Вы знаете, что это за сумма, читая wMaxPacketSize.

Очевидно, что запрос на чтение любого другого размера просто приводит к таймауту.

...