ipod-gadget mensimulasikan perangkat iPod USB untuk mengalirkan audio digital ke perangkat/dok yang kompatibel dengan iPod. Ia berbicara iAP (Protokol Aksesori iPod) dan memulai sesi streaming audio.
Diuji pada Raspberry Pi Zero, Beaglebone Black dan Nexus 5 (kernel linux jalur utama) dengan receiver Onkyo HT-R391 sebagai perangkat host (lebih banyak perangkat host yang perlu diuji). Harus bekerja pada perangkat apa pun yang menjalankan Linux 4.x (dikompilasi dengan konfigurasi gadget usb) dan memiliki port USB yang mendukung mode periferal.
Ini terdiri dari dua bagian - modul kernel linux dan aplikasi klien (golang).
Modul kernel menangani sisi gadget perangkat USB. Sebuah iPod, ketika dicolokkan ke dok, menghadirkan konfigurasi USB dengan 2 antarmuka:
Modul kernel membuat kartu audio ALSA baru "iPodUSB" untuk pemutaran audio dan perangkat iap0 char untuk komunikasi iAP.
Driver gadget diaktifkan ketika perangkat karakter iap0 dibuka dan dibatalkan pendaftarannya ketika ditutup.
Aplikasi klien berbicara ke perangkat host melalui iAP dengan membaca/menulis paket dari/ke perangkat karakter /dev/iap0. Ini menangani otentikasi dan mengaktifkan streaming audio sehingga perangkat ALSA dapat digunakan untuk pemutaran.
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
Periksa pesan dari dmesg
dan verifikasi bahwa perangkat /dev/iap0
tersedia.
Ikuti petunjuknya di sini: https://github.com/oandrew/ipod
./ipod -d serve -w /tmp/ipod.trace /dev/iap0
Sekarang Anda dapat membuka terminal lain dan menguji pemutarannya!
speaker-test -D plughw:CARD=iPodUSB,DEV=0 -c 2 -r 44100
Beri tahu saya jika Anda memiliki masalah.
Lampirkan file jejak (misalnya /tmp/ipod.trace
di atas) ke masalah tersebut.
CATATAN: saat ini hanya berfungsi jika perangkat host tidak mengautentikasi iPod (biasanya hanya iPod yang mengautentikasi perangkat host dan tidak masalah).