Ошибка получения количества устройств, использующих Libusb-win32-1.2.6.0

Я пытаюсь запустить простой код, написанный с помощью libusb-win32 на VS2010, чтобы получить информацию о подключенных USB-устройствах. Я не могу заставить его работать успешно.

#include <stdio.h>
#include <string.h>
#include "lusb0_usb.h"
int verbose = 1;

int print_device(struct usb_device *dev, int level);

int main(int argc, char *argv[])
{
struct usb_bus *bus;

if (argc > 1 && !strcmp(argv[1], "-v"))
verbose = 1;

usb_init();
usb_set_debug(255);

int nBusses = usb_find_busses();
int nDevices = usb_find_devices();
if(nDevices <=0) return 0;
for (bus = usb_get_busses(); bus; bus = bus->next)
{
if (bus->root_dev && !verbose)
print_device(bus->root_dev, 0);
else
{
struct usb_device *dev;

for (dev = bus->devices; dev; dev = dev->next)
print_device(dev, 0);
}
}

return 0;
}

Конфигурация проекта Win32, отладка, и я использую x86 DLL & lib файлы Я могу скомпилировать код.
usb_find_busses() возвращает 1 & usb_find_devices() возвращает 0. Я не понимаю, почему я не получаю правильные числа. Печать bus-> root_dev выводит следующий вывод.

Dev #0: 0000 - 0000
bLength:             18
bDescriptorType:     01h
bcdUSB:              0200h
bDeviceClass:        09h
bDeviceSubClass:     00h
bDeviceProtocol:     00h
bMaxPacketSize0:     40h
idVendor:            0000h
idProduct:           0000h
bcdDevice:           0100h
iManufacturer:       0
iProduct:            0
iSerialNumber:       0
bNumConfigurations:  0
Couldn't retrieve descriptors

Я запустил inf-wizard.exe и там я могу видеть все устройства с идентификатором производителя и устройства. Я не понимаю, чего мне не хватает.

-1

Решение

usb_find_devices() документация в API libusb 0.1 говорит:

Возвращает количество изменений с момента предыдущего вызова этой функции (общее количество удаленных новых устройств и устройств).

Таким образом, он не возвращает количество доступных устройств, как вы ожидаете. Если вам нужно это значение, перечислите список шин, считая сами устройства.
В противном случае просто проигнорируйте счет и перейдите к циклу печати шины, он будет работать на любых подключенных устройствах.

Это, как говорится, есть более новый API libusb 1.0, но его документация не упоминает usb_find_devices() совсем. usb_find_devices() кажется, был заменен новым usb_get_devices_list() функция:

Возвращает список USB-устройств, подключенных в данный момент к системе.

Это ваша точка входа в поиск USB-устройства для работы.

Вы действительно должны использовать более новый 1.0 API, в соответствии с веб-сайт libusb:

Существует несколько реализаций API libusb-0.1:

  • libusb-0.1 — самая первая реализация libusb.
  • libusb-compat-0.1 — это библиотека совместимости, которая предоставляет API libusb-0.1 с помощью API libusb-1.0.
  • libusb-win32 только для Windows реализация API libusb-0.1. Проект libusb-win32 также создал драйвер ядра Windows с открытым исходным кодом libusb0.sys, который предоставляет API-интерфейс пользовательского пространства, позволяющий получать доступ к USB-устройствам вне ядра Windows.

Поскольку API-интерфейсы 0.1 и 1.0 используют разные префиксы, они совместимы друг с другом. Обычно обе системы устанавливаются параллельно в системе. Мы настоятельно рекомендуем использовать libusb-1.0 вместе с libusb-compat-0.1 вместо древнего кода libusb-0.1, так что программы, которые используют как API 0.1, так и 1.0 API в разных частях программы или в разных библиотеках, используемых программой, все будут использовать libusb-1.0 для фактического доступа к устройству. Это важно, чтобы избежать потенциальных конфликтов между использованием libusb-1.0 и libusb-0.1 в том же процессе.

libusb-1.0 рекомендуется для всех новых разработок. Разработчикам рекомендуется портировать существующие приложения, использующие libusb-0.1, для использования нового API.

libusb-0.1 (устаревший API)

  • Обратите внимание, что libusb-win32 это отдельный проект, который все еще видит активное развитие. Драйвер ядра следующего поколения libusb-win32 (libusbk.sys) основан на KMDF. libusbk библиотека будет поддерживать существующий API libusb-win32, libusb-1.0 API и WinUSB-подобный API. Пользователям libusb-win32, которые знакомы с API libusb-win32, рекомендуется продолжать использовать его, поскольку он будет поддерживаться проектом libusb-win32. Пользователи libusb-win32, которые заинтересованы в libusb-1.0, также будут поддерживаться после интеграции бэкэнда libusbk. Может потребоваться дальнейшее усовершенствование API libusb-1.0 (скажем, libusb-1.1), чтобы оно больше подходило для пользователей Windows.
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]