LibUSB
Напишем простейшее приложение на стороне хоста, работающее с USB устройством. В качестве устройства, будем использовать мышь USB, хотя устройство может быть любым. Примеры программ для Windows и Linux. Для Windows программа создана в среде Microsoft Visual C++ 6.0 , а для Linux на С для GCС.
Проблема написания приложения для устройства USB, состоит в необходимости создания драйвера. Создание драйвера – задача не рядовая. Получается, что для изучения USB, требуется предварительно научиться писать драйвера для ОС.
Другой подход – это использовать существующие драйвера ОС. Уже говорилось о USB устройствах, имеющих архитектуру, относящуюся к определенным стандартизованным классам. Для большинства таких типов устройств уже имеются драйвера в составе установленной ОС. Например, мышь относится к классу HID , для нее имеются стандартные драйвера в ОС. Такой подход имеет право на жизнь. Через API, из своей программы обращаетесь к ОС, а она через драйвер к USB устройству. Но тогда создаваемое USB устройство должна поддерживать протокол HID. Это достаточно сложная надстройка над базовой функциональностью USB.
Оба этих метода не подходят для начинающих изучать USB. Так как быть? К счастью для новичков, имеется библиотека libusb. Первоначально она создавалась для Linux, теперь имеются порты и для Windows. Уже известная утилита lsusb использует библиотеку libusb. Эта библиотека позволяет писать прикладные программы, напрямую обращающиеся к USB устройству, устраняя необходимость использования специальных драйверов ОС.
Для работы нужно установить libusb-win32 для Windows. Эта библиотека в Windows может применяться в двух разных режимах, как обыкновенный драйвер устройства и как фильтрующий драйвер для уже установленных устройств.
В первом случае, необходимо удалить USB устройство, все его драйвера и скрытые записи об установке как описывалось ранее, если они конечно имелись. При подключении USB устройства Windows попросит драйвер, выдать ей файл INF , который заранее заготовили для этого устройства. В составе пакета поставляется нехитрый мастер, с помощью которого, легко создать требуемый INF файл. Теперь при всяком подключении разработанного устройства, она будет использовать libusb-win32 как полноценный драйвер. Из своей прикладной программы, обращаясь к libusb-win32, будете работать с разработанным USB устройством.
Второй вариант, как фильтрующий драйвер. В этом случае никаких файлов INF не нужно, в этом режиме можно работать с любым USB устройством, подключенным к хосту, выбирая их по кодам производителя. Эти устройства могут быть сконфигурированы, и иметь подключенные драйвера. Есть некоторые ограничения, нельзя менять конфигурацию этих USB устройств, но в этом необходимость возникает редко. Такой режим больше рекомендуется для экспериментов при разработке. Не исключена возможность нарушения работы системы.
С сайта sourceforge.net скачайте бинарный архив, в мо.м случае, это libusb-win32-bin-1.2.6.0.zip . Архив содержит все необходимое для установки библиотеки и для разработки, в том числе утилиты для тестирования и конфигурирования.
В подкаталоге bin архива, содержатся подкаталоги для всех основных архитектур Windows. У меня Windows XP SP3 , поэтому используем каталог x86. Файл libusb0_x86.dll переименовываем в libusb0.dll и копируем в %SystemRoot%\system32. Файл libusb0.sys копируем в %SystemRoot%\system32\drivers. Подключаем мышь USB, с которой будем экспериментировать, затем запускаем установщик фильтра install-filter-win.exe и выбираем нашу мышь из списка. Далее запускаем тестовую программу testlibusb-win.exe , если все правильно работает, должны увидеть в окне дескрипторы мыши. Устанавливать фильтр нужно единожды, сведения о USB устройствах, с которыми предполагается работать, запоминаются.
Рисунок 4 |
Создайте шаблонный, консольный проект «Hello, world!» в MSVC. Затем нужно настроить этот проект, подключить заголовочный файл и статическую библиотеку среды libusb-win32. В мо.м случае, архив распакован в C:\libusb-win32 , в подкаталоге include находится заголовочный файл lusb0_usb.h , а в подкаталоге C:\libusb-win32\lib\msvc находится файл библиотеки libusb.lib. Там же можно обнаружить каталоги с библиотеками для 64-разрядных платформ.
В главном меню выбирается, «Project -> Settings…» , вкладка C/C++ , в поле ввода «Additional include directories» , ввести путь к каталогу, где лежит заголовочный файл lusb0_usb.h .
На вкладке «Link» , в поле «Object/library modules» , через пробел добавить библиотеку libusb.lib , а в поле ввода «Additional library path», добавить путь к этой библиотеке.
Посмотрите коды производителя мыши USB и подставьте в текст программы, затем откомпилируйте. Программа открывает USB устройство по кодам производителя и продукта, считывает некоторые строковые дескрипторы и выводит на экран. Запускать из командной строки. Имея работающий шаблон легко создать программу с графическим интерфейсом.
Функции usb_find_busses и usb_find_devices находят все шины хоста и все устройства на шинах и сохраняют эти сведения во внутренних структурах данных. Функция usb_get_busses возвращает ссылку на глобальную структуру, где хранятся сведения о шинах, устройствах на шинах и дескрипторах этих устройств. Описание функций библиотеки libusb дано в приложении. На момент написания материала, существовали 2 версии библиотеки, версия 0.1 и версия 1.0 . Они достаточно сильно различаются, libusb-win32 перенесена из версии 0.1 для Linux.
На рисунке 4 приведены формы проекта MSVC, для настройки среды разработки с библиотекой libusb. С сайта vk.com/protocols можно скачать готовый проект для Visual C 6.0. для Windows.
В Ubuntu для программирования требуется установить пакет libusb-dev, или установить библиотеку из исходных кодов. Для понимания работы с библиотекой необходимо знание работы со структурами и со списками структур на языке C. Для компилирования необходимо иметь на машине компилятор GCC. На мо.м компьютере была установлена версия библиотеки libusb - 0.1.12. Утилитой lsusb, посмотрите коды производителя и продукта своей мыши или иного устройства, к которому нужно подключиться. Распакуйте архив с программой для Linux в любой доступный каталог. Откройте файл c.c любым редактором, измените эти коды на коды своего USB устройства в тексте программы. Из командной строки зайдите в каталог с makefile и выполните команду make all. Запуск компилированной программы осуществлять с правами суперпользователя.
.
|