Здесь рассмотрено ПО хоста для взаимодействия с устройствами USB HID через одну из программных библиотек. Протокол USB очень сложен, и поэтому обычной практикой работы с ним является использование готовых библиотек подпрограмм (в виде DLL или исходного кода).
Один из вариантов использования интерфейса USB - применение стандартного класса устройств USB HID. Как известно, устройства USB HID очень удобны для подключения пользовательских устройств к компьютеру, так как не требуют написания драйвера, и максимальная скорость обмена с USB HID (64 килобайта/сек) в большинстве случаев оказывается достаточной.
[Краткий обзор библиотек]
Для наглядности библиотеки сведены в таблицу, далее более подробно рассмотрена каждая из библиотек.
Библиотека |
Поддерживаемые OS |
Автор |
Доступность исходного кода |
Предпочтительный язык программирования для использования в ПО хоста |
Удобство использования по 5-бальной шкале |
Ссылка на источник информации |
HID.dll |
Windows |
Microsoft |
нет |
C++ |
2 |
MSDN |
AtUsbHid.dll |
Windows 32-bit |
Atmel |
нет |
C++, Java |
5 |
doc7645.pdf |
HID API |
Windows, Linux, Mac OS X |
signaleleven, Alan Ott |
да |
GCC, C++ |
4 |
hidapi |
LibUSB |
Windows, Linux, FreeBSD, NetBSD, OpenBSD, Darwin, MacOS X |
libusb.org |
да |
GCC, C++ |
4 |
libusb |
USB HID Component for Windows C# |
Windows |
?? |
да |
C# |
4 |
USB HID C# |
JEDI Visual Component Library (JVCL) |
Windows |
jvcl.delphi-jedi.org |
да |
Delphi7 (Object Pascal) |
5 |
JEDI Visual Component Library |
Processing HIDSerialMonitor example |
Windows, Linux, MacOS X |
rayshobby.net |
Да |
Processing |
4 |
HID-class USB Serial Communication for AVRs using V-USB |
Все примеры программ, перечисленные в таблице, Вы можете скачать по ссылке [1].
[HID.dll]
Пример ПО хоста (см. скриншот), которое общается с USB HID через библиотеку HID.dll, имеется в Windows DDK (см., например c:\WINDDK2003\3790.1830\src\wdm\hid\hclient\ для Windows DDK 2003). Сама HID.dll находится в папке %windir%\system32\, и всегда доступна для доступа использующих её программ.
Статью, описывающую пример, см. в [2]. Для того, чтобы скомпилировать пример, Вам нужен Windows DDK любой версии. Писать программу с использованием примера удобнее всего в Visual Studio C++, однако если Вы умеете загружать в память библиотеки DLL и вызывать её функции, то язык и система программирования никакого значения не имеют. Пример ПО хоста не привязан к конкретному USB HID устройству, просто предоставляет интерфейс для получения информации по подключенным устройствам USB HID. Достоинство использования HID.dll в том, что на платформе Windows это наиболее "прямой" метод получения доступа к устройствам USB HID, тогда как остальные библиотеки просто являются обертками над вызовами HID.dll. Недостаток библиотеки - неудобный интерфейс API, отсутствие исходного кода, ограниченное использование - только на операционных системах Windows. Исходный код примера можно взять в Windows DDK или скачать по ссылке [1], см. папку HID.dll\hclient\.
[HID.dll / hidlibrary.h]
Заголовочный файл, написанный неким XANDER, предоставляющий упрощенный доступ к функциям HID.dll. Цитата из комментария к файлу: "Библиотека для работы с Hid. Написана с применением шаблонов. Она с помощью WINAPI функции LoadLibrary подгружает hid.dll, затем GetProcAddress - вычисляет адреса функций внутри hid.dll. Предоставляет удобный и простой интерфейс для работы с HID. Нашел на http://speleoastronomy.org/elektro/atmega/usingusb.html, дописал функцию IsConnectedDevice().". Заголовочный файл может использоваться совместно Borland CBuilder, Embarcadero RAD studio XE C++ Builder и другими IDE, поддерживающими шаблоны на языке C++. Пример ПО хоста (автор Обрубов Виталий, [obruboff.ru]), работающий с поворотным энкодером, можно скачать по ссылке [1], см. папку HID.dll\usb-volume-control-USB-HID.
[AtUsbHid.dll]
Библиотека достаточно хорошо документирована, имеет простой интерфейс API для использования. Есть примеры GUI-программ, написанных на C++ и Java, а также пример консольной программы.
У этой библиотеки, к сожалению, есть очень большой недостаток - разработчик (компания Atmel) её давно забросил где-то с 2008 года, и исходного кода не предоставил. Есть поддержка только 32-bit версий Windows, 64-bit версии не поддерживаются.
Удобнее всего программировать в среде Visual Studio, однако если Вы умеете загружать в память библиотеки DLL и вызывать её функции, то язык и система программирования никакого значения не имеют. Демонстрационная программа ПО хоста рассчитана на подключение к USB HID, собранному на основе чипа AVR с аппаратным USB и прошитым соответствующим firmware (например, чип AT90USB162, который установлен на макетной плате AVR-USB162 или AVR-USB162MU). Обзор работы с примером можно найти в [3]. Firmware управляет светодиодами и читает состояние кнопок (светодиоды и кнопки подключены к ножкам чипа AT90USB162). С библиотекой AtUsbHid.dll необязательно использовать именно микроконтроллеры Atmel, можно управлять любыми устройствами USB HID. Достоинство AtUsbHid.dll - простота применения. Недостаток - вместе с программой нужно предоставлять библиотеку AtUsbHid.dll, а также ограниченное использование - только на операционных системах Windows. Исходный код примера ПО хоста (и скомпилированные рабочие бинарники) можно найти на сайте Atmel или скачать по ссылке [1], см. папку AtUsbHid.dll\. Код firmware USB HID (исходники и прошивки) можно найти в папке AtUsbHid.dll\firmware\AVR-USB162 и в папке AtUsbHid.dll\firmware\userial (firmware для макетных плат AVR-USB162 и userial соответственно) архива по ссылке [1]. Для указаний по компиляции и использования примеров firmware читайте соответствующие файлы readme.txt в папках AVR-USB162 и userial. Также см. на сайте Atmel апноут AVR328: USB Generic HID Implementation on megaAVR devices, и статью [14].
[HID API]
Кроссплатформенная библиотека с открытым исходным кодом, хорошо документированная. Самый лучший пример использования (ПО хоста и firmware USB HID для микроконтроллера AT90USB162), который мне удалось найти, это проект lightpack см. [5].
Исходный код примера ПО хоста (и скомпилированные рабочие бинарники) можно скачать по ссылке [1], см. папку hidapi-0.5.2 и папку lightpack. Чтобы скомпилировать ПО хоста lightpack, Вам понадобится среда программирования QT, а чтобы скомпилировать firmware USB HID (для чипа AT90USB162, макетная плата AVR-USB162), понадобится пакет WinAVR. Для указаний по компиляции и использования примеров firmware читайте соответствующие файлы readme.txt.
[LibUSB]
Широко известная кроссплатформенная библиотека, используется во многих коммерческих продуктах. Хорошо документирована, исходный код открыт, примеры кода ПО хоста на ней найти довольно легко. На мой взгляд, самые лучшие примеры есть в составе библиотеки V-USB (см. [6]), причем примеры ПО хоста libusb сопряжены с firmware устройства USB HID (на библиотеке V-USB). Т. е. у Вас есть готовые примеры ПО хоста и готовые примеры устройств USB HID, которые обмениваются с этим ПО хоста данными. Устройства USB HID в библиотеке V-USB рассчитаны на обычные чипы AVR, которые не имеют на борту аппаратного контроллера USB (т. е. протокол USB обрабатывается внутри AVR чипа программно), однако можно написать программу, которая будет работать с любым устройством USB. Примеры ПО хоста рассчитаны на GCC (язык C) или Visual Studio (язык C++), однако если Вы знаете, как загружать в память DLL и вызывать её функции, то нет проблем портировать примеры на любую другую среду программирования (см. [7]). Недостаток библиотеки libusb в том, что для ПО хоста, написанной на ней, под Windows нужна установка самой библиотеки, а также нужна привязка к устройству USB HID специального драйвера фильтра (filter driver). Этот драйвер фильтра устанавливается с помощью специальной утилиты, входящей в состав пакета библиотеки libusb.
|
|
Исходный код примеров ПО хоста (и скомпилированные рабочие бинарники) можно скачать по ссылке [1], см. папки libusb\examples\hid-custom-rq\commandline, hid-custom-rq\set-led-gui, hid-data\commandline. Имеется также удобная тест-программа (папка examples\usbtool), показывающая параметры всех подключенных к компьютеру устройств USB (для которых также установлен драйвер фильтра). Код firmware USB HID (исходники и прошивки) можно найти в папках hid-custom-rq\firmware-mega, hid-custom-rq\firmware-tiny, hid-data\firmware, hid-mouse\firmware. Примеры firmware удобно запускать на макетных платах AVR-USB-MEGA16 (микроконтроллер ATmega32). Чтобы скомпилировать ПО хоста, Вам необходим компилятор GCC и набор утилит MinGW (см. [8]), или (для примера hid-custom-rq\set-led-gui) Visual Studio C++. Для указаний по компиляции и использования примеров firmware и ПО хоста читайте соответствующие файлы readme.txt, или см. информацию вики LibUSB [9]. Бинарники LibUSB, достаточные для запуска приложений Windows (в том числе и драйвер фильтра filter driver и мастер по его установке) можно скачать по ссылке [11], см файл с названием наподобие libusb-win32-devel-filter-1.2.5.0.exe (цифры версии могут отличаться).
[USB HID Component for Windows C#]
Библиотека с открытым исходным кодом, хорошо документированная (имеется специальный файл подсказки *.CHM), можно использовать только в среде Windows, и удобна только для программ, написанных на C#. Библиотека хороша тем, что к извлечению устройства USB и к моментам передачи данных можно привязать события программы. Библиотеку можно скачать по ссылке [1], см. папку UsbLibraryC#. Для компиляции нужен Visual Studio (хорошо подходит Visual Studio C# 2010 Express, который можно скачать и бесплатно использовать в некоммерческих целях).
См. также описание HID USB Driver / Library for .Net / C# (DLL) [12] для использования в проектах Visual Studio. DLL написана на C#, легко интегрируется в проекты Visual Studio, и имеет простой и понятный программный интерфейс.
[JEDI Visual Component Library (JVCL)]
Библиотека визуальных и невизуальных компонентов для популярной среды разработки Delphi. Пользоваться библиотекой довольно просто, хороший пример использования - конфигуратор устройства USB HID для управления частотой вращения вентиляторов системного блока в зависимости от температуры [15].
Здесь приведен только краткий обзор классов и компонентов JVCL, относящийся к управлению устройствами USB HID.
TJvHidDeviceController предоставляет доступ списку USB контроллеров, отслеживает изменение состояния контроллеров, подключение/отключение устройств.
TJvHidDeviceController:OnDeviceChange - обработчик подключения/отключения устройств.
TJvHidDeviceController:OnEnumerate - получение списка устройств.
TJvHidDevice - предоставляет доступ к конечному USB устройству. В конфигураторе используются только два метода для получения и отправки пакета данных.
TJvHidDevice:GetFeature - получение пакета данных (прием данных от устройства).
TJvHidDevice:SetFeature - отправка пакета данных (передача данных в устройство).
[Processing]
Пример работы с устройством HID (HIDSerialMonitor) предназначен для плат Arduino и USnooBie. В репозитории на GitHub [16] можно найти как готовые скомпилированные бинарники для Linux (32-бит, 64-бит) и для Windows, так и исходный код на языке Processing. Код использует вызовы библиотеки hidapi. Скомпилированные программы и отдельные приложения не требуют никакого дополнительного программного обеспечения.
Программа HIDSerialMonitor нужна как альтернатива Serial Monitor в среде разработки Arduino, это позволяет освободить порт UART микроконтроллера.
Чтобы скомпилировать код самостоятельно, Вам нужно установить Processing (см. сайт processing.org), и скопировать библиотеки (G4P и hiddapi) в папку библиотек Processing. Затем загрузите HIDSerialMonitor.pde в среде разработки Processing и кликните "Run".
[Что нужно, чтобы попробовать]
При таком разнообразии вариантов реализации обмена с устройством USB HID сначала надо определиться с платформой разработки. Например, если Вы пишете на Java, то лучше всего подойдет библиотека Atmel. Если Вы программируете на C#, то лучше выбрать компонент USB HID C#. Больше всего вариантов для выбора у разработчиков, которые программируют на Visual C++.
Затем нужно определиться с выбором устройства USB HID (если еще его у Вас нет). Дешевый и удобный вариант, для которых есть готовые примеры firmware USB HID - это макетные платы AVR-USB162, AVR-USB162MU, AVR-USB-MEGA16 (см. [4]). Для заливки прошивки firmware в эти платы не нужен программатор, firmware заливается в память чипа через USB бутлоадер. Для макетных плат AVR-USB162 и AVR-USB162MU можно взять готовые примеры кода USB HID от Atmel и из библиотеки LUFA (см. [10]), а для макетной платы AVR-USB-MEGA16 - из библиотеки V-USB (см. [6]).
[Ссылки]
1. 130330USBHID.zip - примеры исходного кода, бинарники (.exe) и прошивки firmware, связанные с использованием описанных в статье библиотек. 2. Пример работы с USB HID из Windows DDK. 3. AVR-USB162: где найти рабочие примеры кода firmware и ПО хоста. 4. Макетные платы с интерфейсом USB. 5. Lightpack: система AMBILIGHT на мониторе домашнего компьютера. 6. V-USB, википедия site:ru.wikipedia.org. 7. AVR-USB-MEGA16: управление устройством USB из GCC, Visual Studio CPP, VB6, Python, Delphi. 8. Разработка устройства USB - как начать работу с библиотеками AVR USB (V-USB) и libusb. 9. LibUSB wiki site:libusb.org. 10. LUFA - бесплатная библиотека USB для микроконтроллеров Atmel AVR. 11. libusb-win32 site:sourceforge.net - ссылки на закачку релизов библиотеки libusb. 12. Библиотека HID USB Library для Visual Studio .Net (C#, Visual Basic). 13. LibUsbDotNet site:libusbdotnet.sourceforge.net - порт библиотеки libusb, оформленный в виде классов C# (специально для использования совместно с Microsoft .NET). 14. Работа с Generic HID Class на платформе Windows PC. 15. USB HID регулятор вращения для компьютерных вентиляторов. 16. Rayshobby HIDSerialMonitor Processing host software site:github.com. |
Комментарии
microsin: давно дело было, поэтому попробовать и описать подробно не выйдет. Но поверьте, там описывать нечего - тупо открыл готовый проект и тупо нажал на кнопку компиляции. Даже настройки никакие не менял и не смотрел. Почитайте доку к лайтпаку, там должен быть расписан процесс получения бинарников, и его подводные камни. По крайней мере во всех уважающих себя Open Source проектах так обычно делают.
RSS лента комментариев этой записи