(57)【要約】【課題】デバイスとの通信を所定数に制限するための容易な仕組みを提供する。【解決手段】デバイスと接続される装置は、通信要求に応じて前記デバイスとの通信を行う通信制御部と、デバイスに関連する処理を行う処理部とを備える。通信制御部は、一の通信要求に対応する通信が完了するまで、他の通信要求に対応する通信を制限する。処理部は、通信要求と所定のコールバック関数の指定を通信制御部に対して行う。さらに、通信制御部は、指定されたコールバック関数を呼び出すことにより、通信要求を行った処理部に、デバイスとの通信により取得されたデータを与える。【選択図】図２
2008097176.tif 000002
【特許請求の範囲】
【請求項１】
デバイスと接続される装置であって、
通信の要求に応じて前記デバイスとの通信を行う通信制御部であって、一の前記通信の要求に対応する通信が完了するまで、他の前記通信の要求に対応する通信を制限する、前記通信制御部と、
前記デバイスに関連する処理を行う処理部であって、前記通信の要求と所定のコールバック関数の指定を前記通信制御部に対して行う、前記処理部と、
を備え、
前記通信制御部は、前記指定されたコールバック関数を呼び出すことにより、前記通信の要求を行った前記処理部に、前記デバイスとの通信により取得されたデータを与える、装置。
【請求項２】
請求項１に記載の装置において、
前記通信制御部は、前記指定されたコールバック関数を複数回に亘って呼び出すことにより、一の前記通信の要求により取得されるデータを前記複数回に分けて前記通信の要求を行った前記処理部に与える、装置。
【請求項３】
請求項１または請求項２に記載の装置において、
複数の前記処理部を備える装置。
【請求項４】
請求項１ないし請求項３のいずれかに記載の装置は、ネットワークを介してクライアント装置と接続されるサーバ装置であり、
前記処理部の一つは、前記クライアント装置からの要求に応じて、前記クライアント装置に対して前記デバイスが有するデータを送信するネットワーク制御部であり、
前記ネットワーク制御部は、前記デバイスが有するデータを取得するための前記通信の要求のときに、前記クライアント装置を特定するためのクライアント特定情報を、前記通信制御部に対して通知し、
前記通信制御部は、前記指定されたコールバック関数を呼び出すときに、前記通知されたクライアント特定情報を前記ネットワーク制御部に通知する、装置。
【請求項５】
デバイスと接続されると共に、前記デバイスに関連する処理を行う処理部を有する装置において、前記デバイスとの通信を制御する方法であって、
前記処理部から前記デバイスとの通信を要求する通信の要求と、所定のコールバック関数の指定とを受け付け、
前記通信の要求に応じて前記デバイスとの通信によりデータを取得し、
前記指定されたコールバック関数を呼び出すことにより、前記取得されたデータを前記通信の要求を行った前記処理部に供与し、
一の前記通信の要求に対応する通信が完了するまで、他の前記通信の要求に対応する通信を制限する、方法。
【請求項６】
デバイスと接続されると共に、前記デバイスに関連する処理を行う処理部を有する装置における前記デバイスとの通信制御をコンピュータに実現させるコンピュータプログラムであって、
前記処理部から前記デバイスとの通信を要求する通信の要求と、所定のコールバック関数の指定とを受け付ける第１の機能と、
前記通信の要求に応じて前記デバイスとの通信によりデータを取得する第２の機能と、
前記指定されたコールバック関数を呼び出すことにより、前記取得されたデータを前記通信の要求を行った前記処理部に供与する第３の機能と、
一の前記通信の要求に対応する通信が完了するまで、他の前記通信の要求に対応する通信を制限する第４の機能と、
を前記コンピュータに実現させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバイスと接続される装置、デバイスとの通信を制御する方法、および、通信制御のためのコンピュータプログラムに関する。
【背景技術】
【０００２】
ネットワークに接続されたクライアント装置に対してプリンタなどのデバイスの機能を提供するデバイスサーバ装置が知られている。デバイスサーバ装置は、クライアント装置が接続されているネットワークに接続されると共に、デバイスと所定のインタフェースを介して接続される。デバイスとの接続インターフェースとしては、例えば、ＵＳＢ（Universal Serial Bus）やＩＥＥＥ１３９４を始めとするシリアルバスが知られている（特許文献１）。デバイスサーバ装置とデバイスとの間の通信は、インタフェースやプロトコルの仕様により単一に制限される場合がある。単一に制限されるとは、デバイスに対する一の通信要求に対応する通信が完了するまで、デバイスに対する他の全ての通信要求に対応する通信が行われないように制限されることを意味する。
【０００３】
かかる場合には、デバイスサーバ装置は、上記制限を守るためのなんらかの仕組みが必要になる。例えば、デバイスサーバ装置が、デバイスとの通信を必要とする複数の処理モジュールを有しており、それぞれ独立して通信要求を発行することができる場合、複数の処理モジュールが、互いに同期を取りながら通信要求を発行するタイミングを調整して上記制限を守ることが考えられる。
【０００４】
【特許文献１】特開２００２−２１７９２０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述技術では、例えば、新たな処理モジュールをデバイスサーバ装置に追加する場合には、新たな処理モジュールと、既存の処理モジュールとの間でも同期を取る仕組みを構築する必要があるなど、仕組みが煩雑になるおそれがあった。なおこのような課題は、デバイスサーバ装置においてデバイスの通信が単一に制限される場合に限らず、デバイスと接続される装置において、デバイスとの通信が所定数に制限される場合に共通する課題であった。
【０００６】
本発明は、上記課題の少なくとも一部を解決するためになされたものであり、デバイスとの通信を所定数に制限するための容易な仕組みを提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題の少なくとも一部を解決するため、本発明の第１の態様は、デバイスと接続される装置を提供する。第１の態様に係る装置は、通信の要求に応じて前記デバイスとの通信を行う通信制御部であって、一の前記通信の要求に対応する通信が完了するまで、他の前記通信の要求に対応する通信を制限する、前記通信制御部と、前記デバイスに関連する処理を行う処理部であって、前記通信の要求と所定のコールバック関数の指定を前記通信制御部に対して行う、前記処理部と、を備え、前記通信制御部は、前記指定されたコールバック関数を呼び出すことにより、前記通信要求を行った前記処理部に、前記デバイスとの通信により取得されたデータを与える。
【０００８】
第１の態様に係る装置によれば、容易な仕組みで、当該装置とデバイスとの間の通信の制限を実現することができる。
【０００９】
第１の態様に係る装置において、前記通信制御部は、前記指定されたコールバック関数を複数回に亘って呼び出すことにより、一の前記通信の要求により取得されるデータを前記複数回に分けて前記通信の要求を行った前記処理部に与えても良い。こうすれば、一の通信要求に対応する通信により取得されたデータが大きくても、複数回に分けてコールバックを行うことにより、取得されたデータを処理部に渡すことができる。
【００１０】
第１の態様に係る装置において、複数の前記処理部を備えても良い。本装置では、通信制御部が装置とデバイスとの間の通信の制限を実現する。従って、装置とデバイスとの間の通信の制限を実現するために複数の処理部は、互いに同期を取るなどして通信要求のタイミングを調整する必要がない。この結果、装置とデバイスとの間の通信の制限を実現するための煩雑さを解消または低減することができる。
【００１１】
第１の態様に係る装置は、ネットワークを介してクライアント装置と接続されるサーバ装置であり、前記処理部の一つは、前記クライアント装置からの要求に応じて、前記クライアント装置に対して前記デバイスが有するデータを送信するネットワーク制御部であり、前記ネットワーク制御部は、前記デバイスが有するデータを取得するための前記通信要求のときに、前記クライアント装置を特定するためのクライアント特定情報を、前記通信制御部に対して通知し、前記通信制御部は、前記指定されたコールバック関数を呼び出すときに、前記通知されたクライアント特定情報を前記ネットワーク制御部に通知しても良い。こうすれば、コールバック関数は、クライアント特定情報に従って、適切なクライアントにデバイスから取得したデータを送信することができる。
【００１２】
なお、本発明は、種々の態様で実現することが可能であり、例えば、デバイスと接続されると共に、前記デバイスに関連する処理を行う処理部を有する装置において、前記デバイスとの通信を制御する方法のような方法発明として実現することができる。さらに、本発明は、上記装置または方法をコンピュータに実現させるコンピュータプログラム、そのコンピュータプログラムを記録した記録媒体、そのコンピュータプログラムを含み搬送波内に具現化されたデータ信号、等の態様で実現することができる。
【発明を実施するための最良の形態】
【００１３】
以下、本発明について、図面を参照しつつ、実施例に基づいて説明する。
【００１４】
Ａ．実施例：
・ネットワークシステムの構成：
図１を参照して、本実施例におけるネットワークシステムの構成について説明する。図１は、ネットワークシステムの概略構成を示す説明図である。ネットワークシステムは、図１に示すように、プリントサーバ装置１００と、プリンタ２００と、クライアント装置としての計算機（以下、単にクライアントという。）３００ａ、３００ｂと、を含む。クライアント３００ａ、３００ｂと、プリントサーバ装置１００とは、ＬＡＮなどのネットワークＮＷを介して互いに接続されている。プリントサーバ装置１００と、プリンタ２００とは、ＵＳＢ（Universal Serial Bus）ケーブルＣＶを用いて接続されている。プリンタ２００とプリントサーバ装置１００とは、同一の筐体の中に納められていても良いし、それぞれ別体の筐体に納められていても良い。
【００１５】
プリントサーバ装置１００は、図１に示すように、中央演算装置（ＣＰＵ）１１０と、メモリ１２０と、ＵＳＢホストインタフェース（ＩＦ）部１３０と、ネットワークインタフェース（ＩＦ）部１４０と、操作部１５０と、を備えている。
【００１６】
ＵＳＢホストＩＦ部１３０は、ＵＳＢケーブルＣＶを介してプリンタ２００などのローカルデバイスと通信するためのインタフェースであり、ＵＳＢ規格に従ったデータ通信をＵＳＢケーブルＣＶ接続されたローカルデバイスとの間で実行する。
【００１７】
ネットワークＩＦ部１４０は、ネットワークＮＷを介してクライアント３００ａ、３００ｂと通信するためのインタフェースであり、イーサネットの仕様に対応したケーブルを介してネットワークＮＷと接続される。
【００１８】
操作部１５０は、ユーザからの操作を受け付ける構成要素であり、例えば、ユーザからの操作を受け付けるためのボタンが配置された操作パネルである。
【００１９】
ＣＰＵ１１０は、メモリ１２０に格納されている各種プログラムを実行することにより、プリントサーバとしての機能を実現する。
【００２０】
メモリ１２０には、種々のプログラムやデータが格納されるが、図１においては、本実施例における処理に必要な構成を選択的に図示し、本明細書においては、図示された構成について説明する。メモリ１２０には、制御プログラム１２２が格納されている。
【００２１】
制御プログラム１２２は、クライアント３００ａ、３００ｂの要求に応じてプリンタ２００に印刷を実行させるプリントサービスや、クライアント３００ａ、３００ｂの要求、あるいは、操作部１５０を介して受け付けられた要求に応じてプリンタ２００の情報を提供したりプリンタ２００の設定・制御を行ったりするプリンタ管理サービスなど、プリントサーバとしての機能を実現するためのプログラムである。制御プログラム１２２は、プリンタ２００に関する処理を行う処理モジュールとして、起動・終了制御部Ｍ１と、設定データ制御部Ｍ２と、ネットワーク制御部Ｍ３とを含む。制御プログラム１２２は、さらに、処理モジュールＭ１〜Ｍ３の下位モジュールとして、ネットワークＩＦ部１４０を介した通信を制御するネットワークプロトコル部１２４と、ＵＳＢホストＩＦ部１３０を介した通信を制御するＵＳＢ通信制御部１２６とを含む。
【００２２】
起動・終了制御部Ｍ１は、操作部１５０を介して受け付けられた要求に応じて、プリンタ２００の起動や終了を行う。
【００２３】
設定データ制御部Ｍ２は、操作部１５０を介して受け付けられた要求に応じて、プリンタ２００の各種設定を行う。
【００２４】
ネットワーク制御部Ｍ３は、クライアント３００ａ、３００ｂからネットワークＮＷを介して受け付けられた要求に応じて、プリンタ２００の制御、例えば、印刷の実行や各種設定、あるいは、プリンタ２００が保持する情報（後述するＭＩＢデータ）の取得を行う。
【００２５】
終了制御部Ｍ１、設定データ制御部Ｍ２、および、ネットワーク制御部Ｍ３は、上述したプリンタ２００に関する処理を行うために、プリンタ２００と通信する必要がある。例えば、終了制御部Ｍ１は、起動コマンドや終了コマンドを、プリンタ２００に送信して、その応答を受信する必要があり、設定データ制御部Ｍ２は、設定データをプリンタ２００に送信して、その応答を受信する必要がある。また、ネットワーク制御部Ｍ３は、例えば、ＭＩＢデータをプリンタ２００に送信してもらう必要がある。ＵＳＢ通信制御部１２６は、上位モジュールである処理モジュールＭ１〜Ｍ３から通信要求、例えば、起動コマンドおよび終了コマンドの送信要求や、ＭＩＢデータの取得要求（以下、単にデータ要求という。）を受け付け、処理モジュールＭ１〜Ｍ３のためにプリンタ２００との通信を実行する。
【００２６】
ネットワークプロトコル部１２４は、上位モジュールであるネットワーク制御部Ｍ３のためにクライアント３００ａ、３００ｂとの通信を実行する。具体的には、ネットワークプロトコル部１２４は、ＨＴＴＰ層およびＴＣＰ／ＩＰ層の処理を行う。
【００２７】
プリンタ２００は、図１に示すように、ＣＰＵ２１０と、メモリ２２０と、ＵＳＢデバイスインタフェース（ＩＦ）部２３０と、プリンタエンジン２４０とを備えている。
【００２８】
ＵＳＢデバイスＩＦ部２３０は、ＵＳＢケーブルＣＶを介してプリントサーバ装置１００と通信するためのインタフェースである。
【００２９】
プリンタエンジン２４０は、実際に印刷を行う機構部分であり、感光体ドラム等、用紙に印刷するためのハードウェア群から成る。
【００３０】
ＣＰＵ２１０は、メモリ２２０に格納されている制御プログラム２２２を実行することにより、プリンタ２００の各構成要素の制御を行う。例えば、ＣＰＵ２１０は、上述したＵＳＢデバイスＩＦ部２３０を制御して、プリントサーバ装置１００から印刷データを受け取り、プリンタエンジン２４０を制御して、受け取った印刷データに基づく印刷を行う。
【００３１】
メモリ２２０には、ＣＰＵ２１０によるプリンタ２００の制御を実現するための上述した制御プログラム２２２が格納されている。メモリ２２０は、さらに、ＭＩＢ(Management Information Base)と呼ばれる形式で記述されたプリンタ２００に関する種々の情報（ＭＩＢデータ）が格納されているＭＩＢ格納部２２４を備えている。ＭＩＢデータは、例えば、プリンタの設定情報や、印刷に使用した紙の種類や枚数の情報、印刷に使用したトナー量あるいはインク量の情報、および紙ジャム等の種々の障害情報などを含む。
【００３２】
クライアント３００は、例えば、ＣＰＵやメモリを備える周知のパーソナルコンピュータであり、ＨＴＴＰクライアントプログラム（図示省略）がインストールされている。クライアント３００はＨＴＴＰクライアントプログラムを用いて、プリントサーバ装置１００にアクセスすることにより、プリントサーバ装置１００が提供する上述のサービスを利用することができる。
【００３３】
・ネットワークシステムの動作：
プリントサーバ装置１００が、クライアント３００ａからのデータ要求を受け付け、該要求に対する応答として要求されたデータをクライアント３００ａに対して送信するデータ要求処理動作を具体例として、図２を参照しながらネットワークシステムの動作を説明する。図２は、データ要求処理動作のシーケンスを示す第１のシーケンス図である。
【００３４】
クライアント３００ａは、プリンタ２００に関する情報、具体的には、上述したＭＩＢデータを要求するデータ要求を、プリントサーバ装置１００に対して送信する（ステップ［１］）。プリントサーバ装置１００に受信されたデータ要求は、ネットワークプロトコル部１２４を介して、ネットワーク制御部Ｍ３に渡される。ネットワーク制御部Ｍ３は、その際、データ要求の要求元（クライアント３００ａ）を、例えば、ＩＰアドレスにより認識しておく。
【００３５】
ネットワーク制御部Ｍ３は、コールバック関数を指定する関数指定と、データ要求の要求元であるクライアントを特定するためのクライアント特定情報と共に、データ要求をＵＳＢ通信制御部１２６に渡して、プリンタ２００との通信を要求する（ステップ［２］）。具体的には、ネットワーク制御部Ｍ３は、ＵＳＢ通信制御部１２６を構成する関数、すなわち、プリンタ２００との通信を行う関数をコールして、データ要求と、コールバック関数のアドレスと、クライアント特定情報（例えば、ＩＰアドレス）とを、引数として当該関数に渡す。ここで、ネットワーク制御部Ｍ３は、コールバック関数として、ネットワーク制御部Ｍ３を構成する関数のうち、クライアントに応答を送信する関数を指定しておく。
【００３６】
ＵＳＢ通信制御部１２６は、プリンタ２００とＵＳＢケーブルＣＶを介した通信を行い、ネットワーク制御部Ｍ３から受け取ったデータ要求を、プリンタ２００に対して送信する（ステップ［３］）。
【００３７】
プリンタ２００の制御プログラム２２２は、ＵＳＢデバイスＩＦ部２３０を介して、ＵＳＢ通信制御部１２６からデータ要求を受け取ると、データ要求に従ってデータをＵＳＢ通信制御部１２６に送信する（ステップ［４］）。具体的には、制御プログラム２２２は、ＭＩＢ格納部２２４からＭＩＢデータを取得し、取得したＭＩＢデータをＵＳＢ通信制御部１２６に送信する。
【００３８】
ＵＳＢ通信制御部１２６は、メモリ２２０に確保された受信バッファにプリンタ２００から受信したデータを順次格納していく。本具体例では、プリンタ２００から受信すべきデータが、受信バッファより大きく受信バッファの２倍未満であり、２回に分けてプリンタ２００からのデータを受信する場合を示す。ＵＳＢ通信制御部１２６は、受信バッファが足りなくなると、受信バッファに格納されたデータとクライアント特定情報とを、コールバックによりネットワーク制御部Ｍ３に渡す（ステップ［５］）。具体的には、ＵＳＢ通信制御部１２６は、ステップ［２］で受け取ったコールバック関数のアドレスによって指定されたコールバック関数を呼び出し（コールバックし）、当該コールバック関数の引数として、ステップ［２］で受け取ったクライアント特定情報と、受信バッファに格納されたデータをネットワーク制御部Ｍ３に渡す。ＵＳＢ通信制御部１２６は、ＵＳＢプロトコルに従ったフロー制御により、プリンタ２００からのデータの受信を一時的に停止しておく。
【００３９】
ネットワーク制御部Ｍ３は、受け取ったデータをクライアント３００ａに対して送信する（ステップ［６］）。具体的には、コールバックされた関数（ネットワーク制御部Ｍ３を構成する関数）が、引数として受け取ったクライアント特定情報によりクライアント３００ａを特定し、引数として受け取ったデータをクライアント３００ａに対して、ネットワークプロトコル部１２４を介して送信する。
【００４０】
ネットワーク制御部Ｍ３は、受け取ったデータをクライアント３００ａに対して送信すると、コールバックの応答をＵＳＢ通信制御部１２６に返す（ステップ［７］）。すなわち、ステップ［５］においてコールバックされた関数の戻り値をＵＳＢ通信制御部１２６に返す。ここで返される戻り値は、例えば、処理が問題なく終了したことを示す「ＴＲＵＥ」値などであり、受信データは含まれない。
【００４１】
ＵＳＢ通信制御部１２６は、コールバックの応答を受け取ると、受信バッファを初期化し、フロー制御により停止していた受信を再開してプリンタ２００から残りのデータを受信し、受信バッファに格納する（ステップ［８］）。この結果、ステップ［３］においてプリンタ２００に送信されたデータ要求に対応するプリントサーバ装置１００−プリンタ２００間の通信は完了する。
【００４２】
ＵＳＢ通信制御部１２６は、全てのデータを受信すると、ステップ［５］と同様にして、受信バッファに格納されたデータとクライアント特定情報とを、コールバックによりネットワーク制御部Ｍ３に渡す（ステップ［９］）。ネットワーク制御部Ｍ３は、ステップ［６］と同様にして、受け取ったデータをクライアント３００ａに対して送信し（ステップ［１０］）、送信後にステップ［７］と同様にして、コールバックの応答をＵＳＢ通信制御部１２６に返す（ステップ［１１］）。
【００４３】
ＵＳＢ通信制御部１２６は、コールバックにより、ネットワーク制御部Ｍ３からの通信要求に対応して受信した全てのデータをネットワーク制御部Ｍ３に渡し、最後のコールバックの応答を受け取ると、ステップ［２］における通信要求に対する応答をネットワーク制御部Ｍ３に返す（ステップ［１２］。具体的には、ＵＳＢ通信制御部１２６は、ステップ［２］においてネットワーク制御部Ｍ３によってコールされた関数（プリンタ２００との通信を行う関数）の戻り値を、ネットワーク制御部Ｍ３に返す。
【００４４】
なお、以上では、ネットワーク制御部Ｍ３からＵＳＢ通信制御部１２６に対して通信要求が行われる場合を例に説明したが、他の上位モジュールである起動・終了制御部Ｍ１および設定データ制御部Ｍ２からＵＳＢ通信制御部１２６に対して行われる通信要求も、同様に処理される。例えば、起動・終了制御部Ｍ１が、起動コマンドをプリンタ２００に対して送信する通信要求や、設定データ制御部Ｍ２が設定データをプリンタ２００に対して送信する通信要求も同様に処理される。
【００４５】
また、以上では、プリンタ２００から受信すべきデータ（受信データ）が、受信バッファより大きく受信バッファの２倍未満である場合を例に説明したが、受信データが受信バッファより小さい場合は、一回のコールバックで全ての受信データをネットワーク制御部Ｍ３に渡せば良いし、受信データが受信バッファの２倍より大きい場合は、３回以上のコールバックに分けて受信データをネットワーク制御部Ｍ３に渡せばよい。すなわち、コールバックの回数を増やすことにより、ＵＳＢ通信制御部１２６は、あらゆる大きさの受信データをネットワークプロトコル部１２４に渡すことができる。ここで重要なことは、受信データがどれほど大きくても、コールバックの回数が増えるだけであり、ネットワーク制御部Ｍ３からＵＳＢ通信制御部１２６への通信要求（ステップ［２］）は１回であり、その通信要求に対する応答（ステップ［１２］の応答）も１回であることである。すなわち、プリンタ２００−ＵＳＢ通信制御部１２６間の一回の通信は、上位モジュールからＵＳＢ通信制御部１２６への一回の通信要求（プリンタ２００との通信を行う関数のコール）に応じて開始される。そして、プリンタ２００−ＵＳＢ通信制御部１２６間の一回の通信が終了した後に、該通信要求に対する応答（プリンタ２００との通信を行う関数の戻り値）が必ず１回だけ、ＵＳＢ通信制御部１２６から上位モジュールに返される。
【００４６】
この結果、ＵＳＢ通信制御部１２６は、プリンタ２００−ＵＳＢ通信制御部１２６間の通信を容易に単一に制限することができる。単一に制限するとは、上述したように、デバイスに対する一の通信要求に対応する通信が完了するまで、デバイスに対する他の通信要求に対応する通信は制限されることを意味する。本実施例においてＵＳＢ通信制御部１２６は、プリンタ２００−ＵＳＢ通信制御部１２６間の通信を、単一に制限している。
【００４７】
２つのクライアント３００ａ、３００ｂからほぼ同時に、データ要求をプリントサーバ装置１００に対して送信した場合のデータ要求処理動作を具体例として、図３を参照しながらＵＳＢ通信制御部１２６がプリンタ２００−ＵＳＢ通信制御部１２６間の通信を単一に制限する仕組みを説明する。図３は、データ要求処理動作のシーケンスを示す第２のシーケンス図である。
【００４８】
プリントサーバ装置１００が、クライアント３００ａからのデータ要求Ａを、先に受信すると（ステップ［Ａ１］）、図２を参照して説明した処理が実行される（ステップ［Ａ２］〜［Ａ８］）。ここでは、図２を見やすくするため、ＵＳＢ通信制御部１２６は、１回のコールバックでプリンタ２００から受信されたデータをネットワーク制御部Ｍ３に渡していることとしているが、上述したように受信データの大きさに応じて複数回のコールバックが行われることは、上述したとおりである。ステップ［Ａ２］〜［Ａ８］の処理を行っている間に、クライアント３００ｂから他のデータ要求Ｂが受信されると（ステップ［Ｂ１］）、ネットワーク制御部Ｍ３は、先に受信されたデータ要求Ａに対する処理と同様に、ＵＳＢ通信制御部１２６にデータ要求Ｂを渡して通信要求を行う（ステップ［Ｂ２］）、すなわち、データ要求Ｂを引数としてプリンタ２００との通信を行う関数をコールする。
【００４９】
新たなデータ要求Ｂを渡されたＵＳＢ通信制御部１２６は、データ要求Ａを渡して行われた通信要求に対する応答を返す（ステップ［Ａ８］）まで、すなわち、データ要求Ａを引数としてコールされた関数の返値を返すまで、データ要求Ｂに対する処理（ステップ［Ｂ３］〜［Ｂ８］を行わず、データ要求Ａを渡して行われた通信要求に対する応答を返した後に、データ要求Ｂに対する処理を行う。上述したように、データ要求Ａを渡して行われた通信要求に対する応答を返した時点では、データ要求Ａに対応するプリンタ２００−プリントサーバ装置１００間の通信（ステップ［Ａ３］および［Ａ４］）は必ず完了しているので、こうすることによりＵＳＢ通信制御部１２６は、プリンタ２００−ＵＳＢ通信制御部１２６間の通信を容易に単一に制限することができる。つまり、ＵＳＢ通信制御部１２６は、単純に、上位モジュールからの通信要求を受け付けた順に一つずつ処理していくだけで、プリンタ２００−ＵＳＢ通信制御部１２６間の通信を単一に制限することができる。具体的には、通信要求を渡すために上位モジュールから関数をコールされたら、コールされた順に渡された通信要求を処理し、処理が終了して関数の戻り値を返した後に、次にコールされたときに渡された通信要求を処理していけば良い。
【００５０】
ここで、理解の容易のため、図４を参照して、従来技術におけるデータ要求処理動作を第１比較例として説明する。図４は、第１比較例におけるデータ要求処理動作のシーケンスを示すシーケンス図である。図４に示すように、従来技術では、ＵＳＢ通信制御部は、ネットワーク制御部から関数をコールされることにより、データ要求を渡されると（ステップ［２］）、すなわち、通信要求を受けると、プリンタと通信を行って（ステップ［３］［４］）取得したデータを、通信要求に対する応答としてネットワーク制御部に渡していた（ステップ［５］）。すなわち、データ要求を渡されたときにコールされた関数の戻り値として、データをネットワーク制御部に返していた。通信要求とその応答、すなわち、関数のコールと、戻り値を返すこと（リターン）は、１対１に対応するものであるので、プリンタから受信されるべきデータが受信バッファより大きい場合には、全ての受信データをネットワーク制御部に渡すことができなかった。
【００５１】
仮に、ＵＳＢ通信制御部が、受信バッファよりも大きいデータを、通信要求に対する応答としてネットワーク制御部に渡そうとする場合には、例えば、複数回の通信要求をネットワーク制御部からＵＳＢ通信制御部に対して行ってもらうことが考えられる。これを、図５を参照して第２比較例として説明する。図５は、第２比較例におけるデータ要求処理動作のシーケンスを示す第１のシーケンス図である。
【００５２】
かかる場合には、ＵＳＢ通信制御部は、ネットワーク制御部から関数をコールされることにより、データ要求を渡されると（図５：ステップ［２］）、すなわち、通信要求を受けると、プリンタと通信を行って（ステップ［３］［４］）取得したデータを受信バッファに格納する。ＵＳＢ通信制御部は、受信バッファが足りなくなると、フロー制御によりプリンタからのデータの受信を一時的に停止し、受信バッファに格納されたデータを、通信要求に対する応答としてネットワーク制御部に渡す（ステップ［５］）。その際に、ＵＳＢ通信制御部は、例えば、続きのデータが存在することをネットワーク制御部に通知する。具体的には、データ要求を渡されたときにコールされた関数の戻り値として、受信バッファに格納されたデータと、続きのデータが存在すること示す値を返す。そして、ネットワーク制御部が渡されたデータをクライアントに送信した（ステップ［６］）後に、２回目の通信要求を行う（ステップ［７］）。ネットワーク制御部は、２回目の通信要求を受けて、受信バッファを初期化して、残りのデータをプリンタから受信し（ステップ［８］）、２回目の通信要求に対する応答として残りのデータをネットワーク制御部に渡す（ステップ［９］。この結果、デバイス−ＵＳＢ制御部間の一回の通信のために、上位モジュールであるネットワーク制御部は、複数回（図５の例では２回）の通信要求をＵＳＢ通信制御部に対して行うことになる。
【００５３】
もし、以上の説明したような第２比較例によると、ＵＳＢ通信制御部は、プリンタ−ＵＳＢ通信制御部間の通信を単一に制御することが煩雑になる。これを、２つのクライアントＡ、Ｂｂからほぼ同時に、データ要求を第２比較例のプリントサーバ装置に対して送信した場合のデータ要求処理動作を具体例として、図６を参照しながら説明する。図６は、第２比較例におけるデータ要求処理動作のシーケンスを示す第２のシーケンス図である。
【００５４】
プリントサーバ装置が、クライアントＡからのデータ要求Ａを、先に受信すると（ステップ［Ａ１］）、図５を参照して説明した処理が実行される（ステップ［Ａ２］〜［Ａ１０］）。ＵＳＢ通信制御部が１回目の通信要求に関する処理（ステップ［Ａ３］〜［Ａ５］）を行っている間に、クライアントＢから他のデータ要求Ｂが受信されたとする。この時、ネットワーク制御部は、特に同期などを取ることもなく、ＵＳＢ通信制御部にデータ要求Ｂを渡して通信要求を行うものとする（ステップ［Ｂ２］）。そして、ＵＳＢ制御部は、実施例におけるＵＳＢ通信制御部１２６のように、単純に、通信要求を受け付けた順に一つずる処理していくものとする。そうすると、ＵＳＢ通信制御部は、クライアントＡからのデータ要求Ａに対応するプリンタ−ＵＳＢ通信制御部間の通信のための２回目の通信要求（ステップ［Ａ７］）に関する処理（ステップ［Ａ８］［Ａ９］）を行う前にクライアントＢからのデータ要求Ｂをプリンタに対して送ってしまう（ステップ［Ｂ３］）。そうすると、第２比較例におけるＵＳＢ通信制御部は、プリンタ−ＵＳＢ通信制御部間の通信を単一に制限することができない。したがって、第２比較例におけるＵＳＢ通信制御部がプリンタ−ＵＳＢ通信制御部間の通信を単一に制限しようとすると、煩雑な仕組みを備える必要がある。例えば、ＵＳＢ通信制御部が上位モジュールから受け付けた通信要求が、現在プリンタ−ＵＳＢ通信制御部間で行っている通信のための複数回目の通信要求であるか、新規の通信要求であるかを判断する仕組み、および、複数回目の通信要求を受け付けるまで、新規の通信要求を処理せずに保持しておく仕組みを備える必要がある。あるいは、上位モジュールであるネットワーク制御部がＵＳＢ通信制御部に対して通信要求を行うタイミングを調整する仕組みを備える必要がある。
【００５５】
この点、図１〜３を参照して説明した本実施例によれば、ＵＳＢ通信制御部１２６がコールバックを用いて受信データを上位モジュール（例えば、ネットワーク制御部Ｍ３）に渡すことにより、プリンタ２００−ＵＳＢ通信制御部１２６間の通信と、上位モジュールからＵＳＢ通信制御部１２６への通信要求およびその応答とが、必ず１対１の関係となる。この結果、上述のとおり、ＵＳＢ通信制御部１２６は、容易にプリンタ２００−ＵＳＢ通信制御部１２６間の通信を単一に制限することができる。
【００５６】
そして、ＵＳＢ通信制御部１２６がプリンタ２００−ＵＳＢ通信制御部１２６の通信を単一に制限することにより、上位モジュールは、プリンタ２００−ＵＳＢ通信制御部１２６を単一に制限することを意識することなく、任意のタイミングでＵＳＢ通信制御部１２６に対して通信要求を行うことができる。したがって、プリントサーバ装置１００の制御プログラム１２２が複数の上位モジュール（例えば、図１：処理モジュールＭ１〜Ｍ３）を備える場合であっても、上位モジュール間で同期を取り、通信要求を行うタイミングを調整する等の処理は必要ない。この結果、制御プログラム１２２に、新たなサービスを提供する上位モジュールを追加することも容易になる。
【００５７】
さらに、上記実施例では、ネットワーク制御部Ｍ３がＵＳＢ通信制御部１２６にデータ要求を渡して通信要求を行うとき、ＵＳＢ通信制御部１２６にクライアント特定情報を渡しておく。そして、ネットワーク制御部Ｍ３は、ＵＳＢ通信制御部１２６からのコールバックにより受信データを受け取るときに、ネットワーク制御部Ｍ３からクライアント特定情報を受け取る。これにより、受け取った受信データをどのクライアントに対して送信すればよいかを認識することができる。これは、ネットワーク制御部Ｍ３においてクライアントからデータ要求を受け付けると共に、ＵＳＢ通信制御部１２６にデータ要求を渡して通信要求を行う関数と、ＵＳＢ通信制御部１２６から受信データを受け取る関数（コールバックされる関数）が異なるため、後者の関数がクライアントを特定できるようにする必要があるためである。
【００５８】
Ｂ．変形例：
・第１変形例：
上記実施例では、上位モジュール（例えば、ネットワーク制御部Ｍ３）は、ＵＳＢ通信制御部１２６から受信データを受け取るとき、必ずコールバック関数の引数として受け取っているが、もし受信データが受信バッファより小さくなり、通信要求に対する一度の応答により受信データを受け取ることができる場合には、通信要求に対する応答により受信データを受け取っても良い。例えば、上位モジュールは、受信データが小さく通信要求に対する一度の応答により受信データを受け取ることができることが明らかな場合には、コールバック関数の指定を行わないでＵＳＢ通信制御部１２６に対して通信要求を行い、受信データが大きく通信要求に対する一度の応答により受信データを受け取ることができない場合あるいはできない可能性がある場合には、実施例のようにコールバック関数の指定を行ってＵＳＢ通信制御部１２６に対して通信要求を行う。そして、ＵＳＢ通信制御部１２６は、コールバック関数の指定が行われた場合には、コールバックにより受信データを上位モジュールに渡し、コールバック関数の指定が行われなかった場合には、通信要求に対する応答として受信データを上位モジュールに渡すこととしても良い。かかる場合でも、プリンタ２００−ＵＳＢ通信制御部１２６間の通信と、上位モジュールからＵＳＢ通信制御部１２６への通信要求およびその応答とが、必ず１対１の関係となるので、上記実施例と同様に、ＵＳＢ通信制御部１２６は、容易にプリンタ２００−ＵＳＢ通信制御部１２６間の通信を単一に制限することができる。
【００５９】
・第２変形例：
上記実施例では、ＵＳＢ通信制御部１２６は、プリンタ２００から受信した受信データを全てコールバックにより上位モジュールに渡し、通信要求に対する応答によっては受信データを渡していない。これに代えて、受信データを複数回に分けて上位モジュールに渡す必要がある場合に、コールバックにより受信データの一部を渡し、通信要求に対する応答により一部を渡すこととしても良い。ただし、通信要求に対する応答は一度だけにすることが好ましい。例えば、受信データをプリンタ２００から受信して受信バッファに格納する際、受信バッファが足りなくなった場合には、コールバックにより受信バッファに格納した受信データを上位モジュールに渡し、最後まで受信データを受け取った場合には、通信要求に対する応答により受信データを上位モジュールに渡すようにしても良い。かかる場合でも、プリンタ２００−ＵＳＢ通信制御部１２６間の通信と、上位モジュールからＵＳＢ通信制御部１２６への通信要求およびその応答とが、必ず１対１の関係となるので、上記実施例と同様に、ＵＳＢ通信制御部１２６は、容易にプリンタ２００−ＵＳＢ通信制御部１２６間の通信を単一に制限することができる。
【００６０】
・第３変形例：
上記実施例では、プリンタ２００−ＵＳＢ通信制御部１２６間の通信が単一に制限される場合について説明したが、単一に制限される場合に限らず、所定の数に制限される場合に用いられる。例えば、プリンタ２００−ＵＳＢ通信制御部１２６間の通信が２つまでに制限される場合であれば、ＵＳＢ通信制御部１２６は、一の通信要求に対応するプリンタ２００−ＵＳＢ通信制御部１２６間の通信が完了するまで、一の通信要求から２つ後に受け付けられた通信要求に対応するプリンタ２００−ＵＳＢ通信制御部１２６間の通信を制限すれば良い。一般的に言えば、一の通信要求に対応するプリンタ２００−ＵＳＢ通信制御部１２６間の通信が完了するまで、他のいずれかの通信要求に対応するプリンタ２００−ＵＳＢ通信制御部１２６間の通信を制限する必要がある場合には、図２に示すようなコールバックを利用したシーケンスを適用することで、このような制限を容易に実現することができる。
【００６１】
・第４変形例：
上記実施例では、プリントサーバ装置１００とプリンタ２００との間は、ＵＳＢケーブルＣＶにより接続され、ＵＳＢ規格に従った通信が行われるが、プリントサーバ装置１００とプリンタ２００との間は、他のインターフェースを用いて接続されていても良い。例えば、ＩＥＥＥ１３９４バス接続、などの有線接続や、ブルートゥース接続，赤外線接続などの無線接続で接続するようにしてもよい。
【００６２】
・第５変形例：
上記実施例では、プリンタ２００と接続されるプリントサーバ装置１００を例として用いているが、他の種類のデバイスと接続されるサーバ装置であっても良い。例えば、スキャナ、ファクシミリ、コピー機、プリンタ、スキャナなどの機能を複数備える複合機などに接続されるサーバ装置であっても良い。さらに一般的に言えば、サーバ装置に限らず、なんらかのデバイスと接続される装置であって、デバイスとの間の通信を所定数に制限する必要があれば、本発明を適用することができる。
【００６３】
・第６変形例：
上記実施例において、ハードウエアによって実現されていた構成の一部をソフトウエアに置き換えても良く、逆にソフトウエアによって実現されていた構成の一部をハードウエアに置き換えても良い。
【００６４】
以上、実施例、変形例に基づき本発明について説明してきたが、上記した発明の実施の形態は、本発明の理解を容易にするためのものであり、本発明を限定するものではない。本発明は、その趣旨並びに特許請求の範囲を逸脱することなく、変更、改良され得ると共に、本発明にはその等価物が含まれる。
【図面の簡単な説明】
【００６５】
【図１】ネットワークシステムの概略構成を示す説明図。
【図２】データ要求処理動作のシーケンスを示す第１のシーケンス図。
【図３】データ要求処理動作のシーケンスを示す第２のシーケンス図。
【図４】第１比較例におけるデータ要求処理動作のシーケンスを示すシーケンス図。
【図５】第２比較例におけるデータ要求処理動作のシーケンスを示す第１のシーケンス図。
【図６】第２比較例におけるデータ要求処理動作のシーケンスを示す第２のシーケンス図。
【符号の説明】
【００６６】
１００…プリントサーバ装置
１１０…ＣＰＵ
１２０…メモリ
１２２…制御プログラム
１２４…ネットワークプロトコル部
１２６…ＵＳＢ通信制御部
１３０…ＵＳＢホストＩＦ部
１４０…ネットワークＩＦ部
１５０…操作部
２００…プリンタ
２１０…ＣＰＵ
２２０…メモリ
２２２…制御プログラム
２２４…ＭＩＢ格納部
２３０…ＵＳＢデバイスＩＦ部
２４０…プリンタエンジン
３００ａ、３００ｂ…クライアント
ＣＶ…ＵＳＢケーブル
Ｍ１…終了制御部
Ｍ１…処理モジュール
Ｍ２…設定データ制御部
Ｍ３…ネットワーク制御部
ＮＷ…ネットワーク
【図１】
2008097176.tif 000003
【図２】
2008097176.tif 000004
【図３】
2008097176.tif 000005
【図４】
2008097176.tif 000006
【図５】
2008097176.tif 000007
【図６】
2008097176.tif 000008