Как использовать библиотеку libusb в Visual Studio Печать
Добавил(а) microsin   

В этой статье описана простая демонстрационная программа, показывающая, как вызывать и использовать функции библиотеки libusb-Win32 (находящиеся в libusb0.dll) из программы на C++, написанной в MS Visual Studio.

Для работы программа нуждается в установке библиотеки libusb для Windows, которую закачать можно по ссылке [1] (установка никаких вопросов и затруднений не вызывает). Программа управляет светодиодом на макетной плате AVR-USB-MEGA16, см. ссылку [5], в которую прошит firmware из примера hid-custom-rq пакета V-USB компании Objective Development (это firmware работает как устройство USB HID). Пакет примеров V-USB можно свободно скачать с сайта компании Objective Development, см. ссылку [2]. Прошивка firmware находится в файле examples\hid-custom-rq\firmware\main.hex архива пакета (пакет русской версии библиотеки).

Программа сделана на основе диалогового окна, и её шаблон подготовлен мастером Visual Studio в режиме "Dialog-based MFC application". Алгоритм работы программы прост - при запуске читается состояние светодиода на макетной плате. Если он горит, ставится галочка в чекбоксе "Светодиод горит", а если нет, то галочка снимается. Если пользователь меняет состояние галочки, то светодиод соответственно зажигается или гаснет.

AVR-USB-MEGA16-switching.gif

Принцип работы программы и код управления взят из консольной программы хоста, файлы set-led.c и opendevice.c (находящиеся в том же пакете примеров, папка examples\hid-custom-rq\commandline\). Добавлен только код загрузки библиотеки libusb0.dll) и инициализация указателей на используемые в ней библиотечные функции, что реализовано в модуле libusb_func.cpp. Идея загрузки библиотеки и указателей на функции взята из документа "HID device coding example.pdf", где имеется пример работы с HID-устройством USB, но через другую библиотеку - hid.dll (эта библиотека входит в состав Windows).

Проект можно скачать по ссылке [6]. Список файлов проекта и их краткое описание:
doc\"HID device coding example.pdf" пример загрузки dll и использование функций из неё
Debug\set-led-gui.exe скомпилированное в режиме Debug приложение
Debug\set-led-gui.exe скомпилированное в режиме Release приложение
res\*.* файлы ресурсов проекта
libusb_func.h заголовочный файл для загружаемых из libusb0.dll функций, а также объявление функции LoadLibusbFuncFromDLL, загружающей libusb0.dll и инициализирующей указатели на функции.
libusb_func.cpp код LoadLibusbFuncFromDLL и объявление необходимых переменных.
opendevice.cpp файл, взятый почти без изменений из консольного ПО хоста hid-custom-rq\commandline. Здесь находятся вспомогательные функции для открытия устройства.
opendevice.h заголовочный файл для opendevice.cpp.
ReadMe.txt текст, который Вы сейчас читаете
requests.h заголовочный файл, взятый без изменения из examples\hid-custom-rq\firmware\ пакета AVR-USB. Тут описаны используемые запросы USB
Resource.h заголовочный файл Visual Studio для использования ресурсов
set-led-gui.aps один из файлов проекта Visual Studio
set-led-gui.cpp файл, сгенерированный Visual Studio
set-led-gui.h заголовочный файл, сгенерированный Visual Studio
set-led-gui.ncb один из файлов проекта Visual Studio
set-led-gui.rc файл описания ресурсов, сгенерированный Visual Studio
set-led-gui.sln файл проекта Visual Studio - "файл решений"
set-led-gui.suo один из файлов проекта Visual Studio
set-led-gui.vcproj основной файл проекта Visual Studio
set-led-guiDlg.cpp файл описания функционала диалогового окна. Здесь сосредоточен основной код приложения
set-led-guiDlg.h заголовочный файл, сгенерированный Visual Studio
stdafx.cpp файл, сгенерированный Visual Studio
stdafx.h заголовочный файл, сгенерированный Visual Studio
usb.h файл из пакета libusb, в котором я позаимствовал определения библиотечных функций. Функции, загружаемые из libusb0.dll, в этом файле закомментированы
usbconfig.h заголовочный файл, взятый без изменения из examples\hid-custom-rq\firmware\. В нем определены основные параметры устройства USB HID, с которым работает программа (Vendor ID, Product ID и др.).

[Управление светодиодом AVR-USB-TINY45]

Аналогичный пример firmware для управления макетной платой AVR-USB-TINY45 можно скачать по ссылке [6]. Оно реализует точно такое же USB-устройство, как и firmware AVR-USB-MEGA16, так что ПО хоста одинаковое для обеих макетных плат (исходный код для ATmega32 портирован на микроконтроллер ATtiny85).

AVR-USB-TINY45-switching.gif

[Драйвер фильтра (filter driver), библиотека libusb]

ПО хоста, описанное в этой статье, требует установку библиотеки libusb и специального драйвера фильтра. Без драйвера фильтра ПО хоста не увидит USB-устройство и не сможет управлять им. Это относится почти ко всем программам, написанным на основе библиотеки LibUsb. Подробно установка библиотеки и драйвера фильтра описана в статье [3].

[Ссылки]

1. LibUSB download site:sourceforge.net - библиотека LibUSB (используется для ПО хоста).
2. Download V-USB site:obdev.at - версии V-USB на английском языке с сайта Objective Development. avr-usb-russian.rar - русифицированная библиотека V-USB, исходный код примеров и библиотеки с комментариями, документацией на русском языке (используется для firmware микроконтроллера).
3. Разработка устройства USB - как начать работу с библиотеками AVR USB и libusb.
4. Примеры, описанные в этой статье - прошивки firmware (для макетной платы AVR-USB-MEGA16 с микроконтроллерами ATmega16 и ATmega32 на все поддерживаемые частоты кварцев) с исходниками, программа для хоста (компьютера) для командной строки и GUI с исходниками.
5. Макетная плата AVR-USB-MEAG16.
6. 131008howto-use-libusb.zip - исходный код firmware и ПО хоста примеров, описанных в статье.
7. Как портировать проекты V-USB с ATmega16 (ATmega32) на ATtiny45 (ATtiny85).