Сборка USB HID под BeagleBone

2462ababc9d346aaa870f991f2aec34a.jpg
В одной из публикаций мы писали о настройке китайского USB-WiFi для Beagledone .Сегодня мы хотим привести способ сборки собственного класса управления устройством через HID-протокол. За основу была взята библиотека hidapi, а затем произведен способ кросс-компиляции под beaglebone и сборка тестовой программы для работы с USB-устройством.

Один из самых простых и надежных способов сделать управление по USB в Linux — это использование библиотеки libusb-1.0. Hidapi же является «надстройкой» над libusb, и служит для легкого подключения hid-устройств к программируемому девайсу. Если вы собираете на «чистой» системе hidapi, то придется отдельно собирать libusb и только потом собирать hidapi. В этой статье рассмотрим сборку именно hidapi. Заглянув вперед, скажем, что android ndk отказалась собирать hidapi без вмешательства.

Для начала работы мы скачали библиотеку и распаковали ее в рабочую директорию, для сборки и тестирования использовали дистрибутив Linux Mint. В распакованной папке (в нашем случае это hidapi-0.7.0) следует ознакомиться с инструкциями readme.txt. Поскольку в BeagleBone используется Linux, то мы проходим в папку hidapi-0.7.0/linux и встречаем там очередной файл readme.txt с инструкциями по сборке под Linux. Коротко, библиотека предлагает нам два варианта сборки: с использованием hid-libusb.c или с hid.c. В первом случае используется библиотека libusb, которую необходимо установить в систему. Во втором случае используется hidraw, требующая libudev-devel.

Сразу отметим, что мы попробовали собрать оба варианта; удачно собралась только hid-libusb.c, а hid.c выдавал различного рода ошибки. Далее разработчики предлагают нам поставить пакет libusb-1.0–0-dev или libudev-devel. Установив пакеты, можно собирать проект в папке linux. Выполняем make, собирается проект hidapi-0.7.0/hidtest/, и собирается как раз в нашу папку hidapi-0.7.0/linux. В командной строке можно видеть команды компилятора. Далее, суть сборки под BeagleBone заключается в подставлении кросс-компилятора вместо штатного gcc и g++ соответственно. Но есть одна тонкость, если взглянуть во-внутрь мейкфайла, то там можно увидеть

строчки

LIBS= `pkg-config libusb-1.0 libudev --libs` -lpthread
INCLUDES?= -I…/hidapi `pkg-config libusb-1.0 --cflags`


Эти строчки добавляют пути к библиотекам (includes), и задают ключи сборки библиотек (libs) динамически. Чтобы понять, что же подгружает скрипт в сборку, можно выполнить в консоли: `pkg-config libusb-1.0 libudev --libs` и `pkg-config libusb-1.0 --cflags`. При сборке софта под BeagleBone мы не меняли пути к include (там только файлы заголовков .h, причем кросс-платформенные), а либы прописывали напрямую без pkg-config. Возможно, это не самое удачное решение, но все же рабочее.

В общем виде, это выглядит

следующим образом

INCLUDEPATH+=/usr/include/libusb-1.0
LIBS += -lusb-1.0 -ludev -g
hidapi.h добавить в папку с исходниками.
gcc -Wall -g -c -I/usr/include/libusb-1.0 hid-libusb.c -o hid-libusb.o`


Исправляем мейклфайл прямым включением библиотек, прописываем кросс-компилятор и собираем программу под BeagleBone. На этом все, программа для работы с USB HID устройством готова.

© Habrahabr.ru