2008/08/26(火)[USB][HID] キーボードとマウスと.(その1)

USB接続のキーボード・マウス・GPIOを増設する

という目的をあげました.いろいろ着手しかかりで,どれも完結してないのはご愛嬌:)

コレも2年ほど前にGPIO+CapSenceやろうとして,頓挫したままになっていたプロジェクトです.せっかく復帰したので,基本的なUIのキーボードとマウスの機能も持たせたいと思います.

前提条件と手順は,以下のとおりとします.

  • ホストは Windows XP,開発環境は...任意w
  • cypress のPSocであるところの,CY8C24894を使う
  • マイコンとPCとをつないで,デバイスの認識を行う
  • HIDデバイスとして認識させ,Windows標準ドライバを用いることでドライバの開発を避ける
  • キーボード押下情報の送達確認
  • マウス操作情報の送達確認
  • 汎用IOとしての,マイコンとのデータ授受確認(非USB-UART Bridge)

注:正しい用語を使って説明できていないです.作業メモとしてざっと書いているのでご容赦を.もし万が一,パクられる参照される時は,ものの本を見ながら単語の修正をしたほうがいいです.


マイコンとPCとをつないで,デバイスの認識を行う

何もナシだと辛いので,とりあえず検索してみましょう.ただし,手元に資料も欲しいので,後述する資料をそろえておくことを推奨いたします.*1

HIDとしてテキトウIOデバイスを作る

まずは,参照場所-個人(1)を追いかけてみます.
PSoC Designer ver.5でnew projectを作って,USBFSモジュールを追加, Wizardでdescriptorを記述していきます.本家のツール*2よりも使いやすくてイイデスネ.
サクサクと終わるかと思いきや,PCからHIDデバイス,という認識まではされたけれども,ドライバがinstallされない事態に.デバイスマネージャでUSB/HIDのアタリをあさってみると,黄色いびっくりマークがついてます.propertyでVID/PIDを見ると,確かに作ったデバイスです.Setupは飛んでいるみたいですが,どこかで調子悪くなっているようです.昔々に同じことになっていた記憶が・・・.

packetが見たい

さて,何もいわずに黄色いびっくりマークを出すだけで,何を言いたいのかわかりません.そこで,USBのプロトコルアナライザーでもあればスイスイ?なのですが,(検閲削除)なので,ソフト的に対処してしまいます.
探してみると,USB Snoopy Proというフリーソフトが出てきました.使い方は解凍してでてくるREADME.TXTのとおりです.見ずにやるとうごかねぇぞゴルァとなるかもしれません:)

結果,どうやらHID Report descriptorを受けたあとで,RESET PIPEなるコマンドが飛んでいます.Descriptorの記述に不満がるようです...HIDの面倒なところはココですね.
参照個人サイト(1)の,絵を見ながらまねていたのですが,下記2点のミスによるものでした.

  1. 見落としがあったこと
  2. 見ているうちにマウススクロールでHID-ReportではなくHID-Physicalになっていた

これに気づくまでにいろいろと検索したり,本を見たりして時間を費やしてしまいましたわ.まぁ,次の予習になったので結果オーライってところでしょうかね.


キーボードとマウスもつけたい

汎用IOだけだと面白くない.せっかくなので,キーボードとマウス機能もつけてしまいましょう.
どうやって複数機能を持たせるのかナァと不思議に思っていましたが,今は納得.

同じように疑問を持っている人がいた*3ので,さくっと解決.HID Report Descriptorで,複数の機能を宣言するだけでよい.それにあわせて,EndPointもしっかりと割り振ってやる必要があるけれども..

やり方がわかったら早速実験.PSoC DesignerでUSBFSのdescriptorを編集していきます.これまたびっくりマークに悩まされたりするわけですが...
詳細は後日.とりあえず認識するまでのダイジェストだけ.

  • EP1は OUT INTERRUPT, MaxPacketSize=8. キーボード
  • EP2は OUT INTERRUPT, MaxPacketSize=8. マウス
  • EP3は OUT INTERRUPT, MaxPacketSize=32. マイコン通信用
  • EP4は IN INTERRUPT, MaxPacketSize=32, マイコン通信用
  • Packet Sizeは Report descriptorのサイズ以上ならOK
  • HID spec.のappendixにあるキーボードにはOUTもあるが,削除可能.これでEPを稼ぐ.複数キーボードがある状態で,制御キー(?)のLock状態が見えないようになるのではないか?(要確認)
  • HID Report Descriptorの書式は理解しづらかった.仕様書・書籍・WEB Site,実機をいじくってなんとなく理解したつもり..?

今日はココまで.乞うご期待(ぉ


*1 : WEBに書かれている個人の発信を全て丸呑みにせず,必ず本家の資料を見るように心がけましょう.

*2 : HID Descriptor Tool,dt2_4.zipというファイル.

*3 : usb.orgの掲示板にて,質問されてました.回答は日本人(^^;

今回の参照場所

書籍

USB 2.0とUSB On-The-Goを含むカスタムUSBデバイス開発のすべて USBコンプリート[第3版]
仕様書直訳したような文章ですが,すらすらと仕様書が読めない方(オレオレ),紙面で資料を持っていたい方にオススメ.下記のようにWEBで情報公開されている方も多いので,動くものをエイヤで作るだけならイラナイかもしれない.でもまぁ暇つぶしに読んでおくこともオススメする.


WEBサイト

(0) 総本山usb.org

何はともあれココから始まる.仕様書の類は一通り落としておきましょう.HID usage tableや descriptor情報など,必須な情報ばかりです.このアタリの情報をあわせて記述しているサイトがあまり見当たらなかったので,本記事を書くことにしました.
本日は記載しませんが,まとめてwikiネタとしてコンテンツにしておきます.動作確認できてから・・・.

(1) Flatol Lab

PSoCにおけるUSBと題して,モロに同じ石です.開発環境が1つ前のDesigner 4で紹介されていますが,操作方法は ほぼは同じです.

(2) PSoCでUSB

Snoopyの検索でヒットしました.みなさん考えること/やることは同じですね:)

(3) USB HID Notes

キーボード・マウスのReport descriptorと,デバイスから放り出すときのメモリイメージを参照.