Как наиболее правильно использовать libusb для связи с подключенными USB-устройствами?

Как я наиболее правильно использую libusb для подключения к подключенным USB-устройствам?

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

В частности, я буду запускать это на компьютере Mac OS X nbsp; X, поэтому я знаю, что не могу просто использовать заголовочные файлы Windows.

Если есть хорошее объяснение на устройствах libusb и USB, это тоже будет полезно.

Ответ 2

Здесь - сообщение по аналогичному вопросу, который может быть вам полезен. Я включаю много ссылок.

Но, может быть, вы предпочтете увидеть его здесь. Итак, в этом случае, вот оно!

Libusb позволяет вам перечислять устройства и выбирать тот, который вы хотите, на основе определенного идентификатора поставщика/продукта (идентификатор V/P). Если вы этого не знаете и не можете найти его в сети с описанием продукта, вы можете легко найти его.

Если это не онлайн, вам нужно будет использовать приложение, подобное lsusb для Linux. (Я не верю, что это на Mac.) Когда вы запускаете lsusb, он перечисляет подключенные устройства и их идентификаторы V/P. Вы можете легко найти свое устройство, отключив, запустив lsusb и включив устройство и сравнив его. Это кусок пирога. Любое приложение на USB-приложению на Mac, мы надеемся, отобразит идентификатор V/P, как это делает lsusb.

Затем, когда у вас есть этот V/P ID, вы будете использовать libusb (если используете 0.1), чтобы перечислить все устройства и найти устройство, соответствующее этому id. (Я поддерживаю использование libusbx, у которого есть одна функция устройства поиска, основанная на V/P id - на самом деле libusbx намного более кратким.)

После выбора устройства вы отправите пакет, используя отчеты о характеристиках или выходе. Это самая сложная часть, потому что отправляемый вами пакет зависит от конкретного устройства, которое я считаю. Это 8 байтов данных, и только один из них - это один символ, который вы хотите отправить на устройство USB. (Если вы хотите отправить 8 символов, вам придется перебирать массив символов и отправлять функцию или выходной отчет для каждого символа.)

В качестве примера не стесняйтесь ссылаться на довольно специфический терминал пример, который я написал для управления двумя светодиодами. Если это полезно, здорово! Он содержит пример libusbx и libusb-0.1.

Надеюсь, это поможет!

Ответ 3

Процесс, которым вы можете следовать, следующий:

  • Получить идентификатор VID, PID для устройства, с которым вы хотите общаться, используя lsusb
  • Попробуйте открыть устройство и прочитать дескриптор устройства
  • Если вы хотите, чтобы имя устройства использовало дескриптор строки, чтобы получить это
  • Проверьте, не подключен ли какой-либо драйвер ядра. Если это так, то отделите его и выполните некоторую передачу необработанных данных
  • После получения ответа снова снова подключите драйвер.