FR60 マイコン基板 (20) -- USB-MIDI (5)

現在、FR60 用の USB-MIDI プログラムを作成中です。
例によって、バルク出力データは読み捨て、LED を点滅させるだけの段階ですが、データは通って来ているようです。
FR60 用の USB ターゲットのサンプルプログラム (USB マウス・エミュレーション) のオブジェクトは当初から公開されていましたが、そのソースプログラムはインターフェース誌 2008 年 7 月号でやっと公開されました。
このサンプルプログラムに変更を加えて USB-MIDI としての機能を持たせようとしています。
MB91310 シリーズのハードウェアマニュアルに、下のような表が載っていたので、USB-MIDI としては使用できないのではないかと心配していました。

Endpoint Config Interface Alt Trans Type MaxSize
0 - - - Control 8
1 1 0 0 Bulk(OUT) 64
2 1 0 0 Bulk(IN) 64
3 1 0 0 Interrupt(IN) 8

この表から読み取れるのは、すべてのエンドポイントが

  • Interface = 0
  • Alternate = 0

に属しているということです。
標準 USB-MIDI、つまり、独自ドライバが不要で、OS 標準のドライバで機能させるためには、USB の標準に準拠した

  • Audio Control Interface
  • MIDIStreaming Interface

の2つのインターフェースが必要です。
つまり、インターフェース No. 0 および No. 1 の、2つのインターフェースが必要になります。
FR60 の USB ファンクションでは、数多くのリクエストに対して自動応答し、ソフトウェアの負担を減らしています。
手間が減るのはいいのですが、自動応答するリクエストに関しては、ユーザー側からは制御できません。
SET_INTERFACE リクエストも自動応答ですから、『インターフェース No. 1 をセットせよ』というリクエストが来たら、『そんなインターフェース番号はない』といって拒絶されてしまいます。
しかし、幸いなことに、SET_INTERFACE リクエストが発行されるのは、Alternate 番号で識別される複数のインターフェースがある場合だけのようです。
Alternate = 0 しか存在しない場合は SET_INTERFACE リクエストは発行されないようなので、当然、それを拒絶する事態も起こりません。
したがって、MIDIStreaming Interface については問題なく実現できます。
一方、通常の USB オーディオストリームである Audio Streaming Interface については、Alternate = 0 と Alternate = 1 のインターフェースが必要なので、FR60 の USB ファンクションでは実現できないものと思われます。
もっとも、オーディオストリーム転送に必要なアイソクロナス転送はサポートされていないので、もともと USB オーディオは実現不可能です。