FR60 マイコン基板 (22) -- USB-MIDI (7)
FR60 版の USB-MIDI プログラムは、当然、FR60 用のベースボード上で作成しているわけです。
ベースボード上の LCD が電源投入時のデフォルト状態のまま、1 行だけ薄ぼんやりと見えているのは寂しいので、FM音源プログラムの LCD 表示部のプログラムを追加して、LCD および OSD で表示されるようにしました。
表示する内容ですが、当初は、単にバルク転送されてくるブロック数と、出力する MIDI データのバイト数をモニタするだけでしたが、USB イベントを内部 RAM に記録しておいて表示する、簡易 USB モニタの機能も付け加えました。
FR60 の USB ファンクションは、ほとんどのリクエストに自動応答するので、ユーザープログラム側でキャプチャできるイベントは数少ないのですが、GET_DESCRIPTOR や、バスリセット、NAK などは割り込みを伴って通知されます。
それらのイベントを順次、内部 RAM に記録しておきます。
そのイベントを LCD に表示させ、キー入力で前後に送れるようにしてありますが、イベント数が多くなると手に負えなくなりますから、UART0 (フラッシュ書き込み用のシリアルポート) から外部にダンプできるようにしました。
それをプログラムで見やすいように表示したのが下のリストです。
最初の数字は、ms 単位での時間です。
GET_DESCRIPTOR での、括弧に入った最後の数字は、実際に送り返したディスクリプタの長さです。
これは Windows XP に接続した場合の例で、デバイス・ディスクリプタでマニュファクチャラ ID として string[1] を指定しているのですが、全くアクセスしてこないことが分かります。
(string[2] はプロダクト ID、string[3] はシリアルナンバー)
320.4 Bus_reset 436.4 Bus_reset 514.4 GET_DESC. device[0] 0x0000 0x40 (0x12) 80 06 0001 0000 4000 515.0 Bus_reset 623.6 GET_DESC. device[0] 0x0000 0x12 (0x12) 80 06 0001 0000 1200 624.1 GET_DESC. config[0] 0x0000 0x9 (0x48) 80 06 0002 0000 0900 624.6 GET_DESC. string[0] 0x0000 0xff (0x4) 80 06 0003 0000 ff00 625.0 GET_DESC. string[3] 0x0409 0xff (0x14) 80 06 0303 0904 ff00 625.1 EP0_IN_NAK 625.5 GET_DESC. config[0] 0x0000 0xff (0x48) 80 06 0002 0000 ff00 625.6 EP0_IN_NAK 626.3 GET_DESC. string[0] 0x0000 0xff (0x4) 80 06 0003 0000 ff00 626.7 GET_DESC. string[2] 0x0409 0xff (0x20) 80 06 0203 0904 ff00 627.2 GET_DESC. string[0] 0x0000 0xff (0x4) 80 06 0003 0000 ff00 627.7 GET_DESC. string[2] 0x0409 0xff (0x20) 80 06 0203 0904 ff00 647.6 GET_DESC. device[0] 0x0000 0x12 (0x12) 80 06 0001 0000 1200 648.1 GET_DESC. config[0] 0x0000 0x9 (0x48) 80 06 0002 0000 0900 648.5 GET_DESC. config[0] 0x0000 0x48 (0x48) 80 06 0002 0000 4800 648.6 EP0_IN_NAK 671.1 GET_DESC. string[0] 0x0000 0xff (0x4) 80 06 0003 0000 ff00 671.4 GET_DESC. string[2] 0x0409 0xff (0x20) 80 06 0203 0904 ff00 671.5 EP0_IN_NAK 672.2 GET_DESC. string[0] 0x0000 0xff (0x4) 80 06 0003 0000 ff00 672.8 GET_DESC. string[2] 0x0409 0xff (0x20) 80 06 0203 0904 ff00 672.8 EP0_IN_NAK 685.2 GET_DESC. string[0] 0x0000 0xff (0x4) 80 06 0003 0000 ff00 685.7 GET_DESC. string[2] 0x0409 0xff (0x20) 80 06 0203 0904 ff00 685.8 EP0_IN_NAK