(57)【特許請求の範囲】
【請求項１】
データチャネルとコントロールチャネルとをもつ通信インタフェースによるホストとプリンタ間のデータ通信を制御するための装置において、
前記ホストにて、印刷データ及び制御データをプリンタへ送信する送信手段と、
前記ホストにて、前記プリンタからの前記印刷データ又は制御データの受信に関する応答を待っている間の経過時間が所定の制限時間を経過したときにホストタイムアウトイベントを発生するホストタイムアウト手段と、
前記プリンタにて、前記ホストから前記印刷データの受信を行っている間の経過時間をカウントするタイマと、
前記プリンタにて、前記印刷データの受信が完了する前に、前記タイマによるカウント値が、前記ホストタイムアウト手段が用いる制限時間よりも短く設定されている所定の上限時間に達したときにプリンタタイムアウトイベントを発生するプリンタタイムアウト手段と、
前記プリンタにて、前記プリンタタイムアウトイベントに応答して、前記印刷データの受信に関する未完了の応答を前記ホストへ返送し、また、前記印刷データの受信が完了したとき、前記印刷データの受信に関する完了の応答を前記ホストへ返送し、さらに、前記制御データの受信が完了したとき、前記制御データの受信に関する完了の応答を前記ホストへ返送する応答手段と、
を備え、
前記ホストにて、前記送信手段が、前記プリンタから前記印刷データの受信に関する未完了の応答を受けた場合、今まで行われていた印刷データの送信要求を送信保留キューに入れて前記印刷データの送信を一時的に中断し、その後、前記制御データを前記プリンタへ送信し、前記プリンタから前記制御データの受信に関する完了の応答を受けた場合、前記送信保留キューから前記印刷データの送信要求を取り出して、前記印刷データの送信を再開する、装置間データ通信制御装置。
【請求項２】
前記プリンタにて、前記印刷データの送信が完了する前に前記プリンタタイムアウトイベントが発生したときに、受信済データサイズ又は未受信の残りデータサイズを記憶し、そして、前記印刷データの送信が再開されたとき、前記記憶した受信済データサイズ又は残りデータサイズに基づいて、受信済データをスキップして未受信の残りデータを選択的に受信する手段と
を更に備えた請求項１記載の装置間データ通信制御装置。
【請求項３】
データチャネルとコントロールチャネルとをもつ通信インタフェースによるホストとプリンタ間のデータ通信を制御するための方法において、
前記ホストにて、印刷データ又は制御データをプリンタに送信するステップと、
前記ホストにて、前記プリンタからの前記印刷データ又は制御データの受信に関する応答を待っている間の経過時間が所定の制限時間を経過したときにホストタイムアウトイベントを発生するステップと、
前記プリンタにて、前記ホストから前記印刷データの受信を行っている間の経過時間をカウントするステップと、
前記プリンタにて、前記印刷データの受信が完了する前に、前記経過時間のカウント値が、前記ホストタイムアウトイベントのための制限時間よりも短く設定されている所定の上限時間に達したときにプリンタタイムアウトイベントを発生するステップと、
前記プリンタにて、前記プリンタタイムアウトイベントに応答して、前記印刷データの受信に関する未完了の応答を前記ホストへ返送するステップと、
前記プリンタにて、前記印刷データの受信が完了したとき、前記印刷データの受信に関する完了の応答を前記ホストへ返送するステップと、
前記プリンタにて、前記制御データの受信が完了したとき、前記制御データの受信に関する完了の応答を前記ホストへ返送するステップと、
前記ホストにて、前記プリンタから前記印刷データの受信に関する未完了の応答を受けた場合、今まで行われていた印刷データの送信要求を送信保留キューに入れて前記印刷データの送信を一時的に中断し、その後、前記制御データを前記プリンタへ送信し、前記プリンタから前記制御データの受信に関する完了の応答を受けた場合、前記送信保留キューから前記印刷データの送信要求を取り出して、前記印刷データの送信を再開するステップと、
を備えた装置間データ通信制御方法。
【発明の詳細な説明】
【０００１】
【発明が属する技術分野】
本発明は、例えばホスト装置と電子式プリンタとの間の印刷データや制御データの通信のような、装置間のデータ通信を制御するための装置及び方法に関する。
【０００２】
【従来の技術】
装置間の通信インタフェースには、多くの種類のものが知られている。ある種の通信インタフェース、例えばIEEE1394では、アクシデントが発生してもデータを確実に伝送できるように幾つかの方策が採られている。
【０００３】
例えば、IEEE1394通信インタフェースで一方の装置から他方の装置へデータを伝送している途中で、受信側の装置が何らかの原因でデータ受信を進められなくなったとする。この場合、受信側装置から送信側装置へ、処理未完了の応答を送ることで、そのデータ通信を一時的に中断し、後に、同じデータの伝送を再度行うことができる。
【０００４】
また、一方の装置から他方の装置へデータを伝送している途中で、両装置が接続されたIEEE1394の通信ネットワークの構成が変化する（例えば、その通信ネットワークの何処かの箇所で通信ケーブルが抜かれたり、その通信ケーブルが再び接続されたりする、など）とする。この場合、その通信ネットワークの構成が変化した直後に両装置にてバスリセットが行われてネットワーク・トポロジが再構築され、その直後に、バスリセット直前に送信されていたと同じデータが再度伝送されるようになっている。
【０００５】
【発明が解決しようとする課題】
説明のための一例として、ホスト装置と電子式プリンタとの間のデータ通信を取り上げる。ホスト装置からプリンタへ送信されるデータの種類には、文書の印刷をプリンタに行わせるための印刷データや、所定の特別の動作（例えば、プリンタステータスの返送、インクカートリッジ交換、テスト印刷、ヘッドクリーニングなど）をプリンタに行わせるための制御データなどがある。ホスト装置では、印刷データを出力するアプリケーションプログラム（例えば、プリンタドライバ）や制御データを出力するアプリケーションプログラム（例えば、プリンタユーティリティ）は、それぞれ、プリンタに対してデータを出力した後、プリンタでのそのデータの受信状態又は処理状態を知らせるプリンタからの応答を待ち、その待ち時間をカウントする。もし、応答が来ずに所定の制限時間が経過すると（タイムアウトイベントの発生）、そのアプリケーションプログラムは、プリンタとの通信が不能である（例えば、プリンタが接続されていないか電源が入っていない）とみなし、所定の対処方法を行うことになる。
【０００６】
ところとで、プリンタとホスト装置間の通信が可能な場合であっても、上記のタイムアウトイベントが発生してしまう場合がある。
【０００７】
例えば、プリンタが印刷データの受信を開始した後、その印刷データを全部を受信完了するまでに長い時間がかかりすぎて、ホスト装置への応答の返送が長く遅れると、上記のタイムアウトイベントが発生してしまう。
【０００８】
また、例えば、IEEE1394のように、データチャンネルとコントロールチャンネルという異なる論理チャンネルをもつ通信インタフェースが用いられる場合には、次のようなトラブルによりタイムアウトイベントが発生することがある。すなわち、多くのシステムは、印刷データはデータチャンネルで、制御データはコントロールチャンネルで送るように設計されている。この場合、通信インタフェースの規格では、データチャンネルとコントロールチャンネルを並行的に用いて、印刷データと制御データを同時並行的に送ることが可能な筈なのだが、しかし、現実のある種のパーソナルコンピュータシステムでは、この２つのチャンネルを用いて印刷データと制御データを同時並行的に送ると、制御データに関して、プリンタからの応答がホスト装置内のアプリケーションプログラムにに正常に認識されない、というトラブルが発生することがある。そのようなトラブルが生じると、制御データに関して上記のタイムアウトイベントが発生してしまう。
【０００９】
上記のように、ホスト装置のアプリケーションプログラムでタイムアウトイベントが発生するようなシステムでは、上述したIEEE1394のように通信インタフェースそれ自体がデータ通信の中断を補償できる方策を採っていても、ホスト装置とプリンタとの間の確実なデータ通信を保証することができない。
【００１０】
また、上述したように、IEEE1394の通信ネットワークにおいて、印刷データ伝送の最中にネットワーク構成が変化した場合、バスリセットが行われてネットワーク・トポロジが再構築され、その後に、バスリセット直前と同じ印刷データが再送信されるるようになっている。この場合、プリンタでは、その印刷データのうち、バスリセット前に受信し終わった部分については、再度受信せずに、未だ受信していない残りの部分だけを選択的に受信することが望ましい。しかし、このような残りデータの選択的受信を行うことは簡単ではない。すなわち、バスリセットによってネットワークト・ポロジが再構築されるため、ホスト装置とプリンタのネットワーク上でのアドレスや、ホスト装置内のリソースのアドレスなどが、バスリセット前とは違ったものに変わってしまうことがある。そうすると、プリンタとしては、ホスト装置内の印刷データのどの部分が受信済みでどの部分が未受信なのか分からなくなってしまう。
【００１１】
上記のような問題は、ホスト装置とプリンタとの通信だけに限らず、他の様々な装置間通信でも存在するであろう。
【００１２】
本発明は、以上のような事情に鑑みなされたもので、その目的は、上記のタイムアウトとネットワークトポロジ再構築の２つの問題のうち、特に前者の問題を解決することにある。
【００１３】
すなわち、本発明の目的は、装置間のデータ通信において、受信側装置がデータ受信に手間取っている場合でも、送信側装置でのタイムアウトイベントの発生を防止することにある。
【００１４】
また、本発明の別の目的は、装置間のデータ通信において、データチャネルとコントロールチャネルによる同時並行的な通信にトラブルがあっても、送信側装置でのタイムアウトイベントの発生を防止することにある。
【００１５】
【課題を解決するための手段】
本発明の第1の形態に従う装置間のデータ通信制御装置は、受信側装置にて、送信側装置からデータ受信を行っている間の経過時間をカウントするタイマと、前記受信側装置にて、前記データ受信が完了する前に前記タイマによるカウント値が所定の上限時間に達したとき受信側タイムアウトイベントを発生する受信側タイムアウト手段と、前記受信側装置にて、前記タイムアウトイベントに応答して、前記データ受信に関する応答を前記送信側装置へ返送する応答手段と、前記送信装置にて、前記受信側装置からの前記データ受信に関する応答を待っている間に所定の制限時間を経過したとき、送信側タイムアウトイベントを発生する送信側タイムアウト手段とを備える。そして、前記受信側タイムアウト手段が用いる前記上限時間が、前記送信側タイムアウト手段が用いる前記制限時間よりも短く設定されている。
【００１６】
本発明の第２の形態に従う装置間のデータ通信制御装置は、データチャネルとコントロールチャネルをもつ通信インタフェースによるデータ通信を制御するための装置においものである。この制御装置は、受信側装置にて、送信側装置から前記データチャネルでのデータ受信を行っている間の経過時間をカウントするタイマと、前記受信側装置にて、前記データチャネルでのデータ受信が完了する前に前記タイマによるカウント値が所定の上限時間に達したとき受信側タイムアウトイベントを発生する受信側タイムアウト手段と、
前記受信側装置にて、前記受信側タイムアウトイベントに応答して、前記データチャネルでのデータ受信に関する未完了の応答を前記送信側装置へ返送し、また、前記データチャネルでのデータ受信が完了したとき、前記データチャネルでのデータ受信に関する完了の応答を前記送信側装置へ返送し、さらに、前記コントロールチャネルでのデータ受信が完了したとき、前記コントロールチャネルでのデータ受信に関する完了の応答を前記送信側装置へ返送する応答手段と、前記送信側装置にて、前記受信側装置からの前記データチャネルでのデータ受信に関する応答を待っている間に、前記コントロールチャネルでのデータ送信の要求が発生した場合、前記コントロールチャネルでのデータ送信の実行を一時的に保留し、その後、前記受信側装置から前記データチャネルでのデータ受信に関する応答を受けた後に、前記コントロールチャネルでのデータ送信を開始する排他制御手段と、前記送信側装置にて、前記受信側装置からの前記データチャネルでのデータ受信に関する応答を待っている間の経過時間が所定の第1の制限時間を経過したとき、第1の送信側タイムアウトイベントを発生する第1の送信側タイムアウト手段と、前記送信側装置にて、前記受信側装置からの前記コントロールチャネルでのデータ受信に関する応答を待っている間の経過時間が所定の第２の制限時間を経過したとき、第2の送信側タイムアウトイベントを発生する第2の送信側タイムアウト手段とを備える。そして、前記受信側タイムアウト手段が用いる前記上限時間が、前記第1及び第2の送信側タイムアウト手段が用いる前記第1及び第2の制限時間よりも短く設定されている。
【００１７】
【発明の実施の形態】
以下、説明のための一例として、パーソナルコンピュータのようなホスト装置と、レーザプリンタやインクジェットプリンタのような電子式プリンタとの間のデータ通信を取り上げる。
【００１８】
図１は、ホスト装置と電子式プリンタ間のデータ通信に適用された本発明の一実施形態における、データ通信に関わるホスト装置内のプログラム又はハードウェアモジュールの構成を示す。
【００１９】
プリンタドライバ１０は、ユーザの要求に応答して、ユーザ所望の文書の印刷データを作成して出力するものである。プリンタドライバ１０から出力された印刷データは、スプーラ３０に一時格納された後、スプーラ３０から送出されて、ポートモニタ４０、IEEE1394.3コントローラ５０、SBP2コントローラ６０、IEEE1394バスドライバ７０、IEEE1394コネクタ８０及びIEEE1394ケーブル９０を通じてプリンタへ送られるようになっている。
【００２０】
また、プリンタユーティリティ２０は、定期的に又はユーザの要求に応答してプリンタの現在のステータスをプリンタから取得したり、ユーザの要求に応答してプリンタに対してメンテナンスなどのための各種の特別動作（例えば、インクカートリッジ交換、ヘッドクリーニング、テスト印刷、ステータス印刷、給紙／排紙など）を行わせたりするための制御データを出力するものである。プリンタユーティリティ２０から出力された制御データは、ポートモニタ４０、IEEE1394.3コントローラ５０、SBP2コントローラ６０、IEEE1394バスドライバ７０、IEEE1394コネクタ８０及びIEEE1394ケーブル９０を通じてプリンタへ送られるようになっている。
【００２１】
IEEE1394.3コントローラ５０は、規格IEEE1394.3に準拠した通信プロトコル制御を行うものであり、以下に説明する本発明の原理に従うホスト装置の通信制御動作は、主として、このIEEE1394.3コントローラ５０によって行われる。SBP2コントローラ６０は、規格SBP2に準拠した通信プロトコル制御を行うものである。IEEE1394バスドライバ７０は、規格IEEE1394に準拠した特に物理的な通信信号制御を行うものである。IEEE1394コネクタ８０は、IEEE1394ケーブル９０が接続される物理的なコネクタである。
【００２２】
図示してないが、プリンタ側にも上記と同様に、ポートモニタ、IEEE1394.3コントローラ、SBP2コントローラ、IEEE1394バスドライバ、IEEE1394コネクタがある。そして、ホスト装置からの印刷データや制御データを解釈してプリンタを制御するプログラム又は回路が、ポートモニタの上位に存在する。以下に説明する本発明の原理に従うプリンタの通信制御動作は、主に、プリンタ内のIEEE1394.3コントローラによって行われる。
【００２３】
図２は、IEEE1394に準拠したホスト装置とプリンタ間のデータ通信の概略手順を示す。
【００２４】
ホスト装置において、プリンタドライバ１０又はプリンタユーティリティ２０からの印刷データ又は制御データの送信要求が発生すると、図２に示すように、ホスト装置は、そのメモリ上に、オペレーション・リクエスト・ブロック（以下、「ORB」という）と呼ばれるデータブロック１００と、送信したい印刷データ又は制御データを格納したデータ・バッファ１１０を構築し、そして、ステップS1に示すように、ORBリード要求をプリンタに送信する。プリンタは、ホスト装置からのORBリード要求に応答して、ステップS2に示すように、ホスト装置からORBを読み込む。
【００２５】
ORBには、ホスト装置からプリンタに要求された動作（例えば、データのリード又はライトなど）や、データ・バッファ１１０の先頭アドレス及びデータサイズなどが記述されている。プリンタは、ステップS３に示すように、ORBにより要求された動作を実行する。ORBにより要求される動作の典型例は、データ・バッファ１１０から印刷データ又は制御データを読み込むこと（つまり、ホスト装置からプリンタへ印刷データ又は制御データを送信すること）である。また、別のある種のORBにより要求される動作は、例えば、プリンタ内の特定のデータ（例えば、プリンタの現在の状態を示すステータス・データ）をホスト装置内のデータ・バッファ１１０に書き出すことである。いずれにせよ、プリンタは、ORBにより要求された動作を実行した後、ステップS4に示すように、その実行結果を示すステータス・ブロック（以下、「SB」という）と呼ばれるデータブロックを、ホスト装置内のメモリ上のレジスタ１２０に書き込む。SBには、対応のORBのアドレスや、そのORBにより要求された動作の完了状態（例えば、完了又は未完了）などが記述されている。SBは、要するに、ホスト装置からの処理要求（ORB）に対する、プリンタからの応答である。
【００２６】
図３は、ORBの構成を示す。
【００２７】
図３に示すように、ORB１００には、ポインタ、データ・バッファ・アドレス、動作、データ・バッファ・サイズ、キュー番号、シグネチャなどのフィールドが含まれている。
【００２８】
ここで、ORB１００内のポインタ・フィールドには、このORB１００に他のORB１００−２がリンクされている場合における、後続のORB１００−２へのポインタが記述される。図３では１つのORB１００に別の一つのORB１００−２がリンクされている例が示されているが、２番目のORBの後に更に別のORBをリンクして、ORBの連鎖をもっと長くすることができる。このように複数のORBがシリアルにリンクされている場合、プリンタは、先のORBを読み、それにより要求された処理を実行してSBをホスト装置に返した後、引き続き、次のORBを読んで、それにより要求された処理を実行することになる。例えば、プリンタユーティリティ２０がプリンタのステータスをモニタする場合は、プリンタにステータス・データを用意させるための制御データをホスト装置から読み込むことをプリンタに要求するORBと、用意されたステータス・データをホスト装置に書き出すことをプリンタに要求するORBとがリンクされることになる。この場合、プリンタは、最初のORBを受けて制御データを読み、その制御データに従ってステータス・データを用意し、次に、2番目のORBを受けて、そのステータス・データをホスト装置に返送する。
【００２９】
ORB１００内のデータ・バッファ・アドレス・フィールドには、ホスト装置内のデータ・バッファ１１０の先頭アドレスが記述される。動作フィールドには、プリンタに要求される動作の種類、例えば、データ・バッファ１１０から印刷データ又は制御データを読み込むこと、或るいは、データ・バッファ１１０へステータス・データを書き出すこと、などが記述される。データ・バッファ・サイズ・フィールドには、データ・バッファ１１０のデータサイズが記述される。
【００３０】
ORB１００内のキュー番号フィールドには、このORB１００で要求された動作を実行するときに使用する論理チャネルを示すキュー番号が記述される。IEEE1394の通信インタフェースには、データチャネルとコントロールチャネルという２つの論理チャネルがある。よって、キュー番号フィールドには、データチャネルとコントロールチャネルのうちの何れかを示すキュー番号が記述されることになる。例えば、印刷データの読み込みを要求するORBには、データチャネルを示すキュー番号が書かれている。よって、印刷データはデータチャネルを用いてホスト装置からプリンタへと伝送されることになる。また、例えば、制御データの読み込みを要求するORBには、コントロールチャネルを示すキュー番号が書かれている。よって、制御データはコントロールチャネルを用いてホスト装置からプリンタへと伝送されることになる。また、例えば、ステータス・データの書き出しを要求するORBには、コントロールチャネルを示すキュー番号が書かれている。よって、ステータス・データはコントロールチャネルを用いてプリンタからホスト装置へと伝送されることになる。
【００３１】
ORB１００内のシグネチャ・フィールドには、このORB１００を他のORBと区別するための識別番号であるシグネチャが記述される。プリンタは、今受信したORBのシグネチャと、それより前に受信したORBのシグネチャとを比較することにより、両シグネチャが違っていれば今受信したORBは前のORBとは別の新しいORBであると認識することができ、一方、両シグネチャが一致していれば今受信したORBは前のORBと同じORBがホスト装置から再送信されたものであると認識することができる。
【００３２】
図４は、SBの構成を示す。
【００３３】
図４に示すように、SB２００には、ORBアドレス、完了状態／エラー状態及び未処理データサイズなどのフィールドがある。
【００３４】
SB２００内のORBアドレス・フィールドには、このSB２００に対応するORBのホスト装置内でのアドレスが記述される。ホスト装置は、受信したSB２００内のORBアドレスによって、そのSB２００がどのORBに対する応答なのかを識別することができる。
【００３５】
SB２００内の完了状態／エラー状態フィールドには、対応するORBの要求動作を完了したか未完了か、未完了の場合にその原因はエラーかタイムアウト（後述）か、ということが記述される。
【００３６】
SB２００内の未処理データサイズには、対応するORBの要求動作が未完了である場合に、データバッファ１１０内の未処理で残っているデータのサイズ（又は、既に処理済みのデータのサイズ）が記述される。
【００３７】
図５は、本発明の原理に従う通信制御の下でホスト装置からプリンタへと印刷データ及び制御データが伝送される手順の一具体例を示す。
【００３８】
図５に示すように、まず、ホスト装置において、ステップS11で、プリンタドライバが印刷データの送信要求を発した（つまり、印刷データを出力した）とする。すると、ステップS12で、その印刷データをデータチャネル（以下、「D_Ch」と略す）を通じて読み込むようプリンタに要求するデータチャネルのORB（以下、「D_Ch_ORB」と略す）と、その印刷データを格納したデーバッファとが、ホスト装置内に構築される。また、プリンタドライバは、印刷データの送信要求を発した後、ステップ１３で、タイムカウントを開始する。
【００３９】
プリンタは、ステップ１４で、ホスト装置から上記D_Ch_ORBを読み込む。（なお、プリンタによるORBの読み込みの前には、前述したように、ホスト装置からプリンタへORBリード要求が送られるが、このステップについては、説明を以下省略する。）続いて、ステップS15で、プリンタは、上記D_Ch_ORBによって要求された動作、すなわち、ホスト装置内のデータバッファから印刷データを読み込む動作を開始する。通常、印刷データのサイズはかなり大きく、そして、印刷データは多数のデータブロック（パケット）に区分され、最初のデータブロックから最後のデータブロックまで順番にプリンタに読み込まれていく（つまり、データブロック単位でホスト装置からプリンタへ伝送される）。プリンタは、印刷データの読み込みを開始した後、直ちに、ステップS16で、タイムカウントを開始する。
【００４０】
こうしてホスト装置からプリンタへ印刷データが送信されている最中に、ホスト装置では、ステップS17に示すように、プリンタユーティリティが制御データの送信要求を発した（つまり、制御データを出力した）とする。実際、プリンタユティリティは定期的にプリンタからステータスデータを取得しようとするので、印刷データの送信中にステータス取得のための制御データが発されることは頻繁にある。制御データ送信要求が発されると、その制御データをコントロールチャネル（以下、「C_Ch」と略す）を通じて読み込むようプリンタに要求するコントロールチャネルのORB（以下、「C_Ch_ORB」と略す）と、その制御データを格納したデーバッファとが、ホスト装置内に構築される。しかし、その時、D_Chを通じて印刷データが送信中である場合には、ホスト装置は、（IEEE1394の規格によれば、D_ChとC_Chを同時に用いて印刷データと制御データを同時並行的に送信できるのであるが、敢えてそうせずに）ステップS18に示すように、そのC_Ch_ORBに関連付けられた制御データ送信要求をC_Ch送信保留キューに入れ、それにより、制御データの送信を一時的に保留する。また、プリンタユーティリティは、制御データの送信要求を発した後、ステップS19に示すように、タイムカウントを開始する。
【００４１】
さて、ホスト装置内のプリンタドライバ及びプリンタユーティリティの各々は、上述したステップS13及びS19でそれぞれのタイムカウントを開始した後、プリンタから応答を受けることなしに、そのカウント値が所定の制限時間（例えば３０秒）に達するというタイムアウトイベントが生じると、プリンタとの通信が不能である（例えば、プリンタがホスト装置に接続されていないか電源が入っていない）と判断して、所定の対処方法を行うことになる。
【００４２】
このようなホスト装置でのタイムアウトイベントの発生を防ぐために、プリンタは、次のように動作する。すなわち、プリンタは、上述したステップS15で印刷データの読み込みを開始した後、まだ全部の印刷データの読み込みが終わらないうちに、ステップS20に示すように、プリンタ内部で何らかのエラー（例えば、用紙なしエラーなど）が発生して、更なる印刷データの読み込みを進めることができなくなったならば、直ちに、ステップS21に示すように、要求処理が未完了である旨のSBをホスト装置に返送する。また、エラーが生じなくても、まだ全部の印刷データの読み込みが終わらないうちに、ステップS16で開始したタイムカウントのカウント値が所定の上限時間に達するというタイムアウトイベントが発生した場合（ステップS20）にも、プリンタは、直ちに、要求処理が未完了である旨のSBをホスト装置に返送する（ステップS21）。ここで、プリンタでタイムアウトイベントが生じる上限時間は、ホスト装置でタイムアウトイベントが生じる制限時間よりも十分に短い時間に設定されている。例えば、ホスト側のタイムアウトの制限時間が例えば３０秒である場合、プリンタ側のタイムアウトの上限時間は例えば５秒である。なお、上述したエラー発生の場合にも、直ちに未完了のSBを返送する代わりに、エラー発生時点からタイムカウントを開始して、そのカウント値が上記上限時間（すなわち、ホスト側のタイムアウト制限時間より十分い短い時間、例えば５秒）に達した時点で、未完了のSBを返送するようにしてもよい。
【００４３】
上述したステップS21で未完了のSBがホスト装置に返送されると、ホスト装置では、ステップS22に示すように、プリンタから未完了の応答が来たことがプリンタドライバに知らされる。つまり、プリンタドライバはプリンタからの応答を受ける。この時点では、上述した上限時間が短いという説明から明らかなように、プリンタドライバのタイムカウント値は上記制限時間には達していないから、プリンタドライバではタイムアウトイベントが発生しないことになる。また、上記未完了のSBの受信と同時に、ステップS23に示すように、今まで行われていた印刷データの読み込みを要求したD_Ch_ORBに関連付けられた印刷データ送信要求がD_Ch送信保留キーに入れられ、それにより、今まで行われていた印刷データの送信が一時的に中断される。さらに同時に、ステップS24に示すように、今までC_Ch送信保留キュー内で待っていた制御データ送信要求が送信保留キューから取り出されて実行される。それにより、C_Ch_ORBがプリンタに読み込まれ（ステップS25）、続いて、そのC_Ch_ORBによって要求された制御データのプリンタによる読み込みが実行される（ステップS２６）。通常、制御データのデータサイズは、印刷データに比べて大幅に小さい（例えば、１個又は少数のデータブロック又はパケットに収まる）ので、制御データの読み込みは、上述したタイムアウトの制限時間とは全く比較にならないほどに極めて短かい時間内に完了する。また、たとえプリンタでエラーが発生していたとしても、大抵の場合、プリンタは、制御データの読み込みは可能であるから、瞬時に制御データの読み込みが完了する。制御データの読み込みが完了すると、プリンタは、ステップS27に示すように、制御データの読み込みが完了した旨のSBをホスト装置に返送する。
【００４４】
ホスト装置では、プリンタから制御データ読み込み完了のSBが返送されると、ステップS28に示すように、プリンタから応答があったことがプリンタユーティリティに通知される。つまり、プリンタユーティリティはプリンタからの応答を受ける。この時点では、前述の説明から明らかなように、プリンタユーティリティのタイムカウント値は上記制限時間に達してはいないから、プリンタユーティリティでもタイムアウトイベントが発生しないことになる。上記完了のSBの受信と同時に、ステップS29に示すように、D_Ch送信保留キューに入っていた印刷データ送信要求が送信保留キューから取り出されて実行される。それにより、前回のD_Ch_ORBと同じD_Ch_ORBが再びプリンタに読み込まれ（ステップS30）、続いて、そのD_Ch_ORBによって要求された印刷データのプリンタによる読み込みが実行される（ステップS31）。このとき、プリンタは、前回の印刷データ読み込みのときに既に読み込み終わったデータのサイズとまだ読み込んでない残りデータのサイズとを記憶していて、それを用いて、データバッファから読み込み済のデータを読み飛ばして、その先のまだ読み込んでない残りデータだけを読み込む。（図示してないが、このデータ読み込みのときも、前述のステップS16と同様にタイムカウントを行う。）印刷データの全部の読み込みが完了すると、プリンタは、ステップS32に示すように、印刷データの読み込みが完了した旨のSBをホスト装置に返送する。ホスト装置では、プリンタから印刷データ読み込み完了の応答があったことが、プリンタドライバに知らされる。
【００４５】
なお、印刷データのプリンタによる読み込みがプリンタにて何の問題も無く円滑に実行されるときには、上記タイムアウトの制限時間よりもずっと短い時間で印刷データの読み込みは完了するから、プリンタドライバやプリンタユーティリティでタイムアウトイベントが生じることはない。
【００４６】
図６は、本発明の原理に従う通信制御の下で、ホスト装置とプリンタとが接続されたIEEE1934通信ネットワークの構成が変化した場合におけるバスリセット前後のデータ通信の手順の一具体例を示す。
【００４７】
図６に示すように、プリンタは、ステップS41でホスト装置から或るORB（D_ChでもC_Chでもよいが、この例ではD_Ch_ORBとする）を読み込むと、直ちにステップS42でそのORBを記憶する（この記憶内容には、当然、そのORBのシグネチャも含まれている）。続いて、プリンタは、ステップS43で、そのORBによる要求されたホスト装置からのデータ読み込みを実行する。データ読み込みを実行している間、プリンタは、処理済み（読み込み済）のデータ数（又はデータサイズ）と未だ処理してない（読み込んでない）残りデータ数（又はデータサイズ）とをカウントして記憶する。
【００４８】
ここで、プリンタがデータの読み込みを行っている最中に、ホスト装置とプリンタが接続されたIEEE1934通信ネットワークの構成が変化した（例えば、通信ネットワークの何処かの通信ケーブルが抜かれた、或いは、その通信ケーブルが再び差し込まれた、など）とする。すると、ネットワークの構成が変化した直後に、ステップS45で、ホスト装置とプリンタでバスリセットイベントが発生し、ステップS46、S47に示すように、ホスト装置とプリンタにてIEEE1934通信ネットワーク・トポロジーの再構築が行われる。ネットワーク・トポロジーの再構築が終わると、直ちにステップS48に示すように、バスリセット直前に送信されていたORBと同じ内容のORBが、ホスト装置からプリンタへ再度送られる。プリンタは、ステップS48でそのORBを読み込むと、ステップS49で、その今回のORBのシグネチャと、ステップS42で記憶したバスリセット前の前回のORBのシグネチャとを比較する。その結果、シグネチャが一致したなら、プリンタは、今回のORBが前回のORBと同じものであると認識する。続いて、プリンタは、ステップS50で、ステップS43で記憶した残りデータ数がゼロかどうかをチェックする（又は、前回記憶した処理済みデータ数と今回のORBに記述してあるデータサイズとから残りのデータ数を計算して、それをチェックしてもよい）。その残りデータ数がゼロでなければ、プリンタは、前回のORBで要求されたデータの読み込みが未完了であったことを認識し、そして、ステップS51で、ORBにより指定されたデータバッファの先頭アドレスから処理済み（読み込み済み）データ数だけ読み飛ばして、その先のまだ読み込んでいない残りデータだけを読み込む。このように、プリンタでは、データバッファ上のアドレスではなく、データ数（データサイズ）を用いて、データバッファ内のデータ読み込みが中断した場所を管理する。そのため、バスリセットによってネットワーク・トポロジーが変更されても、データバッファの中から残りデータを正確に見つけ出して選択的に読み込むことができる。要求されたデータ全部の読み込みが終わると、プリンタは、ステップS52で、完了のSBをホスト装置へ返送する。
【００４９】
図７~図１３は、上述したような具体的な動作を実現するための、ホスト装置とプリンタの通信制御の詳細な手順を示す。
【００５０】
図７は、印刷データや制御データ等のデータ送信要求が発生したときのホスト装置の制御流れを示す。
【００５１】
図７に示すように、データ送信要求が発生すると、まず、それがD_Chへのデータ送信要求（例えば、印刷データの送信要求）なのか、C_Chへのデータ送信要求（例えば、制御データの送信要求）なのかを判断する（S61、S62）。その結果、D_Chへのデータ送信要求であれば、そのデータの読み込みをプリンタに要求するためのD_Ch_ORBを構築し（S63）、そして、そのD_Ch_ORBに関連付けられたデータ送信要求をD_Ch送信保留キューに入れる（S64）。また、C_Chへのデータ送信要求であれば、そのデータの読み込みをプリンタに要求するためのC_Ch_ORBを構築し（S65）、そして、そのC_Ch_ORBに関連付けられたデータ送信要求をC_Ch送信保留キューに入れる（S66）。
【００５２】
図８は、ORBを送信するときのホスト装置の制御手順を示す。
【００５３】
図８に示すように、まず、現在他のORBの処理が実行されている最中であるか否かを知るために、ORB処理中フラグをチェックする（S71）。その結果、ORB処理中フラグがONであれば、現在他のORBの処理が実行されているので、ORBの送信は行わない。一方、ORB処理中フラグがOFFであれば、現在他のORBの処理は実行されていないので、次に、まず、C_Ch送信保留キュー内にデータ送信要求があるか否かをチェックする（S72）。
【００５４】
その結果、C_Ch送信保留キュー内にデータ送信要求が有れば、その送信要求をC_Ch送信保留キューから取り出す（S73）。続いて、C_Ch_ORB未完了フラグをチェックする（S74）。その結果、C_Ch_ORB未完了フラグがONであれば、C_Ch送信保留キューから取り出したデータ送信要求は、過去に実行されたのであるが未完了で中断されたものであることを意味するので、その取り出したデータ送信要求に関連付けられているC_Ch_ORBのシグネチャは更新せずに前回のままとするが、一方、C_Ch_ORB未完了フラグがOFFであれば、C_Ch送信保留キューから取り出したデータ送信要求は、新しいデータの送信要求であることを意味するので、その取り出したデータ送信要求に関連付けられているC_Ch_ORBのシグネチャを更新する（S76）。続いて、そのC_Ch_ORBをプリンタへ送信する（S76）（すなわち、そのC_Ch_ORBのリード要求をプリンタへ送って、プリンタにそのC_Ch_ORBを読み込ませる）。そして、ORB処理中フラグをONにする（S77）。
【００５５】
このようにして、ホスト装置は、C_Ch送信保留キュー内にデータ送信要求が存在すれば、それを優先的に実行し、そして、C_Ch送信保留キュー内に要求が無くなったならば、次に、D_Ch送信保留キュー内のデータ送信要求をチェックする（S78）。
【００５６】
その結果、D_Ch送信保留キュー内にデータ送信要求が有れば、その送信要求をD_Ch送信保留キューから取り出す（S79）。続いて、D_Ch_ORB未完了フラグをチェックする（S80）。その結果、D_Ch_ORB未完了フラグがONであれば、D_Ch送信保留キューから取り出したデータ送信要求は、過去に実行されたのであるが未完了で中断されたものであることを意味するので、その取り出したデータ送信要求に関連付けられているD_Ch_ORBのシグネチャは更新せずに前回のままとするが、一方、D_Ch_ORB未完了フラグがOFFであれば、D_Ch送信保留キューから取り出したデータ送信要求は、新しいデータの送信要求であることを意味するので、その取り出したデータ送信要求に関連付けられているD_Ch_ORBのシグネチャを更新する（S81）。続いて、そのD_Ch_ORBのプリンタへ送信する（S82）（すなわち、そのD_Ch_ORBのリード要求をプリンタへ送って、プリンにそのD_Ch_ORBをの読み込ませる）。そして、ORB処理中フラグをONにする（S83）。
【００５７】
また、C_Ch送信保留キューにもD_Ch送信保留キューにも要求が入ってなければ、ORB処理中フラグをOFFにする（S84）。
【００５８】
図９は、バスリセット直後のホスト装置の制御手順を示す。
【００５９】
図９に示すように、バスリセット直後にホスト装置は、バスリセット直前に送信していたORBを、同じシグネチャで再度プリンタへ送信する（S91）。そして、ORB処理中フラグをONにする（S92）。
【００６０】
図１０は、プリンタがORBを受信した（すなわち、ホスト装置からORBを読み込んだ）時のプリンタの制御手順を示す。
【００６１】
図１０に示すように、プリンタは、ORBを受信すると、そのORBを記憶し保存する（S101）。この記憶されたORBに含まれるシグネチャは、前述のように、このORBと前回又は次回に受信したORBとの同一／非同一を判断するために使用されることになる。続いて、プリンタは、受信したORBがD_ChのものかC_Chのものかを判断する（S102、S103）。その結果、D_Ch_ORBであったならば、次に、プリンタが現在エラー状態か正常状態かをチェックする。その結果、エラー状態であれば、ORBにより要求された処理がエラーによる未完了である旨のSBをホスト装置に返送する（S105）。
【００６２】
一方、ステップS104のチェックの結果、プリンタが正常状態であれば、上述した上限時間（例えば、5秒）までカウントするタイマを起動し（S105）、そして、今回受信したORBのシグネチャと前回受信したORBのシグネチャとを比較する（S107）。その結果、両シグネチャが一致していれば、今回のORBは前回のORBが再送信されたものであることを意味する。その場合、プリンタは、次に、前回のORBの処理実行時に記憶しておいた残りデータ数がゼロかどうかをチェックする（S107）。（なお、前回のORBの処理実行時に記憶しておいた残りデータ数を用いる代わりに、前回のORBの処理実行時に記憶しておいた処理（読み込み）済データ数と、今回のORBで指定されたデータ・バッファ・サイズとから、残りデー多数を計算してもよい。）その結果、残りデータ数がゼロでなければ、前回のORBの要求処理は未完了であったことを意味するので、プリンタは、今回のORBで指定されたデータバッファの先頭アドレスから、前回のORBに関して記憶しておいた処理済データ数（読み込み済データ数）分だけアドレスをスキップして、その次のアドレスから未処理の残りデータ（例えば、残り印刷データ）の読み込みを開始する（S110）。そして、D_Ch_ORB処理中フラグをONにする（S111）。
【００６３】
一方、ステップS109のチェックの結果、残りデータ数がゼロであれば、前回のORBの要求処理は既に完了していることを意味するので、プリンタは、要求処理が完了した旨のSBをホスト装置に返送する（S112）。
【００６４】
また、上記ステップS107のシグネチャ比較の結果、前回と今回のシグネチャが違っていれば、今回のORBは前回とは別の新しいORBであることを意味するので、プリンタは、今回のORBで指定されたデータバッファの先頭アドレスから、データ（例えば、印刷データ）の読み込みを開始する（S108）。そして、D_Ch_ORB処理中フラグをONにする（S111）。
【００６５】
また、上記のステップS103で、受信したORBがC_Chのものであった場合には、プリンタは、そのC_Ch_ORBで指定されたデータバッファの先頭アドレスから、データ（例えば、制御データ）の読み込みを開始する（S113）。そして、C_Ch_ORB処理中フラグをONにする（S114）。
【００６６】
さて、上述した図１０のステップS108又はS11で開始されたD_Chによるデータ（例えば、印刷データ）の読み込み処理では、既に述べたように、そのデータは多数のデータブロック（又はパケット）に区分されていて、プリンタは、その多数のデータブロックを１ブロックづつ順番に読み込んでいく。
【００６７】
図１１は、D_Chで1つのデータブロックの読み込みが完了する都度にプリンタが行う制御手順を示す。
【００６８】
図１１に示すように、1つのデータブロックの読み込みが完了すると、プリンタは、処理済データ数（読み込み済データ数）を1データブロック分増やし、残りデータ数を1データブロック分減らす（S121）。そして、この更新された処理済データ数又は残りデータ数から、プリンタは、ORBに指定された全データブロックの読み込みが完了したか否かをチェックする（S122）。その結果、まだ全データブロックの読み込みが完了してなければ、次のデータブロックの読み込みを開始する（S123）。一方、全データブロックの読み込みが完了したならば、完了のSBをホスト装置に返送し（S124）、そして、D_Ch_ORB処理中フラグをOFFにする（S125）。
【００６９】
再び図１０を参照して、プリンタは、D_Chでデータ読み込みを開始する際、ステップS106でタイマを起動して、読み込みにかかる時間をカウントする。そして、既に説明したように、ORBに要求された全てのデータの読み込みが完了する前に、タイマのカウント値が所定の上限時間（例えば、5秒）に達すると、タイムアウトイベントが発生することになる。
【００７０】
図１２は、D_Chでデータ受信中にタイムアウトアウトイベントが発生した時のプリンタの制御手順を示す。
【００７１】
図１２に示すように、タイムアウトイベントが発生すると（S131でYes）、プリンタは、D_Ch_ORB処理中フラグをチェックする（S132）。その結果、D_Ch_ORB処理中フラグがONであれば、D_Ch_ORBにより要求された全データの読み込みが未だ完了していないことを意味するので、プリンタは、要求された処理がタイムアウトにより未完了である旨のSBをホスト装置に返送し（S133）、そして、D_Ch_ORB処理中フラグをOFFにして、そのD_Chでのデータ読み込みを一時的に中断する（S134）。
【００７２】
図１３は、プリンタからSBを受信した時のホスト装置の制御手順を示す。
【００７３】
図１３に示すように、プリンタからSBを受信すると、ホスト装置は、その受信したSBを解釈して、ORBにより要求された処理が正常に完了したか否かをチェックする（S141）。その結果、完了していれば、その完了したORBに関するリソースを開放する（S142）。そして、その完了したORBがD_Chのものであれば（S143でD_Ch）、D_Ch_ORB未完了フラグをOFFにし（S144）、一方、その完了したORBがC_Chのものであれば（S143でC_Ch）、C_Ch_ORB未完了フラグをOFFにする（S145）。そして、ホスト装置の通信制御は、図８に示したORB送信時の処理に進む。
【００７４】
上記ステップS141の完了チェックの結果、ORBの要求処理が未完了である場合には、ホスト装置は、その未完了のORBがD_Chのものであれば（S146でD_Ch）、その未完了のORBに関連付けられた要求をD_Ch送信保留キューに入れ（S147）、D_Ch_ORB未完了フラグをONにする（S148）。一方、その未完了のORBがC_Chのものであれば（S146でC_Ch）、その未完了のORBに関連付けられた要求をC_Ch送信保留キューに入れ（S149）、C_Ch_ORB未完了フラグをONにする（S150）。そして、そして、ホスト装置の通信制御は、図８に示したORB送信時の処理に進む。
【００７５】
以上、本発明の実施形態を説明したが、これは本発明の説明のための例示であり、この実施形態のみに本発明の範囲を限定する趣旨ではない。従って、本発明は、その要旨を逸脱することなく、他の様々な形態で実施することが可能である。例えば、ホスト装置と電子式プリンタ間のデータ通信だけでなく、他の様々な装置間のデータ通信にも本発明は適用可能である。また、IEEE1394によるデータ通信だけでなく、他の様々な通信インタフェースいよるデータ通信にも本発明は適用可能である。
【図面の簡単な説明】
【図１】  ホスト装置と電子式プリンタ間のデータ通信に適用された本発明の一実施形態における、データ通信に関わるホスト装置内のプログラム又はハードウェアモジュールの構成を示す
【図２】  IEEE1394に準拠したホスト装置とプリンタ間のデータ通信の概略手順を示す図。
【図３】  オペレーション・リクエスト・ブロック（ORB）の構成を示す図
【図４】  ステータス・ブロック（SB）の構成を示す図。
【図５】  本発明の原理に従う通信制御の下でホスト装置からプリンタへと印刷データ及び制御データが伝送される手順の一具体例を示す図。
【図６】  本発明の原理に従う通信制御の下で、ホスト装置とプリンタが接続されたIEEE1934通信ネットワークの構成が変化した場合におけるバスリセット前後のデータ通信の手順の一具体例を示す図。
【図７】  印刷データや制御データ等の送信要求が発生したときのホスト装置の制御流れを示すフローチャート。
【図８】  ORBを送信するときのホスト装置の制御手順を示すフローチャート。
【図９】  バスリセット直後のホスト装置の制御手順を示すフローチャート。
【図１０】  ORBを受信した時のプリンタの制御手順を示すフローチャート。
【図１１】  1ブロックデータ受信完了時のプリンタの制御手順を示すフローチャート。
【図１２】  D_Chでデータ受信中にタイムアウトアウトイベントが発生した時のプリンタの制御手順を示すフローチャート。
【図１３】  SBを受信した時のホスト装置の制御手順を示すフローチャート。
【符号の説明】
１０  プリンタドライバ
２０  プリンタユティリティ
５０  IEEE1394.3コントローラ
１００  オペレーション・リクエスト・ブロック（ORB）
１１０  データバッファ
１２０  レジスタ
２００  ステータス・ブロック（SB）
【図１】
0003951113.tif 000002
【図２】
0003951113.tif 000003
【図３】
0003951113.tif 000004
【図４】
0003951113.tif 000005
【図５】
0003951113.tif 000006
【図６】
0003951113.tif 000007
【図７】
0003951113.tif 000008
【図８】
0003951113.tif 000009
【図９】
0003951113.tif 000010
【図１０】
0003951113.tif 000011
【図１１】
0003951113.tif 000012
【図１２】
0003951113.tif 000013
【図１３】
0003951113.tif 000014