iPod-gadget simule un périphérique iPod USB pour diffuser de l'audio numérique vers des appareils/stations d'accueil compatibles iPod. Il parle iAP (iPod Accessories Protocol) et démarre une session de streaming audio.
Testé sur Raspberry Pi Zero, Beaglebone Black et Nexus 5 (noyau Linux principal) avec le récepteur Onkyo HT-R391 comme périphérique hôte (davantage de périphériques hôtes doivent être testés). Devrait fonctionner sur n'importe quel appareil exécutant Linux 4.x (compilé avec les configurations de gadget USB) et disposant d'un port USB prenant en charge le mode périphérique.
Il se compose de deux parties : le module du noyau Linux et l'application client (golang).
Le module noyau s'occupe du côté gadget du périphérique USB. Un iPod, lorsqu'il est branché sur une station d'accueil, présente une configuration USB avec 2 interfaces :
Le module du noyau crée une nouvelle carte audio ALSA "iPodUSB" pour la lecture audio et un périphérique de caractères iap0 pour les communications iAP.
Le pilote du gadget est activé lorsque le périphérique de caractères iap0 est ouvert et désenregistré lorsqu'il est fermé.
L'application client parle au périphérique hôte via iAP en lisant/écrivant des paquets depuis/vers le périphérique de caractères /dev/iap0. Il gère l'authentification et active le streaming audio afin que l'appareil ALSA puisse être utilisé pour la lecture.
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
Vérifiez les messages de dmesg
et vérifiez que le périphérique /dev/iap0
est disponible.
Suivez les instructions ici : https://github.com/oandrew/ipod
./ipod -d serve -w /tmp/ipod.trace /dev/iap0
Vous pouvez maintenant ouvrir un autre terminal et tester la lecture !
speaker-test -D plughw:CARD=iPodUSB,DEV=0 -c 2 -r 44100
Faites-moi savoir si vous avez des problèmes.
Joignez le fichier de trace (par exemple /tmp/ipod.trace
ci-dessus) au problème.
REMARQUE : actuellement, cela ne fonctionne que si le périphérique hôte n'authentifie pas l'iPod (généralement, seul l'iPod authentifie le périphérique hôte, ce qui est très bien).