Нашел интересный проект по подключению внешних USB-карт к устройствам с Android через платформу-посредник под управлением Embeded Linux.
На основе последней создается эмулятор док-станции c открытым кодом, поддерживающий виртуальное ALSA Loopback устройство между Андроид-системой и звуковой картой для взаимодействия по протоколу Android Open Accessory Protocol 2 (AOA2), поддержка которого должна быть у всех Андроидов от версии >= 4.1 и выше. Также допускается тонкая настройка скриптов для взаимодействия с кнопками на руле через подключение платы-посредника к CAN-шине автомобиля.
В качестве отладочной платы рекомендуется BeagleBone Black, но схема может быть реализована и на более дешевых Raspberry Pi.
Потенциально возможна организация и полноценного DSP в рамках Embeded Linux, но для этого необходимо организовать достаточное количество выходных аудиоканалов, а многоканальные USB звуковые карты либо дороги, либо недостаточно хорошо поддерживаются драйверами для Linux. Объединение нескольких USB-интерфейсов в одно виртуальное многоканальное устройство возможно с помощью плагина ALSA dmix при условии, что ядро собрано с поддержкой SysV и семафоров, что уже является "тонким местом" всех устройств на процессорах ARM ( http://www.doulos.com/knowhow/arm/Hi...ng_Semaphores/ ). Возможно, для этих целей практичнее использовать платформы Intel Galileo или Edison на процессорах x86, но достаточно глубоко эту тему не изучал. Но было бы интересно сравнить, по крайней мере в моем распоряжении есть и BeagleBone Black, и Intel Galileo, а также некоторое количество звуковых USB-карточек.
https://github.com/SquidIndustries/AndroidCarAudioDock
Перевод на русский и собственные дополнения дам по мере возможности в ближайшее время.
AndroidCarAudioDock
Software for running a USB audio dock using Android Open Accessory Protocol 2.
USB audio over AOA2 is supported on all Android devices with OS version 4.1 and up.
Current Features
- supports all Android devices with OS version 4.1 and up
- Creates alsaloop back device between Android device and sound card
- Sends Play/Pause command to device. This should cause last open APP to start playing
- Track/Play/Pause via steering wheel buttons on BMW e90. Commands are recieved via cars k-can bus (only supported on Beagebone Black)
Limitations/issues
- USB 2.0 is limited to 500mA charge current by the USB standard. Some third party kernels for Android devices have the ability to bypass this limit.
- project is a work in progress. I try to keep code in repository functional.
Installation
OS
Beaglebone Black
if on beaglebone black, use Debian 7.2 image from armf.com
I used this version
Install to device and boot up into os using these directions.
Then setup module dependancies... I had to do this, later versions may not require it.
Код:sudo depmod -a -v "3.8.13-bone30"Other
From this point on, these directions should work on any debian based linux installation. You may need to remove pulseaudio and install alsa if its installed though.
Update & Install Necessary Software
Update OS
Код:sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade # Install git & alsa sudo apt-get install git alsa-base alsa-utils # Give debian user permission to use audio device. sudo adduser debian audio # Reboot or log out of all sessions and then log in again so new permissions take hold sudo rebootInstall pyusb
Код:git clone https://github.com/walac/pyusbcd pyusbsudo python setup.py installInstall AndroidCarAudioDock
Код:cd ~/ git clone https://github.com/SquidIndustries/AndroidCarAudioDock.git cd AndroidCarAudioDock sudo ./install.shSetup CAN bus
Suggested hardware
- Beaglebone Black
- PCM2704 based USB DAC
- Small 4 Port USB hub
- Greater than or equal to 1A USB power adapter
- Logic supply beagle bone black case
Picture of my setup. I have cut and soldered all the cords to shorter lengths.
Reference
Полезные темы:
Социальные закладки