Как использовать библиотеку libusb в Visual Studio (управление макеткой AVR-USB-MEGA16)
Написал microsin   
11.05.2009

В этой статье описана простая демонстрационная программа, показывающая, как вызывать и использовать функции библиотеки 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). AVR-USB теперь переименовали в V-USB, и пакет примеров можно свободно скачать с сайта компании Objective Development, см. ссылку [2]. Русифицированный пакет библиотеки V-USB можно также скачать по ссылке [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).

Проект можно скачать здесь - http://microsin.ru/Download.cnt/avr/set-led-gui.zip. Список файлов проекта и их краткое описание:
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 

[Ссылки]

1. Библиотека libusb (используется для ПО хоста).
2. Версии библиотеки V-USB на английском языке с сайта Objective Development. Библиотека V-USB, переведенная на русский язык - исходники с комментариями на русском языке и примерами (используется для firmware микроконтроллера).
3. Разработка устройства USB - как начать работу с библиотеками AVR USB и libusb.
4. Примеры, описанные в этой статье - прошивки firmware (для макетной платы AVR-USB-MEGA16 с микроконтроллерами ATmega16 и ATmega32 на все поддерживаемые частоты кварцев) с исходниками, программа для хоста (компьютера) для командной строки и GUI с исходниками.
5Макетная плата AVR-USB-MEAG16.
6Пакет библиотеки V-USB, где содержатся примеры кода как для AVR-USB-MEGA16, так и для AVR-USB-TINY45, описанные в этой статье
7Как портировать проекты V-USB с ATmega16 (ATmega32) на ATtiny45 (ATtiny85).

Последнее обновление ( 27.09.2011 )