(57)【特許請求の範囲】
【請求項１】
HIDデバイスの通信速度を高める方法であって、
USBデバイスは、インタフェースディスクリプターにおけるエンドポイント個数を２以上に設定し、デバイス分類を３に設定するステップと、
USBデバイスは、ホストに少なくとも一つの割込み入力エンドポイントと少なくとも一つの割込み出力エンドポイントをレスポンスし、割込み入力エンドポイントのアドレスをUSBデバイス内のバルク入力エンドポイントのアドレスに設定し、割込み出力エンドポイントのアドレスをUSBデバイス内のバルク出力エンドポイントのアドレスに設定するステップと、
USBデバイスは、自体に一つのレポートディスプリプタを有することをHIDディスクリプタに設定するステップと、
USBデバイスは、レポートディスプリプタが、バルクエンドポイントバッファーメモリの容量以上の長さを有する入力型レポートと出力型レポートをそれぞれ一つ備えるように設定するステップと、
USBデバイスは、バルク出力エンドポイントによりホストからのコマンドを受信し、かつバルク入力エンドポイントによりホストに所要の結果を返信し、ホストとインタラクションする1回当たりのデータの長さがレポートの長さと一致するように設定するステップ
とを含むことを特徴とする該方法。
【請求項２】
エンドポイントディスクリプターが、前記割込み入力エンドポイントと割込み出力エンドポイントのバッファエリアのサイズを、６４バイトに設定することを特徴とする請求項１記載のHIDデバイスの通信速度を高める方法。
【請求項３】
データの伝送は、ホストからUSBデバイスへの伝送か、USBデバイスからホストへの伝送かを問わず、レポートの長さに基づいて行い、毎回６４バイト伝送し、６４バイトを超えたデータは、６４バイトのサイズのデータブロックに分解されてからそれぞれ伝送され、
受信側は全てのデータブロックを完全なデータに再構成することを特徴とする請求項１記載のHIDデバイスの通信速度を高める方法。
【請求項４】
前記ホストのコマンドとデータの受信および処理は
１）USBデバイスは、バルクエンドポイントにデータが送信されたかを判断するステップと、
２）バルクエンドポイントにデータが送信された場合、USBデバイスはデータを再構成するステップと、
３）USBデバイスはコマンドを実行するステップと、
４）USBデバイスは、バルクエンドポイントから、バルクエンドポイントにデータが送信されていないという結果と状態、又はコマンドを受信し実行して得られた結果と状態を返信するステップとを含むことを特徴とする請求項１記載のHIDデバイスの通信速度を高める方法。
【請求項５】
前記バルクエンドポイントにデータが送信されたかを判断するステップは
（ａ）USBデバイスは、コマンドの再構成と実行の状態に入るステップと、
（ｂ）USBデバイスは、ホストからデータのオフセット量と長さを取得するステップと、
（ｃ）USBデバイスは、データのオフセット量と長さに基づいて、バルクエンドポイントのバッファエリアにデータをコピーするステップと、
（ｄ）USBデバイスは、ホストからデータの全長を取得するステップと、
（ｅ）USBデバイスは、オフセット量にデータの長さを加算したものがデータの全長と等しいかを判断し、等しくない場合はステップ（ｆ）を実行し、等しい場合はステップ（g）を実行するステップと、
（ｆ）USBデバイスは、コマンドの再構成と実行を中断し、次のレポートの処理を行うステップと、
（ｇ）USBデバイスは、バルクエンドポイントのバッファエリア内のデータが正しいかを判断し、正しくない場合は、コマンドエラー状態を設定してからステップ４）を実行し、正しい場合は、ステップ３）を実行するステップとを含むことを特徴とする請求項４記載のHIDデバイスの通信速度を高める方法。
【発明の詳細な説明】
【技術分野】
【０００１】  本発明はHIDデバイスの通信速度を高める方法に関し、特にUSBデバイスをHIDデバイスとして設計する場合の通信速度を高める方法に関する。
【背景技術】
【０００２】  通常のUSBデバイスは一つの“ドライバ”が必要である。当該ドライバはアプリケーションソフトウェアからUSBデバイスへのデータ伝送用通路を提供している。但し、ドライバのプログラミング技術は複雑であり、一旦エラーになるとシステムのデッドロックを招く。この為、OSは一部の典型的なUSBデバイス、例えばHIDデバイス（Human Interface Device、すなわちヒューマンインタフェースデバイスとは、人間と直接やり取りするデバイスのこと、例えばマウス、キーボードなどである）に対して内蔵のドライバを提供している。従って、USB KEYなど非典型的なUSBデバイスをヒューマンインタフェースデバイスとして設計すれば、OSに内蔵のドライバを直接使用できるようになり、ドライバのプログラミングの複雑性とリスクを避けることができる。【０００３】  OSに内蔵のHIDドライバプログラムのハードウェアへのアクセス方式は以下の２種類に分かれている。第１種類は、USB規格に定義された「コントロール伝送」方式であり、第2種類は、USB規格に定義された「割込み伝送」方式であり、この２種類の方式は、少量データの伝送にのみ適するものであり、HID仕様のUSBデバイスは大量データの高速データ通信を行うことができない。通信量が大きく、かつ高速伝送が要求されるUSBデバイスをHIDデバイスとして設計すると、割込みエンドポイントのバッファエリアが小さくなる為、通信速度は遅くなる。【０００４】  USB規格に大量データの高速データ通信方式も定義されており、通常、“バルク伝送”と呼ばれている。チップにバルク伝送の為に設置されたバッファメモリは大きいが、HIDデバイスはこの通信方式を使用することができない。【０００５】  USBインタフェースを有するチップは、内部に異なるデータ伝送方式をサポートするハードウェア回路が設置されており、各データ伝送方式はそれぞれ各回路に対応している。この回路は抽象的に“エンドポイント”と呼ばれる。コントロール伝送をサポートするエンドポイントは“コントロールエンドポイント”と、割込み伝送をサポートするエンドポイントは“割込みエンドポイント”と、バルク伝送をサポートするエンドポイントは“バルクエンドポイント”と、それぞれ呼ばれている。【０００６】  USBデバイスは、ホストと接続した後、一連のデータをホストへ送信する。これらデータは、デバイスのタイプ及びサポートできるデータ伝送方式を表している。これらデータはディスクリプターである。ディスクリプターはフォーマットが定められたデータ構造であり、各ディスクリプターは、該ディスクリプターの全バイト数が含まれる1バイトのフィールドから始まり、続いて該ディスクリプターの種類を示す1バイトのフィールドが配列される。ディスクリプターにはUSBデバイスの、グローバルで共通のデバイスの適用情報とデバイスのコンフィギュレーション情報を含む汎用情報が記述される。各ディスクリプターは、このデバイスに関する情報全体または一つの要素の情報を含む。全てのUSB周辺デバイスは必ずUSB規格のディスクリプターに対するリクエストにレスポンスしなければならない。エニュメレーションの過程において、ホストはコントロール伝送により、デバイスへディスクリプターをリクエストする。【０００７】  本発明に関するディスクリプ���ーは、下記のものを含む。すなわち、  一つのUSBデバイスとホストとの間のインタフェースを定義するためのものであって、このデバイスがHIDデバイスであるか、およびコントロールエンドポイント以外のエンドポイントがあるかを表すインタフェースディスクリプターと、 デバイスにコントロールエンドポイント以外のエンドポイントがある時にのみ必要であり、エンドポイントのタイプ、エンドポイントのチップにおけるアドレスなど、エンドポイントバッファーのサイズ、及びホストがこのエンドポイントをアクセルする時間間隔を表すエンドポイントディスクリプターと、 デバイスがHIDデバイスとして定義された時にのみ必要であり、このデバイスがサポートするUSBプロトコールのバージョン番号、専用ディスクリプターの有無、及び専用ディスクリプターに対する特徴限定を表すHIDディスクリプターと、 デバイスがHIDデバイスとして定義された時にのみ必要であり、ホストとデバイスの間に通信する時のデータの構成方法を定義するためのレポートディスクリプターとを含む。
【発明の開示】
【発明が解決しようとする課題】
【０００８】 本発明は、上記のようなデータ通信量が大きく、かつ高速データ通信が必要であるUSBデバイスをHIDデバイスとして設計すると通信速度が遅くなるという上記従来技術の問題点を解決することを目的とする。
【課題を解決するための手段】
【０００９】  本発明は、バルクエンドポイントのバッファエリアが大きいという利点を利用し、バルクエンドポイントを割込みエンドポイントとしてシミュレーションする方法を提供して、HIDデバイスの通信速度を高める。【００１０】  HIDデバイスの通信速度を高める方法であって、 USBデバイスは、インタフェースディスクリプターにおけるエンドポイント個数を２以上に設定し、デバイス分類を３に設定するステップと、 USBデバイスは、ホストに少なくても一つの割込み入力エンドポイントと少なくとも一つの割込み出力エンドポイントをレスポンスし、割込み入力エンドポイントのアドレスをUSBデバイス内のバルク入力エンドポイントアドレスに設定し、割込み出力エンドポイントのアドレスをUSBデバイス内のバルク出力エンドポイントアドレスに設定するステップと、 USBデバイスは、自体に一つのレポートディスプリプタを有することをHIDディスクリプタに設定するステップと、 USBデバイスは、レポートディスプリプタが、バルクエンドポイントバッファーメモリの容量以上の長さを有する入力型レポートと出力型レポートをそれぞれ一つ備えるように設定するステップと、  USBデバイスは、バルク出力エンドポイントによりホストからのコマンドを受信し、かつバルク入力エンドポイントによりホストに所要の結果を返し、ホストとインタラクションする1回当たりのデータの長さがレポートの長さと一致するように設定するステップとを含むことを特徴とするHIDデバイスの通信速度を高める方法。【００１１】  前記のHIDデバイスの通信速度を高める方法において、前記ホストのコマンドとデータの受信および処理は  １）USBデバイスは、バルクエンドポイントにデータが送信されたかを判断するステップと、  ２）バルクエンドポイントにデータが送信された場合、USBデバイスはデータを再構成するステップと、  ３）USBデバイスはコマンドを実行するステップと、  ４）USBデバイスは、バルクエンドポイントにより結果と状態を返すステップとを含むことを特徴とするHIDデバイスの通信速度を高める方法。
【発明の効果】
【００１２】  本発明は、バルクエンドポイントを割込みエンドポイントとしてシミュレーションして、データ通信量が大きく、かつ高速データ通信が必要なUSBデバイスをHIDデバイスとして設計する場合に通信速度が遅くなる問題を解決し、HIDの通信速度を高めた。
【図面の簡単な説明】
【００１３】
【図１】図１は、本発明のコマンド及びデータ受信を示すフローチャートであり、データはホストからデバイスへ伝送される。
【図２】図２は、本発明のコマンド処理及び結果の返信を示すフローチャートであり、データはデバイスからホストへ伝送される。
【発明を実施するための形態】
【００１４】  以下、図面を用いて本発明を実施するための最良の形態を詳しく説明する。
【００１５】  本発明に係るHIDデバイスの通信速度を高める方法を実現するための技術は、主にディスクリプターの設定とデータの構成方法の変更を含む。
【００１６】
（１）ディスクリプターの設定
（１−１）インタフェースディスクリプター
本発明に係るインタフェースディスクリプターに対する設定は、「エンドポイント個数」を表すバイトを２以上に設定すること、および「デバイス分類」を表すバイトをこのデバイスがHIDデバイスに属することを意味する３に設定することを含む。
【００１７】  （１−２）エンドポイントディスクリプター  本発明は、ホストに二つの割込みエンドポイントの存在を通知しなければならず、本来のディスクリプターをもとに二つの割込みエンドポイントに対応する二つのエンドポイントディスクリプターを追加する。この二つの割込みエンドポイントは、それぞれ割込み入力エンドポイントと割込み出力エンドポイントであり、「エンドポイントタイプ」を表すバイトを当該エンドポイントが割込みエンドポイントであることを意味する３に設定する。「エンドポイント番号」を表すバイトをUSBデバイスチップ内のバルク入力エンドポイントの番号およびバルク出力エンドポイントの番号とそれぞれ同じように設定する。割込み入力エンドポイントと割込み出力エンドポイントの「バッファエリアのサイズ」を６４バイトに設定して、ホストが割込み入力エンドポイントと割込み出力エンドポイントをアクセスする時間間隔をいずれも1ミリ秒に設定する。
【００１８】  具体的に実現する際に、割込みエンドポイント数は、２より多くてもよいが、少なくとも一つの割込み入力エンドポイントと少なくとも一つの割込み出力エンドポイントがあるように設定しなければならない。
【００１９】  （１−３）HIDディスクリプター  本発明に係るHIDディスクリプターに対する設定には、HIDプロトコールバージョン1.10以上をサポートすること、このデバイスが一つの“レポートディスクリプター”を有すること、および当該レポートディスクリプターの長さが58バイトであることが含まれる。
【００２０】  （１−４）HIDレポートディスクリプター  本発明のレポートディスクリプターに対する設定には、本来製品に対応する部分と、デバイスからホストへ伝送される入力型レポートに対する定義と、ホストからデバイスへ伝送される出力型レポートに対する定義とが含まれる。上記の入力型レポートと出力型レポートの長さは、バルクエンドポイントのバッファーメモリの容量以上である。
【００２１】  （２）データの構成方法データ伝送は、ホストからUSBデバイスへのデータ伝送であるか、USBデバイスからホストへのデータ伝送であるかを問わず、レポートの長さに従って実現され、即ち一回当たりに６４バイトが伝送される。６４バイトを超えたデータは、６４バイトのサイズの一連のデータブロックに分けられて伝送され、受信側は、全てのデータブロックを完全なデータに再構成する。
【００２２】 ６４バイトである各レポートにおいて、先頭の６バイトはこのレポートとデータブロック全体との関係を表し、残りの５８バイトは本当のデータである。先頭の6バイトにおいて、第１バイトと第２バイトは、データ全体の全長を示し、第３バイトと第４バイトはこのレポートの有する有効なデータの長さを示し、第５バイトと第６バイトはこのレポートの有するデータのデータ全体におけるオフセット位置を示している。
【００２３】  （３）図１は本発明のコマンド及びデータ受信のフローを示す。
【００２４】  ステップ１０１において、USBデバイスに電源を入れる。
【００２５】  ステップ１０２において、USBデバイスを初期化する。
【００２６】  ステップ１０３において、コントロールエンドポイントにリクエストが送信されたかを判断する。リクエストが送信された場合にはステップ１０４を実行し、リクエストが送信されていない場合にはステップ１０５を実行する。
【００２７】  ステップ１０４において、リクエストがHIDレポートであるかを判断する。HIDレポートである場合に、ステップ１０６を実行しコマンドを再構成した後、ステップ１０７によりコマンドを実行し、ステップ１１１によって、コントロールエンドポイントにより結果と状態を返す。最後にステップ１０３に戻り、引き続きコントロールエンドポインに送信されるリクエストを待つ。HIDレポートではない場合には、ステップ１０８を実行する。
【００２８】  ステップ１０５において、バルクエンドポイントにデータが送信されたかを判断する。データが送信された場合に、ステップ１０６を実行しコマンドを再構成した後、ステップ１０７によってコマンドを実行し、ステップ１１１によって、バルクエンドポイントにより結果と状態を返す。最後に、ステップ１０３に戻り、コントロールエンドポイントに送信されるリクエストを待つ。データが送信されていない場合には、ステップ１１１を実行し結果と状態を返し、ステップ１０３に戻り、引き続きコントロールエンドポイントに送信されるリクエストを待つ。
【００２９】  ステップ１０８において、ホストから送信されたリクエストがUSB規格のリクエストであるかを判断する。USB規格のリクエストである場合に、ステップ１０９を実行し上記USB規格のリクエストの処理を行う。USB規格のリクエストではない場合には、ステップ１１０を実行しリクエストがサポートされていないことを返信する。
【００３０】  ステップ１０９と１１０を実行した後、ステップ１１１を実行し結果と状態を返す。最後に、ステップ１０３に戻り、引き続きコントロールエンドポイントに送信されるリクエストを待つ。
【００３１】  上記のフローにおけるステップ１０３と１０４に述べたコントロールエンドポイントによりデータを送信する過程は、USBデバイスの互換性を考慮して設計されたが、具体的に実施する際にこれは必須なものではない。
【００３２】  具体的に実現する際に、USBデバイスが大量なデータ通信を必要としない場合は、上記のフローのステップ１０６によるコマンドの再構成を実行せずに、直接にステップ１０７によりコマンドを実行しても良い。
【００３３】  （４）図２は本発明のコマンド実行と結果返信のフローを示す。
【００３４】  ステップ２０１において、USBデバイスはコマンドの再構成および実行を行う状態に入る。
【００３５】  ステップ２０２において、USBデバイスはデータのオフセット量と長さを取得する。
【００３６】  ステップ２０３において、USBデバイスはデータのオフセット量と長さに基づいて、データをバルクエンドポイントのバッファエリアにコピーする。
【００３７】  ステップ２０４において、USBデバイスはデータの全長を取得する。
【００３８】  ステップ２０５において、USBデバイスは、オフセット量にデータの長さを加算したものがデータの全長と等しいかを判断し、等しくない場合にはステップ２０６を実行し、USBデバイスはコマンドの再構成および実行を中断し、次のレポートの処理を行い、等しい場合にはステップ２０７を実行する。
【００３９】  ステップ２０７において、USBデバイスはバルクエンドポイントのバッファエリア内のデータが正しいのものであるかを判断し、正しくないものである場合には、ステップ２０９を実行してコマンドエラー状態を設定した後ステップ２１０を実行し、正しいものである場合には、ステップ２０８を実行する。
【００４０】  ステップ２０８において、USBデバイスはファイル選択コマンドなどのコマンドを実行する。
【００４１】  ステップ２１０において、このコマンドがバルクエンドポイントから送信されたものであるかを判断し、バルクエンドポイントから送信されたものである場合には、ステップ２１２を実行してバルクエンドポイントにより結果と状態を返し、そうでない場合には、コントロールエンドポイントにより結果と状態を返す。
【００４２】  ステップ２１３において、処理を終了して、新たなコマンドのループに進む。
【００４３】  以上の実施形態は、本発明の好ましい具体的な実施態様の一つに過ぎず、当業者の知識に基づき行われた種種の改良、修正、変更と入替えは、本発明の技術的範囲に属する。
【図１】
0005160844.tif 000002
【図２】
0005160844.tif 000003