LPC2388のUSBホスト機能を使って、USBスピーカのディスクリプタの読み込みと簡単な解析を試してみました。

NXPの提供するUSB LiteのサンプルはMass Storage Device用にできていますが、Enumerationの手順は同じですから、基本ロジックはそのまま拝借。Config Descriptorを読み込んだところで、その解析だけAudio Device用に書き換えてみたようなものです。もうひとつの変更点は、割り込み待ちの処理。USB Liteは割り込みは使っているものの、RTOSは必要としないように作られています。そのため、ディスクリプタの読み込みに使われるControl転送が終了するのを、フラグ変数のポーリングによって待つようになっていました。これでは他のタスクが動かないので、TOPPERS/JSPのSemaphore機能を使って待ち合わせるように変更してあります。
Configurationの設定まで動きましたので、すでにデバイス自体は有効になっているのですが、実際にスピーカを鳴らすには

NXPの提供するUSB LiteのサンプルはMass Storage Device用にできていますが、Enumerationの手順は同じですから、基本ロジックはそのまま拝借。Config Descriptorを読み込んだところで、その解析だけAudio Device用に書き換えてみたようなものです。もうひとつの変更点は、割り込み待ちの処理。USB Liteは割り込みは使っているものの、RTOSは必要としないように作られています。そのため、ディスクリプタの読み込みに使われるControl転送が終了するのを、フラグ変数のポーリングによって待つようになっていました。これでは他のタスクが動かないので、TOPPERS/JSPのSemaphore機能を使って待ち合わせるように変更してあります。
Configurationの設定まで動きましたので、すでにデバイス自体は有効になっているのですが、実際にスピーカを鳴らすには
- 必要であれば、ミュートのオフ、再生ボリュームの設定
- エンドポイントを持たないインタフェース(IF #1, alt 0)から、実際にPCMを出力できるエンドポイントを持つインタフェース(IF #1, alt 1)への切り替え。
- 再生するPCMデータの送出開始