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

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

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

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

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

13

Решение

Я нашел здесь текстовое руководство по использованию libusb-1.0: http://www.dreamincode.net/forums/topic/148707-introduction-to-using-libusb-10/

9

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

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

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

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

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

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

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

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

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

6

Процесс, которым вы можете следовать:

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

Официальный сайт для libusb 1.0 (более новая и рекомендуемая версия) https://libusb.info/. Документация по API находится на http://api.libusb.info. Нажмите на раздел Модули, чтобы пройтись по различным функциональным областям. Источник находится на https://github.com/libusb/libusb и вы можете увидеть некоторые рабочие примеры на https://github.com/libusb/libusb/tree/master/examples. Надеюсь, это поможет!

Статья от @ user2469202 также является хорошим базовым введением.

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