Программирование AVR: работа с USB Как использовать библиотеку libusb в Visual Studio Mon, January 23 2017  

Поделиться

нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Как использовать библиотеку 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).

 

Комментарии  

 
0 #6 help me 12.06.2011 23:01
Hello sir!

What type of circuits and firmware used for this "set-led-gui" on VC++6.0?.
You can list the details are not?
Much grateful to you

Какие схемы и прошивки для использования "для установки LED-GUI на VC + +6.0" это?
Вы можете просмотреть детали нет?
Много благодарен вам

microsin: firmware here: http://www.obdev.at/products/vusb/index.html, press "Download" and download, use example exampleshid-custom-rqfirmware, schematics see in fold circuits. Or download all from link [4], schematic see here - http://microsin.ru/images/stories/hard/avr-usb-mega16-sch.jpg
Цитировать
 
 
0 #5 дмитрий 03.04.2011 19:20
Правильно я понимаю, что эта программа будет работать со стандартной прошивкой с которой вы поставляете макетную плату и в контроллер ничего прошивать не надо?

microsin: Вы поняли почти правильно, но нужно кое-что уточнить:
1. Да, в макетную плату по умолчанию кроме бутлоадера USBasp, прошита еще и прошивка, работа с которой описана в этой статье.
2. Эту прошивку ни в коем случае нельзя назвать "стандартной", и она ничего, кроме как управлять светодиодом и читать его состояние, не умеет. Только простейший пример использования макетной платы AVR-USB-MEGA16, и все.
3. Поигравшись с этой прошивкой, Вам все равно придется записать в чип другую программу. Это можно сделать как через программатор, так и через бутлоадер USBasp.
Цитировать
 
 
0 #4 Дмитрий 27.03.2011 22:31
А есть ли пример какой-нибудь простейшей программы (например то же зажигание светодиода) написанной на Borland C++ Builder ???

microsin: проекта на Borland C++ Builder нет, к сожалению. Научитесь загружать в память DLL библиотеки libusb и получать указатели на её функции. После этого сможете взять код любого примера на C.
Цитировать
 
 
0 #3 andrey 16.10.2010 23:54
Могли бы Вы дать firmware предназначенную для ATmega32, которую зашиваете в качестве тестовой. У меня не получается перекомпилирова ть, а начальную я не сохранил.

microsin: напишите на email (см. Контакты), все что надо вышлю.
Цитировать
 
 
0 #2 andrey 15.10.2010 15:02
Подойдет ли прошивка(и) firmware предназначенные для ATmega16, для макетной платы с установленной ATmega32?

microsin: для общего случая - не подойдут, так как у ATmega16 и ATmega32 отличаются таблицы векторов прерываний. Некоторые прошивки могут подойти и будут работать, и их большинство. Но лучше все-таки не испытывать судьбу, а просто перекомпилирова ть на другой тип микроконтроллер а, это очень легко сделать.
Цитировать
 
 
0 #1 Sweed 30.08.2010 17:47
А возможно использовать данные библиотеки для Borland C++ Builder?

microsin: можно, конечно. И не только для Borland C++ Builder, но и для любой другой системы программировани я. Нужно всего лишь загрузить dll библиотеки libusb, и получить указатели на её функции.
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Top of Page