(57)【特許請求の範囲】
【請求項１】
コンピュータ・システムであって、
ＨＩＤレポートを与えるデバイス・ドライバであって、前記ＨＩＤレポートは、データ項目と、ＨＩＤレポート記述子とを含み、前記ＨＩＤレポート記述子は前記ＨＩＤレポート内のデータ項目の配列を記述し、前記ＨＩＤレポート内のデータ項目のフォーマッティングを記述し、前記ＨＩＤレポート内のデータ項目の使用法仕様を記述し、および前記ＨＩＤレポートを記述する、前記のデバイス・ドライバと、
前記ＨＩＤレポートおよびＨＩＤレポート記述子を要求し、前記デバイス・ドライバから受け取るように構成したＨＩＤクラス・ドライバと、
クライアント・プログラムによってコール可能な第１インターフェース関数であって、前記クライアント・プログラムから使用法仕様を受け取り、そしてそれに応答して、前記クライアント・プログラムから受け取ったのと同じ使用法仕様を有する１つ以上のデータ項目を、前記ＨＩＤレポートから発見して該データ項目を返す、前記の第１インターフェース関数と、
から成ることを特徴とするコンピュータ・システム。
【請求項２】
請求項１記載のコンピュータ・システムにおいて、前記第１インターフェース関数は、追加的に、前記クライアント・プログラムから前記ＨＩＤレポートを受け取ること、を特徴とするコンピュータ・システム。
【請求項３】
請求項１記載のコンピュータ・システムにおいて、前記第１インターフェース関数は、追加的に、前記クライアント・プログラムから前記ＨＩＤレポートおよびデータ構造を受け取り、該データ構造は、前記ＨＩＤレポート記述子に基づく解析レポート記述を含むこと、を特徴とするコンピュータ・システム。
【請求項４】
請求項１記載のコンピュータ・システムにおいて、前記第１インターフェース関数は、追加的に、集合体識別子を受け取り、そしてそれに応答して、前記集合体識別子が指定するＨＩＤ集合体内のデータ項目に、前記データ項目を限定すること、を特徴とするコンピュータ・システム。
【請求項５】
請求項１記載のコンピュータ・システムであって、更に、前記ＨＩＤレポート記述子を受け取り、そしてそれに応答して解析レポート記述を含むデータ構造を返す第２インターフェース関数を備えており、前記第１インターフェース関数は、追加的に、該データ構造を受け取り、該データ構造を用いて前記データ項目を発見すること、を特徴とするコンピュータ・システム。
【請求項６】
請求項１記載のコンピュータ・システムであって、更に、前記クライアント・プログラムから前記ＨＩＤレポート記述子を受け取り、そしてそれに応答して、解析レポート記述を含むデータ構造を返す第２インターフェース関数を備えており、前記第１インターフェース関数は、追加的に、前記データ構造を受け取り、該データ構造を用いて前記データ項目を発見すること、を特徴とするコンピュータ・システム。
【請求項７】
請求項１記載のコンピュータ・システムにおいて、前記ＨＩＤレポート内に、受け取った使用法仕様を有するデータ項目がない場合に、前記第１インターフェース関数はエラー・コードを返し、前記ＨＩＤレポートは、１つの特定のデバイスが発生したものであり、前記エラー・コードは、前記受け取った使用法仕様を有する制御部が、前記特定のデバイス上において利用可能であるか否かについて示すこと、を特徴とするコンピュータ・システム。
【請求項８】
請求項１記載のコンピュータ・システムであって、更に、  前記クライアント・プログラムから前記ＨＩＤレポート記述子を受け取り、そしてそれに応答して、解析レポート記述を含むデータ構造を返す第２インターフェース関数を備えており、前記第１インターフェース関数は、追加的に、該データ構造を受け取り、該データ構造を用いて前記データ項目を発見し、
前記ＨＩＤレポート内に、前記受け取った使用法仕様を有するデータ項目がない場合に、前記第１インターフェース関数はエラー・コードを返し、前記ＨＩＤレポートは、１つの特定のデバイスが発生したものであり、前記エラー・コードは、前記受け取った使用法仕様を有する制御部が、前記特定のデバイス上において利用可能であるか否かについて示すこと、を特徴とするコンピュータ・システム。
【請求項９】
請求項１記載のコンピュータ・システムにおいて、前記ＨＩＤクラス・ドライバは、更に、特定のＨＩＤデバイスからのＨＩＤレポートのサイズを均一化することによって、該ＨＩＤレポートを正規化するように構成したこと、を特徴とするコンピュータ・システム。
【請求項１０】
請求項１記載のコンピュータ・システムにおいて、前記ＨＩＤクラス・ドライバは、更に、レポートＩＤをまだ有していないあらゆるＨＩＤレポートにレポートＩＤを付加しかつ特定のＨＩＤデバイスからのＨＩＤレポートのサイズを均一化することによって、ＨＩＤレポートを正規化するように構成したこと、を特徴とするコンピュータ・システム。
【請求項１１】
請求項１記載のコンピュータ・システムにおいて、前記受け取った使用法仕様は、使用法ページを識別し、前記返すデータ項目は、前記ＨＩＤレポートがインデックス・アレイまたはビット・フィールドのどちらを含むかには無関係に、押圧されたＨＩＤボタンに対応する使用法インデックスのアレイから成ること、を特徴とするコンピュータ・システム。
【請求項１２】
請求項１記載のコンピュータ・システムにおいて、前記返すデータ項目は、複数のＨＩＤ値を含むこと、を特徴とするコンピュータ・システム。
【請求項１３】
請求項１記載のコンピュータ・システムであって、更に、ＨＩＤレポート記述子に基づいて、ＨＩＤ集合体およびそれらの相互関係を指定するデータ構造のアレイを返す第２インターフェース関数を備えること、を特徴とするコンピュータ・システム。
【請求項１４】
請求項１記載のコンピュータ・システムであって、更に、ＨＩＤレポート記述子に基づいて、ＨＩＤ集合体およびそれらの相互関係を指定するデータ構造のアレイを返す第２インターフェース関数を備えており、前記第１インターフェース関数は、追加的に、集合体識別子を受け取り、そしてそれに応答して前記集合体識別子が指定するＨＩＤ集合体内において前記データ項目を発見すること、を特徴とするコンピュータ・システム。
【請求項１５】
請求項１記載のコンピュータ・システムにおいて、前記デバイス・ドライバは、ＨＩＤレポートのＨＩＤデバイスへの書き込みも行い、更に、データ項目および使用法仕様を受け入れ、そしてそれに応答して、前記データ項目をＨＩＤレポート内に位置付けしかつフォーマットし、ＨＩＤデバイスに書き込む第２インターフェース関数を備えていること、を特徴とするコンピュータ・システム。
【請求項１６】
ＨＩＤデバイスを有するコンピュータ・システムにおいて、第１インターフェース関数を定めるコンピュータ実行可能な命令を備えるコンピュータ読取可能記憶媒体であって、前記ＨＩＤデバイスは、データ項目を含むＨＩＤレポートと、ＨＩＤレポート記述子とを与え、前記ＨＩＤレポート記述子は、前記ＨＩＤレポート内のデータ項目の配列を記述し、前記ＨＩＤレポート内のデータ項目のフォーマッティングを記述し、前記ＨＩＤレポート内のデータ項目の使用法仕様を記述し、および前記ＨＩＤレポートを記述し、前記第１インターフェース関数は、１つのＨＩＤレポートおよび１つの使用法仕様をクライアント・プログラムから受け取り、そしてそれに応答して、前記クライアント・プログラムから受け取ったのと同じ使用法仕様を有する１つ以上のデータ項目を前記ＨＩＤレポートから発見し、該データ項目を返すこと、を特徴とするコンピュータ読取可能記憶媒体。
【請求項１７】
請求項１６記載のコンピュータ読取可能記憶媒体において、前記第１インターフェース関数は、追加的に、前記クライアント・プログラムからの前記ＨＩＤレポート記述子に基づく解析レポート記述を受け取ること、を特徴とするコンピュータ読取可能記憶媒体。
【請求項１８】
請求項１６記載のコンピュータ読取可能記憶媒体において、前記第１インターフェース関数は、追加的に、集合体識別子を受け取り、そしてそれに応答して、前記集合体識別子が指定するＨＩＤ集合体内のデータ項目に、前記返すデータ項目を限定すること、を特徴とするコンピュータ読取可能記憶媒体。
【請求項１９】
請求項１６記載のコンピュータ読取可能記憶媒体において、前記命令は、前記ＨＩＤレポート記述子を受け取り、そしてそれに応答して、解析レポート記述を返す第２インターフェース関数を定め、前記第１インターフェース関数は、追加的に、前記解析レポート記述を受け取り、該解析レポート記述を用いて前記データ項目を発見すること、を特徴とするコンピュータ読取可能記憶媒体。
【請求項２０】
請求項１６記載のコンピュータ読取可能記憶媒体において、前記第１インターフェース関数は、前記受け取ったＨＩＤレポート内に、受け取った使用法仕様を有するデータ項目がない場合に、エラー・コードを返し、前記ＨＩＤレポートは、特定のデバイスが発生したものであり、前記エラー・コードは、前記受け取った使用法仕様を有する制御部が、前記特定のデバイス上において利用可能であるか否かについて指示すること、を特徴とするコンピュータ読取可能記憶媒体。
【請求項２１】
請求項１６記載のコンピュータ読取可能記憶媒体において、前記命令は、前記ＨＩＤレポート記述子を受け取り、そしてそれに応答して、解析レポート記述を含むデータ構造を返す第２インターフェース関数を定め、該第１インターフェース関数は、追加的に、前記データ構造を受け取り、該データ構造を用いて前記データ項目を発見し、
前記指定のＨＩＤレポート内に、受け取った使用法仕様を有するデータ項目がない場合に、前記第１インターフェース関数はエラー・コードを返し、前記指定のＨＩＤレポートは、特定のデバイスが発生したものであり、前記エラー・コードは、前記受け取った使用法仕様を有する制御部が、前記特定のデバイス上において利用可能であるか否かについて指示すること、を特徴とするコンピュータ読取可能記憶媒体。
【請求項２２】
請求項１６記載のコンピュータ読取可能記憶媒体において、前記受け取った使用法仕様は、使用法ページを識別し、前記返すデータ項目は、前記指定のＨＩＤレポートがインデックス・アレイまたはビット・フィールドのどちらを含むかには無関係に、押圧されたＨＩＤボタンに対応する使用法インデックスのアレイから成ること、を特徴とするコンピュータ読取可能記憶媒体。
【請求項２３】
請求項１６記載のコンピュータ読取可能記憶媒体において、前記返すデータ項目は、複数のＨＩＤ値を含むこと、を特徴とするコンピュータ読取可能記憶媒体。
【請求項２４】
請求項１６記載のコンピュータ読取可能記憶媒体において、前記命令は、ＨＩＤレポート記述子に基づいて、ＨＩＤ集合体およびそれらの相互関係を指定するデータ構造のアレイを返す第２インターフェース関数を定めること、を特徴とするコンピュータ読取可能記憶媒体。
【請求項２５】
請求項１６記載のコンピュータ読取可能記憶媒体において、前記命令は、ＨＩＤレポート記述子に基づいて、ＨＩＤ集合体およびそれらの相互関係を指定するデータ構造のアレイを返す第２インターフェース関数を定め、前記第１インターフェース関数は、追加的に、集合体識別子を受け取り、そしてそれに応答して、前記集合体識別子が指定するＨＩＤ集合体内のデータ項目に、返すデータ項目を限定すること、を特徴とするコンピュータ読取可能記憶媒体。
【請求項２６】
請求項１６記載のコンピュータ読取可能記憶媒体において、前記命令は、データ項目および使用法仕様を受け入れ、そしてそれに応答して、ＨＩＤデバイスに書き込むため、前記データ項目をＨＩＤレポート内に位置付けかつフォーマットする第２インターフェース関数を定めること、を特徴とするコンピュータ読取可能記憶媒体。
【請求項２７】
ＨＩＤデータ項目を読み取る方法であって、
ＨＩＤレポート記述子であって、関連するＨＩＤレポートを記述し、このＨＩＤレポート内のデータ項目の配列を記述し、ＨＩＤレポート内のデータ項目のフォーマッティングを記述し、およびＨＩＤレポート内のデータ項目の使用法仕様を記述する前記のＨＩＤレポート記述子を得るステップと、
インターフェースを通じて前記ＨＩＤレポート記述子をパーザに提出するステップと、
前記パーザが、前記ＨＩＤレポート記述子を解析し、そして前記ＨＩＤレポート記述子に基づく解析レポート記述を返すステップを実行するステップと、
前記ＨＩＤレポート記述子が記述したデータ項目を含むＨＩＤレポートを得るステップと、
前記ＨＩＤレポート、前記解析レポート記述、および使用法仕様を含む引数を用いて、第１インターフェース関数をコールするステップと、
前記第１インターフェース関数が、該第１インターフェース関数に対する引数において指定されたのと同じ使用法仕様を有する１つ以上のデータ項目を前記解析レポート記述に基づいて、前記ＨＩＤレポートから発見し、そして該データ項目を返すステップと、から成る方法。
【請求項２８】
請求項２７記載の方法において、前記第１インターフェース関数は、前記ＨＩＤレポート内に前記１つ以上のデータ項目を発見できない場合、エラー・コードを返し、該エラー・コードは、前記使用法仕様を有する制御部が、前記ＨＩＤレポート記述子が記述するレポート内において利用可能であるか否かについて指示すること、を特徴とする方法。
【請求項２９】
請求項２７記載の方法であって、更に、特定のＨＩＤデバイスからのＨＩＤレポートのサイズを均一化することによって、該ＨＩＤレポートを正規化するステップを含むこと、を特徴とする方法。
【請求項３０】
請求項２７記載の方法であって、更に、レポートＩＤをまだ有していないあらゆるＨＩＤレポートにレポートＩＤを付加し、特定のＨＩＤデバイスからのＨＩＤレポートのサイズを均一化することによって、ＨＩＤレポートを正規化するステップを含むこと、を特徴とする方法。
【請求項３１】
請求項２７記載の方法において、前記第１インターフェース関数に対する引数は、集合体識別子を含み、前記方法が、更に、前記集合体識別子が指定するＨＩＤ集合体内のデータ項目に、前記返すデータ項目を限定するステップを含むこと、を特徴とする方法。
【請求項３２】
請求項２７記載の方法であって、更に、  前記解析レポート記述を含む引数を用いて、第２インターフェース関数をコールするステップと、
前記第２インターフェース関数が、ＨＩＤ集合体およびこれらの相互関係を指定するデータ構造のアレイを返すステップと、
を含み、
前記第１インターフェース関数の引数は、更に、集合体識別子を含み、
前記第１インターフェース関数は、前記集合体識別子が指定するＨＩＤ集合体内のデータ項目に、前記返すデータ項目を限定すること、
を特徴とする方法。
【請求項３３】
請求項２７記載の方法において、前記使用法仕様は使用法ページであり、前記返すデータ項目は複数のＨＩＤ値を含むこと、を特徴とする方法。
【請求項３４】
請求項２７記載の方法において、前記使用法仕様はユーザ・ページであり、前記返すデータ項目は、ＨＩＤレポートがインデックス・アレイまたはビット・フィールドのどちらを含むかには無関係に、押圧されたＨＩＤボタンに対応する使用法インデックスのアレイから成ること、を特徴とする方法。
【請求項３５】
ＨＩＤデバイスを有するコンピュータ・システムにおいてコール可能な１組のインターフェース関数を定めるコンピュータ実行可能な命令を備えたコンピュータ読取可能記憶媒体であって、前記ＨＩＤデバイスは、データ項目を含むＨＩＤレポートと、および該ＨＩＤレポートを記述し、該ＨＩＤレポート内のデータ項目の配列を記述し、該ＨＩＤレポート内のデータ項目のフォーマッティングを記述し、該ＨＩＤレポート内のデータ項目の使用法仕様とを記述するＨＩＤレポート記述子とを提供し、
前記命令により定められる前記１組のインターフェース関数は、
ＨＩＤレポート記述子を含む関数引数を受け取り、そしてそれに応答して、前記ＨＩＤレポート記述子を解析し、前記ＨＩＤレポート記述子に基づく解析レポート記述を返す記述子解析関数と、
ＨＩＤレポート、前記解析レポート記述、および使用法仕様から成る関数引数を受け取る１つ以上の項目検索関数であって、該項目検索関数に対する引数内で供給したのと同じ使用法仕様を有する１つ以上のデータ項目を前記解析レポート記述に基づいて、前記ＨＩＤレポートから発見し、該データ項目を返す、前記１つ以上の項目検索関数と、から成ること、を特徴とするコンピュータ読取可能記憶媒体。
【請求項３６】
請求項３５記載のコンピュータ読取可能記憶媒体において、前記項目検索関数は、ボタン検索関数を備えており、前記使用法仕様が使用法ページを含み、前記ボタン検索関数は、前記ＨＩＤレポートがインデックス・アレイまたはビット・フィールドのどちらを含むかには無関係に、押圧されたＨＩＤボタンに対応する使用法インデックスのアレイを返すこと、を特徴とするコンピュータ読取可能記憶媒体。
【請求項３７】
請求項３５記載のコンピュータ読取可能記憶媒体において、前記項目検索関数が値検索関数を備えており、前記使用法仕様が使用法ページおよび使用法インデックスを含み、前記値検索関数は、前記使用法仕様に対応するＨＩＤ値を返すこと、を特徴とするコンピュータ読取可能記憶媒体。
【請求項３８】
請求項３５記載のコンピュータ読取可能記憶媒体において、前記項目検索関数は、前記使用法仕様に対応するＨＩＤ値のアレイを返すこと、を特徴とするコンピュータ読取可能記憶媒体。
【請求項３９】
請求項３５記載のコンピュータ読取可能記憶媒体において、前記項目検索関数は、
前記ＨＩＤレポートがインデックス・アレイまたはビット・フィールドのどちらを含むかには無関係に、押圧されたＨＩＤボタンに対応する使用法インデックスのアレイを返すボタン検索関数と、
１つ以上のＨＩＤ値を返す値検索関数と、
を備えること、を特徴とするコンピュータ読取可能記憶媒体。
【請求項４０】
請求項３５記載のコンピュータ読取可能記憶媒体において、前記コンピュータ実行可能命令によって定めた前記１組のインターフェース関数は、更に、前記解析レポート記述を含む関数引数を受け取り、そしてそれに応答して、ＨＩＤ集合体およびそれらの相互関係を指定するデータ構造のアレイを返す集合体識別関数を定めること、を特徴とするコンピュータ読取可能記憶媒体。
【請求項４１】
請求項３５記載のコンピュータ読取可能記憶媒体において、前記コンピュータ実行可能命令によって定めた前記１組のインターフェース関数は、更に、前記解析レポート記述子を含む関数引数を受け取り、そしてそれに応答して、ＨＩＤ集合体およびそれらの相互関係を指定するデータ構造のアレイを返す集合体識別関数を定め、
前記項目検索関数が受け取った前記引数は、オプションの集合体識別子を含み、
このような集合体識別子を与えた場合、前記項目検索関数は、前記集合体識別子が指定するＨＩＤ集合体内のデータ項目に、前記返すデータ項目を限定すること、
を特徴とするコンピュータ読取可能記憶媒体。
【請求項４２】
請求項３５記載のコンピュータ読取可能記憶媒体において、前記コンピュータ実行可能命令が定める前記１組のインターフェース関数は、更に、１つ以上のデータ項目および使用法仕様を含む関数引数を受け取る１つ以上の項目書き込み関数を定め、前記１つ以上の項目書き込み関数は、ＨＩＤデバイスに書き込むため、前記データ項目をＨＩＤレポート内に位置付けかつフォーマットすること、を特徴とするコンピュータ読取可能記憶媒体。
【請求項４３】
請求項３５記載のコンピュータ読取可能記憶媒体において、前記項目検索関数は、サイズを正規化したＨＩＤレポートを受け取るように定めたこと、を特徴とするコンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ヒューマン・インターフェース・デバイス(Human Interface Device)と関連する動作のためのドライバ、並びにこのようなドライバおよびデバイスとの間で読み出しおよび書き込みを行う方法に関する。
【０００２】
【従来の技術】
ユニバーサル・シリアル・バス（ＵＳＢ）は、単純な４線ケーブルを用いて種々のデバイスと相互接続する機能をパーソナル・コンピュータに与える通信アーキテクチャである。ＵＳＢプロトコルは、起動時にあるいは実行時にデバイスを差し込んだとき、デバイスのコンフィギュレーションを設定することができる。これらのデバイスは、種々のデバイス・クラスに分類されている。各デバイス・クラスは、同様の機能を行うデバイスに対して、共通の振る舞いおよびプロトコルを定義している。
【０００３】
以下に記述する本発明は、ヒューマン・インターフェース・デバイス（ＨＩＤ）のクラスと共に用いるものである。ＨＩＤクラスは、主に、人がコンピュータ・システムの動作を制御するのに用いるデバイスから構成されている（以後、ＨＩＤデバイスまたはＨＩＤクラス・デバイスと記す）。ＨＩＤクラス・デバイスの典型的な例には、以下のデバイスが含まれる。
【０００４】
・キーボードおよびポインティング・デバイス（例えば、標準的なマウス・デバイス、トラックボール、およびジョイスティック）。
【０００５】
・フロント・パネル制御部。例えば、ノブ、スイッチ、ボタン、およびスライダ。
【０００６】
・電話機、ＶＣＲのリモコン、ゲームまたはシミュレーションのデバイスのようなデバイス上において見ることができる制御部。例えば、データ・グローブ、スロットル、ハンドル、および方向舵ペダル。
【０００７】
・人との対話は不要であるが、ＨＩＤクラス・デバイスと同様のフォーマットでデータを提供することができるデバイス。例えば、バーコード・リーダ、温度計、電圧計。
【０００８】
現行のＨＩＤ仕様は、ＵＳＢ−ＩＦと称する非営利組織が公表しており、オレゴン州Hillsboroに所在するこの組織から入手可能である。尚、ＨＩＤ仕様は、この言及により本願に含めるものとする。また、この仕様には、インターネットを通じて、www.usb.orgにおいてもアクセスすることができる。ＨＩＤ仕様は進展する可能性があるが、その最も重要な特徴は、比較的明確に定義されており、そして現時点において受け入れられている。
【０００９】
本発明が主に関係する、ＨＩＤデバイスの明確に定義されていてしかも受け入れられている特徴の１つは、このようなデバイスが、「レポート」と呼ぶデータ・パッケージ単位でデータの送信および受信を行うことである。デバイスには、このようなレポートをフォーマットするに当たり、かなりの柔軟性が与えられている。
【００１０】
レポートは、ボタンおよび値という、ＨＩＤデバイスが発生する２つの異なった型のデータを含んでいる。ここでは、これらを総称してデータ項目と呼ぶ。各データ項目は、キー、スライダ、ジョイスティックの単一の軸等のような制御部（control）が発生する。ボタン型データ項目は、０または１という２つの値の一方を有する二進値である。ボタン型データ項目は、キーまたはスイッチのような物体が発生する。値型データ項目は、ある範囲の値を有し、通常、スライダ、ジョイスティックの軸、またはスロットルのような連続可変制御部のアナログ位置を示す。ＨＩＤデバイスは通常入力データ項目を発生するが、レポートはＨＩＤデバイスが受け取ることができ、これによりコンピュータはＨＩＤデバイス上のＬＥＤ、スピーカの音量、およびその他の出力デバイスを制御できるようになっている。
【００１１】
各制御部には、ＨＩＤデバイスの製造者が指定する「使用法(usage)」が関連付けられている。使用法は、異なった制御部が測定しているパラメータ、および制御部が発生したデータ項目（例えば、Ｘ，Ｙ，およびＺ入力）に対して行うべきことに関する情報を、コンピュータ・アプリケーション・プログラムに供給する。ＨＩＤ仕様自体は、キーボード、ジョイスティック、スライダ、およびその他のデバイスのような多数の異なったデバイスに対する、使用法の定義を含む。
【００１２】
１つのＨＩＤ使用法は、２つの構成要素、即ち、１つの使用法ページおよび１つの使用法インデックスを含む。使用法ページは、１つの特定のデバイスに対応している。恐らく、最も一般的な使用法ページは、「汎用デスクトップ(generic desktop)」ページおよび「キーボード」ページである。使用法インデックスは、ジョイスティック・キー、軸、スライダ、キーボードのキー等のような、当該ページ内の具体的な制御部に対応している。
【００１３】
実際には、「使用法」という用語は、ときとして使用法インデックスを意味する場合がある。しかしながら、この文書の本文では（Appendixを除く）、「使用法」は、１つの使用法ページおよび１つの使用法インデックスから成る１対の値を意味する。「使用法仕様」という用語は、ここでは、より一般的に使用法の構成要素の内いずれか一方またはその双方を指すのに用いる。
【００１４】
既に述べたように、ＨＩＤレポートの配列およびフォーマッティングは、デバイスによってかなり異なっている。通常、各レポートは、当該デバイスによって指定された任意の順序で発生する複数のデータ項目を含み、各データ項目は任意の数のビットおよびレポート内の任意のビット・アライメントを有している。更に、データ項目自体は、ビット・フィールド・フォーマットおよびインデックス・アレイ・フォーマットのような、異なったフォーマットで報告することができる。
【００１５】
デバイスは、そのデータ項目を２つ以上のレポートに分離することもでき、この場合、各レポートはレポートＩＤで始まる。レポート自体は、その長さが様々で均一ではなく、そしてレポート内に含まれるデータ項目が変化したときにのみ、ＨＩＤがレポートを発生する。
【００１６】
加えて、デバイスは、種々の制御部を異なった「集合体（collection）」にグループ化することができ、各集合体はそれ自体に指定された使用法を有する。各集合体は、異なったレポートに及ぶ場合がある。また、各集合体は、互いの中にネストすることも可能である。同じ使用法に対応するデータ項目は、異なった集合体において報告することができる。
【００１７】
各ＨＩＤデバイスは、当該デバイスが発生するレポートを特定するＨＩＤレポート記述子を発生する。各レポート毎に、レポート記述子は、当該レポートに含まれるデータ項目の配列およびフォーマッティング、並びに各データ項目と関連する使用法を記述する。
【００１８】
ＨＩＤレポート記述子は、精巧なプロトコルを用いて符号化する。ＨＩＤレポート・データを使用するアプリケーション・プログラムはいずれも、最初に関連するレポート記述子を解析して、個々のレポートをどのように解釈するか、およびレポート内のデータ項目をどのように見つけるかについて判定を行わなければならない。レポート記述子の解析は、非常に複雑なタスクである。
【００１９】
上述のＨＩＤプロトコルは、帯域幅については非常に効率的である。加えて、ＨＩＤデバイスに実施するのは非常に単純である。しかしながら、この方式では、アプリケーション・プログラムの開発者には多数の難題がある。これらの難題は主に、ＨＩＤレポートにおいて許される柔軟性、およびＨＩＤレポート記述子の複雑性に関係している。
【００２０】
単一の既知のＨＩＤデバイスのためにアプリケーション・プログラムを書くことは、難しいことではない。この場合、開発者は、全ての使用可能なデータ項目の正確な性質や、それらがＨＩＤレポート内でどのように配列されフォーマットされるかについて、前もって分かっている。
【００２１】
【発明が解決しようとする課題】
しかしながら、異なった周辺装置とで用いるためのプログラムを書こうとする際、その周辺装置が全てそれらのレポートを互いに異なった予測し得ない方法で実施する可能性がある場合、難題が発生する。ある周辺装置は単一のレポートのみを利用する場合があり、一方他の周辺装置はそのデータ項目を２つまたは３つのレポートに分割する場合もある。また、あるキーボードはキーストロークをビット・フィールドとして報告する場合があり、一方別のキーボードはインデックス・アレイを利用する場合がある。あるジョイスティックは、非常に基本的な制御部のみを有する場合があり、一方別のジョイスティックは、ハットスイッチ(hatswitch)および航空機のヨーク制御部のような、より洗練された制御部を備える場合もある。レポートのサイズさえも周辺装置毎に異なっており、これにより必要なバッファ・サイズを決めるのが困難となっている。各集合体も同様に、異なった周辺装置では、その実装が全く異なる可能性がある。
【００２２】
上記の情報は全てレポート記述子から得ることができるが、情報の解析は非常に難しく、このように種々のフォーマットに対処しなければならない場合、実際のレポートのバッファリングおよび解析も同様に非常に複雑となる。
【００２３】
このように、ＨＩＤ技術は、種々のデバイスまたは周辺装置に、所与のアプリケーション・プログラムとの互換性を与える潜在的可能性を有しているが、このような互換性は現在、アプリケーション・プログラムの開発において、アプリケーション・プログラムがＨＩＤ周辺装置に使用可能な種々のレポート・フォーマットに適応できるようにするには、多大の投資によってしか実現できない。
【００２４】
【課題を解決するための手段】
本発明は、送信元のＨＩＤデバイスには無関係に、しかもクライアント・プログラムが複雑な解析を行う必要なく、クライアント・プログラムが一貫性をもってＨＩＤデータ項目を受信できるようにする方法およびアーキテクチャを含む。例示の実施形態では、このアーキテクチャは、トランスポート・レイヤを含み、ここからＨＩＤレポートおよびレポート記述子を得ることができ、更にこれらをトランスポート・レイヤに書き込むことができる。ＨＩＤクラス・ドライバは、トランスポート・レイヤの上に実装する。アプリケーション・プログラムおよびオペレーティング・システム・コンポーネントを含むクライアント・プログラムは、ＨＩＤクラス・ドライバを介して、ＨＩＤデバイスとのインターフェースを行う。
【００２５】
本発明の一実施形態によれば、ＨＩＤクラス・ドライバは、レポートＩＤをまだ含んでいないあらゆるレポートにレポートＩＤを付加する。このステップは、ＨＩＤレポートに一貫性を加え、それらの読み取りおよび解析を一層容易にする。加えて、ＨＩＤクラス・ドライバは、ＨＩＤデバイスが発生した最も大きなレポートを判定し、そのＨＩＤデバイスからの他の全てのレポートに詰め物をすることにより、所与のデバイスからのレポート全ての長さを均一化する。これによっても、再度一貫性を追加し、利用する側のアプリケーションがレポートをバッファし解析するのを一層容易にする。本発明の別の形態によれば、１組のインターフェースは、クライアント・プログラムが、それらの使用法のみによって指定したデータ項目を要求できるようにする。
【００２６】
初期化フェーズの間、クライアント・プログラムは、通常のファイルＩ／Ｏコールによって、クラス・ドライバからレポート記述子を検索する。次に、このレポート記述子をパーザに提出し、パーザがこのレポート記述子を解析し、そして解析したレポート記述を含むデータ構造を返す。ＨＩＤデータ項目を読み出そうとする場合、クライアント・プログラムはまず最初にクラス・ドライバからＨＩＤレポートを検索する。次に、引数を用いて、インターフェース関数をコールし、そしてその引数は、ＨＩＤレポート、解析レポート記述(parsed report description)を包含するデータ構造、および（使用法ページおよび使用法インデックスのような）使用法仕様を含む。インターフェース関数は、解析レポート記述をＨＩＤレポート内へのインデックスとして用いて、ＨＩＤレポートを探索して指定した使用法に関連するデータ項目を求め、そしてこのデータ項目が当該レポートの中で発見した場合、要求元クライアントにそのデータ項目を返す。オプションとして、集合体識別子をインターフェース関数に対する引数の中で指定することができ、この場合、インターフェース関数は、集合体識別子によって指定したＨＩＤ集合体内のデータ値に、その返すデータ値を制限する。
【００２７】
【発明の実施の形態】
動作環境の一例
図１および以下の説明は、本発明を実施し得る適切な計算機環境についての、簡単でおおまかな説明を行うことを意図したものである。全体として、パーソナル・コンピュータによって実行するプログラム・モジュールのような、コンピュータ実行可能命令に関連して本発明を説明するが、必ずしもそれを必要とする訳ではない。通常、プログラム・モジュールは、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造、インターフェース、インターフェース関数等を含み、コンピュータ読取可能メモリに格納する。実行する際、これらのモジュールは特定のタスクを行い、特定の抽象データ型を実装し、種々のインターフェースおよびインターフェース関数を露出(expose)または実施する。更に、本発明は、ハンドヘルド・デバイス、マルチプロセッサ・システム、マイクロプロセッサをベースとするまたはプログラム可能な消費者の電子機器、ネットワークＰＣ、ミニコンピュータ、メインフレーム・コンピュータ等を含む、その他のコンピュータ・システム・コンフィギュレーションを用いても実施可能であることは、当業者には分かるであろう。また、本発明は、通信ネットワークを通じて連結したリモート処理デバイスがタスクを実行する分散型コンピュータ環境においても実施可能である。分散型コンピュータ環境では、プログラム・モジュールは、ローカルおよびリモートのメモリ記憶デバイス双方に配置してもよい。
【００２８】
図１を参照すると、本発明を実施するシステム例は、従来のパーソナル・コンピュータ即ちパーソナル・コンピュータ２０の形態の汎用計算機を含み、処理ユニット２１，システム・メモリ２２，およびシステム・メモリを含む種々のシステム・コンポーネントを処理ユニット２１に結合するシステム・バス２３を含む。システム・バス２３は、メモリ・バスまたはメモリ・コントローラ、周辺バス、および種々のバス・アーキテクチャのいずれかを用いたローカル・バスを含む、数種のバス構造のいずれかとすればよい。システム・メモリは、リード・オンリ・メモリ（ＲＯＭ）２４およびランダム・アクセス・メモリ（ＲＡＭ）２５を含む。起動中等に、パーソナル・コンピュータ２０内部のエレメント間で情報を転送するのに役立つ基本ルーチンを含む基本入出力システム２６（ＢＩＯＳ）が、ＲＯＭ２４に格納してある。パーソナル・コンピュータ２０は、更に、図示しないハード・ディスクとの読み出しおよび書き込みを行うハード・ディスク・ドライブ２７、リムーバブル磁気ディスク２９との読み出しおよび書き込みを行う磁気ディスク・ドライブ２８，およびＣＤＲＯＭまたはその他の光学媒体のようなリムーバブル光ディスク３１との読み出しおよび書き込みを行う光ディスク・ドライブ３０も含む。ハード・ディスク・ドライブ２７、磁気ディスク・ドライブ２８、および光ディスク・ドライブ３０は、それぞれ、ハード・ディスク・ドライブ・インターフェース３２、磁気ディスク・ドライブ・インターフェース３３、および光ドライブ・インターフェース３４を介して、システム・バス２３に接続している。これらのドライブおよびこれらと関連するコンピュータ読取可能媒体は、コンピュータ読取可能命令、データ構造、プログラム・モジュール、およびパーソナル・コンピュータ２０のためのその他のデータの不揮発性格納を行う。ここに記述する環境例は、ハード・ディスク、リムーバブル磁気ディスク２９およびリムーバブル光ディスク３１を採用しているが、磁気カセット、フラッシュ・メモリ・カード、デジタル・ビデオ・ディスク、ベルヌーイ・カートリッジ、ランダム・アクセス・メモリ（ＲＡＭ）、リード・オンリ・メモリ（ＲＯＭ）等のような、コンピュータによるアクセスが可能なデータを格納可能なその他のタイプのコンピュータ読取可能記憶媒体も、本動作環境例において使用可能であることは、当業者には認められよう。
【００２９】
オペレーティング・システム３５、１つ以上のアプリケーション・プログラム３６、その他のプログラム・モジュール３７およびプログラム・データ３８を含む多数のプログラム・モジュールは、ハード・ディスク、磁気ディスク２９、光ディスク３１、ＲＯＭ２４、またはＲＡＭ２５上に格納することができる。ユーザは、キーボード４０およびポインティング・デバイス４２のような入力デバイスを通じて、パーソナル・コンピュータ２０にコマンドや情報を入力することができる。他の入力デバイス（図示せず）には、マイクロフォン、ジョイスティック、ゲーム・パッド、衛星パラボラアンテナ、スキャナ等が含まれよう。これらおよびその他の入力デバイスは、多くの場合、システム・バスに結合したシリアル・ポート・インターフェース４６を介して処理ユニット２１に接続するが、パラレル・ポート、ゲーム・ポート、またはユニバーサル・シリアル・バス（ＵＳＢ）のようなその他のインターフェースによって接続してもよい。ビデオ・アダプタ４８のようなインターフェースを介して、モニタ４７またはその他のタイプの表示デバイスもシステム・バス２３に接続している。モニタに加えて、パーソナル・コンピュータは典型的には、スピーカやプリンタのようなその他の周辺出力デバイス（図示せず）を含む。
【００３０】
パーソナル・コンピュータ２０は、リモート・コンピュータ４９のような、１つ以上のリモート・コンピュータへの論理接続を用いたネットワーク形環境において動作することができる。リモート・コンピュータ４９は、別のパーソナル・コンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア・デバイスまたはその他の一般的なネットワーク・ノードとしてもよく、そして典型的には、パーソナル・コンピュータ２０に関して先に述べたエレメントの多くまたは全てを含むが、図１には、メモリ記憶デバイス５０のみを図示している。図１に示した論理接続は、ローカル・エリア・ネットワーク（ＬＡＮ）５１およびワイド・エリア・ネットワーク（ＷＡＮ）５２を含む。このようなネットワーキング環境は、オフィス、企業全域にわたるコンピュータ・ネットワーク、イントラネット、およびインターネットでは極く一般的である。
【００３１】
ＬＡＮネットワーキング環境において用いる場合、パーソナル・コンピュータ２０は、ネットワーク・インターフェースまたはアダプタ５３を介して、ローカル・ネットワーク５１に接続する。ＷＡＮネットワーキング環境において用いる場合、パーソナル・コンピュータ２０は典型的に、モデム５４、またはインターネットのようなワイド・エリア・ネットワーク５２を通じて通信を確立するその他の手段を含む。モデムは、内蔵型でも外付けでもよく、シリアル・ポート・インターフェース４６を介して、システム・バス２３に接続する。ネットワーク形環境では、パーソナル・コンピュータ２０に関連して示すプログラム・モジュールまたはその各部分は、リモート・メモリ記憶デバイスに格納してもよい。尚、図示のネットワーク接続は一例であり、コンピュータ間に通信リンクを確立するその他の手段を用いてもよいことは認められよう。
【００３２】
図示のコンピュータは、Microsoft Corporationから入手可能なWindowsファミリのオペレーティング・システムのようなオペレーティング・システムを用いる。以下に記述する機能性は、Brockschmidt, Kraig; Inside OLE 2; Microsoft Press, 1994に記述されているような、ＯＬＥおよびＣＯＭインターフェース並びにインターフェース関数の使用を含む、標準的なプログラミング技法を用いて実施する。上記の文書は、この言及により本願に含めるものとする。
【００３３】
全体的なアーキテクチャ
図２は、ＨＩＤデバイス１００と図示のクライアント・プログラム１０２のようなクライアント・プログラムとの間で通信を行うために、コンピュータ２０内に実装したコンポーネントを示す。ここで用いる場合、「ＨＩＤデバイス」という用語は、ＨＩＤプロトコルの現在の形態または任意の改定形態を用いて、コンピュータ・コンポーネントと通信を行うあらゆるデバイスを意味するものとする。クライアント・プログラムとは、ＨＩＤデータ項目の利用側(consumer)である、オペレーティング・システム・コンポーネントを含むあらゆるプログラムまたはプログラム・コンポーネントのことをいう。
【００３４】
図２によると、１つ以上のＵＳＢデバイス・ドライバを含むトランスポート・レイヤ即ちドライバ・スタック１０４が、ＵＳＢ標準およびプロトコルにしたがって、ＨＩＤデバイスとの低レベルの通信を提供する。ＨＩＤクラス・ドライバ１０６は、トランスポート・レイヤ１０４の上に実装してあり、トランスポート・レイヤが列挙する(enumerate)物理的なデバイス・オブジェクト（ＵＳＢデバイス・ドライバ・スタックのような）を制御する、機能的デバイス・オブジェクトを作成する。ドライバ・スタック１０４は、ＨＩＤレポート、およびこのＨＩＤレポートを記述するＨＩＤレポート記述子を与える。本明細書の従来の技術の項に記述したように、ＨＩＤレポートはサイズが異なっており、そしてＨＩＤデバイス内に実装した制御部に対応するデータ項目を含む。ＨＩＤレポート記述子は、当該ＨＩＤレポート内にあるデータ項目の配列、フォーマッティング、および使用法仕様を指定する。ＨＩＤクラス・ドライバ１０６は、ＨＩＤレポートおよびＨＩＤレポート記述子を要求し、これらをＵＳＢデバイス・ドライバから受け取るように構成している。
【００３５】
オペレーティング・システムのクライアントは、ＨＩＤクラス・ドライバをコールし、ＨＩＤデバイスからのＨＩＤレポートおよびレポート記述子、並びにＨＩＤデバイスが提供するその他の型のデータを読み取ることができる。このようなコンポーネントは、適切にフォーマットしたレポートを与えることによって、ＨＩＤデバイスに書き込むこともできる。アプリケーション・プログラムのクライアントも、ＨＩＤクラス・ドライバを介して、ＨＩＤデバイスと通信を行うが、間接的に行うだけである。即ち、アプリケーション・プログラムは、実際には、コンピュータ・オペレーティング・システムを通じて、ファイルＩ／Ｏコールを行うことによって、ＨＩＤデバイスと通信し、一方、コンピュータ・オペレーティング・システムは、ＨＩＤクラス・ドライバと直接通信を行う。
【００３６】
レポートの正規化
ＨＩＤクラス・ドライバ１０６は、ＨＩＤレポートをクライアント・プログラムに供給
する前に、全てのＨＩＤレポートを正規化するという重要な改良は除いて、概して従来の技術にしたがって実施する。この正規化を達成する１つの方法は、まだレポートＩＤを有していないあらゆるレポートに、ＨＩＤレポートＩＤを付加することである。ＨＩＤ仕様によれば、レポートには、１つのデバイスから発するレポートが２つ以上ある場合に、レポートＩＤを有することのみが要求される。１つのデバイスから得られるレポートが１つだけの場合、レポートＩＤはオプションである。
【００３７】
ＨＩＤレポートを正規化する別のステップとして、クラス・ドライバが、所与のＨＩＤデバイスからの全てのレポートを均一のサイズにする。即ち、クラス・ドライバは、特定のデバイスが発生した最も大きなレポートのサイズを判定し（任意の付加されたレポートＩＤを含む）、そして当該デバイスからのレポート全てに詰め物を行って、これらが、最も大きなレポートのサイズと等しくなるようにする。
【００３８】
このように、本発明は、ＨＩＤレポートを正規化した後にのみ、ＨＩＤレポートを要求元のクライアント・プログラムに返す、ＨＩＤクラス・ドライバにより実行する方法を含む。このような方法は、ＨＩＤデバイスからＨＩＤレポートを受け取るステップと、ＨＩＤレポートに（任意の値を有するバイトによって）詰め物を行いそれらのサイズを均一化することによって正規化するステップとを含む。
【００３９】
図３には、このプロセスを示す。いくつかの異なったレポート１０８は、各々互いに異なった長さを有するが、１つの特定のＨＩＤデバイスから検索する。それらを要求元プログラムに渡す前に、ＨＩＤクラス・ドライバ１０６はそれらに詰め物を行い、それらが全て同じ長さとなるようにする。正規化したレポートを、図３では、番号１０９で引用する。詰め物は波線で示す。同様に、異なった別のデバイスから単一のレポート１１０を検索する。レポート１１０は、トランスポート・スタックから検索したときには、レポートＩＤを有していない。したがって、ＨＩＤクラス・ドライバ１０６は、このレポートの最初のバイトとしてレポートＩＤを付加し、その結果正規化レポート１１１を得る。
【００４０】
レポートを正規化することによって、重要な利点が得られる。最も意義深い利点の１つは、アプリケーション・プログラムにとって、クラス・ドライバ１０６からの各読み取りが１つのＨＩＤレポートのみを返す、ということが確実となる点にある。例えば、長さが異なる２つの異なったＨＩＤレポートを発生するＨＩＤデバイスから生ずる状況について検討する。これらのレポートのいずれの１つも、いつでも発生可能である。要求元クライアントは、２つのレポートのどちらが次にくるのかは分からない。次のレポートを読み取るためのファイルＩ／Ｏを実行するとき、クライアントは、（正規化していないと）何バイト読み取るべきかが分からない。したがって、２回の読み取り動作が必要となったり、あるいは最初の読み取り動作が次のレポートの一部を検索する、という可能性がある。上述の正規化によって、全てのレポートの長さが同一となるので、この問題は解消する。クライアントは、１つのレポート全体またはレポート長のある整数倍のいずれでも読み取ることが選択可能となる。
【００４１】
同様に、全てのレポートがレポートＩＤで始まるのを確実にすることは、後続のデータが常に特定の位置で開始することをクライアントが予期可能となることを意味する。
【００４２】
この正規化手順の説明は、読み取り動作を参照して行ったが、書き込み動作においても用いる。ＨＩＤデバイスに書き込む場合、要求元クライアントはレポートを供給する。その各々は、均一なサイズであり、ＨＩＤデバイスに書き込むべきデータ項目を有する。クラス・ドライバがデバイスに書き込みを行う前に、正規化レポートから余分な長さを削ぎ落とし、デバイスがそのようなレポートＩＤを予期していない場合、そのＩＤを除去する。この場合も、クライアント・プログラムは、均一な長さのレポートおよびこれに対応するバッファを利用することができる。
【００４３】
データ項目の検索の簡単化
図２のシステムは、パーザ・コンポーネント１３０を含み、これがクライアント・プログラムに解析サービスを提供する。パーザ１３０は、動的にロード可能なライブラリ、即ち、「ＤＬＬ」を用いて実装する。パーザおよびそれに関連する関数は、コンピュータ・メモリ内に常駐する命令によって定めかつ実装するようにし、そしてコンピュータ・プロセッサによって実行する。
【００４４】
本発明によるパーザの一例の特定のインターフェースおよびインターフェース関数については、本願の一部をなすAppendix Ａに詳細に記述してある。Appendixは、“Windows NT HID Client Design Guide"の表題を有し、Windows NTオペレーティング・システム上における本発明の現在の実現例について記述している。これは、本発明の現実施形態に実装する種々の関数を含んでいる。本発明に最も関連深い関数については、図４を参照しながら、機能的および概念的にここで説明する。
【００４５】
図４は、クライアント・プログラム１０２およびパーザ１３０を示す。パーザ１３０は、クライアント・プログラム１０２により従来の手段を通じてコールが可能な複数のインターフェース関数を定める即ち露出(expose)する。このような関数は、図４において、パーザ・ブロック１３０に至る線を付した円で示してある。これらの関数は、記述子解析関数１３２、１つ以上の項目検索関数１３３，および集合体識別関数１３４を含む。これらの関数は、Ｃのような高水準コンパイル言語でこれらの関数をプログラムするというように、標準的なプログラミング技法を用いて実装する。各関数は、１つ以上の引数を受け付け、１つ以上の値またはデータ項目を、コール元のプログラムに返す。図４は、本発明の最も関連深い引数を示す。Appendix Ａは、関数の引数および返す値のより詳細な仕様を、本発明の実際の実施形態の１つに関連付けて示している。
【００４６】
記述子解析関数１３２は、ＨＩＤクラス・ドライバ１０６から得た、実際のＨＩＤレポート記述子を含む関数引数を受ける。この引数によってコールされたことに応答して、記述子解析関数１３２は、そのレポート記述子を解析し、そして解析レポート記述子を含むデータ構造を作成する。このデータ構造は、好ましくは、そのデータ構造へのポインタを渡すことによって、クライアント・プログラムに返す。
【００４７】
通常、このデータ構造は、生のレポート記述子の拡張バージョンである。このデータ構造は、概略的に、個々のボタン型制御部、値型制御部、またはアレイ状データ項目に対応する、データ項目記述のアレイとして配列する。特定のデータ項目に対応するデータ項目記述は、そのデータ項目を得ることができるレポート、当該レポート内におけるその位置およびサイズ、並びにそのＨＩＤ特性（物理的最小／最大、論理的最小／最大、単位等を含む）を示す。データ項目記述内のこれ以外の情報には、対応するデータ項目の使用法（ページおよびインデックス）、それがボタンまたは値のどちらに対応するのか、それを個々のデータ項目、ビット・フィールド、またはアレイの一部の内どれとして報告するのか、項目はある集合体の一部であるのか、もしそうであれば、どの集合体（群）か等を含む。
【００４８】
解析レポート記述は、特定のデバイスが発生したレポートの最大長、およびレポートＩＤをそれぞれのレポートに付加すべきか否かについての指示も与える。この情報は、ＨＩＤクラス・ドライバ１０６がその正規化ステップを実行するために用いる。
【００４９】
端的に言えば、データ構造の各エレメントは、ある制御部または制御部のアレイの完全な記述を含む。これは、生のレポート記述子とは劇的な対照をなし、生のレポート記述子では、制御記述は、（グローバル変数および状態セーブ／復元コマンドの潜在的な存在によって）それらが発生する前後関係に大きく依存するため、所与のデータ項目の包括的な記述を抽出するには、広範な解析が必要となる。記述子解析関数１３２が返すデータ構造に用いる正確な配列およびプロトコルは、それがレポートに関して必要な情報を簡潔かつ包括的に明記することを除いて、さほど重要ではない。
【００５０】
更に、解析レポート記述において用いる特定の構造は、パーザ自体にのみ意味を有する。レポート記述子は、記述子解析関数１３２から要求元クライアントに返すが、本発明による項目検索ステップは、パーザ１３０が実行する関数を他にも必要とし、その中でパーザは解析レポート記述子を利用する。本発明によれば、コール元のクライアント・プログラムは、解析レポート記述を引数として項目検索関数に供給する以外は、解析レポート記述を用いる必要は全くない。
【００５１】
項目検索関数１３３は、クライアント・プログラムがコールして、指定された使用法に対応するデータ項目を検索する。各検索関数１３３は、
・解析レポート記述（記述子解析関数１３２を用いて得た）、
・ＨＩＤレポート（ＨＩＤクラス・ドライバ１０６から得た）、
・ＨＩＤ使用法仕様、および
・レポート記述子内で参照するＨＩＤ集合体を指定する、オプションの集合体ＩＤ
を含む引数を受け取る。
【００５２】
これらの引数に応答して、項目検索関数は、指示されたＨＩＤレポートを検査し、引数内に供給されているのと同じ使用法仕様を有する１つ以上のデータ項目を発見し、そしてそのデータ項目（群）を要求元クライアントに返す。解析レポート記述は、所与の使用法仕様に対応する項目を突き止めるのに使用する。集合体ＩＤが引数に含まれている場合、項目検索関数は、返すデータ項目を、指定されている集合体内のものに限定する。
【００５３】
Appendix Ａは、“HidP_GetUsages"と名付けた、項目検索インターフェース関数を一例として記述している。これは、ボタン検索関数の一例である。この例におけるＨＩＤ使用法仕様は、使用法ページのみを含む。この関数は、ＨＩＤレポートを探索して、所与の使用法ページ内にある使用法インデックスに対応する各データ項目を求め、そしてＨＩＤレポートがインデックス・アレイを含むかあるいはビット・フィールドを含むかには無関係に、押圧されたＨＩＤボタンに対応する使用法インデックスのアレイを返す。
【００５４】
“HidP_GetUsageValue"は、Appendix Ａに記述してある項目検索関数の別の例である。この関数では、使用法仕様は、使用法ページおよび使用法インデックス双方から成っている。この関数は、指示されたＨＩＤレポート内を探索して、指定した使用法ページおよび使用法インデックスに対応するデータ項目を求め、そして当該レポート内において発見した場合、このようなデータ項目（この場合、マルチビット値）を返す。
【００５５】
“HidP_GetUsageValueArray"は、項目検索関数の更に別の例である。この関数は、使用法ページおよび使用法インデックスを含む引数を受け取り、そして対応する値型データ項目のアレイを返す。この関数は、単一の使用法に対して多数のデータ項目を含む使用法と共に用いる。
【００５６】
これらの項目検索関数は全て、正規化ＨＩＤレポートを受け取るように定めてある、ということに注意されたい。項目検索関数に渡す解析レポート記述は、正規化レポートに基づいている。また、各項目検索関数は、２つの異なったものの一方を返すことにも注意されたい。即ち、データ項目（群）、または受け取った使用法仕様を有する制御部が、指示したレポートを発生したデバイス上で利用可能か否かを示すエラー・コードの一方である。より具体的には、エラー・コードは、指定した使用法を有する制御部が対象のデバイス上では利用可能でないこと、または当該制御部はそのデバイス上で利用可能であるが、提出したレポートでは利用可能でない（後続のレポートにおいて利用可能である可能性はある）ことのいずれかを示す。
【００５７】
パーザ１３０が露出するインターフェース関数は、更に、集合体識別関数１３４を含む。この関数は、ＨＩＤ集合体を扱う際にアプリケーション・プログラムを補佐するために設けたものである。先に注記したように、集合体ＩＤは、項目検索関数に対するオプションのパラメータである。集合体ＩＤは、集合体識別関数１３４を通じて獲得する。
【００５８】
集合体識別関数１３４は、記述子解析関数１３２を用いることによって既に得ている、解析レポート記述から成る引数を受け取る。この記述に基づいて、本関数は、ＨＩＤ集合体、それらのＨＩＤ使用法、およびそれらの関係を特定するデータ構造のアレイを返す。このアレイ内の集合体の順序は、各集合体毎に固有の集合体ＩＤを示す。アレイ内の各データ構造は、１つの集合体を表し、そしてその使用法と、およびアレイ内において関連する集合体へのインデックスとを指定する。例えば、データ構造は、親集合体（１つの場合）、兄弟(sibling)の連結リストにおける次の兄弟、および子の連結リストにおける第１の子を参照する。これによって、クライアントはネスト状の集合体の構造を容易に判定することができ、更に、異なった制御部に関連する追加の意味を拾い集めることができる。二重データ項目が利用可能である場合、それらが属する集合体に基づいて、これらを識別することができる。集合体識別関数の具体的な例について、Appendix Ａに記述した、“HidP_GetLinkCollectionNodes"関数および“HIDP_LINK_COLLECTION_NODE"構造を参照されたい。
【００５９】
これらの関数は、ＨＩＤデバイスからデータ項目を検索するプロセスを大幅に簡単化する。本発明によるＨＩＤデータを読み取る方法は、ＨＩＤレポート記述子を得、そしてこれを記述子解析関数１３２を通じてパーザ１３０に提出する初期ステップを含む。パーザは、その記述子を解析し、レポート記述子に基づいて、解析レポート記述を返すステップを実行する。これらのステップは、初期化シーケンスの間に実行する。
【００６０】
ＨＩＤデバイスからデータを読み取るために、クライアント・プログラムは、ＨＩＤクラス・ドライバ１０６からＨＩＤレポートを得るステップと、ＨＩＤレポート、解析レポート記述、使用法仕様、およびオプションの集合体ＩＤから成る引数を用いて、項目検索関数１３３をコールするステップと、を実行する。項目検索関数（パーザ１３０によって実装する）は、指示されたＨＩＤレポートを探索して、この関数に対する引数の中で指示したのと同じ使用法仕様を有する１つ以上のデータ項目を求め、そしてこれらの項目をコール元のクライアント・プログラムに返す。集合体ＩＤを指定する場合、探索は指定されたデータ項目の集合体に限定する。このプロセスは、後続のＨＩＤレポートについて繰り返し、後続の入力データを読み取る。
【００６１】
書き込みも上記と同様に行う。パーザは、ＨＩＤデバイスに書き込むためのレポートを準備する、１つ以上の項目書き込みインターフェース関数を含む。各項目書き込み関数は、データ項目（または複数のデータ項目）、解析レポート記述、ＨＩＤレポート、使用法仕様、およびオプションの集合体ＩＤを含む引数から成る。最初に、ＨＩＤレポートをオール・ゼロに初期化する。項目書き込み関数は、このレポート内の適切な場所を決定し、指定した使用法に基づいて、このレポート内にデータ項目を適切に位置付け、フォーマットを行う。集合体ＩＤを指定する場合、データ項目は、その集合体に対して適切に位置付ける。また、項目書き込み関数は、指定した使用法が位置するレポートに対応して、適正なレポートＩＤをそのレポートに書き込む。次に、この関数はレポートを要求元のクライアント・プログラムに返し、そして要求元のクライアント・プログラムは、このレポートをクラス・ドライバ１０６を通じて、ＨＩＤデバイスに書き込む。多数の使用法を書き込む場合、クライアントは、レポートをＨＩＤデバイスに書き込む前に、同じレポート（異なった使用法を指定する）を用いて項目書き込み関数を数回コールすることができる。但し、指定する使用法が同じレポート内にある場合に限る。それら使用法の内１つが異なったレポートからのものである場合、エラー・コードを返す。加えて、指定した使用法がいずれのレポート内でも利用可能でない場合、またはＨＩＤレポート・フォーマットの制約によって、提出したレポート内に追加の指定した使用法を書き込むことができない場合にも、エラー・コードを返す。
【００６２】
結論
本発明は、従来技術に対する著しい改良を与えるものである。従来は、アプリケーション・プログラムが、ＨＩＤレポート・データの解読を担当していた。異なったデバイスからのレポートは互いに非常に違っているため、これは非常に難しいタスクであった。しかしながら、本発明を用いれば、多数のＨＩＤデバイスをサポートするために必要な作業は大幅に減少する。一旦初期化が完了したなら、要求元クライアントは、１つのＨＩＤ使用法より少し多い指定を行うだけでよく、項目検索関数がＨＩＤレポートを解析し、要求された使用法を返す。クライアントによるそれ以上の作業は全くない。クライアントは、データ項目がＨＩＤレポート内においてインデックス・アレイとしてフォーマットされていようが、ビット・フィールドとしてフォーマットされていようが、同じ検索機構を用いる。
【００６３】
この機能性の利点は相当なものである。比較的単純なゲーム・プログラムが、ジョイスティックのＸ値およびＹ値のみを利用する場合を想定する。従来では、ゲームは、単一のタイプのＨＩＤジョイスティックと共に使用するように構成することができた。あるいは非常に複雑な解析コンポーネントを伴って設計し、いずれのＨＩＤジョイスティックからもどのようにＸ値およびＹ値を読み取るのかについて判定を行うことができた。しかしながら、本発明を用いると、ゲームは単にレポートを検索し、次いで項目検索関数からＸ／Ｙジョイスティックの使用法を要求すればよい。ゲーム・プログラムの観点からは、今や次の可変のファクタは無関係となる。即ち、ジョイスティックが生成するレポート数、レポートのサイズ、レポートがレポートＩＤを含むか否か、並びにレポート内におけるデータ項目の配列およびフォーマッティングは無関係である。ゲーム・プログラムはこれらのファクタを全て無視することができ、しかもＸ／Ｙジョイスティックの使用法を有するあらゆるＨＩＤジョイスティックを用いても機能する。これは、ジョイスティックが多数の追加制御部を有し、これらがゲーム・プログラムによって用いられない場合にも当てはまる。新しい使用法を備えた追加の制御部を有する新しいジョイスティックでも、このゲーム・プログラムと共に機能する（新しい制御部を利用しない場合でも機能する）。
【００６４】
更に、本発明は、アプリケーション・プログラムが最適に利用する制御部よりも少ない制御部を有する新しいデバイスを、アプリケーション・プログラムが扱うための簡単で優雅な方法を提供する。このようなデバイスを接続する場合、項目検索関数は、当該デバイス内に存在しない使用法に対応するデータ項目に対するいずれのクエリにも応答して、エラー値を返す。このとき、アプリケーション・プログラムは、次に、異なった手段によってそれと同等の機能性を与える処置を講ずることができる。
【００６５】
同様に、レポートの正規化は、クライアント・プログラムおよびパーザの双方に対して、大きな利点を与える。レポートの正規化のために、クライアントは単一のレポートを容易に読み出すことができる。加えて、このようなサイズ正規化は、データをパーザ関数に渡すのを一層容易にする。一貫性をもってレポートＩＤをレポートに付加することにより、レポート内のデータ項目のインデックス処理が簡単となり、データは常にレポートの２番目のバイトから始まることとなる。
【００６６】
本発明の更に別の利点は、集合体記述が、容易に解読可能なアレイ・フォーマットで、クライアント・プログラムに利用可能となることである。これによって、クライアントは、集合体ノードの簡単化リストを、それらの各使用法と共に得ることができる。更に、これによって、クライアントは、項目検索関数に集合体をオプションとして指定して、要求するデータ項目を一層特定して記述することができる。
【００６７】
以上、構造的特徴および／または方法論的ステップに特有の言語で本発明の説明を行ったが、特許請求の範囲で定めた本発明は、必ずしも上述の特定の構造およびステップに限定されるものではないことは理解されよう。これら特定の構造およびステップは、単に、特許を請求する発明を実施する形態の一例として開示したものである。
【図面の簡単な説明】
【図１】本発明のための動作環境の一例のブロック図。
【図２】本発明によるＨＩＤデータ通信システムおよびアーキテクチャを示すブロック図。
【図３】本発明によるＨＩＤレポートの正規化を示すブロック図。
【図４】本発明によるパーザ・インターフェース関数を示すブロック図。
【符号の説明】
２０    パーソナル・コンピュータ
１００    ＨＩＤデバイス
１０２    クライアント・プログラム
１０４    ＨＩＤトランスポート・レイヤ
１０６    ＨＩＤクラス・ドライバ
１０８，１１０    レポート
１０９，１１１    正規化したレポート
１３０    パーザ
１３２    記述子解析関数
１３３    項目検索関数
１３４    集合体識別関数
【図１】
0004298817.tif 000002
【図２】
0004298817.tif 000003
【図３】
0004298817.tif 000004
【図４】
0004298817.tif 000005