Почему я могу открыть STMicroelectronics STLINK V2 с помощью LibUSB, но не с STMicroelectronics Virutal COM Port

У меня есть пример 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 — классу коммуникационных устройств.

Просто подсказка: может ли libusb подключиться к устройству CDC/ACM? Или обязательно ожидает HID устройство, как заявляют о себе многие "нетипизированные" устройства?

the busybee 21.11.2022 21:29

@thebusybee Я думаю, что LibUSB не может подключить виртуальный COM-порт. Я пробовал использовать библиотеку hidapi из libusb, но даже эта библиотека не может подключиться к моему виртуальному COM-порту STM32. Поэтому я думаю, что мне нужно вызвать внутренние функции WIN32.

euraad 21.11.2022 21:31

Так что это звучит как проблема XY. Чего вы хотите достичь? Конечно, вы можете открыть и обработать порт с помощью стандартных файловых функций. Но обязательно прочтите хоть какое-то введение.

the busybee 21.11.2022 21:36

@thebusybee Я хочу подключить свой компьютер к своему USB-устройству. Но похоже, что libusb не может обрабатывать виртуальные порты. Обратите внимание, что мое USB-устройство настроено как виртуальный COM-порт STM32. Я не знаю почему.

euraad 21.11.2022 21:46

Да, конечно, но что вы хотите делать с подключенным устройством? Устройство запускает ваше приложение или загрузчик? -- Какую ОС вы используете? -- Устройства показывают себя как определенные устройства. Ваша ОС решает, как представлять устройство в этом отчете (в основном в Linux) или комбинации PID/VID (в основном в Windows).

the busybee 21.11.2022 21:50

@thebusybee Windows 11, я хочу отправлять и получать данные с моего USB-устройства. Я знаю своего поставщика и идентификатор продукта. Моя библиотека LibUSB нашла идентификатор производителя и продукта моего устройства STM32 и его правильный идентификатор. идентификатор вендора = 1155, идентификатор продукта = 22336

euraad 21.11.2022 21:52

Давайте продолжим обсуждение в чате.

the busybee 21.11.2022 21:55
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
1
7
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В Windows libusb не может подключаться к любому USB-устройству или интерфейсу; он может подключаться только к интерфейсам USB, к которым подключен специальный драйвер, обеспечивающий необработанный доступ к USB, необходимый libusb. Одним из таких драйверов является WinUSB (winusb.sys).

Ваше устройство виртуального последовательного порта, скорее всего, использует другой драйвер, например usbser.sys. Поэтому вы не можете подключиться к нему с помощью libusb. Однако вы можете подключиться к нему, используя стандартные функции последовательного порта в Windows API, а именно: CreateFile, WriteFile, ReadFile, CloseFile, SetCommTimeouts, SetCommState.

usbser.sys.....ты чертовски прав!

euraad 22.11.2022 00:01

Кстати. Единственная библиотека USB, которая у меня работает, это QtSerialPort from QT C++.

euraad 22.11.2022 00:15

...и Boost Asio.

euraad 23.11.2022 19:50

Другие вопросы по теме