(57)【要約】【課題】フロー制御の多重化による冗長性を防止することができる通信制御システム、通信制御方法、通信制御用プログラム及び記憶媒体を提供する。【解決手段】ある層のプロトコルとしてＵＳＢ１．１とＵＳＢ２．０のどちらかが、そのプロトコルの上位層の意思にかかわらず、選択される場合において、ＵＳＢ１．１が選択されたときには、その上位層にはフロー制御機能を持つプロトコル、例えば、ＩＥＥＥ１２８４．４−２０００が選択され、ＵＳＢ２．０が選択されたときには、フロー制御機能を持たないプロトコルが選択される。【選択図】      図２
2004334798.tif 000002
【特許請求の範囲】
【請求項１】
２つの機器の間で通信を行うための物理チャネルまたは論理チャネルを構築するときに、その物理チャネル又は論理チャネルを構築する通信プロトコルを２つの機器間でのネゴシエーションによって決定する決定手段と、
前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含むか否かを判別する判別手段と、
前記ネゴシエーションによって決定された通信プロトコルの上位層に設定するプロトコルを選択する選択手段と、
前記選択手段で選択されたプロトコルを用いて通信を行う通信手段とを備える通信制御システムにおいて、
前記判別手段により前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含むと判別された場合には、前記選択手段は前記ネゴシエーションによって決定された通信プロトコルの上位層にフロー制御機能を含まないプロトコルを選択し、前記判別手段により前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含まないと判別された場合には、前記選択手段は前記ネゴシエーションによって決定された通信プロトコルの上位層にフロー制御機能を含むプロトコルを選択するように構成されていることを特徴とする通信制御システム。
【請求項２】
前記ネゴシエーションによって決定される通信プロトコルがＵＳＢ１．０若しくはＵＳＢ１．１であるか又はＵＳＢ２．０であるときに、決定された通信プロトコルがこれらの内のいずれであるかを前記選択手段に通知する通知手段を備え、
前記選択手段は、前記通知手段による通知がＵＳＢ１．０若しくはＵＳＢ１．１であるときと、ＵＳＢ２．０であるときとで異なるプロトコルを、前記ネゴシエーションによって決定された通信プロトコルの上位層に設定するプロトコルとして選択することを特徴とする請求項１記載の通信制御システム。
【請求項３】
前記選択手段は、記通知手段による通知がＵＳＢ１．０若しくはＵＳＢ１．１であるときは、フロー制御機能を有するプロトコルを、前記ネゴシエーションによって決定された通信プロトコルの上位層に設定するプロトコルとして選択することを特徴とする請求項１又は２記載の通信制御システム。
【請求項４】
前記フロー制御機能を有するプロトコルはＩＥＥＥ１２８４．４であることを特徴とする請求項３記載の通信制御システム。
【請求項５】
前記ネゴシエーションによって決定される通信プロトコルがＵＳＢ１．０若しくはＵＳＢ１．１であるか又はＵＳＢ２．０であるときに、前記ネゴシエーションによって決定された通信プロトコルの上位層は、前記ネゴシエーションによって決定された通信プロトコルにより決定することを特徴とする請求項３記載の通信制御システム。
【請求項６】
前記ネゴシエーションによって決定される通信プロトコルがＵＳＢ１．０若しくはＵＳＢ１．１であるか又はＵＳＢ２．０で、前記決定された通信プロトコルの上位層が前記ネゴシエーションによって決定された通信プロトコルにより決定するとき、前記２つの機器の一方がその決定された上位層の通信プロトコルを、ＵＳＢ２．０が規定するｖｅｎｄｏｒｕｎｉｑｕｅコマンドを用いて、前記２つの機器の他方に通知することを特徴とする請求項３記載の通信制御システム。
【請求項７】
前記２つの機器の一方が、フロー制御機能を有するプロトコルを上位層の通信プロトコルとして選択した場合に、その選択をｖｅｎｄｏｒｕｎｉｑｕｅコマンドを用いて前記２つの機器の他方に通知することを特徴とする請求項６記載の通信制御システム。
【請求項８】
前記２つの機器の一方が、フロー制御機能を有する予め指定されたプロトコルを上位プロトコルの１つとして選択した場合に、前記２つの機器の他方は、前記２つの機器の一方がそのプロトコルを選択したことを、前記ネゴシエーションによって決定された通信プロトコルがＵＳＢ２．０であることによって検知することを特徴とする請求項３記載の通信制御システム。
【請求項９】
２つの機器の間で通信を行うための物理チャネルまたは論理チャネルを構築するときに、その物理チャネル又は論理チャネルを構築する通信プロトコルを２つの機器間でのネゴシエーションによって決定する通信制御システムにおいて、
前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含む場合には、前記２つの機器の各々が前記ネゴシエーションによって決定された通信プロトコルの上位層にフロー制御機能を含まないプロトコルを選択し、前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含まない場合には、前記２つの機器の各々が前記ネゴシエーションによって決定された通信プロトコルの上位層にフロー制御機能を含むプロトコルを選択し、前記２つの機器の各々が互いに通信を行うように構成されていることを特徴とする通信制御システム。
【請求項１０】
２つの機器の間で通信を行うための物理チャネルまたは論理チャネルを構築するときに、その物理チャネル又は論理チャネルを構築する通信プロトコルを２つの機器間でのネゴシエーションによって決定する決定ステップと、
前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含むか否かを判別する判別ステップと、
前記ネゴシエーションによって決定された通信プロトコルの上位層に設定するプロトコルを選択する選択ステップと、
前記選択ステップで選択されたプロトコルを用いて通信を行う通信ステップとを備える通信制御方法において、
前記判別ステップにより前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含むと判別された場合には、前記選択ステップは前記ネゴシエーションによって決定された通信プロトコルの上位層にフロー制御機能を含まないプロトコルを選択し、前記判別ステップにより前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含まないと判別された場合には、前記選択ステップは前記ネゴシエーションによって決定された通信プロトコルの上位層にフロー制御機能を含むプロトコルを選択することを特徴とする通信制御方法。
【請求項１１】
コンピュータが実行する通信制御用プログラムにおいて、
２つの機器の間で通信を行うための物理チャネルまたは論理チャネルを構築するときに、その物理チャネル又は論理チャネルを構築する通信プロトコルを２つの機器間でのネゴシエーションによって決定する決定ステップと、
前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含むか否かを判別する判別ステップと、
前記ネゴシエーションによって決定された通信プロトコルの上位層に設定するプロトコルを選択する選択ステップと、
前記選択ステップで選択されたプロトコルを用いて通信を行う通信ステップとを前記コンピュータに実行させ、さらに、
前記判別ステップにより前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含むと判別された場合には、前記選択ステップは前記ネゴシエーションによって決定された通信プロトコルの上位層にフロー制御機能を含まないプロトコルを選択し、前記判別ステップにより前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含まないと判別された場合には、前記選択ステップは前記ネゴシエーションによって決定された通信プロトコルの上位層にフロー制御機能を含むプロトコルを選択することを前記コンピュータに実行させることを特徴とする通信制御用プログラム。
【請求項１２】
コンピュータが実行する通信制御用プログラムを格納することを特徴とするコンピュータで読み取り可能な記憶媒体において、
２つの機器の間で通信を行うための物理チャネルまたは論理チャネルを構築するときに、その物理チャネル又は論理チャネルを構築する通信プロトコルを２つの機器間でのネゴシエーションによって決定する決定ステップと、
前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含むか否かを判別する判別ステップと、
前記ネゴシエーションによって決定された通信プロトコルの上位層に設定するプロトコルを選択する選択ステップと、
前記選択ステップで選択されたプロトコルを用いて通信を行う通信ステップとを前記コンピュータに実行させ、さらに、
前記判別ステップにより前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含むと判別された場合には、前記選択ステップは前記ネゴシエーションによって決定された通信プロトコルの上位層にフロー制御機能を含まないプロトコルを選択し、前記判別ステップにより前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含まないと判別された場合には、前記選択ステップは前記ネゴシエーションによって決定された通信プロトコルの上位層にフロー制御機能を含むプロトコルを選択することを前記コンピュータに実行させる通信制御用プログラムを格納することを特徴とする記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
２つ以上の電子機器のデータ交換の際に使用されるプロトコルの選択を制御する通信制御システム、通信制御方法、通信制御用プログラム及び記憶媒体に関する。
【０００２】
【従来の技術】
従来は、２つの電子機器がＵＳＢ  （Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）  ｖｅｒｓｉｏｎ１．０  （またはｖｅｒｓｉｏｎ  １．１）か  ＵＳＢ  ｖｅｒｓｉｏｎ  ２．０でデータ交換するとき、ＵＳＢプロトコルの上位層はＵＳＢのｖｅｒｓｉｏｎを意識せずに上位のプロトコルスタックを固定的に決定していた。
【０００３】
例えば、ＵＳＢ  ｖｅｒｓｉｏｎ  １．０（以下「ｖｅｒｓｉｏｎ」の文字を省略する）を下位層に利用することを想定して通信プロトコルスタックを構築した場合、バスの利用効率の向上を目的としてＵＳＢ１．０の通信上位層としてＩＥＥＥ１２８４．４等のデータのフロー制御機能を持つプロトコルを選択することがあった（例えば、特許文献１参照）。
【０００４】
【特許文献１】
特開２０００−２１５１４４号公報
【０００５】
【発明が解決しようとする課題】
しかし、ＵＳＢ  １．０の上位互換性を持つＵＳＢ  ２．０は、ＵＳＢ  １．０において規定されていなかった、データのフロー制御機能（ＰＩＮＧ、ＮＡＫ、ＮＹＥＴ）を持つ。ＵＳＢ  ２．０では  ＵＳＢ  ２．０自体がフロー制御機能をもつため、ＵＳＢ  ２．０の上位プロトコルとしてデータのフロー制御機能を持つプロトコルが選択された場合、フロー制御機能が２重になり、冗長性が増加し、通信効率が低下する問題がある。
【０００６】
本発明は、かかる点に鑑みてなされたものであり、フロー制御の多重化による冗長性を防止することができる通信制御システム、通信制御方法、通信制御用プログラム及び記憶媒体を提供することを目的とする。
【０００７】
【課題を解決するための手段】
上記目的を達成するために、請求項１の通信制御システムは、２つの機器の間で通信を行うための物理チャネルまたは論理チャネルを構築するときに、その物理チャネル又は論理チャネルを構築する通信プロトコルを２つの機器間でのネゴシエーションによって決定する決定手段と、前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含むか否かを判別する判別手段と、前記ネゴシエーションによって決定された通信プロトコルの上位層に設定するプロトコルを選択する選択手段と、前記選択手段で選択されたプロトコルを用いて通信を行う通信手段とを備える通信制御システムにおいて、前記判別手段により前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含むと判別された場合には、前記選択手段は前記ネゴシエーションによって決定された通信プロトコルの上位層にフロー制御機能を含まないプロトコルを選択し、前記判別手段により前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含まないと判別された場合には、前記選択手段は前記ネゴシエーションによって決定された通信プロトコルの上位層にフロー制御機能を含むプロトコルを選択するように構成されていることを特徴とする。
【０００８】
請求項２の通信制御システムは、請求項１記載の通信制御システムにおいて、前記ネゴシエーションによって決定される通信プロトコルがＵＳＢ１．０若しくはＵＳＢ１．１であるか又はＵＳＢ２．０であるときに、決定された通信プロトコルがこれらの内のいずれであるかを前記選択手段に通知する通知手段を備え、前記選択手段は、前記通知手段による通知がＵＳＢ１．０若しくはＵＳＢ１．１であるときと、ＵＳＢ２．０であるときとで異なるプロトコルを、前記ネゴシエーションによって決定された通信プロトコルの上位層に設定するプロトコルとして選択することを特徴とする。
【０００９】
請求項３の通信制御システムは、請求項１又は２記載の通信制御システムにおいて、前記選択手段は、記通知手段による通知がＵＳＢ１．０若しくはＵＳＢ１．１であるときは、フロー制御機能を有するプロトコルを、前記ネゴシエーションによって決定された通信プロトコルの上位層に設定するプロトコルとして選択することを特徴とする。
【００１０】
請求項４の通信制御システムは、請求項３記載の通信制御システムにおいて、前記フロー制御機能を有するプロトコルはＩＥＥＥ１２８４．４であることを特徴とする。
【００１１】
請求項５の通信制御システムは、請求項３記載の通信制御システムにおいて、前記ネゴシエーションによって決定される通信プロトコルがＵＳＢ１．０若しくはＵＳＢ１．１であるか又はＵＳＢ２．０であるときに、前記ネゴシエーションによって決定された通信プロトコルの上位層は、前記ネゴシエーションによって決定された通信プロトコルにより決定することを特徴とする。
【００１２】
請求項６の通信制御システムは、請求項３記載の通信制御システムにおいて、前記ネゴシエーションによって決定される通信プロトコルがＵＳＢ１．０若しくはＵＳＢ１．１であるか又はＵＳＢ２．０で、前記決定された通信プロトコルの上位層が前記ネゴシエーションによって決定された通信プロトコルにより決定するとき、前記２つの機器の一方がその決定された上位層の通信プロトコルを、ＵＳＢ２．０が規定するｖｅｎｄｏｒｕｎｉｑｕｅコマンドを用いて、前記２つの機器の他方に通知することを特徴とする。
【００１３】
請求項７の通信制御システムは、請求項６記載の通信制御システムにおいて、前記２つの機器の一方が、フロー制御機能を有するプロトコルを上位層の通信プロトコルとして選択した場合に、その選択をｖｅｎｄｏｒｕｎｉｑｕｅコマンドを用いて前記２つの機器の他方に通知することを特徴とする。
【００１４】
請求項８の通信制御システムは、請求項３記載の通信制御システムにおいて、前記２つの機器の一方が、フロー制御機能を有する予め指定されたプロトコルを上位プロトコルの１つとして選択した場合に、前記２つの機器の他方は、前記２つの機器の一方がそのプロトコルを選択したことを、前記ネゴシエーションによって決定された通信プロトコルがＵＳＢ２．０であることによって検知することを特徴とする。
【００１５】
請求項９の通信制御システムは、２つの機器の間で通信を行うための物理チャネルまたは論理チャネルを構築するときに、その物理チャネル又は論理チャネルを構築する通信プロトコルを２つの機器間でのネゴシエーションによって決定する通信制御システムにおいて、前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含む場合には、前記２つの機器の各々が前記ネゴシエーションによって決定された通信プロトコルの上位層にフロー制御機能を含まないプロトコルを選択し、前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含まない場合には、前記２つの機器の各々が前記ネゴシエーションによって決定された通信プロトコルの上位層にフロー制御機能を含むプロトコルを選択し、前記２つの機器の各々が互いに通信を行うように構成されていることを特徴とする。
【００１６】
請求項１０の通信制御方法は、２つの機器の間で通信を行うための物理チャネルまたは論理チャネルを構築するときに、その物理チャネル又は論理チャネルを構築する通信プロトコルを２つの機器間でのネゴシエーションによって決定する決定ステップと、前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含むか否かを判別する判別ステップと、前記ネゴシエーションによって決定された通信プロトコルの上位層に設定するプロトコルを選択する選択ステップと、前記選択ステップで選択されたプロトコルを用いて通信を行う通信ステップとを備える通信制御方法において、前記判別ステップにより前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含むと判別された場合には、前記選択ステップは前記ネゴシエーションによって決定された通信プロトコルの上位層にフロー制御機能を含まないプロトコルを選択し、前記判別ステップにより前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含まないと判別された場合には、前記選択ステップは前記ネゴシエーションによって決定された通信プロトコルの上位層にフロー制御機能を含むプロトコルを選択することを特徴とする。
【００１７】
請求項１１の通信制御用プログラムは、コンピュータが実行する通信制御用プログラムにおいて、２つの機器の間で通信を行うための物理チャネルまたは論理チャネルを構築するときに、その物理チャネル又は論理チャネルを構築する通信プロトコルを２つの機器間でのネゴシエーションによって決定する決定ステップと、前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含むか否かを判別する判別ステップと、前記ネゴシエーションによって決定された通信プロトコルの上位層に設定するプロトコルを選択する選択ステップと、前記選択ステップで選択されたプロトコルを用いて通信を行う通信ステップとを前記コンピュータに実行させ、さらに、前記判別ステップにより前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含むと判別された場合には、前記選択ステップは前記ネゴシエーションによって決定された通信プロトコルの上位層にフロー制御機能を含まないプロトコルを選択し、前記判別ステップにより前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含まないと判別された場合には、前記選択ステップは前記ネゴシエーションによって決定された通信プロトコルの上位層にフロー制御機能を含むプロトコルを選択することを前記コンピュータに実行させることを特徴とする。
【００１８】
請求項１２の記憶媒体は、コンピュータが実行する通信制御用プログラムを格納することを特徴とするコンピュータで読み取り可能な記憶媒体において、２つの機器の間で通信を行うための物理チャネルまたは論理チャネルを構築するときに、その物理チャネル又は論理チャネルを構築する通信プロトコルを２つの機器間でのネゴシエーションによって決定する決定ステップと、前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含むか否かを判別する判別ステップと、前記ネゴシエーションによって決定された通信プロトコルの上位層に設定するプロトコルを選択する選択ステップと、前記選択ステップで選択されたプロトコルを用いて通信を行う通信ステップとを前記コンピュータに実行させ、さらに、前記判別ステップにより前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含むと判別された場合には、前記選択ステップは前記ネゴシエーションによって決定された通信プロトコルの上位層にフロー制御機能を含まないプロトコルを選択し、前記判別ステップにより前記ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含まないと判別された場合には、前記選択ステップは前記ネゴシエーションによって決定された通信プロトコルの上位層にフロー制御機能を含むプロトコルを選択することを前記コンピュータに実行させる通信制御用プログラムを格納することを特徴とする。
【００１９】
【発明の実施の形態】
以下、本発明の実施の形態について図面を参照して説明する。
【００２０】
図１はＵＳＢ１．１とＵＳＢ２．０とのプロトコル構成における差異を示す図である。
【００２１】
ＵＳＢ１．１とＵＳＢ２．０の大きな違いの一つにフロー制御機能の有無がある。ＵＳＢ１．ｘにおいてＯｕｔ  ｔｒａｎｓａｃｔｉｏｎにおけるＮＡＫ応答は、ＴＯＫＥＮ、ＤＡＴＡ  ｐａｃｋｅｔの転送が終了した後にしか発行できない。このため、多数のＮＡＫ応答が必ずしもハード的又は制御的な異常ではないようなデバイス（例えば、紙なし又は紙づまり等の要因のためＮＡＫ応答の回数が多いプリンタ）が接続されると、ＵＳＢ  ｂｕｓにＯＵＴ→ＤＡＴＡ→ＮＡＫが多数繰り返し発行されることになる。このＯＵＴ→ＤＡＴＡ→ＮＡＫは、実際にＵＳＢ  Ｂｕｓを占有する期間が長い上、データ転送としては無効であるため、ＵＳＢ  Ｂｕｓでの実際の転送レートを低下させることになり、ＵＳＢバスに他のデバイスが接続されているときに、そのデバイスとホスト間の通信速度を無意味に遅くすることになる。
【００２２】
ところが、ＵＳＢ２．０では、ＵＳＢ１．１では存在しなかったＰＩＮＧとＮＹＥＴと言う新しいパケットを仕様として追加し、このパケットでのネゴシエーションによって、ＵＳＢプロトコルレベルでのフロー制御を可能にしている。
【００２３】
Ｂｕｌｋ  ＯＵＴデバイスに対して、ホストはまずＰＩＮＧパケットによって１パケット分のデータを受け付けるための空きＢｕｆｆｅｒがＢｕｌｋ  ＯＵＴデバイスにあるかどうかを問い合わせる。Ｂｕｌｋ  ＯＵＴデバイスはデータ受信が可能な場合にはＡＣＫで応答し、データ受信が不可能である場合にはＮＡＣで応答する。ホストはＰＩＮＧパケットに対してＮＡＫ応答を受信している限り、Ｂｕｌｋ  ＯＵＴデバイスの受信Ｂｕｆｆｅｒの空きがないと判断し、ＰＩＮＧを繰り返し送り、Ｂｕｌｋ  ＯＵＴデバイスの受信Ｂｕｆｆｅｒの空き状況を確認し続ける。
【００２４】
ホストが、ＰＩＮＧパケットに対するＢｕｌｋ  ＯＵＴデバイスのＡＣＫ応答を受信したら、実際に送信するデータを内包するパケットをＢｕｌｋ−ｏｕｔ転送する。Ｂｕｌｋ  ＯＵＴデバイスはＢｕｌｋ−ｏｕｔ転送に対してＡＣＫ，ＮＹＥＴ，ＮＡＫ応答のいずれかで応答する。
【００２５】
Ｂｕｌｋ  ＯＵＴデバイスのＢｕｌｋ−ｏｕｔ転送に対するＡＣＫ応答は、次のＢｕｌｋ−ｏｕｔ転送を受信できるだけのＢｕｆｆｅｒの空きがあるので、次のＢｕｌｋ−ｏｕｔ転送によるデータ受信が可能なことを示す。このため、ホストは続けてＢｕｌｋ−ｏｕｔ転送を行うことができる。ＮＹＥＴ応答は、次のＢｕｌｋ−ｏｕｔ転送を受信できるだけのＢｕｆｆｅｒの空きがないため、次のＢｕｌｋ−ｏｕｔ転送をその時点では受信できないことを示す。このため、ホストは次のＢｕｌｋ−ｏｕｔ転送を行う代わりにＰＩＮＧパケットを送り、Ｂｕｌｋ  ＯＵＴデバイスの受信ＢｕｆｆｅｒがＢｕｌｋ−ｏｕｔ転送を受信できるだけの空きが生じるのを待つ。
【００２６】
このＰＩＮＧ、ＮＹＥＴによって無意味にＵＳＢ  Ｂｕｓのバンド幅を消費してしまうＯＵＴ→ＤＡＴＡ→ＮＡＫのシーケンスの発生を防ぎ、効率的なＵＳＢ  Ｂｕｓの利用を可能にしている。
【００２７】
しかし、現存のＵＳＢ機器では上述したＵＳＢ１．１の欠点をカバーするため、フロー制御機能を持つプロトコル、例えば、ＩＥＥＥで規定されているＩＥＥＥ１２８４．４−２０００等を上位プロトコルを具備しているケースが多い（図１の左側のスタックを参照）。この場合ではＩＥＥＥ１２８４．４−２０００のみがフロー制御機能を受け持つことになる。しかし、このスタック構成のＵＳＢ１．１スタックの部分をＵＳＢ２．０と置き換える（図１の右側のスタックを参照）と、ＩＥＥＥ１２８４．４−２０００とＵＳＢ２．０の両方がフロー制御機能を持つことにより、冗長性が発生する。そこで、本実施の形態ではＵＳＢスタックがＵＳＢ１．１とＵＳＢ２．０において、上位にフロー制御機能を持つプロトコルを使用するかどうかを決定する方法を採用した（図２のスタックを参照）。
【００２８】
具体的には、ＵＳＢネゴシエーションの結果がＵＳＢ１．１であればその上位プロトコルにフロー制御機能を持つプロトコル（例えばＩＥＥＥ１２８４．４−２０００等）を必ず採用し、ＵＳＢネゴシエーションの結果がＵＳＢ２．０であれば、その上位プロトコルにフロー制御機能を持たないプロトコルを採用、又は上位プロトコルとして何も採用しないようにする。
【００２９】
図３は、本実施の形態に係る通信制御システムをホストコンピュータ１００及びプリンタ２００に適用した模式図を示す。
【００３０】
図４は、図３におけるホストコンピュータ１００の内部構成を示すブロック図である。
【００３１】
ホストコンピュータ１００は、各構成部分を制御するＣＰＵ１と、該ＣＰＵ１のワークエリアを提供するＲＡＭ２と、各種プログラムを格納するハードディスク３と、ユーザーのコマンドを入力するマウスやキーボード等のユーザーコマンド入力装置４と、ＵＳＢポート５と、ＣＰＵ１、ＲＡＭ２、ハードディスク３、ユーザーコマンド入力装置４及びＵＳＢポート５をそれぞれ接続するメインバス８とを備えている。ハードディスク３は、プログラムを記憶できる記憶媒体であれば、どのようなものでもよく、例えば、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ、ＤＶＤ、フラッシュラム等でもよい。
【００３２】
図５は、図３におけるプリンタ２００の内部構成を示すブロック図である。
【００３３】
プリンタ２００は、各構成部分を制御するＣＰＵ１１と、該ＣＰＵ１１のワークエリアを提供するＲＡＭ１２と、各種プログラムを格納するハードディスク１３と、印字用紙に印字を実行する印字装置１４と、ＵＳＢポート１５と、ＣＰＵ１１、ＲＡＭ１２、ハードディスク１３、印字装置１４及びＵＳＢポート１５をそれぞれ接続するメインバス１８とを備えている。ハードディスク１３は、プログラムを記憶できる記憶媒体であれば、どのようなものでもよく、例えば、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ、ＤＶＤ、フラッシュラム等でもよい。
【００３４】
尚、本発明は特に断らない限り、ホストコンピュータ１００では、ＣＰＵ１がメインバス８を介してＲＡＭ２、ハードディスク３、ユーザーコマンド入力装置４及びＵＳＢポート５を制御して、本発明を実施する。プリンタ２００では、ＣＰＵ１１がメインバス１８を介してＲＡＭ１２、ＲＯＭ１３、印字装置１４及びＵＳＢポート１５を制御して、本発明を実施する。
【００３５】
図６は、ホストコンピュータ１００がプリンタ２００とＵＳＢ回線で接続されたときに、ＵＳＢスタックより上層のプロトコルススタックを構築する工程を示すフローチャートである。
【００３６】
ホストコンピュータ１００は常にＵＳＢポート５上に新しいデバイス、即ち、プリンタ２００が接続されたどうかを監視する（ステップＳ１０１）。そして、プリンタ２００が接続されれば、Ｕ  ＳＢスタックとＵＳＢコントローラを介してプリンタ２００とネゴシエーションを行い（ステップＳ１０２）、ＵＳＢ通信をＵＳＢ１．１で規定する方法で行うのか又はＵＳＢ２．０で規定する方法で行うのかを決定する（ステップＳ１０３）、即ち使用するプロトコルがＵＳＢ２．０か又はＵＳＢ１．１に決定される。このネゴシエーションの方法については、Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  Ｒｅｖｉｓｉｏｎ  ２．０に記載されているが、本発明とは直接関係がないので、その詳細は省略する。
【００３７】
そして、ホストコンピュータ１００は、プリンタ２００のＵｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  Ｒｅｖｉｓｉｏｎ  ２．０又はＵｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  Ｒｅｖｉｓｉｏｎ  １．１が規定するディスクリプション（ｄｅｓｃｒｉｐｔｉｏｎ）を読み出し（ステップＳ１０４）、ディスクリプションのクラスＩＤによりプリンタ２００がＵＳＢプリンタクラスをサポートすることが判明した場合には、ＣＰＵ１はＵＳＢプリンタクラスモジュールを上位のモジュールスタックの１つとすることを決定する（ステップＳ１０５）。
【００３８】
次いで、ＣＰＵ１はステップＳ１０３で決定したＵＳＢプロトコルがＵＳＢ１．１であるか又はＵＳＢ２．０であるかを判別する（ステップＳ１０６）。
【００３９】
ステップＳ１０６の判別の結果、ステップＳ１０３で決定したＵＳＢプロトコルがＵＳＢ１．１である場合には、ＵＳＢ１．１にはフロー制御機能がないので、ＣＰＵ１はＵＳＢ１．１モジュールのすぐ上位のプロトコルとしてフロー制御機能を持つＩＥＥＥ１２８４．４−２０００を使用する（ステップＳ１０７）。尚、ＩＥＥＥ１２８４．４−２０００については、ＩＥＥＥの規格書に記載されているが、本発明と直接には関係ないので、その説明は省略する。
【００４０】
次いで、ＣＰＵ１は、ステップＳ１０５で決定したＵＳＢプリンタクラスをＩＥＥＥ１２８４．４プロトコルのすぐ上位のプロトコルスタックのプロトコルとして使用する（ステップＳ１０８）。そして、ＵＳＢプリンタクラスを司るモジュール内の１２８４．４ＦＬＧをＯＮにして、ＵＳＢプリンタクラスの下位プロトコルがＩＥＥＥ１２８４．４であることを示し（ステップＳ１０９）、本処理を終了する。
【００４１】
上記ステップＳ１０６の判別の結果、ステップＳ１０３で決定したＵＳＢプロトコルがＵＳＢ２．０の場合には、ＵＳＢ２．０にはフロー制御機能があり、上位にはフロー制御機能を持つプロトコルは必要ないので、ＣＰＵ１は、ステップＳ１０５で決定したＵＳＢプリンタクラスのプロトコルをＵＳＢ２．０プロトコルのすぐ上位のプロトコルとして使用する（ステップＳ１１０）。そして、ＵＳＢプリンタクラスを司どるスタック内の１２８４．４ＦＬＧをＯＦＦにして、ＵＳＢプリンタクラスの下位プロトコルがＩＥＥＥ１２８４．４プロトコルでないことを示し（ステップＳ１１１）、本処理を終了する。
【００４２】
図７〜９は、ホストコンピュータ１００がプリンタ２００にデータを送信する方法を示すフローチャートである。
【００４３】
まず、ホストコンピュータ１００において、プリンタ２００にデータを送信する可能性のあるアプリケーションが起動する（ステップＳ２０１）。
【００４４】
次に、ＣＰＵ１は、アプリケーションにおいて、プリンタ２００に対してデータ送信要求が発生したか否かを判別し（ステップＳ２０２）、プリンタ２００に対してデータ送信要求が発生した場合には、送信すべきデータをＵＳＢプリンタクラスを司るモジュールに渡す（ステップＳ２０３）。
【００４５】
次いで、ＣＰＵ１は、データを受け取ったＵＳＢプリンタクラスを司るモジュール内の１２８４．４ＦＬＧがＯＮであるか否かを判別する（ステップＳ２０４）。１２８４．４ＦＬＧがＯＮである場合には、ＣＰＵ１は、すぐ下位のプロトコルがＩＥＥＥ１２８４．４プロトコルであると認識し、アプリケーションから受け取ったデータをＩＥＥＥ１２８４．４を司るモジュールに渡す（ステップＳ２０５）。ＣＰＵ１は、データを受け取ったＩＥＥＥ１２８４．４を司るモジュールにおいてＩＥＥＥ１２８４．４−２０００で規定されている方法に従い、プリンタ２００とネゴシエーションを行い、パケットサイズを取得し、そしてステップＳ２０５で受け取ったデータをパケットサイズに合わせてＩＥＥＥ１２８４．４−２０００で規定されている方法でパケット化する（ステップＳ２０６）。尚、この方法の詳細については、ＩＥＥＥの規格書のＩＥＥＥ１２８４．４−２０００に記載されているが、本発明と直接には関係ないので、その説明は省略する。
【００４６】
次いで、ＣＰＵ１は、現在プリンタ２００が受信可能なパケット数を取得し（ステップＳ２０７）、ステップＳ２０７の取得したパケット数に基づいてプリンタ２００が受信可能なパケット数は１以上であるか否か判別する（ステップＳ２０８）。
【００４７】
この判別の結果、プリンタ２００が受信可能なパケット数が１以上である場合には、ＣＰＵ１は、ステップＳ２０６でパケット化した１パケットをＵＳＢ１．１のプロトコルが規定する方法でプリンタ２００に送信し（ステップＳ２０９）、そのパケットの送信が完了するのを待つ（ステップＳ２１０）。このパケット送信が完了したときに、ステップＳ２０７でプリンタ２００が取得した受信可能なパケット数を１減らす（ステップＳ２１１）。
【００４８】
そして、ＣＰＵ１は、ステップＳ２０６で作成された全てのパケットがプリンタ２００に送信されたか否かを判別し（ステップＳ２１２）、全てのパケットの送信が完了している場合には、ステップＳ２０２に戻り、全てのパケットの送信が完了していない場合には、次のパケット送信のためにステップＳ２０８に戻る。
【００４９】
上記ステップＳ２０８の判別の結果、プリンタ２００が受信可能なパケット数が０である場合には、ＣＰＵ１は、プリンタの状態を確認するためにステップＳ２０７の処理を行う。
【００５０】
次に、上記ステップＳ２０４の判別の結果、１２８４．４ＦＬＧがＯＦＦである場合には、ＣＰＵ１は、すぐ下位のプロトコルはＵＳＢプリンタクラスであると判断し、アプリケーションから受け取ったデータをＵＳＢプリンタクラスを司るモジュールに渡す（ステップＳ２１３）。ＣＰＵ１はＵＳＢ２．０モジュールにおいてＵＳＢ２．０が規定する方法にのっとりＰＩＮＧパケットをプリンタ２００に送信する（ステップＳ２１４）。そして、プリンタ２００からの応答を待つ。
【００５１】
次いで、プリンタ２００からの応答がＡＣＫであるか又はＮＡＫであるか否かを判別する（ステップＳ２１５）。この判別の結果、プリンタ２００からの応答がＮＡＫである場合には、ＣＰＵ１は、プリンタ２００ではデータパケットの受信が不可能であると判断し、ステップＳ２１４に戻り、一定時間後再度ステップＳ２１５の判別を行う。これに対し、ステップＳ２１５の判別の結果、プリンタ２００からの応答がＡＣＫである場合には、ＣＰＵ１は、プリンタ２００ではデータパケットの受信が可能であると判断し、ＣＰＵ１はＵＳＢ２．０モジュールにおいてステップＳ２１３で受信し且つ未送出または送出が完了していないデータをＵＳＢ２．０で規定されたパケットサイズにパケット化し、プリンタ２００に送出する（ステップＳ２１６）。そして、プリンタ２００からの応答を待つ。
【００５２】
プリンタ２００からの応答がＡＣＫ若しくはＮＹＥＴであるか、又はＮＡＫであるか否かを判別する（ステップＳ２１７）。この判別の結果、プリンタ２００からの応答がＡＣＫ又はＮＹＥＴである場合には、データ送信は正常に終了したので、全てのパケットの送信が終了したか否かを判別し（ステップＳ２２１）、全てのパケットの送信が完了していればステップＳ２０２に戻る一方、全てのパケットの送信が完了していなければ、受信したプリンタ２００からの応答がＡＣＫであるか又はＮＹＥＴであるかを判別する（ステップＳ２２２）。プリンタ２００からの応答がＡＣＫである場合には、プリンタ２００では次のパケットの受信が可能なので、ＣＰＵ１は上記ステップＳ２１６の処理を行う一方、プリンタ２００からの応答がＮＹＥＴである場合には、その時点ではプリンタ２００は次のパケットを受信できないので、一定時間後ステップＳ２１４に戻り、プリンタ２００が受信可能になったかどうかを確認するためにステップＳ２１５の判別を行う。
【００５３】
ステップＳ２１７の判別の結果、プリンタ２００からの応答がＮＡＫである場合には、ＣＰＵ１はＵＳＢ２．０モジュールにおいてＵ  ＳＢ２．０が規定する方法にのっとりＰＩＮＧパケットをプリンタ２００に送信する（ステップＳ２１８）。そして、プリンタ２００からの応答を待つ。
【００５４】
次いで、プリンタ２００からの応答がＡＣＫであるか又はＮＡＫであるか否かを判別する（ステップＳ２１９）。この判別の結果、プリンタ２００からの応答がＡＣＫである場合には、ＣＰＵ１はステップＳ２１６の処理を行う一方、プリンタ２００からの応答がＮＡＫである場合には、パケット送信が異常終了したのでエラー処理を行う（ステップＳ２２０）。
【００５５】
図１０は、プリンタ２００がホストコンピュータ１００とＵＳＢ回線で接続されたときに、ＵＳＢスタックより上層のプロトコルスタックを決定する工程を示すフローチャートである。
【００５６】
プリンタ２００のＣＰＵ１１は、ホストコンピュータ１００と接続されたか否かを判別する（ステップＳ３０１）。プリンタ２００のＣＰＵ１１はホストコンピュータ１００と接続されたか否かを常に監視している。
【００５７】
ステップＳ３０１の判別の結果、プリンタ２００はホストコンピュータ１００と接続された場合には、ＣＰＵ１１はＵＳＢスタックとＵＳＢコントローラを介してホストコンピュータ１００とネゴシエーションを行い（ステップＳ３０２）、ＵＳＢ通信をＵＳＢ１．１で規定する方法で行うのか又はＵＳＢ２．０で規定する方法で行うのかを決定する（ステップＳ３０３）、即ち使用するプロトコルがＵＳＢ２．０か又はＵＳＢ１．１に決定される。
【００５８】
次いで、ＣＰＵ１１は、ステップＳ３０３で決定したＵＳＢプロトコルがＵＳＢ１．１であるか又はＵＳＢ２．０であるかを判別する（ステップＳ３０４）。
【００５９】
ステップＳ３０４の判別の結果、ステップＳ３０３で決定したＵＳＢプロトコルがＵＳＢ１．１の場合には、ＵＳＢ１．１にはフロー制御機能がないので、ＣＰＵ１１はＵＳＢ１．１モジュールのすぐ上位のプロトコルスタックとしてフロー制御機能を持つＩＥＥＥ１２８４．４−２０００を使用する（ステップＳ３０５）。尚、ＩＥＥＥ１２８４．４−２０００については、ＩＥＥＥの規格書に記載されているが、本発明と直接には関係ないので、その説明は省略する。
【００６０】
次いで、ＣＰＵ１１はプリンタ２００が予めサポートしているＵＳＢプリンタクラスをＩＥＥＥ１２８４．４モジュールのすぐ上位のプロトコルスタックとする（ステップＳ３０６）。そして、ＵＳＢプリンタクラスを司るモジュール内の１２８４．４ＦＬＧをＯＮにして、ＵＳＢプリンタクラスの下位プロトコルがＩＥＥＥ１２８４．４であることを示し（ステップＳ３０７）、本処理を終了する。
【００６１】
上記ステップＳ３０４の判別の結果、ステップＳ３０３で決定したＵＳＢプロトコルがＵＳＢ２．０の場合には、ＵＳＢ２．０にはフロー制御機能があり、上位にはフロー制御機能を持つプロトコルスタックは必要ないので、ＣＰＵ１１はプリンタ２００が予めサポートしているＵＳＢプリンタクラスをＵＳＢ２．０のすぐ上位のプロトコルとする（ステップＳ３０８）。そして、ＵＳＢプリンタクラスを司るモジュール内の１２８４．４ＦＬＧをＯＦＦにして、ＵＳＢプリンタクラスの下位プロトコルがＩＥＥＥ１２８４．４でないことを示し（ステップＳ３０９）、本処理を終了する。
【００６２】
図１１〜１３は、プリンタ２００がデータをホストコンピュータ１００から受信する方法を示すフローチャートである。
【００６３】
まず、プリンタ２００において、ホストコンピュータ１００からのデータ受信を要求する可能性のあるアプリケーションを起動する（ステップＳ４０１）。
【００６４】
次いで、ＣＰＵ１１はそのアプリケーションでデータ受信要求が発生したか否かを判別する（ステップＳ４０２）。この判別の結果、アプリケーションでデータ受信要求が発生していない場合には、該判別を繰り返す一方、アプリケーションでデータ受信要求が発生した場合には、ＣＰＵ１１はアプリケーションが確保したデータ受信バッファをＵＳＢプリンタクラスを司るモジュールに引き渡し（ステップＳ４０３）、ＵＳＢプリンタクラスが保持している１２８４．４ＦＬＧの値がＯＮであるか否かを判別する（ステップＳ４０４）。
【００６５】
ステップＳ４０４の判別の結果、ＵＳＢプリンタクラスが保持している１２８４．４ＦＬＧの値がＯＮである場合には、ＣＰＵ１１はＵＳＢプリンタクラスのすぐ下位のプロトコルがＩＥＥＥ１２８４．４であると認識し、受信バッファをＩＥＥＥ１２８４．４を司るモジュールに引き渡す（ステップＳ４０５）。そして、ＣＰＵ１１はＵＳＢ１．１モジュールスタックがホストコンピュータ１００から何かデータを受信したか否かを判別する（ステップＳ４０６）。
【００６６】
ステップＳ４０６の判別の結果、ＵＳＢ１．１を司るモジュールを介してホストコンピュータから何かデータを受信した場合には、受信したデータをＩＥＥＥ１２８４．４を司るモジュールに引き渡す（ステップＳ４０７）。ＣＰＵ１１はＩＥＥＥ１２８４．４を司るモジュールで受信したデータを解析し、その受信データがホストコンピュータ１００から来た受信可能パケット数の報告要求であるか否かを判別する（ステップＳ４０８）。尚、この詳しい解析方法については、ＩＥＥＥの規格書に記載されているが、本発明と直接には関係ないので、その説明は省略する。
【００６７】
ステップＳ４０８の判別の結果、受信したデータが受信可能パケット数の報告要求である場合には、ＣＰＵ１１はＩＥＥＥ１２８４．４を司るモジュール内のＵＳＢプリンタクラスから引き渡された受信バッファの大きさと１２８４．４パケットの大きさから受信可能なパケット数を計算し（ステップＳ４０９）、その受信可能なパケット数をＵＳＢ１．１モジュールスタックを介してホストコンピュータ１００に送出して（ステップＳ４１０）、ステップＳ４０６に戻る。
【００６８】
ステップＳ４０８の判別の結果、ホストコンピュータ１００から来た受信データが受信可能パケット数の報告要求でない場合には、ＣＰＵ１１は当該受信データがＩＥＥＥ１２８４．４−２０００で規定するデータパケットであるか否かを判別する（ステップＳ４１１）。この判別の結果、受信データがＩＥＥＥ１２８４．４−２０００で規定するデータパケットでない場合には、ＣＰＵ１１はそのデータの従った処理を実行する（ステップＳ４１２）一方、受信データがＩＥＥＥ１２８４．４−２０００で規定するデータパケットである場合には、ＣＰＵ１１は受信データをＵＳＢプリンタクラスから渡されたバッファにコピーする（ステップＳ４１３）。
【００６９】
次いで、ＣＰＵ１１はＵＳＢプリンタクラスから渡されたバッファがフル状態であるか否かを判別する（ステップＳ４１４）。ＵＳＢプリンタクラスから渡されたバッファがフル状態でない場合には、ＣＰＵ１１はステップＳ４１３の受信データにデータ送信完了報告があるか否かを判別する（ステップＳ４１５）。
【００７０】
ステップＳ４１５の判別の結果、受信データにデータ送信完了報告がない場合には、継続してホストコンピュータ１００からデータが送信されてくるものと判断され、ステップＳ４０６に戻る。一方、受信データにデータ送信完了報告がある場合には、ＣＰＵ１１はアプリケーションが確保した受信バッファに関し、バッファ受信完了報告を当該アプリケーションに報告する（ステップＳ４１６）。ＣＰＵ１１はそのアプリケーションにおいてその受信データの内容に即した処理を行う（ステップＳ４１７）。
【００７１】
上記ステップＳ４１４の判別の結果、ＵＳＢプリンタクラスから渡されたバッファがフル状態である場合には、これ以上の受信データを格納する格納領域がアプリケーションが確保したバッファにはないので、ステップＳ４１６に進む。
【００７２】
ステップＳ４０４の判別の結果、ＵＳＢプリンタクラスが保持している１２８４．４ＦＬＧの値がＯＦＦである場合には、ＣＰＵ１１はＵＳＢプリンタクラスのすぐ下位のプロトコルがＵＳＢ２．０であるので、アプリケーションが確保した受信バッファをＵＳＢ２．０を司るモジュールに引き渡す（ステップＳ４１８）。ＣＰＵ１１はＵＳＢ２．０スタックがホストコンピュータ１００からＰＩＮＧパケットを受信したか否かを判別する（ステップＳ４１９）。
【００７３】
ステップＳ４１９の判別の結果、ＵＳＢ２．０スタックがホストコンピュータ１００からＰＩＮＧパケットを受信した場合には、ＣＰＵ１１はアプリケーションが確保した受信バッファの受信データ未格納領域の大きさがＵＳＢ２．０で規定するＵＳＢ２．０のパケットの大きさよりも大きいか否かを判別する（ステップＳ４２０）。
【００７４】
ステップＳ４２０の判別の結果、アプリケーションが確保した受信バッファの受信データ未格納領域の大きさがＵＳＢ２．０で規定するＵＳＢ２．０のパケットの大きさよりも小さい場合には、データ受信が不可能と判断されるので、ＣＰＵ１１はＵＳＢ２．０を司るモジュールを介してからＮＡＫを送出し（ステップＳ４２９）、後述するステップＳ４２８に進む。
【００７５】
ステップＳ４２０の判別の結果、アプリケーションが確保した受信バッファの受信データ未格納領域の大きさがＵＳＢ２．０で規定するＵＳＢ２．０のパケットの大きさよりも大きい場合には、次のパケット受信が可能と判断され、ＣＰＵ１１はＵ  ＳＢ２．０を司るモジュールを介してホストコンピュータ１００に対してＡＣＫを送出する（ステップＳ４２１）。
【００７６】
次いで、ＣＰＵ１１はＵＳＢ２．０を司るモジュールを介してホストコンピュータ１００からデータを受信したか否かを判別する（ステップＳ４２２）。もし受信していなければ受信するまで待つ。
【００７７】
そして、ＵＳＢ２．０を司るモジュールを介してホストコンピュータ１００からデータを受信した場合には、ＣＰＵ１１は受信したデータをアプリケーションから渡された受信バッファにコピーする（ステップＳ４２３）。
【００７８】
そして、ＣＰＵ１１は受信バッファの受信データ未格納領域の大きさが、ＵＳＢ２．０が規定するＵＳＢ２．０のパケットの大きさよりも大きいか否かを判別する（ステップＳ４２４）。受信バッファの受信データ未格納領域の大きさが、ＵＳＢ２．０が規定するＵＳＢ２．０のパケットの大きさよりも小さい場合には、このバッファではデータ受信が不可能と判断し、ＣＰＵ１１はＵＳＢ２．０を司るモジュールを介してからＮＹＥＴを送出し（ステップＳ４３０）、後述するステップＳ４２８に進む。
【００７９】
受信バッファの受信データ未格納領域の大きさが、ＵＳＢ２．０が規定するＵＳ  Ｂ２．０のパケットの大きさよりも大きい場合には、連続してパケット受信可能と判断し、ＣＰＵ１１はＵＳＢ２．０を司るモジュールを介してからホストコンピュータ１００に対してＡＣＫを送出する（ステップＳ４２５）。
【００８０】
次いで、ＣＰＵ１１は受信バッファがフル状態であるか否かを判別し（ステップＳ４２６）、受信バッファがフル状態である場合には、後述するステップＳ４２８に進む一方、受信バッファがフル状態でない場合には、ＣＰＵ１１はホストコンピュータ１００からデータの送信完了報告を受信したか否かを判別する（ステップＳ４２７）。ホストコンピュータ１００からデータの送信完了報告を受信した場合には、ホストコンピュータ１００からのデータ受信が終了したと判断し、ＣＰＵ１１はアプリケーションに対して、バッファに関するデータ受信が完了したと報告し（ステップＳ４２８）、受信データを受け取ったアプリケーションにおいてデータの中身にあった処理を実行してステップＳ４０２に戻る。
【００８１】
ステップＳ４２７の判別の結果、ホストコンピュータ１００からデータの送信完了報告を受信していない場合には、次のデータ受信に備えて、ステップＳ４２２に戻る。
【００８２】
上述したように、本実施の形態によれば、ある層のプロトコルとして２つ以上のプロトコルのうち１つが、そのプロトコルの上位層の意思にかかわらず、選択される可能性があるとき、その層のプロトコルとしてフロー制御機能がないプロトコルが選択された場合、その上位にはフロー制御機能を持つプロトコルを選択するようにし、またその層のプロトコルとしてフロー制御機能があるプロトコルが選択された場合、その上位層にフロー制御機能を持たないプロトコルを選択するようにすることができるため、フロー制御機能を通信スタック全体で１つにすることができ、フロー制御という必要な機能を確実に保持でき、しかもフロー制御の多重化による冗長性を防止することができる。特にある層のプロトコルとしてＵＳＢ１．１とＵＳＢ２．０のどちらかが、そのプロトコルの上位層の意思にかかわらず、選択される場合において、ＵＳＢ１．１が選択されたときには、その上位層にはフロー制御機能を持つプロトコル、例えば、ＩＥＥＥ１２８４．４−２０００が選択され、ＵＳＢ２．０が選択されたときには、フロー制御機能を持たないプロトコルが選択されるので、フロー制御の多重化による冗長性を防止することができる。
【００８３】
上記実施の形態では、ホストコンピュータ１００はＵＳＢ１．１が選択されたか又はＵＳＢ２．０が選択されたかをホストコンピュータ１００のＵＳＢを司るモジュールからの報告により決定していたが、ホストコンピュータ１００のインプリテーションによってはＵＳＢスタック層がその差異を隠蔽するため、ホストコンピュータ１００のＵＳＢスタックが報告する方法がないケースもある。そこで、ホストコンピュータ１００側は、データ送信を開始する直前又はホストコンピュータ１００とターゲット（例えばプリンタ２００）が回線で接続された直後に、ＵＳＢ  規格が定めるＶＥＮＤＯＲＵＮＩＱＵＥコマンドを利用し、ターゲットに選択されたプロトコルがＵＳＢ１．１であるか又はＵＳＢ２．０であるかを問い合わせる方法を採用してもよい。
【００８４】
また、上記実施の形態では、ターゲットはＵＳＢ１．１が選択されたか又はＵＳＢ２．０が選択されたかをターゲットのＵＳＢスタックからの報告により決定していたが、ターゲットのインプリテーションによってはＵＳＢスタック層がその差異を隠蔽するため、ターゲットのＵＳＢを司るモジュールが報告する方法がないケースもある。そこで、ホストコンピュータ１００側は、ＵＳＢ１．１の選択又はＵＳＢ２．０の選択が決定した時点で、ＵＳＢ規格が定めるＶＥＮＤＯＲＵＮＩＱＵＥコマンドを利用し、ターゲットに選択されたプロトコルがＵＳＢ１．１であるか又はＵＳＢ２．０であるかをＵＳＢプリンタクラスを司るモジュールに通知する方法を採用してもよい。
【００８５】
本発明は、上述した実施の形態の機能を実現するソフトウェアのプログラムをコンピュータ又はＣＰＵに供給し、そのコンピュータ又はＣＰＵが該供給されたプログラムを読出して実行することによっても本発明の目的が達成されることは云うまでもない。
【００８６】
この場合、上記プログラムは、不図示の該プログラムを記録した記録媒体から直接、又はインターネット、商用ネットワーク、若しくはローカルエリアネットワーク等に接続される不図示の他のコンピュータやデータベース等からダウンロードすることにより供給される。
【００８７】
また、上記プログラムは、上述した実施の形態の機能をコンピュータで実現することができればよく、その形態は、オブジェクトコード、インタプリタにより実行されるプログラム、ＯＳに供給されるスクリプトデータ等の形態を有するものでもよい。
【００８８】
更にまた、上述した実施の形態の機能を実現するソフトウェアのプログラムを記録した記録媒体をコンピュータに供給し、そのコンピュータが記録媒体に格納されたプログラムを読出し実行することによっても、本発明の目的が達成されることは云うまでもない。
【００８９】
プログラムを供給する記録媒体としては、例えば、ＲＡＭ、ＮＶ−ＲＡＭ、フロッピー（登録商標）ディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＭＯ、ＣＤ−ＲＯＭ、ＣＤ−ＲＷ、ＤＶＤ（ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＤＶＤ−ＲＷ、ＤＶＤ＋ＲＷ）、磁気テープ、不揮発性のメモリカード、他のＲＯＭ等の上記プログラムを記憶できるものであればよい。
【００９０】
【発明の効果】
以上詳細に説明したように、本発明によれば、ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含むと判別された場合には、該ネゴシエーションによって決定された通信プロトコルの上位層にフロー制御機能を含まないプロトコルが選択され、該ネゴシエーションによって決定された通信プロトコルが通信データのフロー制御機能を含まないと判別された場合には、該ネゴシエーションによって決定された通信プロトコルの上位層にフロー制御機能を含むプロトコルが選択されるように構成されているので、フロー制御機能を通信スタック全体で１つにすることができ、フロー制御という必要な機能を確実に保持でき、しかもフロー制御の多重化による冗長性を防止することができる。
【００９１】
特に、ネゴシエーションによって決定された通信プロトコルとしてＵＳＢ１．１とＵＳＢ２．０のどちらかが、そのプロトコルの上位層の意思にかかわらず、選択される場合に、ＵＳＢ１．１が選択されたときは、その上位層にフロー制御機能を持つプロトコル、例えばＩＥＥＥ１２８４．４−２０００が選択されるのに対し、ＵＳＢ２．０が選択されたときは、フロー制御機能を持たないプロトコルが選択されるので、フロー制御の多重化による冗長性を防止することができる。
【図面の簡単な説明】
【図１】ＵＳＢ１．１とＵＳＢ２．０とのプロトコル構成における差異を示す図であり、特にＵＳＢ２．０が選択されたときにフロー制御機能が通信スタック全体で２つになることを模式的に示す図である。
【図２】ＵＳＢ１．１とＵＳＢ２．０とのプロトコル構成における差異を示す図である。
【図３】本実施の形態に係る通信制御システムをホストコンピュータ１００及びプリンタ２００に適用した模式図を示す。
【図４】図３におけるホストコンピュータ１００の内部構成を示すブロック図である。
【図５】図３におけるプリンタ２００の内部構成を示すブロック図である。
【図６】ホストコンピュータ１００がプリンタ２００とＵＳＢ回線で接続されたときに、ＵＳＢスタックより上層のプロトコルススタックを構築する工程を示すフローチャートである。
【図７】ホストコンピュータ１００がプリンタ２００にデータを送信する方法を示すフローチャートである。
【図８】ホストコンピュータ１００がプリンタ２００にデータを送信する方法を示すフローチャートである。
【図９】ホストコンピュータ１００がプリンタ２００にデータを送信する方法を示すフローチャートである。
【図１０】プリンタ２００がホストコンピュータ１００とＵＳＢ回線で接続されたときに、ＵＳＢスタックより上層のプロトコルスタックを決定する工程を示すフローチャートである。
【図１１】プリンタ２００がデータをホストコンピュータ１００から受信する方法を示すフローチャートである。
【図１２】プリンタ２００がデータをホストコンピュータ１００から受信する方法を示すフローチャートである。
【図１３】プリンタ２００がデータをホストコンピュータ１００から受信する方法を示すフローチャートである。
【符号の説明】
１，１１  ＣＰＵ
２，１２  ＲＡＭ
３，１３  ハードディスク
４  ユーザーコマンド入力装置
５，１５  ＵＳＢポート
８，１８  メインバス
１４  印字装置
１００  ホストコンピュータ
２００  プリンタ
【図１】
2004334798.tif 000003
【図２】
2004334798.tif 000004
【図３】
2004334798.tif 000005
【図４】
2004334798.tif 000006
【図５】
2004334798.tif 000007
【図６】
2004334798.tif 000008
【図７】
2004334798.tif 000009
【図８】
2004334798.tif 000010
【図９】
2004334798.tif 000011
【図１０】
2004334798.tif 000012
【図１１】
2004334798.tif 000013
【図１２】
2004334798.tif 000014
【図１３】
2004334798.tif 000015