ipod-gadget имитирует USB-устройство iPod для потоковой передачи цифрового звука на iPod-совместимые устройства/док-станции. Он использует iAP (протокол аксессуаров для iPod) и запускает сеанс потоковой передачи звука.
Протестировано на Raspberry Pi Zero, Beaglebone Black и Nexus 5 (основное ядро Linux) с ресивером Onkyo HT-R391 в качестве хост-устройства (необходимо протестировать больше хост-устройств). Должно работать на любом устройстве под управлением Linux 4.x (скомпилированном с помощью конфигураций USB-гаджета) и имеющем порт USB, поддерживающий периферийный режим.
Он состоит из двух частей — модуля ядра Linux и клиентского приложения (golang).
Модуль ядра заботится о стороне гаджета USB-устройства. iPod, подключенный к док-станции, имеет конфигурацию USB с двумя интерфейсами:
Модуль ядра создает новую звуковую карту ALSA «iPodUSB» для воспроизведения звука и символьное устройство iap0 для связи iAP.
Драйвер гаджета активируется при открытии символьного устройства iap0 и отменяется при его закрытии.
Клиентское приложение взаимодействует с хост-устройством через iAP, читая/записывая пакеты с/на символьное устройство /dev/iap0. Он обрабатывает аутентификацию и активирует потоковое аудио, чтобы устройство ALSA можно было использовать для воспроизведения.
git clone https://github.com/oandrew/ipod-gadget.git
cd ipod-gadget/gadget
make
# or cross compiling
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- KERNEL_PATH=/home/andrew/pi-linux
#load the module
modprobe libcomposite
insmod g_ipod_audio.ko
insmod g_ipod_hid.ko
insmod g_ipod_gadget.ko [swap_configs=0] [product_id=0x1297]
#optional params
swap_config: swap USB configurations.
Might be useful when the dock sees only the Mass Storage configuation.
product_id: override the usb product id.
See doc/apple-usb.ids for the list of ids
Проверьте сообщения от dmesg
и убедитесь, что устройство /dev/iap0
доступно.
Следуйте инструкциям здесь: https://github.com/oandrew/ipod.
./ipod -d serve -w /tmp/ipod.trace /dev/iap0
Теперь вы можете открыть другой терминал и протестировать воспроизведение!
speaker-test -D plughw:CARD=iPodUSB,DEV=0 -c 2 -r 44100
Дайте мне знать, если у вас возникнут какие-либо проблемы.
Прикрепите файл трассировки (например, /tmp/ipod.trace
выше) к проблеме.
ПРИМЕЧАНИЕ. В настоящее время это работает только в том случае, если хост-устройство не аутентифицирует iPod (обычно только iPod аутентифицирует хост-устройство, и это нормально).