Использование beaglebone black в качестве клавиатурного устройства.
Всем Привет
В настоящее время я работаю над проектом сенсорной клавиатуры, где BBB отображает изображения на экране, получает сенсорные события из сенсорной панели и должен отправлять их на главный компьютер в качестве ключевых событий. Таким образом, BBB должен представить себя как скрытое (клавиатурное) устройство для ПК.
То, что я должен сделать, это написать программу, которая работает на BeagleBone, которая должна делать следующие вещи:
- Берет изображения из своей флэш-памяти и раскладывает их на экране;
- Захватывает выходные данные сенсорной панели и переводит их в соответствующие ключевые события.
- И наконец, он должен подключиться к контроллеру USB-устройства и отправить эти ключевые события на ПК.
Аппаратное обеспечение присутствует. BBB имеет USB On-The-Go, который можно использовать в качестве контроллера USB-устройства. По умолчанию он настроен как USB-устройство Ethernet и устройство массового хранения данных, и эти функции действительно работают.
До сих пор я написал сценарий, который настраивает USB OTG-устройство как HID, но что теперь?!
Я действительно не знаю, как продолжать. Я даже не уверен, что мой сценарий настраивает все так, как должно быть. Примеры (таких скриптов) Я посмотрел оттуда, были несколько устаревшими.
Скрипт заполняет такие данные, как VID и PID, в файлы, созданные configfs, и создает некоторые новые файлы и каталоги в соответствии с примерами, которые я видел. Только последняя команда терпит неудачу:
ls: write error: Device or resource busy
Именно здесь должен быть упомянут нужный модуль ядра, чтобы configfs загрузил его. Но модуль (usb_f_hid) действительно загружается! Вот я и подумал, что ошибка-это не так уж и важно?!Я ожидал, что файл устройства появится в /dev после запуска скрипта, поэтому я могу открыть его и начать общаться с контроллером USB-устройства. Но я не смог найти такой файл устройства. он должен быть назван "usb0", но ни одно устройство, зарегистрированное с префиксом "usb", не присутствует до или после запуска скрипта.
В приведенном работает на Debian
Linux beaglebone 4.4.14-bone11 #1 Thu Jul 14 08:51:47 EEST 2016 armv7l GNU/Linux
Не могли бы вы указать мне на некоторые ресурсы, которые объясняют процесс использования BBB как HID или что-то в этом роде.
Кроме того, как я могу правильно удалить сетевую функциональность USB?
Заранее большое спасибо.
Что я уже пробовал:
Вот и весь сценарий. Он выполняется следующим образом
root
.Configfs уже смонтирован, а модуль libcomposite загружен при запуске, так что мне не нужно делать это в скрипте.
mkdir /sys/kernel/config/usb_gadget/usb_keyboard mkdir /sys/kernel/config/usb_gadget/usb_keyboard/configs/c.1 mkdir /sys/kernel/config/usb_gadget/usb_keyboard/functions/hid.usb0 echo "1" > /sys/kernel/config/usb_gadget/usb_keyboard/functions/hid.usb0/protocol # set the HID protocol echo "1" > /sys/kernel/config/usb_gadget/usb_keyboard/functions/hid.usb0/subclass # set the device subclass echo "8" > /sys/kernel/config/usb_gadget/usb_keyboard/functions/hid.usb0/report_length # REPORT_LENGTH = 8 set the byte length of HID reports cat /home/debian/report_desc.bin > /sys/kernel/config/usb_gadget/usb_keyboard/functions/hid.usb0/report_desc mkdir /sys/kernel/config/usb_gadget/usb_keyboard/strings/0x409 mkdir /sys/kernel/config/usb_gadget/usb_keyboard/configs/c.1/strings/0x409 echo "0x37f2" > /sys/kernel/config/usb_gadget/usb_keyboard/idVendor echo "0x0001" > /sys/kernel/config/usb_gadget/usb_keyboard/idProduct echo "0x03" > /sys/kernel/config/usb_gadget/usb_keyboard/bDeviceClass echo "71cb32dc0e49d782e9d1" > /sys/kernel/config/usb_gadget/usb_keyboard/strings/0x409/serialnumber echo "**** ***** Technology Ltd." > /sys/kernel/config/usb_gadget/usb_keyboard/strings/0x409/manufacturer echo "*** Keyboard" > /sys/kernel/config/usb_gadget/usb_keyboard/strings/0x409/product echo "Custom USB Keyboard" > /sys/kernel/config/usb_gadget/usb_keyboard/configs/c.1/strings/0x409/configuration echo "120" > /sys/kernel/config/usb_gadget/usb_keyboard/configs/c.1/MaxPower ln -s /sys/kernel/config/usb_gadget/usb_keyboard/functions/hid.usb0 /sys/kernel/config/usb_gadget/usb_keyboard/configs/c.1 ls /sys/class/udc/ > /sys/kernel/config/usb_gadget/usb_keyboard/UDC #This fails with "ls: write error: Device or resource busy"
Контетнты из
/sys/class/udc/
это не то, что они должны быть в соответствии с инструкциями по настройке configfs HID. Там должен быть список модулей, которые нужно загрузить. Вместо этого есть вот это "musb-hdrc.0.auto
- симлинк. Кроме того, я погуглил свой a** off, пытаясь найти еще какую-то информацию по этому вопросу, но ничего не вышло.