ipod-gadget simula um dispositivo iPod USB para transmitir áudio digital para dispositivos/docks compatíveis com iPod. Ele fala iAP (Protocolo de Acessórios do iPod) e inicia uma sessão de streaming de áudio.
Testado em Raspberry Pi Zero, Beaglebone Black e Nexus 5 (kernel Linux principal) com receptor Onkyo HT-R391 como dispositivo host (mais dispositivos host precisam ser testados). Deve funcionar em qualquer dispositivo que execute Linux 4.x (compilado com usb gadget configfs) e tenha uma porta USB que suporte modo periférico.
Consiste em duas partes - módulo do kernel Linux e aplicativo cliente (golang).
O módulo do kernel cuida do lado do gadget do dispositivo USB. Um iPod, quando conectado a um dock, apresenta uma configuração USB com 2 interfaces:
O módulo do kernel cria uma nova placa de áudio ALSA "iPodUSB" para reprodução de áudio e um dispositivo iap0 char para comunicações iAP.
O driver do gadget é ativado quando o dispositivo de personagem iap0 é aberto e seu registro é cancelado quando é fechado.
O aplicativo cliente se comunica com o dispositivo host por iAP lendo/gravando pacotes de/para o dispositivo de caracteres /dev/iap0. Ele cuida da autenticação e ativa o streaming de áudio para que o dispositivo ALSA possa ser usado para reprodução.
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 as mensagens do dmesg
e verifique se o dispositivo /dev/iap0
está disponível.
Siga as instruções aqui: https://github.com/oandrew/ipod
./ipod -d serve -w /tmp/ipod.trace /dev/iap0
Agora você pode abrir um terminal diferente e testar a reprodução!
speaker-test -D plughw:CARD=iPodUSB,DEV=0 -c 2 -r 44100
Deixe-me saber se você tiver algum problema.
Anexe o arquivo de rastreamento (por exemplo, /tmp/ipod.trace
acima) ao problema.
NOTA: atualmente funciona apenas se o dispositivo host não autenticar o iPod (normalmente apenas o iPod autentica o dispositivo host, o que é bom).