У меня есть пример LibUSB в коде C++, и я пытаюсь подключиться STMicroelectronics Virtual COM Port
и не могу его подключить, даже если у меня есть права Vendor ID
и Product ID
Но если я использую свой пример LibUSB для подключения STMicroelectronics STLINK-V2
, то я могу подключиться.
Вопрос:
Так почему же LibUSB не может подключиться к STMicroelectronics Virtual COM Port
с помощью LibUSB, но я могу подключиться к STMicroelectronics STLINK-V2
.
Когда я запускаю этот фрагмент кода, device_handle
возвращает NULL
, потому что libusb
не может подключиться, когда vendorID = 1155, productID = 22336
. Эти цифры для STMicroelectronics Virtual COM Port
.
device_handle = libusb_open_device_with_vid_pid(ctx, vendorID, productID);
Обновлять:
Моя цель — подключить мой компьютер к моему USB-устройству, чтобы я мог передавать и получать данные с этого USB-устройства.
Моя операционная система — Windows 11. С моим USB-устройством все в порядке. Я могу подключить его с помощью QT C++ и передать ему данные. Но не с libusb, кажется.
Обновление 2:
Мое USB-устройство относится к CDC — классу коммуникационных устройств.
@thebusybee Я думаю, что LibUSB не может подключить виртуальный COM-порт. Я пробовал использовать библиотеку hidapi
из libusb
, но даже эта библиотека не может подключиться к моему виртуальному COM-порту STM32. Поэтому я думаю, что мне нужно вызвать внутренние функции WIN32.
Так что это звучит как проблема XY. Чего вы хотите достичь? Конечно, вы можете открыть и обработать порт с помощью стандартных файловых функций. Но обязательно прочтите хоть какое-то введение.
@thebusybee Я хочу подключить свой компьютер к своему USB-устройству. Но похоже, что libusb не может обрабатывать виртуальные порты. Обратите внимание, что мое USB-устройство настроено как виртуальный COM-порт STM32. Я не знаю почему.
Да, конечно, но что вы хотите делать с подключенным устройством? Устройство запускает ваше приложение или загрузчик? -- Какую ОС вы используете? -- Устройства показывают себя как определенные устройства. Ваша ОС решает, как представлять устройство в этом отчете (в основном в Linux) или комбинации PID/VID (в основном в Windows).
@thebusybee Windows 11, я хочу отправлять и получать данные с моего USB-устройства. Я знаю своего поставщика и идентификатор продукта. Моя библиотека LibUSB нашла идентификатор производителя и продукта моего устройства STM32 и его правильный идентификатор. идентификатор вендора = 1155, идентификатор продукта = 22336
Давайте продолжим обсуждение в чате.
В Windows libusb не может подключаться к любому USB-устройству или интерфейсу; он может подключаться только к интерфейсам USB, к которым подключен специальный драйвер, обеспечивающий необработанный доступ к USB, необходимый libusb. Одним из таких драйверов является WinUSB (winusb.sys).
Ваше устройство виртуального последовательного порта, скорее всего, использует другой драйвер, например usbser.sys. Поэтому вы не можете подключиться к нему с помощью libusb. Однако вы можете подключиться к нему, используя стандартные функции последовательного порта в Windows API, а именно: CreateFile, WriteFile, ReadFile, CloseFile, SetCommTimeouts, SetCommState.
usbser.sys.....ты чертовски прав!
Кстати. Единственная библиотека USB, которая у меня работает, это QtSerialPort
from QT C++
.
...и Boost Asio.
Просто подсказка: может ли libusb подключиться к устройству CDC/ACM? Или обязательно ожидает HID устройство, как заявляют о себе многие "нетипизированные" устройства?