ipod gadget
1.0.0
ipod-gadget 模拟 iPod USB 设备,将数字音频流传输到 iPod 兼容设备/底座。它使用 iAP(iPod 配件协议)并启动音频流会话。
在 Raspberry Pi Zero、Beaglebone Black 和 Nexus 5(主线 Linux 内核)上进行测试,并以 Onkyo HT-R391 接收器作为主机设备(更多主机设备需要测试)。应该适用于运行 Linux 4.x(使用 usb gadget configfs 编译)并具有支持外设模式的 USB 端口的任何设备。
它由两部分组成 - Linux 内核模块和客户端应用程序 (golang)。
内核模块负责 USB 设备小工具端。当 iPod 插入底座时,会呈现带有 2 个接口的 USB 配置:
内核模块创建一个新的 ALSA 音频卡“iPodUSB”用于音频播放,并创建 iap0 字符设备用于 iAP 通信。
当字符设备 iap0 打开时,小工具驱动程序将被激活;当字符设备 iap0 关闭时,小工具驱动程序将被取消注册。
客户端应用程序通过 iAP 通过从 /dev/iap0 字符设备读取/写入数据包来与主机设备通信。它处理身份验证并激活音频流,以便 ALSA 设备可以用于播放。
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
检查来自dmesg
的消息并验证设备/dev/iap0
是否可用。
按照此处的说明进行操作:https://github.com/oandrew/ipod
./ipod -d serve -w /tmp/ipod.trace /dev/iap0
现在您可以打开不同的终端并测试播放!
speaker-test -D plughw:CARD=iPodUSB,DEV=0 -c 2 -r 44100
如果您有任何问题,请告诉我。
将跟踪文件(例如上面的/tmp/ipod.trace
)附加到问题中。
注意:目前,只有当主机设备不验证 iPod 时,它才起作用(通常只有 iPod 验证主机设备,这没问题)。