(58)【調査した分野】(Int.Cl.,DB名)
前記第1プリントプロトコルはIPP(Internet Printing Protocol)であり、前記第2プリントプロトコルはSNMP(Simple Network Management Protocol)であることを特徴とする請求項2、4から8のいずれか1項に記載の情報処理方法。
前記判定工程において、前記情報処理装置に投入されたジョブが前記プリント用ジョブであると判定された場合に、プリントデータを生成する工程を更に有することを特徴とする請求項1から9のいずれか1項に記載の情報処理方法。
前記第1プリントプロトコルはIPP(Internet Printing Protocol)であり、前記第2プリントプロトコルはSNMP(Simple Network Management Protocol)であることを特徴とする請求項14、16から20のいずれか1項に記載のプログラム。
【発明を実施するための形態】
【0012】
以下、添付図面を参照して本発明の好適な実施の形態を詳しく説明する。
【0013】
(第1の実施形態)
図1は、本実施形態で使用するプリントシステムのハード構成を示す図である。図では、本発明の情報処理装置であるPC01に対し、プリンタA40、プリンタB50、プリンタC60の3つのプリンタが接続されている。プリンタA40は通信インタフェース20によって有線接続されている。ここでは、通信インタフェースとしてはUSB(Universal Serial Bus)を使用しているものとする。プリンタB50およびプリンタC60はネットワーク30を介して接続されている。ネットワークとしては、LAN(Local Area Network)や、WAN(Wide Area Network)などを使用することができる。ネットワークの接続形態としては有線無線を問わず、またこれらが混在していても構わない。
【0014】
PC01は、CPU100、ROM101、ハードディスク103、RAM102、ディスクコントローラ104、ディスプレイI/F105、キーボード/マウスI/F106、通信制御部107などを備え、これらはバス108によって相互接続されている。CPU100は、ROM101やハードディスク103に記憶されているプログラムに従い、RAM102をワークエリアとして用いながら、PC01に含まれるデバイス全体を制御する。例えば、OSやアプリケーションソフトウェアも、所定のプログラムがROM101やハードディスク103から読み出されRAM102にロードされた後、CPU100がそのプログラムに従って各種処理を実行することによって実現される。後に説明するフローチャートについても、CPU100がプログラムに従ってRAM102をワークエリアとしながら実行する処理である。
【0015】
図2は、上記プリントシステムのソフトウェア構成を示す図である。本実施形態ではOSプリントシステムとしてmacOSに含まれるCUPS(Common UNIX(登録商標) Printing System)を想定している。
【0016】
図1でも説明したように、PC01とプリンタA40は、USBケーブルで接続されている。PC01とプリンタB50およびプリンタC60は、ネットワーク接続されている。プリンタB50とプリンタC60は、プリントプロトコルとしてIPP(Internet Printing Protocol)をサポートしている。プリンタC60については、更にSNMP(Simple Network Management Protocol)もサポートしている。以下、夫々のプリンタの制御構成について簡単に説明する。
【0017】
プリンタA40は、USB I/F41、プリント制御部42、プリント部43を含んでいる。USB I/F41は、PC01との間でデータの相互通信を行うためのインタフェースである。プリント制御部42は、USB I/F41より受信したプリントデータや各種コマンド、更に装置内に予め記憶されているプログラムに従って、プリント部43を制御する。プリント部43には、プリントヘッドやこれにインクを供給するインクタンク、プリント用紙の搬送系など実際にプリント動作を実行する機構が含まれている。プリントすべきプリントデータを、USB I/F41を介して受信すると、プリント制御部42は、受信したプリントデータに従ってプリント部43を制御し、プリント用紙に画像をプリントする。また、USB I/F41を介してステータス要求コマンドを受信すると、プリント制御部42は、要求されたステータス情報をUSB I/F41を介して発信する。
【0018】
プリンタB50は、ネットワークI/F51、IPP制御部52、プリント制御部53、プリント部54を含んでいる。ネットワークI/F51、プリント制御部53、プリント部54についてはプリンタA40と同じ機能を有する。IPP制御部52は、ネットワーク I/F51がIPPプロトコルで受信したプリントデータや各種コマンドを、プリント制御部53が対応可能な形式にして提供する。また、プリンタのステータス要求コマンドが受信されたときは、装置のステータス情報をIPPプロトコルでネットワーク I/F51に提供する。
【0019】
プリンタC60は、ネットワーク I/F61、IPP制御部62、プリント制御部63、プリント部64およびSNMP制御部65を含んでいる。ネットワーク I/F61、IPP制御部62、プリント制御部63、プリント部64についてはプリンタB50と同じ機能を有する。SNMP制御部65は、ネットワーク I/F61よりSNMPプロトコルでメッセージを受信したとき、これを解釈して応答する。
【0020】
次に、PC01側のソフトウェア構成について説明する。アプリケーション02は、ユーザの指示の下で画像データ(アプリケーションデータ)を生成するソフトウェアである。ユーザが画像のプリントを指示すると、アプリケーション02は、生成した画像データをプリンタの種類やプリント品位などを指定するパラメータとともにOSプリントシステム05に提供する。
【0021】
ユーティリティ03は、プリント動作とは別に、PC01と各種プリンタとの間で情報のやり取りを行うためのソフトウェアである。例えばユーザは、ユーティリティ03を介して、プリンタA40、B50、C60のそれぞれに搭載されているインクの残量を確認することができる。
【0022】
ドライバ04はプリンタベンダーが提供する個々のプリンタに対応づけられたソフトウェアモジュール(プリンタドライバ)であり、プリンタが処理可能なプリントデータを生成する。ユーティリティがプリンタのステータス情報を表示する際は、対応するドライバがプリンタのステータス情報を取得し、ユーティリティがユーザに対し詳細且つ丁寧に表示できるように情報の体裁を整えて、共有領域に保存するのが一般である。
【0023】
OSプリントシステム05は、アプリケーション02やユーティリティ03と、ドライバ04と、各種プリンタとの間を仲介し、ユーザからのコマンドを適切に処理して個々のプリンタに対応したジョブを生成したり、プリンタから取得した情報を管理したりする。ベンダーモジュールであるドライバ04もOSプリントシステム05によって起動され、OSプリントシステム05を介してアプリケーション02やユーティリティ03からの指示を受けたり情報を提供したりする。
【0024】
OSプリントシステム05には、各種プリンタと相互通信するための通信部としてのバックエンドが、通信形態ごとに用意されている。本実施形態においては、OS標準として、USBバックエンド06とIPPバックエンド07が用意されているものとする。USBで接続されているプリンタA40と接続するとき、OSプリントシステム05は、ドライバ04とUSBバックエンド06を起動する。その後ドライバ04は、USBバックエンド06を介してプリンタA40との相互通信を行う。一方、ネットワーク接続されているプリンタB50またはプリンタC60と接続するとき、OSプリントシステム05は、ドライバ04とIPPバックエンド07を起動する。その後ドライバ04は、IPPバックエンド07を利用してプリンタA40との相互通信を行う。この際、プリンタC60については、SNMPをサポートしているので、IPPバックエンド07はSNMPでの相互通信も行う。
【0025】
OSプリントシステム05には、各種プリンタのステータス情報を記憶しておくためのステータス情報格納部11が用意されている。本実施形態では、主としてインク残量情報の格納部として利用している。ステータス情報格納部11には、USBバックエンド06やIPPバックエンド07が夫々のプリンタから取得した情報を直接書き込むこともできる。また、ステータス情報格納部11には、ドライバ04がUSBバックエンド06やIPPバックエンド07から取得した情報に所定の処理を加えた後に書き込むこともできる。
【0026】
PPDファイル10は、プリンタベンダーが提供するファイル(PostScript Printer Description)であり、接続されているプリンタごとに管理されている。PPDファイル10には、解像度や対応可能な用紙サイズなど、個々のプリンタの仕様や通信方法などが記述されている。OSプリントシステム05およびドライバ04は、PPDファイル10に記憶されている対応するプリンタの情報に基づいて、そのプリンタに送信するためのプリントデータを生成したりプリント動作を制御したりする。
【0027】
また、PPDファイル10には、IPPバックエンド07によるインク残量情報のステータス情報格納部11への書き込みを有効とするか無効とするかを示すインク残量保存パラメータ12も、プリンタごとに管理されている。ドライバ04やIPPバックエンド07は、OSプリントシステム05を介してPPDファイル10のインク残量保存パラメータ12を参照し、その内容に応じてプリンタのインク残量情報を取得し、得られた残量情報をステータス情報格納部11に保存する。詳細については後述する。
【0028】
以上の構成のもと、ユーザがアプリケーション02で作成した画像のプリントコマンドが発信されると、アプリケーション02により作成された画像データに、プリンタの種類やプリントモード、プリント枚数などのパラメータを付随したデータが生成される。そして、OSプリントシステム05はこれをドライバ04に送る。ドライバ04は、受け取ったデータをプリント用ジョブとして解析し、付随情報に従って画像データに所定の画像処理を施し、指定されたプリンタがプリント可能なプリントデータに変換した上で、そのデータをOSプリントシステム05に提供する。OSプリントシステム05は、対応するバックエンドを起動して、バックエンドを介してプリントデータをプリンタへ送信する。
【0029】
すなわち、プリンタA40でのプリントが指定されたコマンドであれば、OSプリントシステム05は、USBバックエンド06を起動し、USB I/F08を介して、プリントデータをプリンタA40に送信する。プリンタB50またはプリンタC60でのプリントが指定されたコマンドであれば、OSプリントシステム05は、IPPバックエンド07を起動し、ネットワーク I/F09を介して、プリントデータをプリンタB50またはプリンタC60に送信する。
【0030】
一方、ユーザは、プリント動作とは別に、ユーティリティ03を用いてインク残量など、プリンタのステータスを確認することができる。
図3は、ユーザがインク残量を確認する場合に、ユーティリティ03がディスプレイに表示するインク残量表示画面70の例である。インク残量表示画面70には、プリンタ選択ポップアップメニュー71と、インクタンク名称72と、夫々のインクタンクに対応する残量表示バー73と、表示ボタン74とが表示されている。
【0031】
プリンタ選択ポップアップメニュー71は、ユーザがインク残量を確認したいプリンタを指定するためのメニューであり、上下の矢印をクリックすることによってプリンタの種類を変更することができる。図では、「プリンタA」を指定した場合を示している。インク残量を確認したいプリンタをポップアップメニュー71で指定した後、表示ボタン74をクリックすると、指定されたプリンタに搭載されているインクタンク名称72と、個々のインクタンクに対応する残量表示バー73が表示される。図では、「プリンタA」がブラック(Black)、シアン(Cyan)、マゼンタ(Magenta)、イエロー(Yellow)の4種類のインクタンクを搭載している場合を示している。そして、残量表示バー73における塗りつぶしの領域が多いほど、対応するインクタンクに収容されているインク残量が多いことを意味している。
【0032】
なお、プリンタによって、搭載可能なインクタンクの種類や数は様々である。例えばモノクロプリンタの場合は、ブラックインクを収容するタンクが1つだけ搭載され、インク残量表示画面70には、インクタンク名称72と対応する残量表示バー73が1つずつ表示される。また、ライトシアン、ライトマゼンタ、グレーのようなライトインクや、レッド、グリーン、ブルーのような特色インクを搭載するプリンタであれば、これら全てのインクに対応するインクタンク名称72と残量表示バー73が、互いに対応づけた状態で表示される。いずれにしても、ユーザがプリンタ選択ポップアップメニュー71でプリンタを指定し、その状態で表示ボタン74をクリックすれば、指定されたプリンタに搭載されているインクタンクの名称と対応するインク残量が表示されるようになっている。
【0033】
以下、ユーザが、ユーティリティ03を用いてプリンタのインク残量を確認するコマンドを発生させた場合に、個々のソフトウェアモジュールが実行する処理について具体的に説明する。なお、以下では、
図2で示した個々のソフトウェアモジュールが実行するものとして幾つかのフローチャートを説明するが、ハードウェア的には、
図1のCPU100がROM101またはハードディスク103に記憶されたプログラムに従って実行することになる。
【0034】
図4は、ユーザがユーティリティ03を用いて、プリンタのステータス情報を確認する場合に、ユーティリティ03が実行する工程を説明するためのフローチャートである。ここではプリンタのステータス情報の一例としてインク残量情報を取得する場合を例に説明するが、プリンタに関する他の情報であっても、ユーティリティ03は以下のフローに従って処理することができる。
【0035】
本処理は、
図3に示すインク残量表示画面70において、ユーザが表示ボタン74をクリックすることにより開始される。本処理が開始されると、ユーティリティ03は、ステップS11において、インク残量取得ジョブをOSプリントシステム05に投入する。この際、インク残量取得ジョブには、インク残量表示画面70のプリンタ選択ポップアップメニュー71で選択されたプリンタ名も含まれている。
【0036】
次にユーティリティ03は、OSプリントシステム05にアクセスし、ステップS11で発信したインク残量取得ジョブの処理状態を取得し(ステップS12)、インク残量取得ジョブの処理が完了したか否かを判定する(ステップS13)。ステップS13でジョブは完了したと判定できるまで、ユーティリティ03はステップS12およびS13の処理を繰り返す。
【0037】
ステップS13でジョブが完了したと判定すると、ユーティリティ03はステップS14に進み、OSプリントシステム05のステータス情報格納部11に保存されているインク残量情報を取得する。
【0038】
更にステップS15において、ユーティリティ03はステップS14で取得したインク残量情報に基づいて、インク残量表示画面70を表示する。すなわち、
図3に示すように、取得したインク残量情報を、インクタンク名称72と残量表示バー73を対応づけて表示する。以上で本処理は終了する。
【0039】
図5は、ドライバ04が起動された場合に、ドライバ04が実行する処理の工程を説明するためのフローチャートである。本処理は、OSプリントシステム05が、アプリケーション02よりプリント用ジョブを受信したり、ユーティリティ03よりステータス情報取得ジョブを受信したりした場合に、ドライバ04を起動することによって開始される。
【0040】
本処理が開始されると、ドライバ04は、まず、ステップS21において、受信したジョブがプリント用ジョブであるか、ステータス情報取得ジョブであるかを判定する。プリント用ジョブである場合、ステップS22に進み、ドライバ04は受信したプリント用ジョブに含まれる画像データに所定の画像処理を施し、プリント用ジョブに指定されるプリンタが処理可能なプリントデータを生成する。その後、ステップS23に進み、ドライバ04は、ステップS22で生成したプリントデータを、OSプリントシステム05の指定されたプリンタに対応するバックエンドを介して、当該プリンタに送信する。
【0041】
一方、ステップS21で、受信したジョブがステータス情報取得ジョブであると判定した場合、ドライバ04はステップS24に進み、ジョブで指定されているプリンタとの接続形態がIPP接続であるか否かを判定する。そして、IPP接続ではないと判定した場合、ドライバ04はステップS25に進み、USB接続用のステータス情報取得処理を実行する。一方、IPP接続と判定した場合は、ステップS26に進み、IPP接続用のステータス情報取得処理を実行する。以上で本処理を終了する。
【0042】
図6は、ステータス情報取得処理としてインク残量取得ジョブが投入された場合に、
図5のステップS25でドライバ04が実行するUSB接続用ステータス情報取得処理を説明するためのフローチャートである。本処理が開始されると、ドライバ04は、ステップS31において、OSプリントシステムのUSBバックエンド06を介して、指定されたプリンタ(本実施形態の場合はプリンタA40)のステータス情報を取得する。
【0043】
ステップS32において、ドライバ04は、ステップS31で取得したステータス情報にインク残量情報が含まれているか否かを判定する。ステップS31におけるステータス情報の取得処理とステップS32における判定処理は、インク残量情報が含まれていると判定できるまで繰り返す。
【0044】
ステップS32でインク残量情報が含まれていると判定すると、ドライバ04はステップS33に進み、ドライバ04は、ステータス情報の中からインク残量情報を取り出してこれをOSプリントシステム05のステータス情報格納部11に保存する。以上で本処理を終了する。
【0045】
なお、ここでは、インク残量取得ジョブが投入された場合を前提としているため、ステータス情報の中からインク残量情報のみを抽出し保存する内容で説明しているが、ドライバ04が取得の対象とする情報は、他のステータス情報とすることもできる。この場合、ドライバ04は、
図6で説明した工程と同様の工程でその情報を取得し、ステータス情報格納部11の所定の場所にその情報を保存すれば良い。
【0046】
図7は、ステータス情報取得処理としてインク残量取得ジョブが投入された場合に、
図5のステップS26でドライバ04が実行するIPP接続用ステータス情報取得処理を説明するためのフローチャートである。本処理が開始されると、ドライバ04は、まずステップS41において、OSプリントシステム05を介してPPDファイル10にアクセスし、対応するプリンタのインク残量保存パラメータ12を参照する。
【0047】
図8(a)〜(c)は、PPDファイル10に記憶されている具体的なパラメータ内容を示す図である。
図8(a)はプリンタA40のPPDファイル、
図8(b)はプリンタB50のPPDファイル、
図8(c)はプリンタC60のPPDファイルの一部をそれぞれ示している。それぞれのPPDファイルには、プリンタの製品名を示すKey「*ModelName」と、そのプリンタのインク残量保存パラメータを示すValue「*cupsIPPSupplies」が互いに対応づけられて記憶されている。
【0048】
Keyとなる「*ModelName」については、「Printer A」、「Printer B」、「Printer C」のような名称が記載されている。Valueとなる「*cupsIPPSupplies」については、「True」または「False」のいずれかが記載されている。ここで、「True」は、対応するプリンタのインク残量情報の、IPPバックエンド07による保存を「有効」とすることを意味している。一方、「False」は、対応するプリンタのインク残量情報の、IPPバックエンド07による保存を「無効」とすることを意味している。ドライバ04やIPPバックエンド07は、Key「*ModelName」を指定してOSプリントシステム05に問い合わせることにより、指定したKeyに対応づけられたValueを認識することができる。
【0049】
図8(a)〜(c)によれば、USB接続されているプリンタA40と、インターネット接続であるがSNMPをサポートしているプリンタC60については「False」が設定されている。これは、プリンタA40とプリンタC60については、インク残量情報の保存を、IPPバックエンド07ではなくドライバ04に行わせることを意味している。一方、インターネット接続であり、且つSNMPをサポートしていないプリンタB50については「True」が設定されている。これは、プリンタB50については、インク残量情報の保存をIPPバックエンド07に行わせることを意味している。
【0050】
図7のフローチャートに戻る。ステップS41でインク残量保存パラメータを参照すると、ドライバ04はステップS42に進み、設定内容が「True」であるか「False」であるかを判定する。「True」である場合、ドライバ04はIPPバックエンド07に対し1バイト分のNULLデータを送信し(ステップS43)、本処理を終了する。
【0051】
一方、ステップS42で設定内容が「False」である場合、ドライバ04はステップS44でIPPバックエンド07に対しSNMP応答要求を送信する。そして、ステップS45でドライバ04はIPPバックエンド07に対しNULLデータを送信し、更にステップS46でSNMP応答を受信する。
【0052】
ステップS47で、ドライバ04は、ステップS46で受信した情報の中にインク残量情報が含まれているか否かを判定する。そして、ステップS47で受信した情報の中にインク残量情報が含まれていると判定できるまで、上記ステップS44〜S47の工程を繰り返す。
【0053】
ステップS47でインク残量情報が含まれていると判定すると、ドライバ04はステップS48に進み、ステータス情報の中からインク残量情報を取り出してこれをOSプリントシステム05のステータス情報格納部11に保存する。以上で本処理を終了する。
【0054】
なお、ステップS43やS45で、ドライバ04が、1バイト分のNULLデータをIPPバックエンド07に送信するのは、以下の理由によるものである。すなわち、macOSが提供する標準モジュールであるIPPバックエンド07が、何らかのプリントデータを受信しないと、プリンタの応答を取得しないためである。つまり、本実施形態では、インク残量の確認などユーティリティ03からプリント動作を伴わないジョブがOSプリントシステム05に投入された場合であっても、IPPバックエンド07にプリンタの応答を取得させるために、NULLデータを利用している。そして、このNULLデータは、プリンタにとって処理不要なダミーデータである。このような、プリンタからの応答を取得するためのダミーとしての役割を果せるのであれば、ステップS43やS45でドライバ05が送信するデータは必ずしもNULLデータでなくても良い。プリンタの起動コマンドやプリンタが読み捨てる空文字とすることもできる。
【0055】
図9は、USBバックエンド06がOSプリントシステム05によって起動された際にUSBバックエンド06が実行する処理を説明するためのフローチャートである。本処理が開始されると、USBバックエンド06は、ステップS61において、USB接続されたプリンタに対しステータス取得スレッドを発動する。すなわちUSBバックエンド06は、プリント用ジョブによって起動された場合であっても、プリント用ジョブに従ったプリントデータの送信と、ステータス取得ジョブに従ったプリンタのステータス情報の取得とを、並行して行う。
【0056】
ステップS61でステータス取得スレッドを発動した後、USBバックエンド06はステップS62に進み、ドライバ04よりプリントデータを受信しているか否かを判定する。プリントデータの受信が確認された場合はステップS63に進み、ドライバ04よりプリントデータを受信し、それをUSB I/F08を介してプリンタ(本例の場合はプリンタA40)に送信する。プリントデータを受け取ったプリンタA40は、受け取ったプリントデータに従って画像をプリントする。
【0057】
ステップS64でのデータ送信が完了すると、USBバックエンド06は再びステップS62に戻り、新たなプリントデータの受信の有無を確認する。このような、ステップS63におけるプリントデータの受信とステップS64におけるプリントデータの送信は、ステップS62で新たなプリントデータの受信は無いと判定されるまで繰り返す。
【0058】
ステップS62で新たなプリントデータの受信は無いと判定すると、USBバックエンド06はステップS65に進み、ドライバ04が処理を終了しているか否かを判定する。処理を終了していない場合は、更なるプリントデータが発生している可能性があるので、USBバックエンド06は次のプリントデータの受信の有無を確認するためにステップS62に戻る。一方、ステップS65で、ドライバ04が処理を終了したと判定した場合は、ステップS66に進み、ステップS61で発動したステータス取得スレッドの停止を要求した後、本処理を終了する。
【0059】
一方、ステップS61でステータス取得スレッドが発動された以降、ステータス取得ジョブは、ステップS66でステータス取得スレッドの停止が発動されるまで、上述したプリント用ジョブと並行に行われる。以下、ステータス取得ジョブについて説明する。
【0060】
ステップS61でステータス取得スレッドが発動されると、USBバックエンド06は、ステータス取得コマンドをプリンタに送信することにより、ステータス取得ジョブを開始する(ステップS70)。その後、ステップS73でデータ取得スレッド停止要求が確認されるまで、プリンタからのステータス情報の取得(ステップS71)と、取得したステータス情報のドライバ04への送信(ステップS72)を繰り返す。この際のステータス情報としては、インク残量のほか、例えばプリント動作の進行状況などを含むこともできる。ステップS73でデータ取得スレッド停止要求が確認されると、本処理は終了する。
【0061】
図10は、IPPバックエンド07がOSプリントシステム05によって起動された際に、IPPバックエンド07が実行する処理を説明するためのフローチャートである。本処理が開始されると、IPPバックエンド07は、まずステップS81において、ドライバ04よりデータを受信しているか否かを判定し、データの受信が確認されるまで待機する。
【0062】
ステップS81でデータの受信が確認されるとステップS82に進み、データを受信する。OSプリントシステム05がアプリケーション02よりプリント用ジョブを受けてIPPバックエンド07を起動した場合、IPPバックエンド07がステップS82で受信するデータは、
図5のステップS23でドライバ04が送信するプリントデータとなる。一方、OSプリントシステム05がユーティリティ03よりステータス情報取得ジョブを受信してIPPバックエンド07を起動した場合、ステップS82で受信するデータは、
図7のステップS43かS45でドライバより送信されるNULLデータとなる。いずれにしても、何らかのデータを受信すると、IPPバックエンド07はステップS83に進み、指定されたプリンタとの接続を開始する。
【0063】
ステップS84でIPPバックエンド07は、IPP接続されたプリンタに対しIPP応答モニタスレッドを起動する。以後、IPPバックエンド07は、データの送信と、IPP応答モニタスレッドに従ったプリンタのステータス情報の取得とを、並行に行う。
【0064】
ステップS85で、IPPバックエンド07は、ステップS82で受信したデータをプリンタに送信する。この際、データが、NULLデータではない実データ(プリントデータ)であれば、プリンタは当該プリントデータに従ってプリント動作を開始する。一方、受信したデータがNULLデータの場合、プリンタは当該データを無視することになる。
【0065】
続くステップS86において、IPPバックエンド07は、新たなデータがドライバ04より受信されているか否かを判定する。そして、新たなデータが受信されている場合はステップS87に進みそのデータを受信した後、更にステップS88に進み当該データをプリンタに送信する。このデータがNULLデータでなければ、プリンタはプリントデータに従ったプリント動作を継続する。データがNULLデータであれば、当該NULLデータはこれ以降で行うSNMP応答を行うためのトリガーとなる。
【0066】
ステップS89において、IPPバックエンド07は、ドライバ04よりSNMP応答要求があるか否かを判定する。SNMP応答要求は、対象とするプリンタがSNMPをサポートしている場合のみ、すなわちIPP接続され且つインク残量保存パラメータの値が「False」である場合のみ、
図7のステップS44でドライバ04より送信される要求である。よって、ステップS89でSNMP応答要求が確認されると、対象とするプリンタはSNMPをサポートしているため、IPPバックエンド07はステップS90でSNMP応答をプリンタから取得し、ステップS91でこれをドライバ04に返信する。返信した情報にインク残量情報が含まれていれば、その情報は
図7のステップS48において、ドライバ04によってステータス情報格納部11に保存されることになる。
【0067】
その後、IPPバックエンド07は、新たな受信データを確認するためにステップS86に戻る。このように、SNMPを介して双方向通信を行う場合、IPPバックエンド07はNULLデータの送信とSNMPの応答取得およびその送信を、繰り返すことになる。一方、ステップS89でSNMP応答要求がないと判定した場合も、IPPバックエンド07は新たな受信データを確認するためにステップS86に戻る。
【0068】
ステップS86において、新たな受信データは存在しないと判定した場合、IPPバックエンド07はステップS92に進み、ドライバ04が処理を終了したか否かを判定する。処理を終了していない場合は、更なるプリントデータを受信している可能性があるので、IPPバックエンド07は次のプリントデータの有無を確認するために再びステップS86に戻る。ステップS92で、ドライバ04が処理を終了したと判定した場合は、本処理を終了する。
【0069】
一方、ステップS84でIPP応答モニタスレッドが起動された以降、IPP応答モニタジョブは、ドライバ04の処理の完了が確認されるまで、上述したプリント用ジョブと並行に行われる。以下、IPP応答モニタスレッドについて説明する。
【0070】
ステップS84でIPP応答モニタスレッドが起動されると、IPPバックエンド07は、ステータス取得コマンドをプリンタに送信することにより、ステータス取得スレッドを開始する(ステップS100)。まず、ステップS101で、IPPバックエンド07はIPP応答をプリンタから取得し、ステップS102では取得したIPP応答に基づき、OSプリントシステム05にプリンタの状態を通知する。
【0071】
ステップS103で、IPPバックエンド07は、OSプリントシステム05を介してPPDファイル10のインク残量保存パラメータ12を参照し、ステップS104で設定が「True」か「False」か、を判定する。「True」である場合、IPPバックエンド07はステップS105に進み、ステップS101で自らが取得したIPP応答に基づいたインク残量情報を、OSプリントシステム05のステータス情報格納部11に保存した後、ステップS106に進む。一方、ステップS104でインク残量保存パラメータ12の設定が「False」である場合、IPPバックエンド07はインク残量情報の保存は行わず、そのままステップS106に進む。
【0072】
ステップS106において、IPPバックエンド07はドライバ04の処理が終了しているか否かを判定する。終了している場合は本処理を終了する。ドライバ04の処理がまだ終了していない場合は、ステップS101に戻り、IPP応答モニタを継続する。以上で本処理が終了する。
【0073】
以上説明した本実施形態によれば、ユーティリティ03は、USB接続されたプリンタA40のインク残量情報については、
図7のステップS48でドライバ04がステータス情報格納部11に保存した情報に従って、表示することになる。ネットワーク接続され且つSNMPをサポートしているプリンタC60のインク残量情報についても、
図7のステップS48でドライバ04がステータス情報格納部11に保存した情報に従って、表示することになる。一方、ネットワーク接続され且つSNMPをサポートしていないプリンタC60については、ユーティリティ03は、
図10のステップS105でIPPバックエンド07がステータス情報格納部11に保存した情報に従って、インク残量表示を行うことになる。そして、いずれの情報も、ユーザが
図3に示すユーティリティの表示画面70において、表示ボタン74をクリックした時に取得された情報である。
【0074】
このように本実施形態によれば、macOS環境のもとでネットワーク接続されたプリンタであっても、ドライバ04がIPPバックエンド07に対しNULLデータを適宜送信することにより、プリンタのステータス情報を保存することができる。これにより、ユーザは、インク残量などのステータス情報を、プリンタ動作とは無関係にリアルタイム性の高い状態で適宜確認することが可能となる。
【0075】
(第2の実施形態)
本実施形態においても、第1の実施形態と同様、
図1および
図2で示したプリントシステムを用いる。また、
図7で説明したIPP接続用ステータス情報取得処理のフローチャート以外は、第1の実施形態と同様、
図4〜6、9および10で説明したフローチャートに従う。
【0076】
第1の実施形態では、
図7に示すIPP接続用ステータス情報保存処理において、ドライバ04は、SNMPをサポートしていないプリンタに対し、ステップS43でNULLデータを送信し処理を終了している。一方、
図10のフローチャートに示すように、ステップS84で起動されるIPP応答モニタスレッドは、ステップS106でドライバ04の処理完了が確認されると終了するようになっている。この場合、ドライバ04の処理が、IPP応答モニタスレッドの開始よりも早期に終了してしまうと、IPP応答モニタスレッドにおけるステップS101〜S105の処理が正常に行われないおそれがある。このため、本実施形態では、ドライバ04にIPPバックエンド07の動作を確認させる工程を設け、IPPバックエンド07がプリンタとの通信を開始したことを確認した後に、ドライバ04の処理を終了させるようにする。
【0077】
図11は、インク残量取得ジョブが発生された場合に、本実施形態のドライバ04が、
図5のステップS26で実行するIPP接続用ステータス情報取得処理を説明するためのフローチャートである。第1の実施形態で説明した
図7のフローチャートと異なる点は、ステップS50とステップS51が追加されていることである。よって、以下は、これら工程についてのみ説明する。
【0078】
ステップS43でIPPバックエンド07にNULLデータを送信した後、ステップS50において、ドライバ04はIPPバックエンド07の通信状況を取得する。IPPバックエンド07はプリンタとの通信を開始すると、その旨をOSプリントシステム05に通知するようになっている。このため、ステップS50において、ドライバ04はOSプリントシステム05にアクセスすることにより、IPPバックエンド07の通信状況を取得することができる。
【0079】
次に、ドライバ04はステップS51に進み、取得した通信状況よりIPPバックエンド07がプリンタとの間で通信を開始したか否かを判定する。IPPバックエンド07がまだ通信を開始していないと判定した場合、ドライバ04はステップS43に戻り、再度NULLデータを送信する。そして、ステップS51でIPPバックエンド07が通信を開始したことを確認できるまで、ステップS43〜S51を繰り返す。ステップS51でIPPバックエンド07が通信を開始したことを確認できると、ドライバ04は本処理(IPP接続用ステータス情報取得処理)を終了する。
【0080】
以上説明した本実施形態によれば、プリンタのステータス情報の取得や取得した情報の保存を、ドライバ04がIPPバックエンド07に任せた場合であっても、ドライバ04は、IPPバックエンド07の通信開始を確認してから自身の処理を終了する。よって、IPP応答モニタスレッドの処理、ひいてはIPPバックエンド07によるインク残量情報の保存をより確実に行うことができる。
【0081】
なお、本実施形態において、ドライバ04は、IPPバックエンド07の通信開始を検知しているが、本実施形態はこれに限定されるものではない。ドライバは、例えばIPPバックエンド07がOSプリントシステム05にプリンタの状態を通知したことを検知しても良いし、ステータス情報格納部11にインク残量情報などを保存したことを検知してもよい。いずれにしても、IPPバックエンド07が双方向通信を行っていることが確認できれば、本実施形態の効果を得ることはできる。
【0082】
(第3の実施形態)
本実施形態においても、第1の実施形態と同様、
図1および
図2で示したプリントシステムを用いる。また、
図7で説明したIPP接続用ステータス情報取得処理のフローチャート以外は、第1の実施形態と同様、
図4〜6、9および10で説明したフローチャートに従う。
【0083】
第1、第2の実施形態では、ドライバは、OSのIPPバックエンド07へNULLデータを送信した。そして、IPPバックエンド07は、このNULLデータに基づきプリンタからIPP応答を取得することによりIPPバックエンド07がインク残量情報を取得し保存していた。また、プリンタがSNMPをサポートしている場合は、このSNMPプロトコルを利用していた。つまり、ドライバはIPPバックエンド07へNULLデータを送信し、IPPバックエンド07は、このNULLデータに基づきプリンタからSNMP応答を取得した。そして、IPPバックエンド07は、このSNMP応答をドライバに送信することにより、ドライバがSNMP応答からインク残量情報を取得し、ステータス情報格納部11に保存していた。これは、ドライバがSNMPを用いて取得し保存するステータス情報のほうが、IPPバックエンド07がIPP応答から独自に保存するステータス情報よりも、ユーザにとって都合が良いからである。具体的には、プリンタやインクタンクの名称などが詳細であり、ユーザに対しより丁寧な情報を提示することができるからである。
【0084】
しかしながら、SNMPを用いた通信は、ネットワーク環境やその通信状況によっては、応答速度が遅く通信に時間がかかってしまったり、結果的に情報を取得できなかったりする場合がある。よって、本実施形態では、SNMPをサポートするプリンタの場合は、SNMPの通信状態をドライバ04に確認させる。そして、正常な通信状態が確認できない場合は、SNMPをサポートするプリンタであっても、OSプリントシステム05のIPPバックエンド07に通信と保存を任せるようにする。ドライバを介さなければ、IPPバックエンド07はより高速に、確実な通信および保存処理を行うことができる。
【0085】
そして、以上の機能を実現させるため、本実施形態では、ステータス情報格納部11に保存されているインク残量保存パラメータ12の内容(Value)をドライバ04が書き換え可能とする。また、書き換え前の初期値に対応する情報すなわちプリンタがSNMPをサポートしているか否かを示す情報については、ドライバ04自身のメモリに予め格納しておく。
【0086】
図12は、インク残量取得ジョブが投入された場合に、本実施形態のドライバ04が、
図5のステップS26で実行するIPP接続用ステータス情報取得処理を説明するためのフローチャートである。
【0087】
本処理が開始されると、ドライバ04は、まずステップS300において、ドライバ04自身のメモリに格納されているSNMPサポート情報を取得する。ステップS301において、ドライバ04は、取得した情報に基づいて、通信対象のプリンタがSNMPをサポートしているか否かを判定する。
【0088】
ステップS301で、SNMPをサポートしていないと判定した場合、ドライバ04はステップS302に進み、IPPバックエンド07にNULLデータを送信した後、本処理を終了する。ステップS302におけるNULLデータの送信に伴い、IPPバックエンド07では、IPP応答モニタスレッドが起動される。つまり、IPPバックエンド07では、
図10のS84以降の処理と同様に、IPP応答の取得と、インク残量情報の取得及び保存が実行される。
【0089】
一方、ステップS301でSNMPをサポートしていると判定した場合、ドライバ04はステップS303に進み、PPDファイル10に保存されているインク残量保存パラメータを「False」に設定する。また、ステップS304で、ドライバ04は、SNMPの応答状況を判定するためのタイマのカウント値Cを初期化する(C=0)。
【0090】
続くステップS305〜ステップS307の工程は、第1の実施形態で説明した
図7のステップS44〜ステップS46の処理と同等である。すなわち、ドライバ04は、ステップS305でIPPバックエンド07に対しSNMP応答要求を送信し、ステップS306でNULLデータを送信し、更にステップS307でSNMP応答を受信する。
【0091】
ステップS308において、ドライバ04は、ステップS307で受信したSNMP応答結果が正常か否かを判定する。応答結果が正常ではない即ちエラーであると判定した場合はステップS313に進み、ドライバ04は、PPDファイル10のインク残量保存パラメータ12を「True」に書き換えて、本処理を終了する。IPPバックエンド07に対しては、既にステップS306でNULLデータが送信されているので、IPPバックエンド07ではIPP応答モニタスレッドが起動されている。つまり、IPPバックエンド07では、
図10のS84以降の処理と同様に、IPP応答の取得と、インク残量情報の取得及び保存が実行される。
【0092】
一方、ステップS308で応答結果が正常であると判定した場合、ドライバ04はステップS309でタイマのカウント値Cを取得し、ステップS310で取得したカウント値Cが閾値Tを超えているか否かを判定する。ステップS309において、C>Tと判定した場合、ドライバ04はステップS313に進み、PPDファイル10のインク残量保存パラメータ12を「True」に書き換えて、本処理を終了する。IPPバックエンド07に対しては、既にステップS306でNULLデータが送信されているので、IPPバックエンド07ではIPP応答モニタスレッドが起動されている。つまり、IPPバックエンド07では、
図10のS84以降の処理と同様に、IPP応答の取得と、インク残量情報の取得及び保存が実行される。
【0093】
ステップS310においてC≦Tと判定した場合、ドライバ04はステップS311に進み、ステップS307で受信した応答にインク残量情報が含まれているか否かを判定する。インク残量情報が含まれていないと判定した場合、ドライバ04はステップS305に戻り、SNMPを用いた通信を継続する。
【0094】
一方、ステップS311においてインク残量情報が含まれていると判定した場合、ドライバ04はステップS312に進み、取得した情報の中からインク残量情報を取り出してこれをOSプリントシステム05のステータス情報格納部11に保存する。以上で、本処理を終了する。
【0095】
本実施形態において、ステップS310でタイマのカウント値Cと比較するための閾値Tは、SNMP通信によってインク残量情報を取得するために許容できる最大の時間に設定されている。このような閾値は特に限定されるものではないが、例えば10秒程度に設定しておくことができる。すなわち、T=10秒の場合、SNMPを用いた通信を開始してからの時間Cが10秒を超えた場合は、SNMPを用いての通信は時間がかかりすぎると判定し、ドライバ04は、より高速で確実なIPPバックエンド07による単独処理に切り替える。すなわち、S313により通信が正常に行われていないと判定し、インク残量パラメータ12が「True」に書き換えられる。そして、IPP応答によりIPPバックエンド07はステータス情報を取得し、保存を行う。
【0096】
なお、ステップS313によってインク残量保存パラメータ12が「True」に書き換えられても、次に
図12の処理を行う際は、再びステップS303でインク残量保存パラメータ12は「False」に書き換えられ、SNMPを用いた通信が開始される。すなわち、ネットワークの状況によってSNMPを用いた通信の速度が安定しないような場合であっても、SNMPを用いた通信が正常に行える場合にはこれを優先し、ユーザに対しインク残量の状況を詳細且つ丁寧に表示することができる。
【0097】
以上説明したように、本実施形態によれば、SNMPを用いた通信を前提としながらも、その通信が正常に行われていない場合は、より高速で確実なIPPバックエンド07による単独通信に通信方法を切り替える。通信が正常に行われていない場合とは、例えば通信にエラーが発生した場合または通信時間がかかりすぎる場合である。これにより、ユーザは、ネットワーク接続されたプリンタのインク残量情報を、SNMP通信の状況に関わらず、高速且つ確実に確認することができる。
【0098】
(第4の実施形態)
既に説明したように、macOS環境下でネットワーク接続されたプリンタがSNMPをサポートしている場合、プリンタからステータス情報を取得する方法としては、以下の二つがある。すなわち、IPPバックエンドがドライバの介入を受けずにIPP応答を用いて行う方法と、ドライバがSNMPを用いて行う方法とがある。前者の場合、プリンタのステータス情報は高速且つ確実に取得できるが、ドライバによるサポートが無いため、インクの型番や名称などのローカライズ情報をユーティリティ画面で表示することが難しい。一方、後者の場合は、ドライバが介入し、IPPバックエンドが取得した情報に処理を加えることによって、ユーティリティ画面で詳細且つ丁寧な表示を行うことができるが、通信自体に時間がかかってしまうという課題がある。
【0099】
以上のことを踏まえ、本実施形態ではドライバが介入しない状態でIPPバックエンドにステータス情報を取得させ残量情報を即時に表示する工程と、ステータス情報を取得した後にドライバを介入させて、表示画面を整える工程とを用意する。また、以上の機能を実現させるため、本実施形態においても第3の実施形態と同様、ステータス情報格納部11に保存されているインク残量保存パラメータ12の内容(Value)をドライバ04が書き換え可能とする。また、書き換え前の初期値に対応する情報すなわちプリンタがSNMPをサポートしているか否かを示す情報については、ドライバ04自身のメモリに予め格納しておく。なお、本実施形態においても、第1の実施形態と同様、
図1および
図2で示したプリントシステムを用いるものとする。また、
図4で説明したユーティリティの処理と、
図7で説明したIPP接続用ステータス情報取得処理のフローチャート以外は、第1の実施形態と同様、
図5〜6、9および10で説明したフローチャートに従う。
【0100】
図13は、ユーザがインク残量を確認する場合に、本実施形態のユーティリティ03が実行する工程を示すフローチャートである。本処理は、
図3に示すインク残量表示画面70において、ユーザが表示ボタン74をクリックすることにより開始される。
【0101】
本処理が開始されると、ユーティリティ03は、ステップS411において、インク残量取得ジョブをOSプリントシステム05に送信する。ステップS420において、ユーティリティ03は、OSプリントシステム05のステータス情報格納部11に保存されているインク残量情報を取得する。そして、ステップS421において、ユーティリティ03はステップS420で取得したインク残量情報に基づいて、インク残量表示画面70を表示する。
【0102】
次に、ステップS422において、ユーティリティ03はOSプリントシステム05をアクセスしてインク残量取得ジョブの処理状態を取得し、更にステップS423に進みインク残量取得ジョブの処理は完了したか否かを判定する。ここで、インク残量取得ジョブはまだ完了していないと判定した場合は、ステップS420に戻り、再びステータス情報格納部11にアクセスしてインク残量情報を取得する。一方、ステップS422においてインク残量取得ジョブは完了したと判定した場合、本処理は終了する。
【0103】
このように、本実施形態のユーティリティ03は、ステータス情報格納部11に保存されている情報を取得する工程と、その情報を表示する工程とを、ステップS423でインク残量取得ジョブの処理が完了したと判定するまで繰り返す。すなわち、ユーティリティ03によって表示されるインク残量表示画面70は、インク残量取得ジョブの処理が完了したと判定されるまで、複数回更新される。
【0104】
図14は、インク残量取得ジョブが投入された場合に、本実施形態のドライバ04が、
図5のステップS26で実行するIPP接続用ステータス情報取得処理を説明するためのフローチャートである。
【0105】
本処理が開始されると、ドライバ04は、まずステップS400において、OSプリントシステム05のステータス情報格納部11をアクセスし、ここに記憶されているインク残量情報を削除する。次に、ドライバ04はステップS401に進み、ドライバ04自身のメモリに格納されているSNMPサポート情報を取得し、更にステップS402で、取得した情報に基づいて通信対象のプリンタがSNMPをサポートしているか否かを判定する。
【0106】
ステップS402で、SNMPをサポートしていないと判定した場合、ドライバ04はステップS403に進み、IPPバックエンド07にNULLデータを送信した後、本処理を終了する。ステップS403におけるNULLデータの送信に伴い、IPPバックエンド07ではIPP応答モニタスレッドが起動される。
【0107】
一方、ステップS402で通信対象のプリンタがSNMPをサポートしていないと判定した場合、ドライバ04はステップS404に進み、PPDファイル10に保存されているインク残量保存パラメータを「True」に設定する。更にステップS405に進み、NULLデータを送信する。
【0108】
ステップS406において、ドライバ04はステータス情報格納部11をアクセスして、インク残量情報を読み出す。この際、ステップS405におけるNULLデータの送信によってIPP応答モニタスレッドは起動されている。よって、ステップS406の段階で、既にIPPバックエンド07がインク残量情報をステータス情報格納部11に保存していれば、ドライバ04はその情報を取得することになる。IPPバックエンド07がインク残量情報をまだ保存していなければ、ドライバ04はヌル情報を取得することになる。
【0109】
続くステップS407において、ドライバ04は、ステップS406で取得したインク残量情報を確認する。そして、当該情報がIPPバックエンド07によって保存された情報でなければ即ちヌル情報であれば、ステップS406に戻り、再びステータス情報格納部11に保存されているインク残量情報の読み出しを行う。
【0110】
ステップS407でIPPバックエンド07によって保存されたインク残量情報が確認されると、ドライバ04はステップS408に進み、ステータス情報格納部11に保存されているインク残量保存パラメータ12を「True」から「False」に変更する。この工程により、ステータス情報格納部11への書き込みは、以後ドライバ04が実行することになる。
【0111】
続くステップS409〜ステップS411の工程は、第1の実施形態で説明した
図7のステップS44〜ステップS46の処理と同等である。すなわち、ドライバ04は、ステップS409でIPPバックエンド07に対しSNMP応答要求を送信し、ステップS410でNULLデータを送信し、更にステップS411でSNMP応答を受信する。
【0112】
ステップS412において、ドライバ04は、ステップS411で受信した応答にインク残量情報が含まれているか否かを判定する。インク残量情報が含まれていないと判定した場合、ドライバ04はステップS409に戻り、SNMPを用いた通信を継続する。
【0113】
一方、ステップS412においてインク残量情報が含まれていると判断した場合、ドライバ04はステップS413に進み、取得した情報の中からインク残量情報を取り出してこれをOSプリントシステム05のステータス情報格納部11に保存しする。ステップS413におけるインク残量情報の保存により、ステップS408でインク残量保存パラメータを「False」に書き換える前にIPPバックエンドが保存していた情報は、S412で取得したインク残量情報に上書きされる。以上で、本処理を終了する。
再度
図13を参照する。本実施形態のユーティリティ03は、ユーザが表示ボタン74をクリックした時から、ステータス情報格納部11からのインク残量情報の読み出しとインク残量表示画面70での表示を、ステップS423でインク残量取得ジョブが完了したと判断するまで繰り返す。このため、ユーティリティ03が読み出し(ステップS420)を行った時が、IPP応答モニタスレッドによるインク残量情報が保存された後で、且つSNMPを介してのインク残量情報が上書き保存される前であれば、前者のインク残量情報が表示される。
【0114】
ネットワーク接続されたプリンタにおいては、例えば個々のインクタンクの名称は(Cyan、Magenta、Yellow、Black)のように英語で管理されていることが多い。よって、IPPバックエンド07が、ステータス情報格納部11に直接保存したインク残量情報は、(Cyan、Magenta、Yellow、Black)と夫々のインク残量の関係が対応づけられた情報である。よって、ユーティリティ03がステップS421で表示する画面は、既に説明した
図3のようになる。
【0115】
但し、IPPバックエンド07が取得した情報の保存処理にドライバ04が介入すれば、ドライバ04はOSがサポートする日本語表記にタンクの名称を書き換えることができる。すなわち、ドライバ04は、Cyanをシアンに、Magentaをマゼンタに、Yellowをイエローに、Blackをブラックにそれぞれ変換した状態で、ステータス情報格納部11にインク残量情報を保存することができる。よって、ユーティリティ03は、ステップS421において、
図15に示す画面を表示できるようになる。
【0116】
ここでは、簡単のために4色のインクタンクの名称を例に説明したが、類似したインクの種類が更に多い場合には、手元のインクタンクに表示されている名称と、インク残量表示画面70で表示されている名称が異なっていると、ユーザの混乱を招く恐れがある。よって、ユーザに対しては、ドライバ04を介して詳細且つ丁寧な表示を行うことが好ましい。その一方で、高速で確実な情報表示も望まれる。
【0117】
本実施形態によれば、インク残量情報取得コマンドに対し迅速且つ正確に応答しておきながら、当該情報を段階的に詳細で丁寧な表示に調整していくことができる。
【0118】
(その他の実施形態)
以上では、ユーザが比較的頻繁に確認する項目としてインクタンクのインク残量を例に挙げ、ステータス情報取得ジョブではこれを検出し通知する場合について説明してきた。しかし、本発明はこのような形態に限定されるものではない。ステータス情報取得ジョブにおいて、検出し通知する項目としては、例えば、廃インクタンクの廃インク収容量や、バッテリー駆動するプリンタのバッテリー残量などとすることもできる。いずれにしても、ネットワーク接続されたプリンタのステータスに関わる情報の検出および通知が必要とされる環境であれば、その情報の内容によらず、本発明は効果的に機能させることができる。
【0119】
また、以上では、macOSがインストールされたPCと、ネットワーク接続されたプリンタを例に双方向通信を行う場合を例に説明してきたが、本発明はこのような形態に限定されるものではない。例えば、上記実施形態で使用したPCに相当するホストデバイスとプリンタデバイスとが一体的に構成されたプリント装置とすることもできる。
また、本発明は、上述の実施形態の1以上の機能を実現するプログラムをネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。この場合、記憶媒体から読み出されたプログラムコード自体が上述した実施形態の機能を実現することとなり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。プログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、磁気テープ、不揮発性のメモリカード、ROM、DVDなどを用いることができる。
【0120】
また、コンピュータが読み出したプログラムコードの指示に基づき、コンピュータ上で稼動しているOSなどが実際の処理の一部または全部を行い、その処理によって前述した実施例の機能が実現される場合も含まれることは言うまでもない。
【0121】
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書きこまれてもよい。そしてその後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も本発明に含まれることは言うまでもない。