ipod-gadget simuliert ein iPod-USB-Gerät, um digitales Audio an iPod-kompatible Geräte/Docks zu streamen. Es spricht iAP (iPod Accessoire Protocol) und startet eine Audio-Streaming-Sitzung.
Getestet auf Raspberry Pi Zero, Beaglebone Black und Nexus 5 (Haupt-Linux-Kernel) mit Onkyo HT-R391-Empfänger als Host-Gerät (weitere Host-Geräte müssen getestet werden). Sollte auf jedem Gerät funktionieren, auf dem Linux 4.x läuft (kompiliert mit USB-Gadget-Konfigurationen) und das über einen USB-Anschluss verfügt, der den Peripheriemodus unterstützt.
Es besteht aus zwei Teilen – dem Linux-Kernelmodul und der Client-App (Golang).
Das Kernel-Modul kümmert sich um die Seite des USB-Geräts. Wenn ein iPod an eine Dockingstation angeschlossen ist, verfügt er über eine USB-Konfiguration mit zwei Schnittstellen:
Das Kernel-Modul erstellt eine neue ALSA-Audiokarte „iPodUSB“ für die Audiowiedergabe und ein iap0-Char-Gerät für die iAP-Kommunikation.
Der Gadget-Treiber wird beim Öffnen des Zeichengeräts iap0 aktiviert und beim Schließen abgemeldet.
Die Client-App kommuniziert über iAP mit dem Host-Gerät, indem sie Pakete vom/zum Zeichengerät /dev/iap0 liest/schreibt. Es übernimmt die Authentifizierung und aktiviert das Audio-Streaming, sodass das ALSA-Gerät für die Wiedergabe verwendet werden kann.
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
Überprüfen Sie die Nachrichten von dmesg
und stellen Sie sicher, dass das Gerät /dev/iap0
verfügbar ist.
Befolgen Sie die Anweisungen hier: https://github.com/oandrew/ipod
./ipod -d serve -w /tmp/ipod.trace /dev/iap0
Jetzt können Sie ein anderes Terminal öffnen und die Wiedergabe testen!
speaker-test -D plughw:CARD=iPodUSB,DEV=0 -c 2 -r 44100
Lassen Sie mich wissen, wenn Sie irgendwelche Probleme haben.
Hängen Sie die Trace-Datei (z. B. /tmp/ipod.trace
oben) an das Problem an.
HINWEIS: Derzeit funktioniert es nur, wenn das Host-Gerät den iPod nicht authentifiziert (normalerweise authentifiziert nur der iPod das Host-Gerät, was in Ordnung ist).