Interface5月号 富士通FR60基板 USBマウスのエニュメレーション [電子工作]
もうどうせ組み込みなんだから、エニュメレーションなんて適当にやっちゃえば!とも思えますが、思った以上にちゃんとやっているようです。PCではないのでプラグ&プレイを意識する必要は無さそうですが。
エニュメレーションの手順を見てみると、
1.GET DESCRIPTOR(device)
2.SET ADDRESS:アドレスを1に設定しています。以降、アドレス1に対してトランザクションを発行します。この辺、HUBを使って複数デバイスをぶら下げたときの動作はどうなるのか?。→HUBは不明なデバイスとして、マウスを接続してもデモは動きませんでした。
3.GET DESCRIPTOR(device)の再発行:1.ではDESCRIPTORのサイズが不明なので64byteを指定していましたが、今回はサイズが判っているので、そのサイズを指定して来ています。
4.GET DESCRIPTOR(configuration):まず9byte送るように指定しています。
5.GET DESCRIPTOR(configuration):4.でConfiguration DESCRIPTORのサイズが判っているので、そのサイズを指定して来ています。これでインタフェース、HID、エンドポイントの各DESCRIPTORが取得できました。
デバイス側は、マウスデバイスである事、エンドポイント1をIN方向にインタラプト転送で最大長8byte、転送間隔8msと答えています。
6.SET CONFIGURATION:デバイスの応答はZLP
7.Class Specific Request:デバイスの応答はZLP
8.GET DESCRIPTOR:HID REPORT DESCRIPTORを取得
9.以降、INトランザクションによりマウスデータのサンプリングが開始される。しかしこのマウス、エンドポイント1の最大サイズが8byteと答えている割に4byteしか送ってこない。この嘘付きめ。
※当然と言えば当然なのですが、無線マウスもちゃんと使えています。
※あれ!これ!、USBの所はソースではなく、ライブラリでの提供じゃん。やられたー!。
エニュメレーションの手順を見てみると、
1.GET DESCRIPTOR(device)
2.SET ADDRESS:アドレスを1に設定しています。以降、アドレス1に対してトランザクションを発行します。この辺、HUBを使って複数デバイスをぶら下げたときの動作はどうなるのか?。→HUBは不明なデバイスとして、マウスを接続してもデモは動きませんでした。
3.GET DESCRIPTOR(device)の再発行:1.ではDESCRIPTORのサイズが不明なので64byteを指定していましたが、今回はサイズが判っているので、そのサイズを指定して来ています。
4.GET DESCRIPTOR(configuration):まず9byte送るように指定しています。
5.GET DESCRIPTOR(configuration):4.でConfiguration DESCRIPTORのサイズが判っているので、そのサイズを指定して来ています。これでインタフェース、HID、エンドポイントの各DESCRIPTORが取得できました。
デバイス側は、マウスデバイスである事、エンドポイント1をIN方向にインタラプト転送で最大長8byte、転送間隔8msと答えています。
6.SET CONFIGURATION:デバイスの応答はZLP
7.Class Specific Request:デバイスの応答はZLP
8.GET DESCRIPTOR:HID REPORT DESCRIPTORを取得
9.以降、INトランザクションによりマウスデータのサンプリングが開始される。しかしこのマウス、エンドポイント1の最大サイズが8byteと答えている割に4byteしか送ってこない。この嘘付きめ。
※当然と言えば当然なのですが、無線マウスもちゃんと使えています。
※あれ!これ!、USBの所はソースではなく、ライブラリでの提供じゃん。やられたー!。
USB 2.0とUSB On-The-Goを含むカスタムUSBデバイス開発のすべて USBコンプリート[第3版]
- 作者: ジャン・アクセルソン
- 出版社/メーカー: 株式会社エスアイビー・アクセス
- 発売日: 2006/10/20
- メディア: 単行本
2008-05-06 01:24
nice!(0)
コメント(8)
トラックバック(0)
> HUBを使って複数デバイスをぶら下げたときの
複合HIDデバイスの場合にどうなるかの実験希望。
ツイン・マウス・デバイスなんてのも面白そうだ。
「リブル・ラブル?」
by noritan (2008-05-06 15:17)
そーなんですよ。今回提供されているライブラリでは紹介されているストレージとマウスの部分のみらしいので、私はもっぱらソースが公開されている「ブロック崩し」「オセロ」のコードを眺めています。
ちょいといじればキーボードを扱うようにできる筈だと思いながら進んでいません。USB 処理部分は基本的に両方同じですが「オセロ」のほうにはデバッグ用のコードが多少追加されていました。
どちらもデバイスのスキャンが面倒になるためか、USB HUB には対応していませんね。mini-USBHostSTR ライブラリの製品版は HUB 対応とあります。
by masato (2008-05-06 16:00)
HUBに関しては実装は難しそうですね。ここは譲れないと言うのも判る気がします。
まあライブラリとは言えストレージクラスまで提供しているのは、かなり有り難い事だとは思います。
by hamayan (2008-05-06 17:21)
「オセロ」のプログラムで ED2 の MPS (Maximum Packet Size) を 4 から 8 にしたらキーボードを読めるようになりました。ホントにこれでいいのかな。
by masato (2008-05-07 23:17)
> 「オセロ」のプログラムで ED2 の MPS (Maximum Packet Size) を 4 から 8 にしたらキーボードを読めるようになりました。
おお!、まだUSBマウスのアプリケーションを動かしてみただけなのですが、もしかして利用できるデバイスの制限の掛け方って、デバイスクラスくらいまでしか見分けを行っていないのかもしれないですね。
PCではないのでOSレベルでマウスをサポートする訳ではなし。
それか今後の記事展開の為に、キーボードデバイスも受け入れるようになっていたとか。
私が繋ぎたかったのがキーボードだったので、これは朗報です。
※FR60のUSBホストのデータシートを読みましたが、これが何がなんだかさっぱり。富士通も、サンプルアプリくらい用意してくれれば良いのに。
by hamayan (2008-05-08 06:16)
すみません、ED2 ではなくて ED1 の誤りでした。エニュメレーションでデバイスクラスやプロトコルのチェックをしているようなコードが無いので、もしかしたらと試してみました。
FR60 は OHCI 準拠のホストコントローラというのも、JB8/12 から入った身には判りにくいところです。
by masato (2008-05-08 08:06)
>最大サイズが8byteと答えている割に4byteしか送ってこない
この辺りは REPORT DESCRIPTOR の内容で決まるみたいです。ボタン(3 bits + 5bits padding)、X、Y、それに Wheel で 4 byte。USB HID のドキュメントにあるサンプルでは Wheel なしだから 3 byte になるのでしょうか。
by masato (2008-05-10 22:28)
↑そうでした。
このマウスはホイールマウスなので、4byte目にマウスの値が入ります。
by hamayan (2008-05-11 00:08)