(57)【要約】【課題】ホスト装置と通信装置との間で行うデータ送信において、通信装置側の受信バッファがバッファフルの場合に、即時実行コマンドの受信を可能とする。【解決手段】ホスト装置との間をＵＳＢバスで接続し、ＵＳＢ接続のエンドポイントを構成する通信用バッファと、制御部とを備え、制御部は、ホスト装置側からＵＳＢ仮想シリアルによって送られた指示に基づいて通信用バッファが受信データを格納する受信バッファの受信バッファサイズを変更し、通信装置による即時実行コマンドの受信を可能とする。【選択図】図１
2008015823.tif 000002
【特許請求の範囲】
【請求項１】
ホスト装置との間をＵＳＢバスで接続し、ＵＳＢ接続のエンドポイントを構成する通信用バッファと、
制御部とを備え、
前記通信用バッファは、受信データを格納する受信バッファを備え、
前記制御部は、ホスト装置側からＵＳＢ仮想シリアルによって送られた指示に基づいて受信データを格納する受信バッファの受信バッファサイズを変更することを特徴とする、通信装置。
【請求項２】
前記指示はホスト装置と通信装置との間のシリアルインターフェースプロトコルによるフロー制御の有効無効を定める指定を指示するものであり、
前記制御部は、前記指示のフロー制御の有効又は無効の指定に基づいて前記通信用バッファが備える受信バッファの受信バッファサイズを変更し、
前記フロー制御を無効とする指定に基づいて前記通信用バッファが備える受信バッファの受信バッファサイズを拡大し、
前記フロー制御を有効とする指定に基づいて前記通信用バッファが備える受信バッファの受信バッファサイズを縮小する制御を行うことを特徴とする、請求項１に記載の通信装置。
【請求項３】
前記通信用バッファは、ソフト上で分離および結合を自在とする複数の領域を含む記憶領域を備え、
前記制御部は、前記複数の領域の一部を受信バッファ、残余の領域を空き領域として領域を管理し、
前記フロー制御を無効とする指定に基づいて、受信バッファと空き領域をソフト的に結合して空き領域を受信バッファに組み込むことにより受信バッファサイズを拡大し、
前記フロー制御を有効とする指定に基づいて、受信バッファと空き領域とをソフト的に分離することにより受信バッファサイズを縮小することを特徴とする、請求項２に記載の通信装置。
【請求項４】
前記受信バッファに格納される格納データを解析する解析部と、
当該解析部で解析したコマンドを転送する転送部とを備え、
当該転送部は、前記解析部の解析で得られたコマンドをＵＳＢインターフェースを通して接続される外部装置に転送することを特徴とする、請求項１から請求項３の何れか一つに記載の通信装置。
【請求項５】
前記受信バッファに格納される格納データを解析する解析部と、プリンタバッファを備え、
前記プリンタバッファは、前記解析部で解析して得られた印字データを格納することを特徴とする、請求項１から請求項３の何れか一つに記載の通信装置。
【請求項６】
ＵＳＢ接続されるホスト装置と通信装置との間のＵＳＢ仮想シリアルによる通信において、
ホスト装置側からＵＳＢ仮想シリアルによって送られた指示に基づいて、前記通信装置が備える通信用バッファの受信データを格納する受信バッファの受信バッファサイズを変更することを特徴とする、通信制御方法。
【請求項７】
前記指示はホスト装置と通信装置との間のシリアルインターフェースプロトコルによるフロー制御の有効無効を定める指定であり、
前記通信装置において、ホスト装置から前記フロー制御を無効とする指示を受けて受信バッファサイズを拡大し、前記ホスト装置からフロー制御を有効とする指示により受信バッファサイズを縮小することを特徴とする、請求項６に記載の通信制御方法。
【請求項８】
前記通信用バッファは、ソフト上で分離および結合を自在とする複数の領域を含む記憶領域を備え、
前記複数の領域の一部を受信バッファ、残余の領域を空き領域とし、
前記受信バッファと前記空き領域をソフト上で結合して当該空き領域を受信バッファに組み込むことにより受信バッファサイズを拡大し、
受信バッファと前記空き領域とをソフト上で分離することにより受信バッファサイズを縮小することを特徴とする、請求項６又は７に記載の通信制御方法。
【請求項９】
前記複数の領域の割合は、ホスト装置側からの指示により設定自在であることを特徴とする、請求項８に記載の通信制御方法。
【請求項１０】
前記空き領域は複数の領域を含み、当該複数の領域から選択した任意の個数の領域を受信バッファと結合し、受信バッファのサイズを選択的に拡大することを特徴とする、請求項７又は８に記載の通信制御方法。
【請求項１１】
請求項１に記載のプリンタ通信装置を備えるプリンタであって、
受信バッファに格納される格納データを解析する解析部と、
印字を行うプリンタ機構と、
前記プリンタ機構の印字に用いる印字データを格納するプリンタバッファとを備え、
前記制御部は、
前記解析部により得られた印字データをプリンタバッファに格納し、
解析部により得られたコマンドによりプリンタ機構を駆動制御することを特徴とする、通信装置を備えるプリンタ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ホスト装置との間をＵＳＢ接続する通信装置および通信制御方法に関し、特にＵＳＢインターフェースで仮想シリアルを実現する際におけるバッファフル状態の制御に関し、例えば、ホスト装置とプリンタとの間をＵＳＢ接続するＰＯＳシステムに適用することができる。
【背景技術】
【０００２】
図１０は、従来のホスト装置とプリンタとの間の関係を説明するための図である。例えば、従来のＰＯＳシステムにおいて、ホスト装置が備えるコンピュータは、ＰＯＳやキャッシュレジスタのソフトなどのアプリケーション・プログラム２０２と、オペレーティングシステムの部分から構成されている。オペレーティングシステムはアプリケーションプログラムインターフェース２０３（ＡＰＩ）を通じて、パラレルＩ／Ｆドライバ２０７やシリアルＩ／Ｆドライバ２０５などのデバイスドライバを経由してIEEE1284などのパラレルポート２０９やRS232等のシリアルポート２０８と入出力を行い、プリンタ２０１との間の通信を行っている。また、ＵＳＢプリンタクラスのドライバ２０４とＵＳＢバスドライバ２０６を介して接続する場合もある。
【０００３】
近年、IEEE1284パラレルポートやRS232シリアルＩ／Ｆ 等のLegacyポートと呼ばれるポートを搭載せず、コストパフォーマンスに優れたＵＳＢインターフェースのみを搭載したコンピュータや周辺機器（プリンタ）が広く普及している。
【０００４】
一方、従来のアプリケーションはLegacyポート用としてソフトウェア資産が多く残っているが、ＵＳＢ機器用にはそのままでは使用できないので、それらをＵＳＢインターフェース用のアプリケーションに変更する必要があり、それには多大な労力を必要とする。
【０００５】
一般に、シリアルＩ／Ｆではデータのフロー制御としてXon/Xoffプロトコル、RTS/CTSプロトコルなどが一般的に使われている。図１１はシリアルＩ／Ｆによるデータのフロー制御を説明するためのプリンタ側のフローチャートである。
【０００６】
例えば、プリンタ側において、データの受信時において（Ｓ１０１）、バッファフルなどの受信不可能状態にあるときは（Ｓ１０２）、Xoffコードを送信したり、CTS信号をオフとしたりすることによって、ホストコンピュータに送信停止を要求する（Ｓ１０３）。これに対してバッファが空くと（Ｓ１０４）、XoｎコードやCTS信号をオンとして送信再開を要求する（Ｓ１０５）。ホストコンピュータはCTS信号やXoffコードを常時監視し、要求に従って送信停止や再開を行う。
【０００７】
しかし、バッファフル状態では何もデータを受け付けないのでそのときにキャッシュドロワコマンドを送信できず、ドロワをオープンすることができない。そこでアプリケーションはドロワをオープンするときは、シリアルＩ／Ｆドライバに一時的にフロー制御なしを指定し、XoffコードやCTSオフ通知を監視しない状態にして強制的にドロワコマンドを送信する。
【０００８】
ＵＳＢインターフェースにおいても、受信バッファが満杯状態の場合には、受信データを受け付けることができないという課題がある。
【０００９】
ＵＳＢインターフェースではデータはパケットによって送信され、パケットごとにＡＣＫ／ＮＡＫ応答で通信している。LegacyシリアルＩ／Ｆインターフェースと同様に、バッファがフル状態になるとデータは受信できなくなり、ＮＡＫ応答する。ホストコンピュータはプリンタからのＮＡＫ応答を受け取るとデータパケットを再送する。この操作はタイムアウトするかＡＣＫ応答を受け取るまで繰り返される。
【００１０】
この状態でドロワコマンドを送信したい場合、データパケット、ＮＡＫ応答の繰り返しが行われているため、ドロワコマンドは送信できない。このようにＵＳＢインターフェースはＡＣＫ，ＮＡＫ応答によるフロー制御を行う規定になっており、Xon/XoffプロトコルやRTS/CTSフロー制御が行われない。フロー制御なしというプロトコルもないため、シリアルＩ／Ｆのようにプリンタが受信不可状態でも強制的にデータを送信する手段がないため、バッファフル状態ではドロワコマンド等の重要性の高いコマンドを送信することができない。
【００１１】
図１２は、ＵＳＢインターフェースによるホストと周辺機器との間の通信状態を説明するための図である。なお、図は周辺機器側のＣＰＵが行う処理内容と、受信バッファのデータの格納状態について示している。
【００１２】
図１２（ａ）は、周辺機器の受信バッファに十分な空きがある場合を示している。この受信バッファの状態において、ホスト側から送信データが送信された場合には、周辺機器側は送信データを受信バッファ内に格納し、ＡＣＫ応答をホスト側に送って正常に受信が行われたことを通知する。ホスト側は、ＡＣＫ応答を受信して、正常受信であることを確認する。
【００１３】
一方、図１２（ｂ）は、周辺機器の受信バッファに十分な空きがない場合を示している。受信バッファに十分な空きがない場合において、ホスト側から送信データが送信された場合には、周辺機器側は送信データの受信バッファ内への格納を拒否し、ＮＡＫ応答をホスト側に送って送信データを受け取れないことを通知する。ホスト側は、ＮＡＫ応答を受信して、送信データを受け取れないことを確認した後、送信データを再送する。ホストは、ＡＣＫ応答を受信するまで、送信データの再送を繰り返す。
【００１４】
このように、ＵＳＢインターフェースにおいても、周辺機器の受信バッファがバッファフル状態となった場合には、受信データを受け付けることができず、例えば、周辺機器がプリンタの場合において、紙無しなどのエラーが発生したときドロワコマンドやステータス取得のコマンドを取得することができないという課題がある。
【００１５】
そこで、特許文献１では、通信端末において、ビジィー信号を出力してホスト側にデータ処理が不可能であることを指示するモード１と、ビジィー信号を出力せずに対処コマンドをホスト側から受信するモード２とを備え、リアルタイムコマンドに対応したアプリケーションソフトに対してモード２を設定することによって、ホスト側のアプリケーションソフトによるホールド状態やエラー状態の対処を可能とする構成が提案されている。
【００１６】
また、特許文献２には、上記装置とプリンタとの間のインターフェースをＩＥＥＥ１２８４規定のＥＣＰモードを使用してデータ転送を行う場合、受信バッファフルが発生すると、プリンタ装置からの送信データを上位装置がその受信データを受け取ることができないという問題があることが指摘され、この問題を解決するものとして、上記上位装置は、プリンタ装置から受信可能サイズが通知されるまで次の印刷データの転送を行わないようにすることによって、プリンタ装置の受信バッファフルを防止することが記載されている。また、受信可能サイズを、プリンタ装置側の指定によって変更することで、上位装置の転送性能に合わせた最適な受信可能サイズに変更することが記載されている。
【００１７】
近年、ＰＯＳシステム等においては、上記したＲＳ−２３２ＣやＩＥＥＥ１２８４等の通信の他に、ホスト装置とプリンタとの間をＵＳＢで通信することが行われている。このＵＳＢを用いた通信において、ＯＵＴパケットの受信時に、メモリ残量と閾値との多少を判別し、メモリ残量が閾値よりも少ない場合にはＮＡＫハンドシェイクを応答してデータ受信を拒否することによって、画像メモリのメモリ残量が少なくなったときのメモリオーバーを防止することが、例えば特許文献３に提案されている。
【００１８】
また、パラレル通信制御におけるバッファフルを防止するものとして、予め定められた所定エラー状態の発生時に、所定の特殊命令をプリンタに特殊命令処理手段をホスト側に設ける構成が、例えば、特許文献４に提案されている。
【００１９】
また、特許文献５には、ホスト装置と印刷装置との間に接続するインターフェース装置において、印刷装置がデータを受信できない場合であっても、受信データリアルタイムコマンドであれば、ホスト装置にデータを送信させて記憶手段に記憶し印刷装置に送信することによって、印刷装置の受信バッファフルに対処することが提案されている。
【００２０】
【特許文献１】特開平１０−３３３８５６号公報
【特許文献２】特開２０００−２０７１４２号公報
【特許文献３】特開２００５−１１７４２２号公報
【特許文献４】特開２００５−１８６３８号公報
【特許文献５】特開２００１−２０２３２２号公報
【発明の開示】
【発明が解決しようとする課題】
【００２１】
ホスト装置による管理を行うＰＯＳシステムでは、ホスト装置をプリンタに接続し、プリンタを介して表示装置、ドロワ、モデム、バーコードリーダーなど種々のデータ端末に接続する構成が一般的であり、種々のデータ端末に送信するデータは、ホスト装置からはじめにプリンタに送信した後に、プリンタから各データ端末に送信される。
【００２２】
また、シリアル通信を用いたＰＯＳシステムにおいて、従来のシリアル通信ポートをＵＳＢによる通信に切り替える際には、ホスト装置側のＰＣや端末装置側のプリンタの装置構成において、従来のシリアル通信で使われていた既存の装置構成からの変更をなるべく小さくして、切り替えに要するコストを少なくしたいという要望がある。
【００２３】
このような要望がある中で、上述したように、ホスト装置と通信装置との間で行うデータ送信において、通信装置側の受信バッファがバッファフルの場合に、即時実行コマンドを受けることができないという課題に対して、上記したように各種の対処が提案されている。しかしながら、いずれの対処も、通信装置側に特殊な機能を持たせることで対応するものであってソフトウェアの切り換えの多大の労力を要するものであり、特殊な機能を備えたインターフェース装置を用意するなど汎用性が低くいという問題があり、既存の通信装置を用い、通常の通信装置が通常に備える機能を利用することで解決することができないという問題がある。
【００２４】
例えば、特許文献１の構成では、通信端末側にモード選択機能を持たせる必要がある他、リアルタイムコマンドに対応したアプリケーションソフトに対しては適用することができるものの、リアルタイムコマンドに対応しないアプリケーションソフトについては適用できないという問題がある。
【００２５】
また、特許文献２の構成では、プリンタ装置は受信可能サイズを検出し、検出した受信可能サイズを上位装置に転送する機能が必要であるため、この機能を有していない既存の通信装置では新たにこの機能を組み込む必要がある。また、受信可能サイズを変更可能であるが、この変更はプリンタ装置側で行う必要があるため、プリンタ装置側に受信可能サイズの変更機能を組み込む必要がある。また、この受信可能サイズの変更は、上位装置側から行うことができないという問題もある。
【００２６】
また、特許文献３の構成では、メモリ残量が閾値よりも少ない場合には、画像データの受信が拒否されるため、即時実行が求められるコマンドについても受信が拒否され、通信装置において即時実行コマンドを実行することができないという問題がある。
【００２７】
また、特許文献４の構成では、ホスト側は特殊命令処理手段を用意し、また、プリンタ側においても特殊命令を実行する機能を持たせる必要があるという問題がある。
【００２８】
また、特許文献５の構成では、インターフェース装置に、受信データが受信データリアルタイムコマンドであるかを判定する機能や、受信データリアルタイムコマンドを記憶する記憶手段を設ける必要があるという問題がある。
【００２９】
上記したように、特許文献１〜５のいずれにおいても、ホスト側や通信装置側において新たな装置や機能を付加するなど大きな変更を必要とするため、既存のホスト装置や通信装置に大きな変更を要することなく、受信バッファがバッファフルの場合に即時実行コマンドの受信を可能とすることは困難である。
【００３０】
そのため、受信バッファフルに対して提案される従来技術を適用した場合には、ホスト側のＰＣや端末装置側のプリンタに新たな構成や機能が必要となるという問題がある。
【００３１】
したがって、ホスト側のＰＣや端末装置側のプリンタに新たな構成や機能を付加することなく、既存の装置構成を利用した構成のままで、受信バッファフルの場合であっても、即時実行コマンドの受信を可能とすることが求められている。
【００３２】
そこで、本発明は上記の課題を解決して、ホスト装置と通信装置との間で行うデータ送信において、通信装置側の受信バッファがバッファフルの場合に、即時実行コマンドを受けることができないという課題を解決することを目的とし、特に、ホスト側のＰＣや端末装置側のプリンタに新たな構成や機能を付加することなく、既存の装置構成を利用した構成のままで、受信バッファフルの際に、即時実行コマンドを受信可能とすることを目的とする。
【課題を解決するための手段】
【００３３】
本発明は、受信バッファフルの場合に、ホスト装置側からのＵＳＢ仮想シリアルによって送られた指示に基づいて、通信装置が備える受信バッファのバッファサイズを拡大することによって、通信装置による即時実行コマンドの受信を可能とする。
【００３４】
また、受信バッファは、通信装置が通常に備える構成であり、また、この受信バッファのバッファサイズを拡大するために用いる制御信号も、シリアル通信で利用されるフロー制御の指示信号を用いることができるため、ホスト装置側のＰＣや端末装置側のプリンタに新たな構成や機能を付加することなく、既存の装置構成を利用した構成で実現することができる。
【００３５】
本発明において、アプリケーションからはＵＳＢ仮想シリアルドライバによって物理的にはＵＳＢインターフェースであるが、動作上ではシリアルＩ／Ｆとして扱われるのでXon/Xoff、RTS/CTS等のフロー制御の指定も行うことができる。ドロワコマンド等の重要性の高いコマンドの送信時には、フロー制御なしの指定をアプリケーションから指示することができる。実際には、ＵＳＢ通信によってＡＣＫ／ＮＡＫフロー制御が行われているため、通信装置側では、フロー制御なしの指定はフロー制御には使用しないが、このフロー制御なしの指定を受けることによって、ドロワコマンドのようにバッファフルの状態であっても送信を要する内容と判断することができ、これに基づいてバッファ状態を変更する。
【００３６】
したがって、本発明において、フロー制御なしの指定は、本来のシリアルによるフロー制御の指定としてではなく、データを受信すべきデータかそうでないデータかを判定するために使用する。より具体的には、Xon/XoffまたはRTS/CTSフロー制御を行うように指定された状態において、ある閾値でバッファ状態を判定し、バッファがその閾値を超える状態（ニアフル状態）と判定された場合には、ＮＡＫ応答する。その状態において、プロトコルなしが指定された場合には、この閾値を大きくし、受信可能サイズを広げ、その後のパケットデータの受信を可能とする。
【００３７】
このようにすることで、一旦バッファがフルと判定される状態（ニアフル状態）となった場合でも、ＵＳＢインターフェースのＡＣＫ／ＮＡＫフロー制御規定を守りつつ、ドロワコマンドなどの重要性や緊急性が高いコマンドの受信が可能となる。
【００３８】
本発明は、通信装置、通信制御方法、通信装置を備えたプリンタの各態様を備える。
【００３９】
本発明の通信装置の態様は、ホスト装置との間をＵＳＢバスで接続し、ＵＳＢ接続のエンドポイントを構成する通信用バッファと、制御部とを備える。
【００４０】
制御部は、シリアルＩ／Ｆプロトコルによるフロー制御において、ホスト装置側からＵＳＢ仮想シリアルによって、そのフロー制御を無しの指定の指示に基づいて通信用バッファが受信データを格納する受信バッファの受信バッファサイズを変更することを特徴とする。
【００４１】
通信用バッファは、通信データを格納するために通信装置が予め用意するデータ記憶領域であり、このデータ記憶領域は、受信データを格納する領域を受信バッファとして備える。
【００４２】
ここで、通信データは、例えば、プリンタに印字するための印字データや、プリンタや各種データ端末を制御するコマンドや、ステータスを含む。コマンドとしては、例えば、ドロワを開くドロワオープンなどのドロワコマンドの他、プリンタ、表示装置、モデム、バーコードリーダーなど種々のデータ端末の各動作を制御するコマンドがある。このコマンドには、通常動作の制御に用いるコマンドの他に、ドロワオープンやエラー解除コマンドなどの即時実行が求められる即時実行コマンドがある。
【００４３】
制御部は、ホスト装置側からＵＳＢ仮想シリアルによって送られた指示に基づいて通信用バッファが受信データを格納する受信バッファの受信バッファサイズを変更する。
【００４４】
この指示は、ホスト装置と通信装置との間をシリアルＩ／Ｆプロトコルに従ってフロー制御する際に、そのフロー制御の有効無効を指定する。制御部は、この指示において、フロー制御の有効又は無効の指定に基づいて、受信バッファの受信バッファサイズを変更する。
【００４５】
指示がフロー制御を無効とする指定である場合には、この指定に基づいて通信用バッファが備える受信バッファの受信バッファサイズを拡大し、また、フロー制御を有効とする指定である場合には、この指定に基づいて通信用バッファが備える受信バッファの受信バッファサイズを縮小する制御を行う。
【００４６】
また、通信用バッファは、ソフト上で分離および結合を自在とする複数の領域を含む記憶領域を備え、その領域の一つの領域を受信データを格納する受信バッファとし、残りの領域を空き領域とする。
【００４７】
制御部は、複数の領域の一部を受信バッファ、残余の領域を空き領域として領域を管理する。この領域管理において、フロー制御を無効とする指定を受けた場合には、受信バッファと空き領域をソフト上で結合して空き領域を受信バッファに組み込むことにより受信バッファサイズを拡大する。また、フロー制御を有効とする指定を受けた場合には、受信バッファと空き領域とをソフト上で分離することにより受信バッファサイズを縮小する。
【００４８】
ここで、制御部は、通信用バッファ内で空き領域として定められた領域については、受信データの書き込み、および格納されたデータの読み出しを行わない。本発明では、この空き領域は、受信バッファがバッファフルの状態であっても、即時実行が求められる緊急性を要する即時実行コマンドを格納するために用意するバッファ領域であり、即時実行が求められていないデータやコマンド（以下では、コマンドを含めてデータと言う）が格納されるために即時実行コマンドの受信が不可となる状況を回避する。
【００４９】
したがって、空き領域は、即時実行コマンド以外のデータの格納が行われないように通常は格納不可の状態とする。この空き領域は、即時実行コマンドを受信する場合に受信バッファとすることによって受信バッファのバッファサイズを拡大して、即時実行コマンドの受信を可能とする。本発明では、この空き領域を受信バッファに結合する切り替えのトリガとして、フロー制御を無効とする指定を用いる。
【００５０】
制御部は、このフロー制御を無効とする指定を受けることで、ＵＳＢ制御で行うフロー制御を解消すると共に、空き領域を受信バッファにソフト的に結合して受信バッファのバッファサイズを拡大する。
【００５１】
また、即時実行コマンドの受信が完了するなど、拡大した受信バッファによる受信が不要となった場合には、受信バッファの一部をソフト上で分離して空き領域とすることによって受信バッファのバッファサイズを縮小し、次の即時実行コマンドの受信に備える。本発明では、この空き領域を受信バッファから分離する切り替えのトリガとして、フロー制御を有効とする指定を用いる。
【００５２】
制御部は、このフロー制御を有効とする指定を受けることで、ＵＳＢ制御で行うフロー制御を再開すると共に、空き領域を受信バッファからソフト上で分離して受信バッファのバッファサイズを縮小する。
【００５３】
また、通信装置は、受信バッファに格納される格納データを解析する解析部と、この解析部で解析したコマンドを転送する転送部とを備える。転送部は、解析部の解析で得られたコマンドをＵＳＢインターフェースを通して接続される外部装置に転送する。外部装置としては、例えば、表示装置やドロワやモデム、バーコードリーダーなど種々のデータ端末とすることができ、拡大した受信バッファに格納した即時実行コマンドのデータを解析し、転送部からＵＳＢインターフェースを通して種々のデータ端末に転送され、即時実行コマンドが実行される。
【００５４】
また、通信装置は、受信バッファに格納される格納データを解析する解析部と、プリンタバッファを備える。プリンタバッファは、解析部で解析して得られた印字データを格納する。
【００５５】
また、本発明の通信制御方法の態様は、ＵＳＢ接続されるホスト装置とターゲットである通信装置との間の通信を制御する方法である。通信装置はＵＳＢ接続のエンドポイントを構成する通信用バッファを備え、通信用バッファが備える受信データを格納する受信バッファの受信バッファサイズを、ホスト装置から通信装置に送信される指示に基づいて変更する。
【００５６】
指示はホスト装置と通信装置との間のフロー制御の有効無効を定める指定であり、通信装置は、ホスト装置からフロー制御を無効とする指定を受けて受信バッファサイズを拡大し、ホスト装置からフロー制御を有効とする指定により受信バッファサイズを縮小する。
【００５７】
また、通信用バッファは、ソフト的な分離および結合を自在とする複数の領域を含む記憶領域を備える。複数の領域の一部を受信バッファ、残余の領域を空き領域とし、受信バッファと空き領域をソフト上で結合して空き領域を受信バッファに組み込むことにより受信バッファサイズを拡大し、受信バッファと空き領域とをソフト上で分離することにより受信バッファサイズを縮小する。
【００５８】
通信用バッファが備える複数の領域の割合は、通信装置側からの指定に従って設定することができる。また、空き領域は複数の領域を含む構成とし、この複数の領域から選択した任意の個数の領域を受信バッファと結合し、受信バッファのサイズを選択的に拡大することができる。
【００５９】
また、本発明は、本発明の通信装置を備えたプリンタの態様とすることができる。このプリンタは、受信バッファに格納される格納データを解析する解析部と、印字を行うプリンタ機構と、前記プリンタ機構の印字に用いる印字データを格納するプリンタバッファとを備える。制御部は、解析部により得られた印字データをプリンタバッファに格納し、解析部により得られたコマンドによりプリンタ機構を駆動制御する。
【００６０】
本発明は、ＵＳＢ仮想シリアルを用いることによって、シリアルインターフェースを持たず、ＵＳＢインターフェースのみを備える場合であっても、シリアルＩ／Ｆプロトコルによるフロー制御の有無を指定する指示を送ることができ、このフロー制御の有無の指定によって受信バッファのサイズを変更することができる。
【発明の効果】
【００６１】
本発明の通信装置、通信制御方法、および通信装置を備えるプリンタは、ホスト装置と通信装置との間で行うデータ送信において、通信装置側の受信バッファがバッファフルの場合であっても、即時実行コマンドを受けることができる。
【００６２】
特に、ホスト装置側のＰＣや端末装置側のプリンタに新たな構成や機能を付加することなく、既存の装置構成を利用した構成のままで、受信バッファフルの際に即時実行コマンドを受信可能とすることができる。
【発明を実施するための最良の形態】
【００６３】
はじめに、本発明の通信装置の態様について説明する。
【００６４】
図１は本発明によるＵＳＢ接続によるホスト装置と通信装置との関係を説明するための図である。
【００６５】
図１において、ホスト装置は、アプリケーション・プログラム２と、アプリケーション・プログラム・インターフェース３と、ドライバ４〜７とを備え、通信装置としてプリンタの例を示し、ホスト装置とプリンタとの間はＵＳＢインターフェースによって接続される。
【００６６】
アプリケーション・プログラム２は、例えば、ＰＯＳシステムやキャッシュレジスタ等に係わるプログラムである。このプログラムは、ＵＳＢによる送受信を行うためにＵＳＢプロトコルによるフロー制御を行うプログラムを有する他、従来のプログラム資産であるシリアルプロトコルによるフロー制御を行うプログラムも備える。
【００６７】
アプリケーション・プログラム２は、ＵＳＢプロトコルによるフロー制御によって、ＵＳＢプリンタクラスドライバ４を介してＵＳＢバスドライバ６と接続し、プリンタ１との間をＵＳＢインターフェースによって通信する。このＵＳＢインターフェースによる通信では、ＡＣＫ信号、ＮＡＫ信号を送るほか、送信データをパケットの形態で送る。
【００６８】
また、アプリケーション・プログラム２は、シリアルプロトコルによるフロー制御によって、ＵＳＢ仮想シリアルドライバを構成するシリアルＩ／Ｆドライバ５を介してＵＳＢバスドライバ６と接続し、プリンタ１との間をＵＳＢインターフェースによって通信する。このＵＳＢインターフェースによる通信では、シリアルＩ／Ｆドライバ５をＵＳＢ仮想シリアルドライバとすることによって、アプリケーション・プログラム２側はＲＴＳ信号やＣＴＳ信号、あるいはXoff信号やXon信号を用いたシリアルプロトコルによるフロー制御を行うことができる。
【００６９】
仮想シリアルドライバはアプリケーションからシリアルポートへ送信するデータを受け取ると、RS232などの物理シリアルポートへ送信せずに、ＵＳＢインターフェースへ送信する。また、仮想シリアルドライバは、ＵＳＢインターフェースから受信したデータを通してあたかもシリアルＩ／Ｆから受信されたかのようにアプリケーションへデータを渡す。こうすることで、シリアルＩ／Ｆ用のアプリケーションはＵＳＢを意識することなくＵＳＢプリンタ等と通信可能となる。
【００７０】
このとき、ＵＳＢインターフェースを仮想的にシリアルＩ／Ｆとして動作させるために、シリアルＩ／Ｆドライバを変更してＵＳＢ仮想シリアルとする。これによって、アプリケーションを変更することなく、デバイスドライバのみの変更で過去の多数のLegacyインターフェース用アプリケーションを新しいコンピュータ上でも動作可能とすることができる。
【００７１】
本発明は、上述した構成において、受信バッファの容量がフル状態となってＵＳＢプロトコルによるフロー制御では信号を受け付けない場合であっても、キャッシュレジスタのドロワオープンコマンドのように重要性の高いコマンドについては、シリアルＩ／Ｆプロトコルによるフロー制御の指定をＵＳＢ仮想シリアルドライバを介して送り、この指定に基づいて受信バッファの容量を変更することによって、コマンドの受信を可能とする。
【００７２】
図２は本発明によるＵＳＢ接続によるホスト装置と通信装置との関係、および通信装置の概略構成を説明するための図である。
【００７３】
図２において、ホスト装置１００と通信装置１０とはＵＳＢ（Universal Serial Bus）によって接続しＰＯＳシステムを構成する例を示している。ＵＳＢは、１対の信号線を使用してデータを１ビットずつ順次転送するシリアルインターフェースであり、ホスト装置に接続される周辺機器（デバイス）に対して、指名（ポーリング）によって通信を許可し、パケットを単位としてホストのバッファと、デバイスに設けたエンドポイントのバッファとの間で通信を行う。
【００７４】
図２では、ホスト装置１００に対して通信装置１０がＵＳＢインターフェースによって接続され、さらに、この通信装置１０の下流側に周辺機器（２０〜４０）が接続される例を示している。なお、ＵＳＢインターフェースでは、ターゲットである周辺機器間の接続は行われず、周辺機器間はハブを介して行うため、通信装置１０はハブとして周辺機器２０〜４０と接続されることになる。
【００７５】
図２では、プリンタ２０、表示装置３０、およびキャッシュドロワ４０を周辺機器として通信装置１０に接続する例を示している。なお、ここでは、プリンタ２０内に通信装置１０を組み込んだ構成とし、既存のプリンタ２０に通信装置１０の機能を組み込むことでＰＯＳシステムを構成する例を示している。
【００７６】
この構成では、ホスト装置１００のＵＳＢバスドライバ１０６はＵＳＢインターフェースを介して通信装置１０の通信インターフェースポート１１に接続され、さらに、この通信インターフェースポート１１はＵＳＢインターフェースを介して、プリンタ２０、表示装置３０、およびキャッシュドロワ４０と物理的に接続される。
【００７７】
また、プリンタ２０内には、通信装置１０と、印字を行うためのプリンタインターフェース２１，プリンタバッファ２２およびプリンタ部２３を含むプリンタ機構２４がＵＳＢインターフェースを介して物理的に接続される。
【００７８】
印字を行う場合には、ホスト装置１００は通信装置１０に印字データを送信し、通信装置１０は受信した印字データをプリンタバッファ２２に転送する。プリンタ部２３は、プリンタバッファ２２に書き込まれた印字データを処理して印字を行う。
【００７９】
表示装置３０に表示を行う場合には、ホスト装置１００は通信装置１０に表示データを送信し、通信装置１０は受信した表示データを表示部３２に転送する。表示部３２は、転送された表示データを用いて表示を行う。
【００８０】
また、キャッシュドロワ４０において、例えばドロワをオープンする場合には、ホスト装置１００は通信装置１０にドロワオープンコマンドを送信し、通信装置１０は受信したドロワオープンコマンドをキャッシュドロワ部４２に転送する。キャッシュドロワ部４２は、転送されたドロワオープンコマンドを用いてドロワをオープンする。
【００８１】
ホスト装置１００は、ＵＳＢの信号線に接続するＵＳＢバスドライバ１０６の他に、ＰＯＳ用のオペレーティングシステム（ＯＳ）１０３、キーボードやディスプレイ等のホスト装置１００が一般的に備える機器や、これらの機器を制御するためのアプリケーションソフトウエア１０２や基本オペレーティングシステム（ＯＳ）１０１等を備える。アプリケーションソフトウエア１０２は、ＰＯＳ用のアプリケーションソフトウエアの他、各種アプリケーションソフトウエアとすることができ、基本オペレーティングシステム１０１やＰＯＳ用のオペレーティングシステム１０３の制御下で動作する。
【００８２】
また、ＰＯＳ用のオペレーティングシステム１０３は、印刷用ドライバ１０３ａ、表示用ドライバ１０３ｂ，ドロワ用ドライバ１０３ｃ、およびこれらのドライバを制御する制御用オペレーティングシステム１０３ｄを備える。
【００８３】
ホスト装置１００においてＵＳＢプロトコルによるフロー制御に係わる信号（ＡＣＫ信号やＮＡＫ信号）や送信データは、ＵＳＢプリンタ用ドライバ１０４からＵＳＢバスドライバ１０６を介してＵＳＢインターフェースによって通信装置１０に送られる。
【００８４】
また、ホスト装置１００のアプリケーション・プログラムによってシリアルＩ／Ｆプロトコルによるフロー制御に係わる信号（ＲＴＳ信号やＣＴＳ信号、あるいはXoff信号やXon信号）やフロー制御の有無の指定については、ＵＳＢ仮想シリアルドライバを構成するシリアルＩ／Ｆドライバ１０５からＵＳＢバスドライバ１０６を介してＵＳＢインターフェースによって通信装置１０に送られる。このとき、ＵＳＢバスドライバ１０６以下ではＵＳＢプロトコルによるフロー制御を行うが、アプリケーション・プログラムは、シリアルＩ／Ｆプロトコルによるフロー制御を行うと同等に扱うことができる。
【００８５】
通信装置１０は、通信インターフェースポート１１を介してホスト装置１００とＵＳＢインターフェースによって接続する。通信インターフェースポート１１には、受信用の通信用バッファ１２および送信用の送信バッファ１３を備える。受信用の通信用バッファ１２は、ホスト装置１００から送信されたデータや、プリンタ機構２４、表示装置３０、キャッシュドロワ４０等の周辺機器から送信されたデータを受信して格納する。
【００８６】
一方、送信用の送信バッファ１３は、ホスト装置１００から送信されたデータを各周辺機器に送信したり、あるいは各周辺機器から送信されたデータをホスト装置１００に送信するために格納する。ここでは、通信用バッファ１２や送信バッファ１３に格納するデータは、印字データに限らずコマンドも含み、また、コマンド以外のデータについても印字データに限らず画像データ等の種々の内容のデータとすることができる。
【００８７】
通信装置１０は、上記した通信用バッファ１２や送信バッファ１３の他に、通信用バッファ１２の受信バッファで受信した受信データを解析し、受信データ内に含まれる印字データ等の各種内容のデータや各種コマンドを抽出する解析部１４を備える。
【００８８】
また、本発明の通信装置１０が備える通信用バッファ１２は、結合あるいは分離を自在とする複数の領域を備え、この複数の領域中の一領域を受信バッファとして受信した受信データを格納し、残りの領域は空き領域として受信データは格納しない領域とする。この空き領域は、ホスト装置１００からのフロー制御を指定する指示に従って受信バッファに切り替えることによって、受信データを格納する。この空き領域の受信バッファへの切り替えにより、受信バッファのバッファサイズは拡大することになり、受信バッファがバッファフルの状態においても即時実行コマンド等の必要性が高いデータに受信を可能とする。
【００８９】
なお、受信バッファのバッファサイズの変更は、上記したように空き領域を受信バッファに切り替えることで拡大する他に、切り替えた受信バッファを空き領域に戻すことで縮小することも含んでいる。
【００９０】
通信装置１０は、この通信用バッファ１２中の空き領域を受信バッファに切り替えることで行うバッファサイズの拡大、および受信バッファを空き領域に戻すことで行うバッファサイズの縮小のバッファサイズの変更は、上記したように、ホスト装置１００からの指示に基づいて行うことができる。通信装置１０は、このホスト装置１００からのフロー制御を指定する指示を受けて解析する指示解析部１５を備える。
【００９１】
ここでは、通信用バッファ中の受信バッファのバッファサイズの変更を、ホスト装置１００からの通信装置１０に送られるフロー制御を指定する指示に基づいて行う。
【００９２】
本発明では、このフロー制御は、ＵＳＢインターフェースによるフロー制御と、シリアルインターフェースによるフロー制御の２つのフロー制御を含む。これらフロー制御は、ホストと周辺機器（デバイス）との間の通信を所定のプロトコルに従った手順で行うものであるが、シリアルインターフェースによるフロー制御は、本来のフロー制御の他に、受信バッファの容量の切り換え制御に用いる。
【００９３】
本発明のホスト装置１００と通信装置１０との間では、フロー制御を行うことによってホストとで周辺機器（デバイス）との間の通信を行う。このとき、重要度や緊急度が高いコマンドを送る場合には、ホスト装置１００は通信装置１０にシリアルインターフェースにおいてフロー制御を無効とする指定を指示する。このフロー制御を無効とする指定は、ＵＳＢ仮想シリアルドライバを介してＵＳＢバスドライバから指示される。通信装置１０はこのフロー制御を無効とする指示を受けると、重要度や緊急度が高いコマンドの送信があるとして、閾値を切り換える等によってバッファの容量を切り換える。
【００９４】
なお、このフロー制御を無効とする指示はシリアルインターフェースにおけるフロー制御であって、ＵＳＢインターフェースによるフロー制御ではないので、ＵＳＢインターフェースによるＡＣＫ，ＮＡＫ応答は続けられる。
【００９５】
また、切り換えたバッファの容量を元に戻す場合には、例えば、ホスト装置１００から通信装置１０にフロー制御を有効とすると指定を指示する。通信装置１０はこのフロー制御を有効とする指令を受けると、閾値を切り換える等によってバッファの容量を元に戻す。
【００９６】
本発明の通信装置１０は、このシリアルインターフェースのフロー制御を無効あるいは有効とする指定の指示に基づいて、通信用バッファ中の受信バッファのバッファサイズを変更する。例えば、フロー制御を無効とする指定により、空き領域を受信バッファに切り替えて受信バッファのバッファサイズを拡大し、フロー制御を有効とする指定により、切り替えた受信バッファを空き領域に戻して受信バッファのバッファサイズを縮小する。なお、フロー制御の指定状態はフロー制御カウンタ１７に記憶させておくことができる。
【００９７】
通信装置１０は制御部１６を備える。制御部１６は、フロー制御を行う他、受信バッファがバッファフルの場合に受信バッファのバッファサイズを拡大するバッファ制御や、受信バッファのバッファサイズを縮小するバッファ制御を行う。このとき、制御部１６は通信用バッファ１２から受信バッファに格納されるデータの容量あるいは、受信バッファに格納することができるデータ容量の残量の情報を受け取り、ＡＣＫ，ＮＡＫ応答を行う。
【００９８】
制御部１６は、例えば、解析部１４の解析結果に基づいて通信用バッファ１２中の受信バッファに格納されるデータを送信バッファ１３に転送し、さらに、送信バッファ１３から通信インターフェースポート１１を介して周辺機器やホスト装置に送信する制御を行う。また、受信バッファの受信状態に基づいてＡＣＫ応答やＮＡＫ応答を送信バッファ１３に転送し、送信バッファ１３から通信インターフェースポート１１を介してホスト装置に送信する制御を行う。
【００９９】
次に、図３を用いて受信バッファのバッファサイズの変更について説明する。
【０１００】
図３(a)は、通信用バッファにおいて、受信バッファと空き領域との関係を示している。通信用バッファは、通信装置が備える記憶手段において、受信データを格納するために用意した記憶領域であり、この記憶領域に記憶するデータの容量は、データの格納を行うか否かを判定する閾値により定める他、記憶領域中のアドレスを設定することによって設定することができる。受信バッファのバッファサイズの最大値は、この閾値やアドレス設定で定めることができる。
【０１０１】
この閾値は受信バッファのバッファサイズの最大値を定め、格納されるデータの容量とこの閾値とを比較し、既に格納されているデータの容量が閾値であるとき、既に格納されているデータ容量に新たに格納するデータ容量を加えたときのデータ容量が閾値を超えるような場合には、バッファはフル状態にある、あるいは、フル状態に陥ると判定する。また、この閾値をアドレスによって表すこともできる。
【０１０２】
この通信用バッファは、受信データを格納する受信バッファと、受信データの格納を行わない空き領域の複数の領域に仮想的に分けて捉えることができる。受信バッファは、ホスト装置から送信された送信データを格納してはじめてデータの受信が行われる。フロー制御において、ＡＣＫ応答の場合には、この受信バッファ内に送信データを受信する。空き領域は、フロー制御においてデータを格納しない領域であり、受信バッファがバッファフルと判定される状態において、即時実行コマンド等の必要度が高いデータやコマンドを受信するために用意しておく領域である。この受信バッファと空き領域との容量の割合は、予め閾値やアドレス設定で定めることができる。
【０１０３】
図３（ｂ），（ｃ）は、受信バッファのバッファサイズを拡大する場合を示している。図３（ｂ）において、受信バッファは、受信した送信データを格納データとして格納し、送信データが格納されずに残った部分は空きバッファとなる。受信バッファ内に格納されるデータの容量、あるいは空きバッファの容量は、例えば、格納されたデータと閾値との比較や、格納されたデータのアドレスを参照することで算出することができる。この格納データのデータ容量算出は、受信バッファ内に格納データが連続して格納されていない場合であっても、各格納データのデータ容量を加算することで求めることができる。
【０１０４】
空き領域として設定されている記憶領域にはデータの格納は行われない。なお、この空き領域内のデータ状態は、必ずしもデータが格納されていないわけではなく、受信バッファの変更履歴において、以前に格納したデータが残っている場合もある。このような場合には、格納されたデータの内で、消去してもよいデータについては無視する。
【０１０５】
この図３（ｂ）の状態において、通信装置は制御フロー無効の指定の指示を受けると、この指令を契機として、空き領域の設定を無効とし、この空き領域を受信バッファに切り替える。図３（ｃ）はこの状態を示しており、空き領域が受信バッファに切り替わったことにより、空きバッファの部分が広がり、図３（ｂ）の状態よりも大きなサイズの受信データを空きバッファに格納することができる。なお、空き領域から受信バッファへの切り替えは、記憶領域のアドレスを設定変更することで行うことができる。
【０１０６】
一方、図３（ｄ），（ｅ）は、受信バッファのバッファサイズを縮小する場合を示している。図３（ｄ）において、通信用バッファは全てを受信バッファとし、空き領域は設定されていない。ここでは、受信バッファ内にはデータは格納されておらず、空きバッファの状態を示している。
【０１０７】
この図３（ｄ）の状態において、通信装置は制御フロー有効の指示を受けると、この指示を契機として、空き領域の設定を有効とし、受信バッファの一部を空き領域に切り替える。図３（ｅ）はこの状態を示しており、受信バッファの一部が空き領域に切り替わったことにより、空きバッファの部分が狭まる。なお、受信バッファの一部を空き領域に切り替える処理は、閾値を変更したり、記憶領域のアドレスを設定変更することで行うことができる。図３（ｅ）に示すように、通信用バッファが受信バッファと空き領域を備える構成に変更された後は、制御フローに従って受信バッファにのみ送信データを格納し、空き領域へのデータの格納は行わない。
【０１０８】
次に、ホスト装置と通信装置へ間の通信動作について、図４の動作図、図５，６のフローチャート、および図７，図８の状態図を用いて説明する。なお、図５と図６のフローチャートは、受信バッファに新たにデータを格納できるか否かを確認する手順で相違するが、その後の受信バッファのバッファサイズの変更を含む動作は共通するため、主に図５を用いて説明する。また、図７の状態図は制御フローが有効な状態であり、受信バッファのバッファサイズの変更を行わない動作を示し、図８は受信バッファのバッファサイズの変更する動作を示している。
【０１０９】
図４において、ホスト装置と通信装置との間は、ＵＳＢインターフェースによるフロー制御と、仮想シリアルを用いたシリアルインターフェースによるフロー制御とを行い、さらに、仮想シリアルを用いたフロー制御の有無の指定を指示することによるバッファ制御を行う。
【０１１０】
図４（ａ）はＵＳＢインターフェースによるフロー制御の概略を示している。ここでは、送信データをＵＳＢバスドライバを介してパケットで送信し、受けて側の通信装置において、受信可能である場合には送信データをバッファ内の格納し、ＡＣＫ信号をホスト装置に送信する。また、受けて側の通信装置において、バッファがフルの状態等によって受信が不可である場合には送信データをバッファ内の格納することなく、ＮＡＫ信号をホスト装置に送信する。
【０１１１】
また、図４（ｂ）は仮想シリアルを用いたシリアルインターフェースによるフロー制御の概略を示している。ここでは、フロー制御有りの指定がされているものとする。アプリケーションにおいてＣＴＳ状態の問い合わせが生じた場合いは、ホスト装置は、ＲＴＳ信号をシリアルＩ／ＦドライバをＵＳＢ仮想シリアルドライバとして、ＵＳＢ用バスドライバを通して通信装置に送る。通信装置は、このＲＴＳ信号を受けて、ＲＥＡＤＹ状態あるいはＢＵＳＹ状態を表すＣＴＳ信号を送信する。
【０１１２】
また、アプリケーションからキャッシュドロワコマンド等の必要度の高いコマンドが発生した場合には、ホスト装置はシリアルインターフェースにおけるフロー制御についてフロー制御無しの指定を行い、この指定をシリアルＩ／ＦドライバのＵＳＢ仮想シリアルドライバからＵＳＢ用バスドライバを通して通信装置に送る。通信装置は、このフロー制御無しの指定を受けて、バッファの容量変更を行う。
【０１１３】
したがって、ホスト装置と通信装置との間は、ＵＳＢインターフェースによるＵＳＢフロー制御、ＵＳＢ仮想シリアルドライバを介することによる仮想的なシリアルフロー制御、および、シリアルフロー制御の指定によるバッファ制御の３つの態様の制御を行っている。
【０１１４】
図５のフローチャートにおいて、はじめに、受信バッファに新たにデータを格納することができるか否かを確認する。この確認は、受信バッファのメモリ残量が予め設定しておいた閾値（設定値）と比較することで行う。メモリ残量が閾値（設定値）よりも大きい場合には、受信バッファ内へのデータの格納が可能であると判定し、メモリ残量が閾値（設定値）よりも小さい場合には、受信バッファ内へのデータの格納が不可能であると判定する。
【０１１５】
受信バッファのメモリ残量は、記憶装置の記憶領域において、受信バッファを構成するアドレスと受信バッファ内に格納されるデータのアドレスから算出することもできる。また、閾値（設定値）は、例えば、通常状態において送信される送信データが格納できるデータ量に所定のマージンを加えて設定したり、あるいは、受信バッファのバッファサイズに対する％比率で設定するなど、任意に定めることができる（Ｓ１）。
【０１１６】
Ｓ１の工程において、メモリ残量が閾値（設定値）よりも大きい場合には、受信バッファ内へのデータの格納が可能であるため、制御フローによって送信データを受信する。
【０１１７】
図７は、メモリ残量が閾値（設定値）よりも大きい場合のデータ送信状態を示している。図７の状態図において、通信装置は、ホスト装置から送信された送信データを空きバッファ内に格納し（ａ）、ＡＣＫ応答を行う（ｂ）。この送信データの受信バッファ内への格納によって空きバッファは減少し、受信バッファはバッファフル状態に近づいた状態となる。この状態において、更にホスト装置から送信データが送信されると（ｃ）、通信装置は空きバッファ内に送信データを格納することができないため、ホスト装置に対してＮＡＫ応答を行う（ｄ）。この状態は、受信バッファにバッファフル状態が解消して空きバッファが増えるまで繰り返される（ｅ、ｆ）。
【０１１８】
一方、メモリ残量が閾値（設定値）よりも小さい場合には、受信バッファ内へのデータの格納が不可能であるため、ホスト装置からデータが送信された場合には（Ｓ２）、以下のＳ３〜Ｓ１３の工程により、受信バッファのバッファサイズを拡大して送信データを受信する。
【０１１９】
また、図６のフローチャートでは、受信バッファに新たにデータを格納することができるか否かの確認は、ホスト装置からデータの送信があった場合に（Ｓ１Ａ）、受信バッファでのデータ格納が成功したか否かによって行う（Ｓ２Ａ）。
【０１２０】
Ｓ１，Ｓ２あるいはＳ１Ａ，Ｓ２Ａの工程によって、受信バッファのメモリ残量が少なく新たなデータの格納が困難であると判定した場合には、Ｓ３〜Ｓ１３の工程により、受信バッファのバッファサイズを拡大して送信データを受信する。
【０１２１】
受信バッファのメモリ残量が少なく新たなデータの格納が困難であるため、通信装置はフロー制御によりＮＡＫ応答をホスト装置に送信する（Ｓ３）。ホスト装置は、このＮＡＫ応答を受けて、フロー制御を無効とする指示を通信装置に送る。通信装置は、ホスト装置からフロー制御を無効とする指示を受けると（Ｓ４）、受信バッファのバッファサイズを拡大する（Ｓ５）。
【０１２２】
受信バッファのバッファサイズが拡大した後、ホスト装置から送信データが送信されると（Ｓ６）、通信装置は、拡大した受信バッファ内に送信データを格納する（Ｓ７）。通信装置はＡＣＫ応答を行う。なお、ここでは、フロー制御を無効としているため、ＡＣＫ応答を必ずしも送信する必要はない（Ｓ８）。
【０１２３】
さらに、ホスト装置からコマンドが送信されると（Ｓ９）、通信装置は、拡大した受信バッファ内に送信されたコマンドを格納し（Ｓ１０）、通信装置はＡＣＫ応答を行う（Ｓ１１）。
【０１２４】
ホスト装置は、送信データおよびコマンドとして即時実行を要するデータあるいはコマンドを送ることで、受信バッファがバッファフル状態であっても即時に実行することができる。なお、通信装置は、送信されたデータやコマンドが即時実行を要するか否かを判定することはできず、ホスト装置側において即時実行の要否の判定を行う。したがって、ホスト装置は、例えば、予め即時実行を要するデータやコマンドの種類を定めておき、アプリケーションからこの即時実行を要するデータやコマンドが要求されたときには、制御フロー無効の指定を指示することで受信バッファのバッファサイズを拡大して、即時実行データや即時実行コマンドの受信を可能とする。
【０１２５】
その後、通信装置は、ホスト装置から制御フロー有効の指定の指示を受けると（Ｓ１２）、この指示に基づいて、通信用バッファ内に空き領域を形成して受信バッファのバッファサイズを元のサイズに戻す（Ｓ１３）。
【０１２６】
図８は受信バッファのバッファサイズを変更する動作状態を示している。図８において、通信用バッファには受信バッファと空き領域が設定され、受信バッファは空きバッファを残して一部の領域にデータが格納されているものとする。
【０１２７】
通信装置は、ホスト装置からフロー制御無しの指示を受ける（ａ）と、空き領域を受信バッファとして受信バッファのバッファサイズを拡大する（ｂ）。その後、ホスト装置から送信データが送られると、通信装置は送信データを拡大された受信バッファの空きバッファ内に格納し（ｃ）、ＡＣＫ応答を行う（ｄ）。
【０１２８】
さらに、ホスト装置から、例えばドロワオープンコマンド等のコマンドが送られると、通信装置はコマンドを受信バッファの空きバッファ内に格納し（ｅ）、ＡＣＫ応答を行う（ｆ）。
【０１２９】
受信バッファ内に格納されたデータが処理されると、処理が済んだデータの領域は空きバッファとなり、受信バッファ内の空きバッファの領域が増える。なお、このとき、受信バッファ内において、処理済みデータは必ずしも消去される必要はなく、単に空きバッファを表すアドレスの変更のみの処理で対応してもよい。この場合には、この空きバッファにデータを格納する場合には、上書き処理を行うことによって旧データをクリアする（ｇ）。
【０１３０】
その後、通信装置は、ホスト装置からフロー制御有りの指示を受けると、通信用バッファ内に再び空き領域を設定し、受信バッファのバッファサイズを縮小する。この空き領域の設定は、必ずしもはじめに設定した空き領域と同じアドレス領域である必要はなく、予め設定した空き領域と同じバッファサイズが得られる任意のアドレス領域に設定してもよい。
【０１３１】
また、空き領域を設定する領域は、通信用バッファの空きバッファ内の領域を優先的に設定する。このとき、空きバッファ内にデータが残っている場合には必ずしも消去する必要はなく、再度受信バッファに変更されたときに、データ消去あるいは上書き処理を行うことによって旧データをクリアしてもよい。
【０１３２】
また、空き領域を設定する領域の容量が、通信用バッファの空きバッファの領域の容量のみでは足りない場合には、空きバッファのみの領域を空き領域として設定する。なお、空きバッファのみの領域によって空き領域を設定する場合には、設定した空き領域の容量は予め設定した空き領域の容量よりも少ないため、その後のデータ処理によって空きバッファが生じたときに、この空きバッファを空き領域とすることで、当初に設定した空き領域の容量を確保することができる。
【０１３３】
また、不足する空き領域の容量分を確保する領域として、受信バッファ内のデータが格納される領域の一部の領域を用いて設定してもよいが、このときには、格納されたデータの一部が使用不能となるおそれがある。
【０１３４】
フロー制御有りの指示によって空き領域が設定された後、受信バッファがバッファフル状態の状態であるとき、ホスト装置から送信データが送られると（ｉ）、通信装置はＮＡＫ応答を行う（ｊ）。
【０１３５】
この状態において、ホスト装置は即時実行コマンド等の即時性を要する送信データを送信する場合には、即時実行コマンドを送信する前に、前記（ａ）で示したようにフロー制御無しの指示を送って、通信装置側の通信用バッファの受信バッファのバッファサイズを拡大して、即時実行コマンドを受信する容量を確保する。
【０１３６】
本発明では、上記した空き領域として複数の領域を設定し、受信バッファへの切り替えを段階的に行う構成とする態様とすることもできる。図９は、複数の領域を有する空き領域を説明するための図である。
【０１３７】
図９において、通信用バッファは、図３で示したと同様に、送信データを格納する受信バッファと、送信データの格納を行わない空き領域とを備え、空き領域は複数の領域を含む構成とする。図９では、空き領域として、第１の空き領域と第２の空き領域を備える構成を示している（図９（ａ））。
【０１３８】
この構成では、空き領域から受信バッファへの切り替えを段階的に行う。例えば、第１段階において第１の空き領域を受信バッファに切り替え、次の第２段階において第２の空き領域を受信バッファに切り替えることで段階的に受信バッファのバッファサイズを拡大する。また、受信バッファのバッファサイズを縮小する場合には、第１段階において受信バッファに第２の空き領域（あるいは第１の空き領域）を設定し、次の第２段階において第１の空き領域（あるいは第２の空き領域）を設定することで段階的に受信バッファのバッファサイズを変更する。
【０１３９】
図９（ｂ）〜図９（ｄ）は、受信バッファを段階的に拡大する例を示している。ここでは、はじめに通信用バッファは受信バッファと、第１の空き領域と第２の空き領域を含む空き領域とを備えるものとする（ｂ）。この状態において、通信装置は、制御フロー無しの指示を受けると、第１の空き領域を受信バッファに切り替えて受信バッファのバッファサイズを拡大する。この第１回目のバッファサイズの拡大によって、通信バッファは、拡大された受信バッファと第２の空き領域とを備えることになる（ｃ）。
【０１４０】
さらに、通信装置は、２回目の制御フロー無しの指示を受けると、第２の空き領域を受信バッファに切り替えて受信バッファのバッファサイズをさらに拡大する。この第２回目のバッファサイズの拡大によって、通信バッファは、さらに拡大された受信バッファを備えることになる。（ｄ）。
【０１４１】
受信バッファのバッファサイズを縮小する場合には、制御フロー有りの指示を複数回用いて段階的に空き領域を設定することによって行うことができる。なお、この制御フロー無しの指示および制御フロー有りの指示を受けた回数は、図２中のフロー制御カウンタ１７に計数することができる。制御部１６は、このフロー制御カウンタ１７に計数される数値を参照することで、受信バッファの変更状態を確認することができる。また、フロー制御カウンタ１７の計数値と、受信した制御フローの指示が制御フロー無しあるいは制御フロー有りの何れであるかによって、受信バッファのバッファサイズを必要に応じて変更自在とすることができる。
【０１４２】
このように、空き領域を複数の領域を含む構成とし、この複数の領域を用いて段階的に空き領域と受信バッファとの間で切り替えを行うことによって、受信バッファのバッファサイズの段階的な変更を可能とすることができ、これによって、空き領域を、即時実行を要するデータやコマンドについて即時性や重要性に応じて段階的に使用することができる。
【０１４３】
本発明の態様によれば、受信バッファのサイズをホスト装置からの制御フローの有無を定める指示などのプロトコル指定によって変更し、受信バッファのバッファフル状態であっても、例えば、ＰＯＳシステムにおいてドロワコマンドやエラー解除コマンドを受け付けることができる。
【図面の簡単な説明】
【０１４４】
【図１】本発明によるＵＳＢ接続によるホスト装置と通信装置との関係を説明するための図である。
【図２】本発明によるＵＳＢ接続によるホスト装置と通信装置との関係、および通信装置の概略構成を説明するための図である。
【図３】本発明の受信バッファのバッファサイズの変更を説明するための図である。
【図４】本発明のホスト装置と通信装置へ間の通信動作を説明するための動作図である。
【図５】本発明のホスト装置と通信装置へ間の通信動作を説明するためのフローチャートである。
【図６】本発明のホスト装置と通信装置へ間の通信動作を説明するためのフローチャートである。
【図７】本発明のホスト装置と通信装置へ間の通信動作を説明するための動作状態図である。
【図８】本発明のホスト装置と通信装置へ間の通信動作を説明するための動作状態図である。
【図９】本発明の複数の領域を有する空き領域を説明するための図である。
【図１０】従来のホスト装置とプリンタとの間の関係を説明するための図である。
【図１１】シリアルＩ／Ｆによるデータのフロー制御を説明するためのプリンタ側のフローチャートである。
【図１２】ＵＳＢインターフェースによるホストと周辺機器との間の通信状態を説明するための図である。
【符号の説明】
【０１４５】
１０  通信装置
１１  通信インターフェースポート
１２  通信バッファ
１３  送信バッファ
１４  解析部
１５  指示解析部
１６  制御部
１７  フロー制御カウンタ
２０  プリンタ
２１  インターフェース
２２  プリンタバッファ
２３  プリンタ部
２４  プリンタ機構
３０  表示装置
３１  インターフェース
３２  表示部
４０  キャッシュドロワ
４１  インターフェース
４２  キャッシュドロワ部
１００  ホスト装置
１０１  基本オペレーティングシステム
１０２  アプリケーションソフトウエア
１０３  ＰＯＳ用オペレーティングシステム
１０３ａ  印刷用ドライバ
１０３ｂ  表示用ドライバ
１０３ｃ  ドロワ用ドライバ
１０３ｄ  制御用オペレーティングシステム
１０４  ＵＳＢプリンタ用ドライバ
１０５  シリアルＩ／Ｆドライバ  
１０６  ＵＳＢバスドライバ
２０１  プリンタ
２０２  アプリケーション・プログラム
２０３  アプリケーション・プログラム・インターフェース
２０４  ＵＳＢプリンタクラスドライバ
２０５  シリアルＩ／Ｆドライバ
２０６  ＵＳＢバスドライバ
２０７  パラレルＩ／Ｆドライバ
２０８  ＲＳ２３２
２０９  ＩＥＥＥ１２８４
【図１】
2008015823.tif 000003
【図２】
2008015823.tif 000004
【図３】
2008015823.tif 000005
【図４】
2008015823.tif 000006
【図５】
2008015823.tif 000007
【図６】
2008015823.tif 000008
【図７】
2008015823.tif 000009
【図８】
2008015823.tif 000010
【図９】
2008015823.tif 000011
【図１０】
2008015823.tif 000012
【図１１】
2008015823.tif 000013
【図１２】
2008015823.tif 000014