ipod-gadget は、iPod USB デバイスをシミュレートして、デジタル オーディオを iPod 互換デバイス/ドックにストリーミングします。 iAP(iPod アクセサリ プロトコル)を話し、オーディオ ストリーミング セッションを開始します。
Onkyo HT-R391 レシーバーをホストデバイスとして使用し、Raspberry Pi Zero、Beaglebone Black、および Nexus 5 (メインライン Linux カーネル) でテスト済み (さらに多くのホストデバイスをテストする必要があります)。 Linux 4.x (USB ガジェット configfs でコンパイル) を実行し、ペリフェラル モードをサポートする USB ポートを備えたデバイスで動作するはずです。
Linux カーネル モジュールとクライアント アプリ (golang) の 2 つの部分で構成されます。
カーネル モジュールは USB デバイス ガジェット側を処理します。 iPod をドックに接続すると、次の 2 つのインターフェイスを備えた USB 構成が表示されます。
カーネル モジュールは、オーディオ再生用の新しい ALSA オーディオ カード「iPodUSB」と、iAP 通信用の iap0 char デバイスを作成します。
ガジェット ドライバーは、キャラクター デバイス iap0 が開かれるとアクティブ化され、閉じられると登録が解除されます。
クライアント アプリは、/dev/iap0 キャラクター デバイスとの間でパケットの読み取り/書き込みを行うことにより、iAP 経由でホスト デバイスと通信します。 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 のみがホスト デバイスを認証しますが、これは問題ありません)。