ipod-gadget simula un dispositivo USB iPod para transmitir audio digital a dispositivos/bases compatibles con iPod. Habla iAP (Protocolo de accesorios iPod) e inicia una sesión de transmisión de audio.
Probado en Raspberry Pi Zero, Beaglebone Black y Nexus 5 (kernel de Linux principal) con el receptor Onkyo HT-R391 como dispositivo host (es necesario probar más dispositivos host). Debería funcionar en cualquier dispositivo que ejecute Linux 4.x (compilado con configuraciones de dispositivo USB) y tenga un puerto USB que admita el modo periférico.
Consta de dos partes: módulo del kernel de Linux y aplicación cliente (golang).
El módulo del kernel se encarga del lado del dispositivo USB. Un iPod, cuando se conecta a una base, presenta una configuración USB con 2 interfaces:
El módulo del kernel crea una nueva tarjeta de audio ALSA "iPodUSB" para reproducción de audio y un dispositivo de caracteres iap0 para comunicaciones iAP.
El controlador del gadget se activa cuando se abre el dispositivo de caracteres iap0 y se cancela su registro cuando se cierra.
La aplicación cliente se comunica con el dispositivo host a través de iAP leyendo/escribiendo paquetes desde/hacia el dispositivo de caracteres /dev/iap0. Maneja la autenticación y activa la transmisión de audio para que el dispositivo ALSA pueda usarse para la reproducción.
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
Verifique los mensajes de dmesg
y verifique que el dispositivo /dev/iap0
esté disponible.
Siga las instrucciones aquí: https://github.com/oandrew/ipod
./ipod -d serve -w /tmp/ipod.trace /dev/iap0
¡Ahora puedes abrir una terminal diferente y probar la reproducción!
speaker-test -D plughw:CARD=iPodUSB,DEV=0 -c 2 -r 44100
Déjame saber si tienes algún problema.
Adjunte el archivo de seguimiento (por ejemplo, /tmp/ipod.trace
arriba) al problema.
NOTA: actualmente funciona sólo si el dispositivo anfitrión no autentica el iPod (normalmente sólo el iPod autentica el dispositivo anfitrión, lo cual está bien).