情報分配処理プログラム、コンピュータ、情報分配処理方法、および情報分配処理システム
【課題】一つの情報処理部だけがデバイス情報を取得し、他の情報処理部がデバイス情報を取得できなくなるのを防止可能な情報分配処理プログラム、コンピュータ、情報分配処理方法、および情報分配処理システムを提供すること。
【解決手段】PC1において、情報分配部41は、各情報処理部43a〜43cからのコマンド送信要求に応じて、デバイス2へPJLコマンドを送信し、このコマンドに応じてデバイス2から提供されるデバイス情報をバッファ45a〜45cに格納する。一つの情報処理部43aからリード要求を受けた場合、情報処理部43aに対応するバッファ45aから読み出したデバイス情報を情報処理部43aへ送信する。その後、情報処理部43bからリード要求を受けても、情報分配部41は、情報処理部43bに対応するバッファ45bから読み出したデバイス情報を情報処理部43bへ送信することができる。
【解決手段】PC1において、情報分配部41は、各情報処理部43a〜43cからのコマンド送信要求に応じて、デバイス2へPJLコマンドを送信し、このコマンドに応じてデバイス2から提供されるデバイス情報をバッファ45a〜45cに格納する。一つの情報処理部43aからリード要求を受けた場合、情報処理部43aに対応するバッファ45aから読み出したデバイス情報を情報処理部43aへ送信する。その後、情報処理部43bからリード要求を受けても、情報分配部41は、情報処理部43bに対応するバッファ45bから読み出したデバイス情報を情報処理部43bへ送信することができる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、デバイスから取得したデバイス情報を複数の情報処理部へ分配するために利用される情報分配処理プログラム、コンピュータ、情報分配処理方法、および情報分配処理システムに関する。
【背景技術】
【0002】
従来、デバイスに関するデバイス情報をインターフェースを通じてデバイスから取得するとともに、そのデバイス情報を利用した情報処理を実施するためのプログラムが知られている(例えば、下記特許文献1参照)。
【0003】
下記特許文献1の場合、プリンタ状態管理プログラム3cは、ポート通信プログラム3eを通してプリンタ2cの情報を取得する処理、記憶領域3dにその情報を記憶させる処理、SNMP処理プログラム3bに対して情報を提供する処理などを実施するためのプログラムとなっている(特許文献1:段落[0072]および[図5]参照)。
【特許文献1】特開2000−293324号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
しかしながら、複数の処理を時分割で並列に実行可能な情報処理装置においては、上記のようなプログラムに従った情報処理を情報処理部が並列に複数機能する可能性があり、その場合、複数の情報処理部それぞれがデバイスから情報を取得しようとするため、デバイスが一度しか情報を提供しない場合、本来であればある情報処理部Aが取得すべき情報であっても、他の情報処理部Bが横取りしてしまうことがあり、上記情報処理部Aに必要な情報が渡らない、という問題が発生するおそれがあった。
【0005】
より具体的な例を挙げれば、デバイスが自身にとって都合のよいタイミングでデバイス情報を一度だけ用意し、このデバイス情報を、情報処理部が自身にとって都合のよいタイミングで取得するように構成されたシステムの場合、デバイスがデバイス情報を用意した後、最初にデバイス情報の取得を試みた情報処理部Bがデバイス情報を取得してしまうと、後からデバイス情報の取得を試みた情報処理部Aは、所期のデバイス情報を取得することができないことになる。
【0006】
本発明は、上記問題を解決するためになされたものであり、その目的は、デバイスが一度しか提供しないデバイス情報を複数の情報処理部が取得しようとした場合に、一つの情報処理部だけがデバイス情報を取得してしまい、他の情報処理部がデバイス情報を取得できなくなるのを防止可能な情報分配処理プログラム、コンピュータ、情報分配処理方法、および情報分配処理システムを提供することにある。
【課題を解決するための手段】
【0007】
以下、上記目的を達成するため、本発明において採用した特徴的構成について説明する。
まず、本発明の情報分配処理プログラムは、デバイスに関する情報であるデバイス情報に基づく情報処理を実行する複数の情報処理部と、前記情報処理部それぞれが前記デバイスからデバイス情報を取得するために利用されるインターフェースと、を備える情報処理装置上の、前記情報処理部のいずれかから送信されるコマンド送信要求を受信するコマンド送信要求受信手段、前記コマンド送信要求受信手段によって受信したコマンド送信要求に対応するコマンドを、前記インターフェースを通じて前記デバイスへ送信するコマンド送信手段、前記コマンドに対する応答として前記デバイスから提供される前記デバイス情報を取得するデバイス情報取得手段、および前記デバイス情報取得手段によって取得した前記デバイス情報を、前記複数の情報処理部へと提供可能なデバイス情報提供手段としてコンピュータを機能させることを特徴とする。
【0008】
このように構成された情報分配処理プログラムに従った処理をコンピュータに実行させることにより、コンピュータを上記各手段として機能させれば、デバイスから一度しか受信できないデバイス情報であっても、そのデバイス情報を複数の情報処理部へ提供することができ、各情報処理部に適切な情報処理を実施させることができる。
【0009】
なお、本発明の情報分配処理プログラムは、さらに、以下の述べるような構成を備えていてもよい。
まず、本発明の情報分配処理プログラムは、さらに、前記コマンド送信要求受信手段によって受信したコマンド送信要求に対応するコマンドを示すコマンド情報を、前記コンピュータが備える記憶手段に記憶させるコマンド情報記憶制御手段、および前記記憶手段に記憶されたコマンド情報に基づいて、前記デバイス情報取得手段によって取得した前記デバイス情報が、前記コマンド情報の示すコマンドに対応するデバイス情報であるか否かを判定する判定手段として、前記コンピュータを機能させるように構成されていてもよく、この場合、前記デバイス情報提供手段は、前記判定手段によって前記コマンド情報の示すコマンドに対応するデバイス情報であると判定されたデバイス情報のみを、前記複数の情報処理部へと提供可能な手段として機能するように構成されていると好ましい。
【0010】
このように構成された情報分配処理プログラムに従った処理をコンピュータに実行させることにより、コンピュータを上記各手段として機能させれば、デバイスに送信したコマンドに対応するデバイス情報以外の情報が、何らかの原因でデバイスから取得できてしまった場合でも、そのような情報を各情報処理部へ提供しないので、コンピュータには無駄な情報を各情報処理部へ提供するための負荷がかからなくなり、各情報処理部でも無駄な情報を処理するための負荷がかからなくなる。
【0011】
なお、本発明の情報分配処理プログラムは、上述の如く構成する以外にも、例えば、デバイスに送信したコマンドに対応するデバイス情報以外の情報が、何らかの原因でデバイスから取得できてしまった場合に、そのような情報をも各情報処理部へ提供するように構成することができる。ただし、この場合は、コマンドとは無関係な情報まで各情報処理部へ提供されることになるので、各情報処理部は、コマンドに対する応答として返されたデバイス情報なのかコマンドとは無関係な情報なのかを判断して、各情報処理部において必要な情報を選別し、不要な情報は破棄するなど、情報処理部側での適切な対処が必要である。
【0012】
また、本発明の情報分配処理プログラムは、さらに、前記コマンド送信要求受信手段によって受信したコマンド送信要求の送信元となる前記情報処理部を示す送信元情報を、前記コンピュータが備える記憶手段に記憶させる送信元情報記憶制御手段、および前記判定手段によって前記コマンド情報の示すコマンドに対応すると判定されたデバイス情報の提供先とすべき前記情報処理部を、前記記憶手段に記憶された送信元情報に基づいて前記複数の情報処理部の中から選択する選択手段として、前記コンピュータを機能させるように構成されていてもよく、この場合、前記デバイス情報提供手段は、前記判定手段によって前記コマンド情報の示すコマンドに対応するデバイス情報であると判定されたデバイス情報のみを、前記選択手段によって選択された前記情報処理部へと提供可能な手段として機能するように構成されていると好ましい。
【0013】
このように構成された情報分配処理プログラムに従った処理をコンピュータに実行させることにより、コンピュータを上記各手段として機能させれば、コマンドを送信した情報処理部へのみ、そのコマンドに対する応答となるデバイス情報が提供されるので、コンピュータにはデバイス情報を要求していない情報処理部へデバイス情報を提供するための負荷がかからなくなり、各情報処理部でも要求していないデバイス情報を処理するための負荷がかからなくなる。
【0014】
なお、本発明の情報分配処理プログラムは、上述の如く構成する以外にも、例えば、コマンドを送信した情報処理部であるか否かを判断することなく、すべての情報処理部へデバイス情報を提供するように構成することができる。ただし、この場合は、コマンド送信要求を発していない情報処理部にもデバイス情報が提供されることになるので、各情報処理部は、自身が発したコマンドに対する応答として返されたデバイス情報なのか否かを判断して、必要なデバイス情報であれば利用し、不要なデバイス情報であれば破棄するなど、情報処理部側での適切な対処が必要である。
【0015】
また、本発明の情報分配処理プログラムにおいて、前記デバイス情報提供手段は、前記デバイス情報取得手段によって取得した前記デバイス情報を、前記コンピュータが備える記憶手段内に確保された記憶領域に格納することにより、前記デバイス情報を取得するタイミングとは非同期で、前記記憶領域に格納されたデバイス情報を、前記複数の情報処理部へと提供可能な手段として機能するように構成されていると好ましい。
【0016】
このように構成された情報分配処理プログラムに従った処理をコンピュータに実行させることにより、コンピュータを上記各手段として機能させれば、デバイス情報を記憶領域に一旦格納するので、デバイス情報を取得するタイミングとデバイス情報を提供するタイミングを非同期とすることができ、情報処理部側でデバイス情報が必要となったときに、情報処理部に対してデバイス情報を提供することができる。
【0017】
また、複数の情報処理部から同じコマンドの送信要求があった場合には、最初にデバイス情報の取得を試みた情報処理部に対して提供したデバイス情報が既に記憶領域中に格納されているので、後からデバイス情報の取得を試みた他の情報処理部に対しては、迅速にデバイス情報を提供することもできる。
【0018】
情報処理部側でデバイス情報が必要となったことは、情報処理部側からの通知で判断し、その通知を受けたときに通知に対する応答として情報処理部側へデバイス情報を送信してもよいし、デバイス情報を格納する記憶領域を、情報処理部側からもアクセス可能な共有メモリ等によって構成し、情報処理部側でデバイス情報が必要となったときに、情報処理部側からデバイス情報を自由に読み出せるように構成してもよい。
【0019】
なお、本発明の情報分配処理プログラムは、上述の如く構成する以外にも、例えば、デバイス情報取得手段によってデバイス情報を取得したら、その取得に同期して直ちにデバイス情報提供手段がデバイス情報を情報処理部へと提供するように構成することができる。ただし、この場合は、情報処理部がデバイス情報を必要としているか否かを問わず、デバイス情報が情報処理部側へ提供されることになるので、提供されたデバイス情報を情報処理部が直ちに処理するか、提供されたデバイス情報を後から処理できるように、情報処理部側で用意した記憶領域にデバイス情報を保存するなど、情報処理部側での適切な対処が必要である。
【0020】
また、本発明の情報分配処理プログラムにおいて、前記デバイス情報提供手段は、前記デバイス情報取得手段によって取得した前記デバイス情報を前記記憶領域に格納する際、前記コマンド送信要求受信手段によって受信したコマンド送信要求の送信元となる前記情報処理部毎に確保された前記記憶領域に格納する手段として機能するように構成されていると好ましい。
【0021】
このように構成された情報分配処理プログラムに従った処理をコンピュータに実行させることにより、コンピュータを上記各手段として機能させれば、デバイス情報を情報処理部毎に確保された記憶領域に格納するので、複数の情報処理部がそれぞれ記憶領域に格納されたデバイス情報を利用する際に、一つの記憶領域で問題が生じても、他の記憶領域には悪影響を及ぼすことがない。
【0022】
あるいは、本発明の情報分配処理プログラムにおいて、前記デバイス情報提供手段は、前記デバイス情報取得手段によって取得した前記デバイス情報を記憶領域に格納する際、異なる前記コマンド毎に確保された前記記憶領域に格納する手段として機能するように構成されていると好ましい。
【0023】
このように構成された情報分配処理プログラムに従った処理をコンピュータに実行させることにより、コンピュータを上記各手段として機能させれば、デバイス情報が異なるコマンド毎に確保された記憶領域に格納されるので、同じコマンドに対する応答となるプリンタ情報を複数の情報処理部へ提供する場合に、情報処理部毎にプリンタ情報を記憶するものとは異なり、同じプリンタ情報を重複して記憶領域に記憶しなくても済むので、記憶領域の使用量を削減することができる。
【0024】
次に、本発明のコンピュータは、デバイスに関する情報であるデバイス情報に基づく情報処理を実行する複数の情報処理部と、前記情報処理部それぞれが前記デバイスからデバイス情報を取得するために利用されるインターフェースと、を備える情報処理装置上の、前記情報処理部のいずれかから送信されるコマンド送信要求を受信するコマンド送信要求受信手段、前記コマンド送信要求受信手段によって受信したコマンド送信要求に対応するコマンドを、前記インターフェースを通じて前記デバイスへ送信するコマンド送信手段、前記コマンドに対する応答として前記デバイスから提供される前記デバイス情報を取得するデバイス情報取得手段、および前記デバイス情報取得手段によって取得した前記デバイス情報を、前記複数の情報処理部へと提供可能なデバイス情報提供手段を備えたことを特徴とする。
【0025】
このように構成されたコンピュータは、上記請求項1に記載の情報分配処理プログラムに従った処理を実行するコンピュータにおいて機能する各手段と、同等の機能を持つ各手段を備えているので、デバイスから一度しか受信できないデバイス情報であっても、そのデバイス情報を複数の情報処理部へ提供することができ、各情報処理部に適切な情報処理を実施させることができる。
【0026】
なお、本発明のコンピュータにおいても、さらに、上記請求項2〜請求項6のいずれかに記載の情報分配処理プログラムに従った処理を実行するコンピュータにおいて機能する各手段と、同等の機能を持つ各手段を備えていると好ましい。このように構成すれば、これらのコンピュータは、それぞれ上記請求項2〜請求項6のいずれかに記載の情報分配処理プログラムに従った処理を実行するコンピュータと同等な作用、効果を奏するものとなる。
【0027】
次に、本発明の情報分配処理方法は、デバイスに関する情報であるデバイス情報に基づく情報処理を実行する複数の情報処理部と、前記情報処理部それぞれが前記デバイスからデバイス情報を取得するために利用されるインターフェースと、を備える情報処理装置上の、前記情報処理部のいずれかから送信されるコマンド送信要求を受信するコマンド送信要求受信手順、前記コマンド送信要求受信手順において受信したコマンド送信要求に対応するコマンドを、前記インターフェースを通じて前記デバイスへ送信するコマンド送信手順、前記コマンドに対する応答として前記デバイスから提供される前記デバイス情報を取得するデバイス情報取得手順、および前記デバイス情報取得手順において取得した前記デバイス情報を、前記複数の情報処理部へと提供するデバイス情報提供手順を備えることを特徴とする。
【0028】
このように構成された情報分配処理方法は、上記請求項1に記載の情報分配処理プログラムに従った処理において実行される手順と同等な手順でコマンドやデバイス情報を含む各種情報を処理する方法なので、デバイスから一度しか受信できないデバイス情報であっても、そのデバイス情報を複数の情報処理部へ提供することができ、各情報処理部に適切な情報処理を実施させることができる。
【0029】
なお、本発明の情報分配処理方法においても、さらに、上記請求項2〜請求項6のいずれかに記載の情報分配処理プログラムに従った処理において実行される手順と同等な手順を備えていると好ましい。このように構成すれば、これらの情報分配処理方法は、それぞれ上記請求項2〜請求項6のいずれかに記載の情報分配処理プログラムに従って実行される情報分配処理方法と同等な作用、効果を奏するものとなる。
【0030】
次に、本発明の情報分配処理システムは、デバイスと、前記デバイスとデータ通信可能なコンピュータとを、少なくとも備えるとともに、前記コンピュータ自体が情報処理装置として機能するように構成されるか前記コンピュータとは別の情報処理装置が前記コンピュータとデータ通信可能に構成されたシステムであり、前記コンピュータは、デバイスに関する情報であるデバイス情報に基づく情報処理を実行する複数の情報処理部と、前記情報処理部それぞれが前記デバイスからデバイス情報を取得するために利用されるインターフェースと、を備える前記情報処理装置上の、前記情報処理部のいずれかから送信されるコマンド送信要求を受信するコマンド送信要求受信手段、前記コマンド送信要求受信手段によって受信したコマンド送信要求に対応するコマンドを、前記インターフェースを通じて前記デバイスへ送信するコマンド送信手段、前記コマンドに対する応答として前記デバイスから提供される前記デバイス情報を取得するデバイス情報取得手段、および前記デバイス情報取得手段によって取得した前記デバイス情報を、前記複数の情報処理部へと提供可能なデバイス情報提供手段を備えることを特徴とする。
【0031】
このように構成された情報分配処理システムが備えるコンピュータは、上記請求項1に記載の情報分配処理プログラムに従った処理を実行するコンピュータにおいて機能する各手段と、同等の機能を持つ各手段を備えているので、デバイスから一度しか受信できないデバイス情報であっても、そのデバイス情報を複数の情報処理部へ提供することができ、各情報処理部に適切な情報処理を実施させることができる。
【0032】
なお、本発明の情報分配処理システムにおいても、各システムが備えるコンピュータは、さらに、上記請求項2〜請求項6のいずれかに記載の情報分配処理プログラムに従った処理を実行するコンピュータにおいて機能する各手段と、同等の機能を持つ各手段を備えていると好ましい。このように構成すれば、これら各情報分配処理システムが備えるコンピュータは、それぞれ上記請求項2〜請求項6のいずれかに記載の情報分配処理プログラムに従った処理を実行するコンピュータと同等な作用、効果を奏するものとなる。
【発明を実施するための最良の形態】
【0033】
次に、本発明の実施形態について、いくつかの具体的な例を挙げて説明する。
[第1実施形態]
まず、第1実施形態について説明する。
【0034】
図1は、パーソナルコンピュータ1(以下、PC1という)とデバイス2とを備えてなるシステム全体の構成を示した概略構成図である。本実施形態において例示するデバイス2は、プリンタ機能、イメージスキャナ機能、コピー機能、ファクシミリ機能、および電話機能を兼ね備えた複合機である。
【0035】
[PCの構成]
PC1は、図1に示すように、CPU11、ROM12、RAM13、ハードディスク装置14(以下、HDD14という)、操作部15、表示部16、およびUSB(Universal Serial Bus)インターフェース17(以下、USB I/F17という)などを備えている。
【0036】
CPU11は、ROM12やRAM13に記憶されたプログラムに従って、PC1各部に対する制御および各種演算を実行する装置である。
ROM12は、PC1の電源スイッチを切っても記憶内容を保持可能な記憶装置で、BIOS(Basic Input Output System)や通常であれば更新されない読み出し用のデータ等を記憶している。
【0037】
RAM13は、CPU11から直接アクセスされるメインメモリ等として利用される記憶装置で、このRAM13には、OS(Operating System)や各種アプリケーションなどのソフトウェアがHDD14から読み込まれるようになっている。
【0038】
HDD14は、OS、各種アプリケーションプログラム、および各種データファイルを保存しておくための装置である。
操作部15は、利用者からの各種指示を入力するための入力装置であり、例えば、キーボードや各種ポインティングデバイス(例えば、マウス)等によって構成される。
【0039】
表示部16は、各種情報を利用者に提示するための出力装置であり、例えば、カラー画像を表示可能な液晶ディスプレイ等によって構成される。
USB I/F17は、USB規格準拠のシリアルインターフェースで、このUSB I/F17には、様々なデバイス(例えば、プリンタ、キーボード、マウス、スキャナ、スピーカー、各種ストレージデバイスなど)を接続することができるが、本実施形態において、USB I/F17にはデバイス2が接続されている。
【0040】
また、本実施形態において、PC1にはマルチタスク機能を備えたOSが搭載されている。このような機能を有するOSの具体例としては、例えば、Windows(登録商標)、Linux(登録商標)、MacOS(登録商標)などを挙げることができる。
【0041】
PC1が備えるCPU11は、OSのマルチタスク機能により、複数のソフトウェアに基づく処理を時分割で並列に実行することができ、これにより、後から詳述する複数の情報処理部や情報分配部がPC1上で機能するようになっている。また、PC1上では、OSが備える標準機能として、上述のUSB I/F17を介してデバイスとの通信を行う機能を実現するUSBコントローラや、デバイス2へ出力する印刷データを印刷ジョブとして管理する印刷スプーラなどが機能するようになっている。
【0042】
なお、OSによって提供されるこれらの各種機能そのものは公知なので、ここでの詳細な説明は省略するが、以下の説明においては、PC1が、Windows(登録商標)によって提供される各種機能を有するとの前提で説明を続ける。
【0043】
[デバイスの構成]
デバイス2は、CPU21、ROM22、RAM23、ハードディスク装置24(以下、HDD24という)、操作キー25、表示パネル26、USB I/F27、不揮発性RAM28、印字部29、読み取り部30、およびモデム31などを備えている。
【0044】
CPU21は、ROM22に記憶されている制御プログラムに従ってデバイス2各部の制御および各種演算を実行する装置である。
ROM22は、デバイス2の電源スイッチを切っても記憶内容を保持可能な記憶装置で、上記制御プログラムの他、通常であれば更新されない読み出し用の各種データを記憶している。
【0045】
RAM23は、CPU21から直接アクセスされるメインメモリ等として利用される記憶装置で、CPU21が処理中に算出する各種データなどが一時的にRAM23に記憶されるようになっている。
【0046】
HDD24は、ファクシミリ機能により送受信する画像、イメージスキャナ機能により読み取った画像、プリンタ機能により印刷する画像など、比較的サイズが大きい画像データを記憶する装置である。
【0047】
操作キー25は、利用者がマニュアル操作でデバイス2に対して指令を与える場合に操作する入力装置である。
表示パネル26は、小型液晶ディスプレイによって構成された装置で、デバイス2の設定や状態などの情報を表示できるようになっている。
【0048】
USB I/F27は、USB規格準拠のシリアルインターフェースで、このUSB I/F27を利用することにより、PC1との間でデータ通信を実行できるようになっている。
【0049】
不揮発性RAM28は、このデバイス2に関する設定等、電力供給が断たれたときにも消失させたくないデータを記憶する記憶装置である。
印字部29は、シート状の媒体(例えば記録用紙)に対する印刷を実行可能な装置で、プリンタ機能による印刷データの印刷、ファクシミリ機能による受信画像の印刷、コピー機能によるコピー画像の印刷等を行う際に作動する。
【0050】
読み取り部30は、自動原稿送り装置(図示略)にセットされた原稿またはフラットベッドのコンタクトガラス上に置かれた原稿から画像を読み取り可能な装置で、イメージスキャナ機能による画像の読み取り、ファクシミリ機能による送信画像の読み取り等を行う際に作動する。
【0051】
モデム31は、デバイス2側で作成されたデジタルデータを音声信号に変換して公衆回線側に送信したり、公衆回線側から受信した音声信号をデジタルデータに変換してデバイス2側で処理できるようにするための装置で、ファクシミリ機能による画像の送受信、電話機能による通話を行う際に作動する。
【0052】
[PCによるデバイス情報取得方法の概要]
次に、PC1によるデバイス情報取得方法の概要について説明する。
PC1が備えるCPU11は、上述した通り、複数のソフトウェアに基づく処理を時分割で並列に実行することができ、これにより、図2に示す情報分配部41や複数の情報処理部43a〜43cなどが、PC1上で機能するようになっている。
【0053】
これらのうち、情報分配部41はサーバーとして機能、複数の情報処理部43a〜43cはクライアントとして機能し、各情報処理部43a〜43cからの要求に応じて、情報分配部41がデバイス2からデバイス情報を取得するとともに、取得したデバイス情報を、各情報処理部43a〜43cからの要求に応じて、情報分配部41が各情報処理部43a〜43cへ提供する。そして、情報処理部43a〜43cそれぞれが、デバイス情報を利用して各種情報処理を行っている。情報処理部43a〜43cが行う情報処理の具体例としては、例えば、取得したデバイス情報に基づいてデバイス2の状態をほぼリアルタイムで表示部16に表示するステータスモニターとしての処理、あるいは、取得したデバイス情報に基づいてデバイス2のシリアル番号やファームウェアヴァージョン等の情報を表示する処理などを挙げることができる。なお、本実施形態では、3つの情報処理部43a〜43cが例示してあるが、情報処理部は並列にいくつ機能してもよい。また、各情報処理部が処理を開始するタイミングや処理を終了するタイミング等は任意であり、各情報処理部毎に独立したタイミングで構わない。
【0054】
一方、デバイス2は、PC1側からの要求に応じて、デバイス2に関する情報であるデバイス情報をPC1に対して提供する機能を備えている。本実施形態の場合、デバイス2は複合機なので、デバイス情報としては、例えば、オンライン、オフラインといった「デバイスの状態に関する情報」、用紙サイズ毎の印刷枚数あるいは総印刷枚数といった「使用頻度に関する情報」、ドラム交換時期などの「交換部品の使用度合に関する情報」、トナーないしインク残量や記録用紙残量といった「消耗品の消耗度合に関する情報」、紙詰まり回数といった「異常の発生回数に関する情報」などが提供される。これらのデバイス情報のうち、どれを提供するかは、PC1側から送信されてくるコマンドにより指定される。
【0055】
本実施形態において、PC1がデバイス2に対してデバイス情報を要求する際には、PC1からデバイス2に対してPJLコマンドを送信する。PJL(Printer Job Language;プリンタジョブ言語)は、プリンタが備える各種機能を制御するために用意されたコマンド言語で、Hewlett-Packard社において開発され、その後他社でも採用された周知のものである。
【0056】
PC1からデバイス2へPJLコマンドを送信する際には、PC1からデバイス2へ印刷データを出力する場合と同等の処理がPC1において実行される。具体的には、PC1上で機能する情報処理部43a〜43cが、情報分配部41に対してコマンド送信要求を送信すると、このコマンド送信要求に応じて情報分配部41がPJLコマンドを出力する。情報分配部41が出力したPJLコマンドは、プリンタドライバ経由で印刷スプーラに引き渡され、印刷スプーラは、受け取ったPJLコマンドを印刷ジョブとして処理する。その結果、PJLコマンドは、USB I/F17を通じてデバイス2へと出力されることになる。
【0057】
デバイス2では、通常の印刷データと同様にPJLコマンドを受信するが、受信したデータのヘッダ情報からPJLコマンドであることを認識し、その内容を解析する。その解析の結果、デバイス2が応答可能なPJLコマンドであった場合は、不揮発性RAM28に蓄積されているデバイス情報を読み出して、そのデバイス情報をPC1へと送信する。
【0058】
PC1では、情報分配部41がデバイス2から返されるデバイス情報をリードバックする。具体的には、デバイス2の場合、USB I/F17を介して接続されているので、情報分配部41が情報の受信を行い、受信した情報量が0(ゼロ)であった場合には再び情報の受信を繰り返し、その繰り返し処理によって情報を取得する。何らかのデータを受信した場合は、そのデータが所期のデバイス情報であるかどうかをチェックし、所期のデバイス情報でない場合は、さらに受信処理をやり直し、最終的に所期のデバイス情報を取得することになる。
【0059】
デバイス情報を取得した情報分配部41は、情報処理部43a〜43cそれぞれに対応付けて用意されたバッファ45a〜45cにデバイス情報を格納する。すなわち、バッファ45a〜45cには、同じ内容のデバイス情報が格納される。
【0060】
そして、情報分配部41が情報処理部43a〜43cのいずれか(例えば、情報処理部43a)からのリード要求を受けた場合、情報分配部41は、要求元の情報処理部(例えば、情報処理部43a)に対応するバッファ(例えば、バッファ45a)に格納されたデバイス情報を、要求元の情報処理部(例えば、情報処理部43a)に対して送信する。
【0061】
その結果、要求元の情報処理部(例えば、情報処理部43a)は、デバイス情報を取得することができるので、取得したデバイス情報に基づく情報処理(例えば、デバイス2の状態を表示部16に表示する処理等)を実行することができる。
【0062】
さて、以上のような仕組みにより、PC1とデバイスとの間では、PJLコマンドの送受信およびデバイス情報の送受信が行われるが、デバイス2は、PC1側からの要求に応じてデバイス情報を提供するものの、情報処理部43a〜43cのいずれが要求元であるのかを認識する仕組みにはなっていない。そのため、PC1側からのリードバックを受ければ、その時点でデバイス2が要求されていたすべてのデバイス情報をPC1側へ提供する。このような仕組みを採用しているため、各情報処理部43a〜43cそれぞれがデバイス情報の取得要求を発して、それらに対する応答として返すべきデバイス情報をデバイス2が用意しても、例えば、情報処理部43aが独自にデバイス2からのリードバックを行ってしまうと、他の情報処理部43b,43cに送信されるべきデバイス情報まで情報処理部43aに送信されてしまい、送信済みのデバイス情報は、デバイス2の送信バッファ内から消されてしまう。このような状況になった場合、その後、他の情報処理部43b,43cがデバイス2からのリードバックを行ったとしても、他の情報処理部43b,43cでは、必要なデバイス情報を受け取れないという事態を招く。
【0063】
上記情報分配部41は、こうした事態が発生するのを防止するために設けられたものである。具体例を交えて説明すると、例えば、各情報処理部43a〜43cそれぞれがデバイス情報の取得要求を発した場合、それらに対する応答として返すべきデバイス情報をデバイス2が用意するが、情報分配部41は、代表してデバイス2からのリードバックを行い、取得したデバイス情報を複数のバッファ45a〜45cに複製する。そして、各情報処理部43a〜43cは、独自にデバイス2からのリードバックを行わず、必ず情報分配部41からデバイス情報の提供を受ける。ここで、例えば、情報処理部43aが情報分配部41からデバイス情報の提供を受けた場合、送信済みのデバイス情報はバッファ45a内から消されてしまう。しかし、その後も、バッファ45b,45c内には、複製されたデバイス情報が残っているので、他の情報処理部43b,43cは、情報分配部41からデバイス情報の提供を受けることができるのである。
【0064】
[情報分配部における主処理]
次に、上記のような情報分配部41の機能を実現するため、情報分配部41において実行される主処理について、図3のフローチャートに基づいて説明する。この処理は、情報分配部41を機能させたい時点で開始されていればよい処理であり、例えば、PC1の起動に伴って開始される処理となっていればよい。
【0065】
この処理を開始すると、情報分配部41(正確には、情報分配部41として機能しているCPU11;以下、単に情報分配部41という)は、まずクライアントとなる情報処理部43a〜43cからの要求待ちになる(S105)。ここで、情報処理部43a〜43cのいずれかから何らかの要求があるとS105の処理を抜け、続いて、情報分配部41は、新規クライアント追加要求か否かを判断する(S110)。
【0066】
S110の処理において、新規クライアント追加要求であった場合(S110:YES)、情報分配部41は、要求元となったクライアントのIDをRAM13に記憶させる(S115)。このIDは、新規クライアント追加要求ごとに情報分配部41によりユニークな値が生成されるものである。このIDは、このクライアントからの追加要求終了時に、後述するS122の処理により、戻り値としてクライアントに渡される。以後クライアントは、後述する別の要求(クライアント削除要求、新規コマンド送信要求、デバイス情報呼び出し情報など)を発行する際に、このIDを指定することにより、その処理対象が自分であることを情報分配部41に知らせる。図2に示すように、クライアントである情報処理部43a〜43cには、それぞれユニークなID(図2に示した例では、AP1〜AP3)が付与されて、例えば、情報処理部43aが新規クライアント追加要求を行った場合を例に挙げれば、その追加要求中にはID:AP1が含まれているので、S115の処理では、ID:AP1を記憶する。以後は、クライアントからの要求中にID:AP1が含まれていれば、その要求が情報処理部43aからの要求であることを、情報分配部41側で認識できるようになる。そして、S115の処理を終えたら、要求元となったクライアントに対応するバッファを確保する(S120)。S120の処理で確保されるバッファは、図2に示したバッファ45a〜45cに相当するものであり、例えば、情報処理部43aが新規クライアント追加要求を行った場合を例に挙げれば、S120の処理によりバッファ45aが確保されることになる。そして、S120の処理を終えたら、上述したIDを戻り値としてクライアントに返してから(S122)、S105の処理へと戻り、再びS105以降の処理を繰り返す。なお、このバッファは、先のS115の処理により、生成・記憶されたIDと関連づけられて管理される。すなわちIDが与えられれば、対応するバッファが特定できるように管理される。
【0067】
さて一方、上記S110の処理において、新規クライアント追加要求ではなかった場合(S110:NO)、続いて、情報分配部41は、クライアント削除要求か否かを判断する(S125)。
【0068】
S125の処理において、クライアント削除要求であった場合(S125:YES)、情報分配部41は、要求元となったクライアントに対応するバッファを削除する(S130)。この際、クライアントはS115の処理で自分に与えられたIDを指定して、この削除要求を発行する。情報分配部41は、その指定されたIDに対応するバッファを削除するのである。例えば、情報処理部43aが新規クライアント追加要求を行った場合を例に挙げれば、S130の処理によりバッファ45aが削除されることになる。そして、S130の処理を終えたら、S105の処理へと戻り、再びS105以降の処理を繰り返す。
【0069】
一方、上記S125の処理において、クライアント削除要求ではなかった場合(S125:NO)、情報分配部41は、新規コマンド送信要求であるか否かを判断する(S135)。本実施形態においては、各情報処理部43a〜43cからPJLコマンドを含むコマンド送信要求がクライアントを示すIDとともに送信されてくる。ただし、これは、各情報処理部43a〜43cからPJLコマンドを示すPJL識別子を含むコマンド送信要求を送信するとともに、送信されて期したPJL識別子に基づいて、情報分配部41側でPJL識別子に対応するPJLコマンドを用意するようにしてもよい。
【0070】
S135の処理において、新規コマンド送信要求であった場合(S135:YES)、情報分配部41は、送信要求されたPJLコマンドをスプーラ経由でUSB I/F17を通じてデバイス2へ送信するとともに、その送信要求されたPJLコマンドを前記IDと関連付けてRAM13に記憶させる(S140)。なお、S140の処理でRAM13に記憶させたPJLコマンドは、後述するS215の判断処理において参照されることになる。そして、S140の処理を終えたら、S105の処理へと戻り、再びS105以降の処理を繰り返す。
【0071】
一方、S135の処理において、新規コマンド送信要求ではなかった場合(S135:NO)、本実施形態では、クライアントからデバイス情報のリード要求を受けたものと判断する。すなわち、新規クライアント追加要求、クライアント削除要求、および新規コマンド送信要求のいずれでもない要求としては、デバイス情報リード要求しか存在しないとの前提で処理を進めるように構成されている。この場合、情報分配部41は、クライアントが付与したIDに基づいて要求元となったクライアントに対応するバッファをサーチし、そのバッファ内に記憶されたデバイス情報(後述する常駐スレッド処理により記憶されたもの)を読み出して(S145)、読み出したデバイス情報を要求元となったクライアントに送信する(S150)。例えば、情報処理部43aからデバイス情報のリード要求を受けた場合を例に挙げれば、S145の処理によりバッファ45aからデバイス情報が読み出され、そのデバイス情報が、S145の処理によってクライアントである情報処理部43aに送信されることになる。なお、S145の処理により、バッファから読み出されるデバイス情報は、本処理と並列に実行される常駐スレッド処理によりデバイス2から読み出されてバッファに格納されたものであるが、この常駐スレッド処理の詳細については後述する。
【0072】
そして、S150の処理を終えたら、送信分のデバイス情報をバッファから削除して(S155)、S105の処理へと戻り、再びS105以降の処理を繰り返す。
[情報分配部における常駐スレッド処理]
次に、情報分配部41において主処理と並列に実行される常駐スレッド処理について、図4のフローチャートに基づいて説明する。
【0073】
この処理を開始すると、情報分配部41は、デバイス2よりデバイス情報の読み取りを行う(S205)。ここで、まだデバイス2に対してPJLコマンドが送信されていない場合など、デバイス2側がデバイス情報を送信できる状態にない場合は、S205の処理で読み取り待ちになり、何らかの情報を読み取ったらS205の処理を抜ける。
【0074】
続いて、情報分配部41は、ループ処理にてすべてのクライアントを順に処理するため、未処理のクライアントに対応するIDの中から、処理対象とするクライアントに対応する1つのIDを選ぶ(S210)。このS210の処理において、未処理のクライアントに対応するIDとは、上記S115の処理で記憶されたすべてのIDのうち、S210の処理でまだ選ばれたことがないIDである。
【0075】
S210の処理を終えたら、情報分配部41は、S205の処理で読み取った情報が、処理対象とするクライアント(=S210の処理で選んだIDに対応するクライアント)から送信要求されたコマンドの返答か否かを判断する(S215)。クライアントから送信要求されたコマンドは、上述したS140の処理によりRAM13に記憶されている。したがって、S215の処理では、S140の処理でRAM13に記憶されたコマンドと、S205の処理で読み取った情報とを対比することにより、所期のデバイス情報であるかどうかを判断することができる。
【0076】
S215の処理において、処理対象とするクライアントから送信要求されたコマンドの返答ではなかった場合(S215:NO)、S210の処理へと戻り、S210以降の処理を繰り返す。
【0077】
一方、S215の処理において、処理対象とするクライアントから送信要求されたコマンドの返答であった場合は(S215:YES)、S210の処理で選んだIDに対応するバッファに十分な空き領域があるか否かを判断する(S220)。そして、バッファに十分な空き領域がない場合は(S220:YES)、古いデバイス情報を捨ててバッファ内の領域を空ける(S225)。一方、バッファに十分な空き領域がある場合は(S220:NO)、S225の処理をスキップする。
【0078】
こうしてS220の処理またはS225の処理を終えたら、続いて、情報分配部41は、S205の処理で読み取ったデバイス情報を、S210の処理で選んだIDに対応するバッファに追記書き込みする(S230)。このS230の処理により、バッファ45a〜バッファ45cにはデバイス情報が格納され、このデバイス情報が上述したS145の処理によってバッファ45a〜バッファ45cから読み出されることになる。その後、情報分配部41は、S140の処理で記憶された対応情報を消去する(S232)。このS232の処理により、要求コマンドの処理が完了したと判断し、その要求情報を削除するのである。なお、この際要求コマンドがUSTATUSである場合は、この処理はスキップされる。これはUSTATUSの場合、要求コマンドと返信データが1対1に対応しないため、処理完了とはならないからである。
【0079】
そして、S230の処理を終えたら、上記S115の処理で記憶されたすべてのIDについての処理が終了したか否かを判断し(S235)、終了していなければ(S235:NO)、S210の処理へと戻り、再びS210〜S235の処理を繰り返す。
【0080】
一方、上記S115の処理で記憶されたすべてのIDについての処理が終了した場合(S235:YES)、この常駐スレッド処理を終了するか否かを判断し(S240)、終了すべきであれば(S240:YES)、常駐スレッド処理を終了する。また、常駐スレッド処理を終了しない場合は(S240:NO)、1秒待機して(S245)、S205の処理へと戻り、再びS205以降の処理を繰り返す。
【0081】
以上のような常駐スレッド処理が情報分配部41において実行されることにより、S205の処理でデバイス2からデバイス情報を読み取る毎に、S210〜S235のループ処理が実行され、このループ処理により、すべてのクライアント(情報処理部43a〜43c)に対応するバッファ45a〜45cにデバイス情報が分配される。そして、このデバイス情報の分配が完了したら、1秒の待機(S245)を経て、再びデバイス2からデバイス情報を読み取る処理(S205)以降の処理が繰り返されることになる。
【0082】
[情報処理部における処理の一例]
次に、情報処理部における処理の一例として、情報処理部43aで実行されるステータスモニター処理について、図5のフローチャートに基づいて説明する。
【0083】
各情報処理部43a〜43cから情報分配部41に対する要求を行う機能は、複数の情報処理部43a〜43cにおいて同じ機能が共通に利用されるものなので、クライアントDLL(Dynamic Link Library)として提供され、各情報処理部43a〜43cがクライアントDLLを動的にリンクすることで、情報分配部41に対する要求機能を利用できるようになっている。このクライアントDLLと、情報分配部41との通信は、Windowsのリモートプロシージャーコール(RPC)などの既存のプロセス間通信の機能を使用する。
【0084】
この処理を開始すると、情報処理部43a(正確には、情報処理部43aとして機能しているCPU11;以下、単に情報処理部43aという)は、クライアントオープン処理を実行する(S305)。このクライアントオープン処理は、ステータスモニターとしての処理を開始する上で必要なバッファの確保や各種データの初期化等を行う処理であるが、その中で、情報分配部41に対して新規クライアント追加要求が送信される。この新規クライアント追加要求が、情報分配部41において上記S105の処理で受信されると、情報分配部41においてS110〜S120の処理が実行されることになる。
【0085】
この新規クライアント追加処理の戻り値として、IDが返される。このIDは、後述する各要求時に、引数として付加される。
さて、S305の処理を終えたら、情報処理部43aは、コマンド送信処理を実行する(S310)。このコマンド送信処理は、PJLコマンドの送信等を行う処理であるが、PJLコマンドの送信は上記クライアントDLLを利用して実行され、これにより、PJLコマンドを含むコマンド送信要求が情報分配部41へと送信されることになる。この新規コマンド送信要求が、情報分配部41において上記S105の処理で受信されると、情報分配部41においてS135〜S140の処理が実行されることになる。
【0086】
こうしてコマンドを送信したら、情報処理部43aは、リード処理を実行する(S315)。このリード処理は、デバイス情報を取得する処理であり、さらに取得した最新のデバイス情報に基づく表示を表示部16に表示する処理なども含まれる。デバイス情報のリード要求は上記クライアントDLLを利用して実行される。このリード要求が、情報分配部41において上記S105の処理で受信されると、情報分配部41においてS145〜S155の処理が実行され、その結果、情報分配部41からはバッファ45aに格納されたデバイス情報が提供されることになる。
【0087】
S315の処理を終えたら、情報処理部43aは、処理を終了するか否かを判断し(S320)、終了しない場合は(S320:NO)、一秒待機して(S325)、S315の処理へと戻り、S315以降の処理を繰り返す。これにより、情報処理部43aは、繰り返しリード要求を発行して最新のデバイス情報を取得し、その最新のデバイス情報に基づく表示を表示部16に表示する処理を繰り返すことになる。
【0088】
一方、S320の処理において、処理を終了すると判断した場合は(S320:YES)、クライアントクローズ処理を実行する(S330)。このクライアントクローズ処理は、ステータスモニターとしての処理を終了する上で必要なバッファの削除(開放)等を行う処理であるが、その中で、情報分配部41に対してクライアント削除要求が送信される。このクライアント削除要求が、情報分配部41において上記S105の処理で受信されると、情報分配部41においてS125〜S130の処理が実行されることになる。そして、S330の処理を終えたら、本処理を終了する。
【0089】
[第1実施形態の効果]
以上説明したように、上記第1実施形態においては、デバイス2から一度しか受信できないデバイス情報であっても、そのデバイス情報を情報分配部41が取得して、情報分配部41が複数の情報処理部43a〜43cに対応するバッファ45a〜45cに複製するので、すべての情報処理部43a〜43cに対してデバイス情報を提供することができ、各情報処理部43a〜43cに適切な情報処理を実施させることができる。
【0090】
また、上記第1実施形態においては、デバイス2に送信したPJLコマンドに対応するデバイス情報以外の情報が、何らかの原因でデバイス2から取得できてしまった場合でも、上記S215の処理により、そのような情報を各情報処理部43a〜43cへ提供しないので、PC1には無駄な情報を各情報処理部43a〜43cへ提供するための負荷(すなわち、S220〜S230の処理を実行するための負荷)がかからなくなり、各情報処理部43a〜43cでも無駄な情報を処理するための負荷がかからなくなる。なお、何らかの原因でデバイス2から取得できてしまう情報としては、例えば、情報分配部41を経由することなく直接デバイス2へPJLコマンドを送信するアプリケーションが混在した場合に、そのようなアプリケーションへの応答として返すべきデバイス情報が、デバイス2から取得できてしまう可能性がある。望ましくは、そのようなアプリケーションが混在しないようにすることが重要であるが、上記第1実施形態では、次善の策として、そのようなアプリケーションが混在した場合でも、無駄な情報を各情報処理部43a〜43cへ提供してしまわないように対処することができる。
【0091】
さらに、上記第1実施形態においては、デバイス2から取得したデバイス情報をバッファ45a〜45cに一旦格納するので、デバイス2からデバイス情報を取得するタイミングとデバイス情報を情報処理部43a〜43cへ提供するタイミングを非同期とすることができ、各情報処理部43a〜43c側それぞれでデバイス情報が必要となったときに、各情報処理部43a〜43cに対してデバイス情報を提供することができる。
【0092】
また、上記第1実施形態においては、デバイス情報を情報処理部43a〜43c毎に確保されたバッファ45a〜45cに格納するので、複数の情報処理部43a〜43cがそれぞれバッファ45a〜45cに格納されたデバイス情報を利用する際に、一つのバッファ(例えば、バッファ45a)記憶領域で問題が生じても、他のバッファ(例えば、バッファ45b,45c)には悪影響を及ぼすことがない。
【0093】
[第2実施形態]
次に、第2実施形態について説明する。
ただし、第2実施形態は、一部の構成が第1実施形態と同様になるので、第2実施形態においては、第1実施形態との相違点を中心に詳述する。具体的には、PCおよびデバイスの構成と、情報処理部における処理は、第1実施形態と同様なので、その詳細な説明については省略する。ただし、第1実施形態とほぼ同様の構成については、第1実施形態と同じ符号を付すことで、第1実施形態とほぼ同様の構成であることを示す。
【0094】
[PCによるデバイス情報取得方法の概要]
以下、PC1によるデバイス情報取得方法の概要について説明する。
PC1上で情報分配部41や複数の情報処理部43a〜43cが機能する点は、第1実施形態と同様である。ただし、第2実施形態においては、情報分配部41の確保するバッファの構造が、第1実施形態とは相違する。
【0095】
具体的には、第1実施形態においては、各情報処理部43a〜43c毎に1つずつバッファを確保することにより、複数のバッファ45a〜45cが確保されていたが、第2実施形態においては、PJLコマンドに対する応答として返されるデバイス情報と、PJLコマンドの送信を要求したクライアント(情報処理部)のIDとを1組とする、複数組分の記憶領域を備えたバッファ47が確保されるようになっている。
【0096】
次に、上記バッファ47の利用方法を、具体例を交えて説明する。
情報処理部43aが、“@PJL1 INFO STATUS”というPJLコマンドの送信を、情報分配部41に対して要求した場合、情報分配部41は、“@PJL1 INFO STATUS”に対応する1組分の記憶領域を、バッファ47内に用意する。そして、“@PJL1 INFO STATUS”に対する応答として返されるデバイス情報をデバイス2から取得した際には、そのデバイス情報と、“@PJL1 INFO STATUS”の送信を要求したクライアント(情報処理部43a)のID(AP1)が、バッファ47内にある“@PJL1 INFO STATUS”に対応する1組分の記憶領域に格納される。
【0097】
その後、情報処理部43bが、同じく“@PJL1 INFO STATUS”というPJLコマンドの送信を、情報分配部41に対して要求した場合、情報分配部41は、既に“@PJL1 INFO STATUS”に対応する1組分の記憶領域が用意されているので、この場合は、新たな記憶領域を用意することはない。そして、“@PJL1 INFO STATUS”に対する応答として返されるデバイス情報をデバイス2から取得した際には、そのデバイス情報と、“@PJL1 INFO STATUS”の送信を要求したクライアント(情報処理部43a,43b)のID(AP1,AP2)が、バッファ47内にある“@PJL1 INFO STATUS”に対応する1組分の記憶領域に格納する。
【0098】
つまり、複数のクライアントからコマンドの送信が要求された場合でも、そのコマンドが同じコマンドである場合には、バッファ47内に新たな記憶領域が確保されることはなく、クライアントのIDのみが確保済みの記憶領域に追加登録される。
【0099】
一方、情報処理部43aが、“@PJL2 INFO PAGE”というPJLコマンドの送信を、情報分配部41に対して要求した場合、情報分配部41は、“@PJL2 INFO PAGE”に対応する新たな1組分の記憶領域を、バッファ47内に用意する。そして、“@PJL2 INFO PAGE”に対する応答として返されるデバイス情報をデバイス2から取得した際には、そのデバイス情報と、“@PJL2 INFO PAGE”の送信を要求したクライアント(情報処理部43a)のID(AP1)が、バッファ47内にある“@PJL2 INFO PAGE”に対応する1組分の記憶領域に格納される。
【0100】
つまり、同じクライアントからコマンドの送信が要求された場合でも、そのコマンドが異なるコマンドである場合には、バッファ47内に新たな記憶領域が確保される。
このようにして、デバイス情報がコマンド毎にバッファ47に格納されるとともに、IDがバッファ47に格納される結果、バッファ47には、図6に示すように、デバイス情報とIDとを1組とする複数組の情報が格納されることになる。
【0101】
その後、クライアントからのリード要求を受けると、情報分配部41は、リード要求の要求元に対応するIDを検索キーにして、バッファ47内をサーチする。例えば、情報処理部43aからのリード要求を受けた場合、ID:AP1を検索キーにしてバッファ47内がサーチされ、この場合、“@PJL1 INFO STATUS”と“@PJL2 INFO PAGE”に対応する記憶領域が検出されることになる。そして、検出された2組の記憶領域からデバイス情報が読み出され、それら2組分のデバイス情報が情報処理部43aに対して提供されることになる。
【0102】
[情報分配部における主処理]
次に、上記のような情報分配部41の機能を実現するため、情報分配部41において実行される主処理について、図7のフローチャートに基づいて説明する。この処理は、情報分配部41を機能させたい時点で開始されていればよい処理であり、例えば、PC1の起動に伴って開始される処理となっていればよい。
【0103】
この処理を開始すると、情報分配部41は、まずクライアントとなる情報処理部43a〜43cからの要求待ちになる(S405)。ここで、情報処理部43a〜43cのいずれかから何らかの要求があるとS405の処理を抜け、続いて、情報分配部41は、新規クライアント追加要求か否かを判断する(S410)。
【0104】
S410の処理において、新規クライアント追加要求であった場合(S410:YES)、情報分配部41は、要求元となったクライアントのIDをRAM13に記憶させる(S415)。図6に示すように、クライアントである情報処理部43a〜43cには、それぞれユニークなID(図6に示した例では、AP1〜AP3)が付与されており、このIDが第1実施形態の場合と同様に記憶される。そして、S415の処理を終えたら、S405の処理へと戻り、再びS405以降の処理を繰り返す。
【0105】
一方、上記S410の処理において、新規クライアント追加要求ではなかった場合(S410:NO)、続いて、情報分配部41は、クライアント削除要求か否かを判断する(S420)。
【0106】
S420の処理において、クライアント削除要求であった場合(S420:YES)、情報分配部41は、要求元となったクライアントに対応するIDを削除する(S425)。また、受信したデバイス情報(バッファ47内に格納されたデバイス情報)の中から、削除対象となったクライアントからのみ要求されていたデバイス情報を削除する(S425)。そして、S425の処理を終えたら、S405の処理へと戻り、再びS405以降の処理を繰り返す。
【0107】
一方、上記S420の処理において、クライアント削除要求ではなかった場合(S420:NO)、情報分配部41は、新規コマンド送信要求であるか否かを判断する(S435)。本実施形態においても、第1実施形態と同様、各情報処理部43a〜43cからPJLコマンドを含むコマンド送信要求が送信されてくる。
【0108】
S435の処理において、新規コマンド送信要求であった場合(S435:YES)、情報分配部41は、送信要求されたPJLコマンドをスプーラ経由でUSB I/F17を通じてデバイス2へ送信するとともに、その送信要求されたPJLコマンドをRAM13に記憶させる(S440)。なお、S440の処理でRAM13に記憶させたPJLコマンドは、後述するS510の判断処理において参照されることになる。そして、S440の処理を終えたら、S405の処理へと戻り、再びS405以降の処理を繰り返す。
【0109】
一方、S435の処理において、新規コマンド送信要求ではなかった場合(S435:NO)、第1実施形態と同様、クライアントからデバイス情報のリード要求を受けたものと判断する。そして、情報分配部41は、要求元となったクライアントに対応するIDを取得して(S445)、そのIDを検索キーにしてバッファ47の検索を行う(S450)。そして、検索キーにしたIDが登録された記憶領域が1組もバッファ47内から検出されないた場合には、要求したコマンドに対応するデバイス情報が存在しないことになるので、その場合は(S455:NO)、S405の処理へと戻り、再びS405以降の処理を繰り返す。
【0110】
一方、S455の処理において、要求したコマンドに対応するデバイス情報が1組分以上存在する場合には(S455:YES)、検出した1組分以上のデバイス情報を要求元となったクライアントに送信するとともに、そのデバイス情報に関連付けられたID(S440の処理において記憶されたもの)を削除する(S460)。なお、S460の処理により、クライアントに送信されるデバイス情報は、本処理と並列に実行される常駐スレッド処理によりデバイス2から読み出されてバッファ47に格納されたものであるが、この常駐スレッド処理の詳細については後述する。
【0111】
そして、S460の処理を終えたら、その要求コマンドに対する最後のクライアントであるか否かを判断し(S465)、最後のクライアントであれば(S465:YES)、デバイス情報をバッファ47から削除して(S470)、S405の処理へと戻る一方、最後のクライアントでなければ(S465:NO)、S470の処理を実行することなく、S405の処理へと戻る。なお、これらS465〜S470の処理は、複数のクライアントから同じコマンドの送信要求が出ている場合に、あるクライアントだけがデバイス情報を取得しても、他のクライアントがデバイス情報を取得していなければ、デバイス情報をバッファ47から削除せず、一方、全てのクライアントがデバイス情報を取得した際には、デバイス情報をバッファ47から削除するために設けられている。
【0112】
[情報分配部における常駐スレッド処理]
次に、情報分配部41において主処理と並列に実行される常駐スレッド処理について、図8のフローチャートに基づいて説明する。
【0113】
この処理を開始すると、情報分配部41は、デバイス2よりデバイス情報の読み取りを行う(S505)。ここで、まだデバイス2に対してPJLコマンドが送信されていない場合など、デバイス2側がデバイス情報を送信できる状態にない場合は、S505の処理で読み取り待ちになり、何らかの情報を読み取ったらS505の処理を抜ける。
【0114】
続いて、情報分配部41は、S505の処理で読み取った情報が、クライアントから送信要求されたコマンドの返答か否かを判断する(S510)。クライアントから送信要求されたコマンドは、上述したS440の処理によりRAM13に記憶されている。したがって、S510の処理では、S440の処理でRAM13に記憶されたコマンドと、S505の処理で読み取った情報とを対比することにより、所期のデバイス情報であるかどうかを判断することができる。
【0115】
S510の処理において、クライアントから送信要求されたコマンドの返答であった場合は(S510:YES)、そのコマンドを要求したクライアントのIDをサーチして(S515)、S505の処理で読み取ったデバイス情報とS515の処理で検出したIDとを組にして、バッファ47に記憶させる。なお、S510の処理において、クライアントから送信要求されたコマンドの返答ではなかった場合は(S510:NO)、上記S515,S520の処理をスキップする。
【0116】
こうして、S510〜S520の処理を終えたら、1秒待機して(S525)、S505の処理へと戻り、S505以降の処理を繰り返す。
以上のような常駐スレッド処理が情報分配部41において実行されることにより、S505の処理でデバイス2からデバイス情報を読み取る毎に、S510以降の処理が実行され、この処理により、バッファ47には、異なるコマンド毎に各コマンドに対応するデバイス情報が格納されることになる。
【0117】
[第2実施形態の効果]
以上説明したように、上記第2実施形態においても、デバイス2から一度しか受信できないデバイス情報を情報分配部41が取得して、情報分配部41が異なるコマンド毎にデバイス情報をバッファに保存し、そのデバイス情報を複数の情報処理部43a〜43cに提供するので、各情報処理部43a〜43cに適切な情報処理を実施させることができる。
【0118】
また、上記第2実施形態においても、デバイス2に送信したPJLコマンドに対応するデバイス情報以外の情報が、何らかの原因でデバイス2から取得できてしまった場合、上記S510の処理により、そのような情報を各情報処理部43a〜43cへ提供しないようにしているので、PC1には無駄な情報を各情報処理部43a〜43cへ提供するための負荷(すなわち、S515〜S520の処理を実行するための負荷)がかからなくなり、各情報処理部43a〜43cでも無駄な情報を処理するための負荷がかからなくなる。
【0119】
さらに、上記第2実施形態においても、デバイス2から取得したデバイス情報をバッファ47に一旦格納するので、デバイス2からデバイス情報を取得するタイミングとデバイス情報を情報処理部43a〜43cへ提供するタイミングを非同期とすることができ、各情報処理部43a〜43c側それぞれでデバイス情報が必要となったときに、各情報処理部43a〜43cに対してデバイス情報を提供することができる。
【0120】
また、上記第2実施形態においては、デバイス情報をバッファ47へ格納する際に異なるコマンド毎に格納するので、複数の情報処理部43a〜43cが同じコマンドを送信している場合に、同じデバイス情報を複数のバッファに格納しなくてもよく、その分だけRAM13の使用量を削減することができる。
【0121】
[第3実施形態]
次に、第3実施形態について説明する。
ただし、第3実施形態は、一部の構成が第1,第2実施形態と同様になるので、第3実施形態においては、第1,第2実施形態との相違点を中心に詳述する。具体的には、PCおよびデバイスの構成と、情報処理部における処理は、第1,第2実施形態と同様なので、その詳細な説明については省略する。ただし、第1,第2実施形態とほぼ同様の構成については、第1,第2実施形態と同じ符号を付すことで、第1,第2実施形態とほぼ同様の構成であることを示す。
【0122】
[PCによるデバイス情報取得方法の概要]
以下、PC1によるデバイス情報取得方法の概要について、図9に基づいて説明する。
PC1上で情報分配部41や複数の情報処理部43a〜43cが機能する点は、第1,第2実施形態と同様である。ただし、第3実施形態においては、PJLコマンドの一つであるUSTATUSに特化した処理を行っている点で、第1実施形態とは相違する。
【0123】
PJLコマンドの多くは、デバイスへ送信された場合に、送信されたコマンドに対する応答として1度だけデバイス情報が返されるが、USTATUSの場合は、ONを指示するコマンドを送信すると、以後、新たに同じコマンドを送信しなくても、デバイス2が自身の状態変化を検出するたびに、何度でもデバイス情報を返すようになる。
【0124】
そこで、第3実施形態においては、クライアント(情報処理部)からコマンド送信要求を受けた場合に、そのコマンドに対応するバッファを用意し、以後、コマンドに対する応答であるデバイス情報がデバイス2から返される毎に、そのコマンドに対応するバッファにデバイス情報を格納するようにしている。
【0125】
図9に例示したもので言えば、情報処理部43aが、“@PJL USTATUS DEVICE = ON”というPJLコマンドの送信を、情報分配部41に対して要求した場合、情報分配部41は、“USTATUS DEVICE”に対応するバッファ49aを確保する。一方、情報処理部43b,43cも、“@PJL USTATUS DEVICE = ON”というPJLコマンドの送信を、情報分配部41に対して要求することがあるが、この場合、“USTATUS DEVICE”に対応するバッファ49aは既に確保されているので、新たなバッファが確保されることはなく、既存のバッファ49aが、情報処理部43b,43cからも利用される状態になる。また、情報処理部43bが、“@PJL USTATUS PAGE = ON”というPJLコマンドの送信を、情報分配部41に対して要求した場合、情報分配部41は、“USTATUS PAGE”に対応するバッファ49bを確保し、情報処理部43cが、“@PJL USTATUS JOB = ON”というPJLコマンドの送信を、情報分配部41に対して要求した場合、情報分配部41は、“USTATUS JOB”に対応するバッファ49cを確保する。以後は、上述の通り、デバイス2が自身の状態変化を検出するたびにデバイス情報を返すようになるので、デバイス2からデバイス情報をデバイス2から取得した際には、そのデバイス情報に対応するPJLコマンドを判断し、そのPJLコマンドに対応するバッファ(バッファ49a〜49cのいずれか)にデバイス情報が格納されることになる。
【0126】
[情報分配部における主処理]
次に、上記のような情報分配部41の機能を実現するため、情報分配部41において実行される主処理について、図10のフローチャートに基づいて説明する。この処理は、情報分配部41を機能させたい時点で開始されていればよい処理であり、例えば、PC1の起動に伴って開始される処理となっていればよい。
【0127】
この処理を開始すると、情報分配部41は、まずクライアントとなる情報処理部43a〜43cからの要求待ちになる(S605)。ここで、情報処理部43a〜43cのいずれかから何らかの要求があるとS605の処理を抜け、続いて、情報分配部41は、新規クライアント追加要求か否かを判断する(S610)。
【0128】
S610の処理において、新規クライアント追加要求であった場合(S610:YES)、情報分配部41は、要求元となったクライアントのIDをRAM13に記憶させる(S615)。図6に示すように、クライアントである情報処理部43a〜43cには、それぞれユニークなID(図9に示した例では、AP1〜AP3)が付与されており、このIDが第1実施形態の場合と同様に記憶される。そして、S615の処理を終えたら、S605の処理へと戻り、再びS605以降の処理を繰り返す。
【0129】
一方、上記S610の処理において、新規クライアント追加要求ではなかった場合(S610:NO)、続いて、情報分配部41は、クライアント削除要求か否かを判断する(S620)。
【0130】
S620の処理において、クライアント削除要求であった場合(S620:YES)、情報分配部41は、要求元となったクライアントに対応するIDを削除する(S625)。また、受信したデバイス情報(バッファ47内に格納されたデバイス情報)の中から、削除対象となったクライアントからのみ要求されていたデバイス情報を削除する(S625)。そして、S625の処理を終えたら、S605の処理へと戻り、再びS605以降の処理を繰り返す。
【0131】
一方、上記S620の処理において、クライアント削除要求ではなかった場合(S620:NO)、情報分配部41は、新規USTATUS取得コマンド送信要求であるか否かを判断する(S635)。本実施形態においても、第1実施形態と同様、各情報処理部43a〜43cからPJLコマンドを含むコマンド送信要求が送信されてくるが、その中に含まれるPJLコマンドはUSTATUS取得コマンドとなっている。
【0132】
S635の処理において、新規USTATUS取得コマンド送信要求であった場合(S635:YES)、情報分配部41は、送信要求されたUSTATUS ONコマンドをスプーラ経由でUSB I/F17を通じてデバイス2へ送信するとともに、もしそのPJL USTATUSコマンドがはじめて送られたものであるならば、その送信要求されたPJLコマンドに対応する新規バッファを作成する(S640)。このとき他のクライアントにより既にバッファが作成されていたならば、このS640の処理はスキップされる。なお、S640の処理で作成されたバッファには、後述する常駐スレッド処理により、不定期に何度もデバイス情報が格納されるようになる。そして、S640の処理を終えたら、S605の処理へと戻り、再びS605以降の処理を繰り返す。
【0133】
一方、S635の処理において、新規USTATUS取得コマンド送信要求ではなかった場合(S635:NO)、USTATUS削除要求であるか否かを判断する(S645)。先に説明した通り、USTATUSは、一度ONコマンドを送信すると、その後は何度でもデバイス情報が返されるため、このデバイス情報をデバイス2が返さないようにするには、OFFコマンドを送信する必要がある。S645の処理は、このOFFコマンドの送信に対応する処理であり、USTATUS削除要求であった場合(S645:YES)、情報分配部41は、それを要求してきたクライアントが最後のクライアントか否かを判断し、もし最後ならば、送信要求されたUSTATUS OFFコマンドをスプーラ経由でUSB I/F17を通じてデバイス2へ送信するとともに、その送信要求されたPJLコマンドに対応するバッファを削除する(S650)。もし他にもそのUSTATUSコマンドを要求しているクライアントがある場合は、これらコマンド送信、バッファ削除の処理(S650の処理)はスキップされる。そして、S650の処理を終えたら、S605の処理へと戻り、再びS605以降の処理を繰り返す。
【0134】
一方、S645の処理において、USTATUS削除要求ではなかった場合(S645:NO)、クライアントからデバイス情報のリード要求を受けたものと判断する。USTATUS削除要求ではなかったことをもって、リード要求を受けたものと判断できるのは、第1,第2実施例と同様の理由である。この場合、情報分配部41は、要求元となったクライアントから要求されているUSTATUSのリストを取り出して(S655)、そのリストにあるすべてのUSTATUSのバッファの内容をクライアントに送る(S660)。例えば、要求元となったクライアントが図9に示した情報処理部43bである場合、S655の処理では、クライアントから要求されているUSTATUSのリストとして、“USTATUS DEVICE”,“USTATUS PAGE”が取り出され、S660の処理では、“USTATUS DEVICE”,“USTATUS PAGE”に対応するバッファ49a,49vの内容が情報処理部43bに送られることになる。そして、S660の処理を終えたら、S605の処理へと戻り、再びS605以降の処理を繰り返す。
【0135】
[情報分配部における常駐スレッド処理]
次に、情報分配部41において主処理と並列に実行される常駐スレッド処理について、図11のフローチャートに基づいて説明する。
【0136】
この処理を開始すると、情報分配部41は、デバイス2よりデバイス情報の読み取りを行う(S705)。ここで、まだデバイス2に対してPJLコマンドが送信されていない場合など、デバイス2側がデバイス情報を送信できる状態にない場合は、S705の処理で読み取り待ちになり、何らかの情報を読み取ったらS705の処理を抜ける。
【0137】
続いて、情報分配部41は、S705の処理で読み取った情報が、クライアントから送信要求されたコマンドの返答か否かを判断する(S710)。クライアントから送信要求されたコマンドである場合、そのコマンドに対応するバッファが上述したS640の処理により確保されている。したがって、S710の処理では、S640の処理で確保されたバッファに対応するコマンドと、S705の処理で読み取った情報とを対比することにより、所期のデバイス情報であるかどうかを判断することができる。
【0138】
S710の処理において、クライアントから送信要求されたコマンドの返答であった場合は(S710:YES)、そのデバイス情報を、対応するコマンドのバッファに記憶させる(S715)。なお、S710の処理において、クライアントから送信要求されたコマンドの返答ではなかった場合は(S710:NO)、上記S715の処理をスキップする。
【0139】
こうして、S710〜S715の処理を終えたら、S705の処理へと戻り、S705以降の処理を繰り返す。
以上のような常駐スレッド処理が情報分配部41において実行されることにより、S705の処理でデバイス2からデバイス情報を読み取る毎に、S710以降の処理が実行され、この処理により、バッファ47には、異なるUSTATUS毎に各USTATUSに対応するデバイス情報が格納されることになる。
【0140】
[第3実施形態の効果]
以上説明したように、上記第3実施形態においても、デバイス2から一度しか受信できないデバイス情報を情報分配部41が取得して、情報分配部41が異なるUSTATUS毎にデバイス情報をバッファに保存し、そのデバイス情報を複数の情報処理部43a〜43cに提供するので、各情報処理部43a〜43cに適切な情報処理を実施させることができる。
【0141】
また、上記第3実施形態においても、デバイス2に送信したPJLコマンドに対応するデバイス情報以外の情報が、何らかの原因でデバイス2から取得できてしまった場合、上記S710の処理により、そのような情報を各情報処理部43a〜43cへ提供しないようにしているので、PC1には無駄な情報を各情報処理部43a〜43cへ提供するための負荷(すなわち、S715の処理を実行するための負荷)がかからなくなり、各情報処理部43a〜43cでも無駄な情報を処理するための負荷がかからなくなる。
【0142】
さらに、上記第3実施形態においても、デバイス2から取得したデバイス情報をバッファ49a〜49cに一旦格納するので、デバイス2からデバイス情報を取得するタイミングとデバイス情報を情報処理部43a〜43cへ提供するタイミングを非同期とすることができ、各情報処理部43a〜43c側それぞれでデバイス情報が必要となったときに、各情報処理部43a〜43cに対してデバイス情報を提供することができる。
【0143】
また、上記第3実施形態においては、デバイス情報をバッファ47へ格納する際に異なるUSTATUS毎に格納するので、複数の情報処理部43a〜43cが同じUSTATUS取得要求を送信している場合に、同じUSTATUSを複数のバッファに格納しなくてもよく、その分だけRAM13の使用量を削減することができる。
【0144】
[第4実施形態]
上述の第1実施形態〜第3実施形態では、PC1の利用形態について特に言及しておらず、代表的な利用形態としては、例えば、PC1を単独で利用するような利用形態などを想定できたが、上記PC1は、ターミナルサーバーとして利用した場合に優れた効果を発揮するので、以下、PC1をターミナルサーバーとして利用した実施形態について説明する。
【0145】
図12(a)は、上述の第1実施形態〜第3実施形態のいずれかで説明したPC1をターミナルサーバーとして利用した場合の概略構成図である。
PC1には、上述の第1実施形態〜第3実施形態と同様、USBインターフェースを介してデバイス2が接続されている。また、上述の第1実施形態〜第3実施形態では言及しなかったが、PC1は、複数のターミナル3a〜3cとネットワーク4を介してデータ通信可能に構成されている。
【0146】
このようなターミナルサーバーシステムの場合、ターミナル3a〜3cは、単に利用者に入出力インターフェースを提供する装置として機能するので、例えば、ハードディスク装置を持たない安価なPCを、ターミナル3a〜3cとして採用することもできる。一方、PC1には、マルチユーザ機能を備えたOSが搭載され、クライアントである複数のターミナル3a〜3cからの要求に応じて、各種アプリケーションがPC1上において並列に機能する。各ターミナル3a〜3cでの入力操作が行われた場合、その入力データ(例えば、キー入力されたデータ)はネットワーク4を通じてPC1へと伝送され、その入力データに基づく各種処理がPC1上で実行される。そして、その処理結果である出力データ(例えば、画面表示用データ)は、ネットワーク4を通じて各ターミナル3a〜3cへと伝送され、各ターミナル3a〜3cにおいて出力(例えば、画面表示)されることになる。
【0147】
以上のように構成されたターミナルサーバーシステムにおいて、各ターミナル3a〜3cの利用者は、それぞれがデバイス2の状態を知りたいことがあり、その場合、各ターミナル3a〜3cそれぞれにおいて、ステータスモニターが利用される可能性がある。ターミナルサーバーシステムの場合、各ターミナル3a〜3cそれぞれにおいてステータスモニターが利用されても、ステータスモニターが稼働するのはPC1上となる。そのため、デバイス2は、複数のステータスモニターからデバイス情報の提供を要求される可能性がある。
【0148】
しかし、デバイス情報は、単にPC1側からの要求に応じて、その時点で最新のデバイス情報をPC1側へ返すだけであり、複数のステータスモニターそれぞれに対して個別にデバイス情報を提供するような仕組みにはなっていない。
【0149】
そのため、本発明の構成を備えていないターミナルサーバー上で、複数のステータスモニターが稼働した場合、最初にデバイス情報の取得を試みたステータスモニターがデバイス情報を取得してしまうと、後からデバイス情報の取得を試みた他のステータスモニターは、所期のデバイス情報を取得することができない、という問題を招く。
【0150】
これに対し、上記各実施形態の如く構成されたPC1をターミナルサーバーとして利用すれば、図12(b)に示すように、SYSTEMコンテキスト51において上述の情報分配部41が機能するとともに、ターミナル3a〜3cに対応する各ユーザーコンテキスト52a〜52cにおいて上述の情報処理部43a〜43cに相当するステータスモニターが機能する構成とすることができる。このような構成にすれば、上記各実施形態において説明した通りの作用、効果により、各ステータスモニター(情報処理部43a〜43c)から送信要求されたコマンドに対する応答として返されるデバイス情報が、情報分配部41によって各ステータスモニター(情報処理部43a〜43c)へと送信されるので、最初にデバイス情報の取得を試みたステータスモニターはもちろんのこと、後からデバイス情報の取得を試みた他のステータスモニターも、所期のデバイス情報を取得できるようになる。
【0151】
また、複数のステータスモニター(情報処理部43a〜43c)から同じコマンドの送信要求があった場合には、最初にデバイス情報の取得を試みたステータスモニターに対して提供したデバイス情報が既にバッファの中に格納されているので、後からデバイス情報の取得を試みた他のステータスモニターに対しては、迅速にデバイス情報を提供することができる。
【0152】
さらに、上記第2,第3実施形態と同様の構成を備えている場合には、複数のステータスモニター(情報処理部43a〜43c)から同じコマンドの送信要求があった場合でも、情報分配部41ではコマンド毎にバッファが確保されるので、PC1が備えるRAM13の使用量を減らすことができる。
【0153】
[上記実施形態と本発明との対応関係]
以上説明した各実施形態において、PC1は、デバイス2に関する情報であるデバイス情報に基づく情報処理を実行する複数の情報処理部43a〜43cと、情報処理部43a〜43cそれぞれがデバイス2からデバイス情報を取得するために利用されるUSB I/F17とを備える装置であり、このPC1が本発明でいう情報処理装置に相当する。
【0154】
また、PC1がS105,S405,S605の処理を実行した際、PC1は、本発明でいう情報処理装置に相当するPC1上の、情報処理部43a〜43cのいずれかから送信されるコマンド送信要求を受信する手段として機能しており、これが本発明でいうコマンド送信要求受信手段に相当する。
【0155】
また、PC1がS135〜S140,S435〜S440,S635〜S640の処理を実行した際、PC1は、上記コマンド送信要求受信手段(S105,S405,S605)によって受信したコマンド送信要求に対応するコマンドを、USB I/F17を通じてデバイス2へ送信する手段として機能しており、これが本発明でいうコマンド送信手段に相当する。
【0156】
また、PC1がS205,S505,S705の処理を実行した際、PC1は、コマンドに対する応答としてデバイス2から提供されるデバイス情報を取得する手段として機能しており、これが本発明でいうデバイス情報取得手段に相当する。
【0157】
また、PC1がS145〜S150,S450〜S460,S655〜S660の処理を実行した際、PC1は、上記デバイス情報取得手段(S205,S505,S605)によって取得したデバイス情報を、複数の情報処理部43a〜43cへと提供可能な手段として機能しており、これが本発明でいうデバイス情報提供手段に相当する。
【0158】
さらに、PC1がS140,S440,S640の処理を実行した際、PC1は、上記コマンド送信要求受信手段(S105,S405,S605)によって受信したコマンド送信要求に対応するコマンドを示すコマンド情報を、PC1が備えるRAM13に記憶させる手段として機能しており、これが本発明でいうコマンド情報記憶制御手段に相当する。
【0159】
また、PC1がS215,S510,S710の処理を実行した際、PC1は、RAM13に記憶されたコマンド情報に基づいて、上記デバイス情報取得手段(S205,S405,S605)によって取得したデバイス情報が、コマンド情報の示すコマンドに対応するデバイス情報であるか否かを判定する手段として機能しており、これが本発明でいう判定手段に相当する。
【0160】
さらに、PC1がS515〜S520の処理を実行した際、PC1は、上記コマンド送信要求受信手段(S405)によって受信したコマンド送信要求の送信元となる情報処理部を示すID(送信元情報)を、PC1が備えるRAM13(バッファ47)に記憶させる手段として機能しており、これが本発明でいう送信元情報記憶制御手段に相当する。
【0161】
また、PC1がS445〜S450の処理を実行した際、PC1は、上記判定手段(S510)によってコマンド情報の示すコマンドに対応すると判定されたデバイス情報の提供先とすべき情報処理部を、RAM13(バッファ47)に記憶されたID(送信元情報)に基づいて複数の情報処理部の中から選択する手段として機能しており、これが本発明でいう選択手段に相当する。
【0162】
[変形例等]
以上、本発明の実施形態について説明したが、本発明は上記の具体的な一実施形態に限定されず、この他にも種々の形態で実施することができる。
【0163】
例えば、上記各実施形態においては、上記S215,S510,S710の処理を実行することにより、取得したデバイス情報が、送信したコマンドに対応するものか否かを判断していたが、この判断をすることなく、取得したデバイス情報すべてをそのまま各情報処理部へ送信するように構成してもよい。ただし、この場合は、情報処理部側にとって不要な情報が情報処理部側へ渡る可能性もあるので、情報処理部側でデバイス情報の取捨選択を適切に行うようにする。
【0164】
また、上記各実施形態においては、情報分配部−情報処理部間のデータ送信方法について特に具体的な言及をしなかったが、任意の方法でプロセス間通信を行えばよく、例えば、共有メモリなどを利用してデータのやり取りを行えばよい。
【0165】
また、上記第1実施形態においては、S255の処理により、古い情報を捨てるように構成してあったが、古い情報をそのまま残して、取得した最新の情報を捨てるように構成することも可能である。どちらの構成を採用するかは、古い情報と新しい情報のどちらがより重要かを勘案して決めればよい。
【0166】
さらに、上記各実施形態では、デバイスと接続されるPC、情報分配部としての機能を有するPC、複数の情報処理部としての機能を有するPCが、単一のPC1となっている構成例について説明したが、これらが複数のPCに分散配置され、その複数のPCが協働して上記PC1と同等に機能するように構成されていてもよい。この場合、複数のPCは、ネットワークを介して通信可能に構成され、あるPCに配された手段の出力データが別のPCに配された手段の入力データとなるのであれば、あるPCで得られた出力データをネットワークを介して別のPCへと伝送して、複数のPCを備えたネットワークシステム全体が、上記PC1と同等に機能するように構成する。
【0167】
より具体的な例を挙げれば、上記PC1にデバイス2を接続するとともに、PC1が複数の情報処理部を備える構成とし、上記PC1が備えていた情報分配部41については、PC1上には設けず、その代わりにPC1とは別のサーバー(以下、情報分配サーバーという)を設け、各情報処理部とデバイスとの間でやり取りされる各種データを、一旦PC1から情報分配サーバーへと転送して、その情報分配サーバーで上記情報分配部41において実行されていた各種処理を実行し、その処理結果を情報分配サーバーからPC1へ戻すように構成してもよい。
【図面の簡単な説明】
【0168】
【図1】第1実施形態において例示したコンピュータとデバイスの概略構成図。
【図2】第1実施形態におけるデバイス情報の分配方法を説明するための説明図。
【図3】第1実施形態の情報分配部において実行される主処理のフローチャート
【図4】第1実施形態の情報分配部において実行される常駐スレッド処理のフローチャート。
【図5】第1実施形態の情報処理部で実行されるステータスモニター処理のフローチャート。
【図6】第2実施形態におけるデバイス情報の分配方法を説明するための説明図。
【図7】第2実施形態の情報分配部において実行される主処理のフローチャート
【図8】第2実施形態の情報分配部において実行される常駐スレッド処理のフローチャート。
【図9】第3実施形態におけるデバイス情報の分配方法を説明するための説明図。
【図10】第3実施形態の情報分配部において実行される主処理のフローチャート
【図11】第3実施形態の情報分配部において実行される常駐スレッド処理のフローチャート。
【図12】第4実施形態において例示したターミナルサーバーとターミナルの概略構成図。
【符号の説明】
【0169】
1・・・パーソナルコンピュータ(PC)、2・・・デバイス、3a〜3c・・・ターミナル、4・・・ネットワーク、11,21・・・CPU、12,22・・・ROM、13,23・・・RAM、14,24・・・ハードディスク装置(HDD)、15・・・操作部、16・・・表示部、17,27・・・USBインターフェース(USB I/F)、25・・・操作キー、26・・・表示パネル、28・・・不揮発性RAM、29・・・印字部、30・・・読み取り部、31・・・モデム、41・・・情報分配部、43a〜43c・・・情報処理部、45a,45b,45c,47,49a,49b,49c・・・バッファ、51・・・SYSTEMコンテキスト、52a〜52c・・・ユーザーコンテキスト。
【技術分野】
【0001】
本発明は、デバイスから取得したデバイス情報を複数の情報処理部へ分配するために利用される情報分配処理プログラム、コンピュータ、情報分配処理方法、および情報分配処理システムに関する。
【背景技術】
【0002】
従来、デバイスに関するデバイス情報をインターフェースを通じてデバイスから取得するとともに、そのデバイス情報を利用した情報処理を実施するためのプログラムが知られている(例えば、下記特許文献1参照)。
【0003】
下記特許文献1の場合、プリンタ状態管理プログラム3cは、ポート通信プログラム3eを通してプリンタ2cの情報を取得する処理、記憶領域3dにその情報を記憶させる処理、SNMP処理プログラム3bに対して情報を提供する処理などを実施するためのプログラムとなっている(特許文献1:段落[0072]および[図5]参照)。
【特許文献1】特開2000−293324号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
しかしながら、複数の処理を時分割で並列に実行可能な情報処理装置においては、上記のようなプログラムに従った情報処理を情報処理部が並列に複数機能する可能性があり、その場合、複数の情報処理部それぞれがデバイスから情報を取得しようとするため、デバイスが一度しか情報を提供しない場合、本来であればある情報処理部Aが取得すべき情報であっても、他の情報処理部Bが横取りしてしまうことがあり、上記情報処理部Aに必要な情報が渡らない、という問題が発生するおそれがあった。
【0005】
より具体的な例を挙げれば、デバイスが自身にとって都合のよいタイミングでデバイス情報を一度だけ用意し、このデバイス情報を、情報処理部が自身にとって都合のよいタイミングで取得するように構成されたシステムの場合、デバイスがデバイス情報を用意した後、最初にデバイス情報の取得を試みた情報処理部Bがデバイス情報を取得してしまうと、後からデバイス情報の取得を試みた情報処理部Aは、所期のデバイス情報を取得することができないことになる。
【0006】
本発明は、上記問題を解決するためになされたものであり、その目的は、デバイスが一度しか提供しないデバイス情報を複数の情報処理部が取得しようとした場合に、一つの情報処理部だけがデバイス情報を取得してしまい、他の情報処理部がデバイス情報を取得できなくなるのを防止可能な情報分配処理プログラム、コンピュータ、情報分配処理方法、および情報分配処理システムを提供することにある。
【課題を解決するための手段】
【0007】
以下、上記目的を達成するため、本発明において採用した特徴的構成について説明する。
まず、本発明の情報分配処理プログラムは、デバイスに関する情報であるデバイス情報に基づく情報処理を実行する複数の情報処理部と、前記情報処理部それぞれが前記デバイスからデバイス情報を取得するために利用されるインターフェースと、を備える情報処理装置上の、前記情報処理部のいずれかから送信されるコマンド送信要求を受信するコマンド送信要求受信手段、前記コマンド送信要求受信手段によって受信したコマンド送信要求に対応するコマンドを、前記インターフェースを通じて前記デバイスへ送信するコマンド送信手段、前記コマンドに対する応答として前記デバイスから提供される前記デバイス情報を取得するデバイス情報取得手段、および前記デバイス情報取得手段によって取得した前記デバイス情報を、前記複数の情報処理部へと提供可能なデバイス情報提供手段としてコンピュータを機能させることを特徴とする。
【0008】
このように構成された情報分配処理プログラムに従った処理をコンピュータに実行させることにより、コンピュータを上記各手段として機能させれば、デバイスから一度しか受信できないデバイス情報であっても、そのデバイス情報を複数の情報処理部へ提供することができ、各情報処理部に適切な情報処理を実施させることができる。
【0009】
なお、本発明の情報分配処理プログラムは、さらに、以下の述べるような構成を備えていてもよい。
まず、本発明の情報分配処理プログラムは、さらに、前記コマンド送信要求受信手段によって受信したコマンド送信要求に対応するコマンドを示すコマンド情報を、前記コンピュータが備える記憶手段に記憶させるコマンド情報記憶制御手段、および前記記憶手段に記憶されたコマンド情報に基づいて、前記デバイス情報取得手段によって取得した前記デバイス情報が、前記コマンド情報の示すコマンドに対応するデバイス情報であるか否かを判定する判定手段として、前記コンピュータを機能させるように構成されていてもよく、この場合、前記デバイス情報提供手段は、前記判定手段によって前記コマンド情報の示すコマンドに対応するデバイス情報であると判定されたデバイス情報のみを、前記複数の情報処理部へと提供可能な手段として機能するように構成されていると好ましい。
【0010】
このように構成された情報分配処理プログラムに従った処理をコンピュータに実行させることにより、コンピュータを上記各手段として機能させれば、デバイスに送信したコマンドに対応するデバイス情報以外の情報が、何らかの原因でデバイスから取得できてしまった場合でも、そのような情報を各情報処理部へ提供しないので、コンピュータには無駄な情報を各情報処理部へ提供するための負荷がかからなくなり、各情報処理部でも無駄な情報を処理するための負荷がかからなくなる。
【0011】
なお、本発明の情報分配処理プログラムは、上述の如く構成する以外にも、例えば、デバイスに送信したコマンドに対応するデバイス情報以外の情報が、何らかの原因でデバイスから取得できてしまった場合に、そのような情報をも各情報処理部へ提供するように構成することができる。ただし、この場合は、コマンドとは無関係な情報まで各情報処理部へ提供されることになるので、各情報処理部は、コマンドに対する応答として返されたデバイス情報なのかコマンドとは無関係な情報なのかを判断して、各情報処理部において必要な情報を選別し、不要な情報は破棄するなど、情報処理部側での適切な対処が必要である。
【0012】
また、本発明の情報分配処理プログラムは、さらに、前記コマンド送信要求受信手段によって受信したコマンド送信要求の送信元となる前記情報処理部を示す送信元情報を、前記コンピュータが備える記憶手段に記憶させる送信元情報記憶制御手段、および前記判定手段によって前記コマンド情報の示すコマンドに対応すると判定されたデバイス情報の提供先とすべき前記情報処理部を、前記記憶手段に記憶された送信元情報に基づいて前記複数の情報処理部の中から選択する選択手段として、前記コンピュータを機能させるように構成されていてもよく、この場合、前記デバイス情報提供手段は、前記判定手段によって前記コマンド情報の示すコマンドに対応するデバイス情報であると判定されたデバイス情報のみを、前記選択手段によって選択された前記情報処理部へと提供可能な手段として機能するように構成されていると好ましい。
【0013】
このように構成された情報分配処理プログラムに従った処理をコンピュータに実行させることにより、コンピュータを上記各手段として機能させれば、コマンドを送信した情報処理部へのみ、そのコマンドに対する応答となるデバイス情報が提供されるので、コンピュータにはデバイス情報を要求していない情報処理部へデバイス情報を提供するための負荷がかからなくなり、各情報処理部でも要求していないデバイス情報を処理するための負荷がかからなくなる。
【0014】
なお、本発明の情報分配処理プログラムは、上述の如く構成する以外にも、例えば、コマンドを送信した情報処理部であるか否かを判断することなく、すべての情報処理部へデバイス情報を提供するように構成することができる。ただし、この場合は、コマンド送信要求を発していない情報処理部にもデバイス情報が提供されることになるので、各情報処理部は、自身が発したコマンドに対する応答として返されたデバイス情報なのか否かを判断して、必要なデバイス情報であれば利用し、不要なデバイス情報であれば破棄するなど、情報処理部側での適切な対処が必要である。
【0015】
また、本発明の情報分配処理プログラムにおいて、前記デバイス情報提供手段は、前記デバイス情報取得手段によって取得した前記デバイス情報を、前記コンピュータが備える記憶手段内に確保された記憶領域に格納することにより、前記デバイス情報を取得するタイミングとは非同期で、前記記憶領域に格納されたデバイス情報を、前記複数の情報処理部へと提供可能な手段として機能するように構成されていると好ましい。
【0016】
このように構成された情報分配処理プログラムに従った処理をコンピュータに実行させることにより、コンピュータを上記各手段として機能させれば、デバイス情報を記憶領域に一旦格納するので、デバイス情報を取得するタイミングとデバイス情報を提供するタイミングを非同期とすることができ、情報処理部側でデバイス情報が必要となったときに、情報処理部に対してデバイス情報を提供することができる。
【0017】
また、複数の情報処理部から同じコマンドの送信要求があった場合には、最初にデバイス情報の取得を試みた情報処理部に対して提供したデバイス情報が既に記憶領域中に格納されているので、後からデバイス情報の取得を試みた他の情報処理部に対しては、迅速にデバイス情報を提供することもできる。
【0018】
情報処理部側でデバイス情報が必要となったことは、情報処理部側からの通知で判断し、その通知を受けたときに通知に対する応答として情報処理部側へデバイス情報を送信してもよいし、デバイス情報を格納する記憶領域を、情報処理部側からもアクセス可能な共有メモリ等によって構成し、情報処理部側でデバイス情報が必要となったときに、情報処理部側からデバイス情報を自由に読み出せるように構成してもよい。
【0019】
なお、本発明の情報分配処理プログラムは、上述の如く構成する以外にも、例えば、デバイス情報取得手段によってデバイス情報を取得したら、その取得に同期して直ちにデバイス情報提供手段がデバイス情報を情報処理部へと提供するように構成することができる。ただし、この場合は、情報処理部がデバイス情報を必要としているか否かを問わず、デバイス情報が情報処理部側へ提供されることになるので、提供されたデバイス情報を情報処理部が直ちに処理するか、提供されたデバイス情報を後から処理できるように、情報処理部側で用意した記憶領域にデバイス情報を保存するなど、情報処理部側での適切な対処が必要である。
【0020】
また、本発明の情報分配処理プログラムにおいて、前記デバイス情報提供手段は、前記デバイス情報取得手段によって取得した前記デバイス情報を前記記憶領域に格納する際、前記コマンド送信要求受信手段によって受信したコマンド送信要求の送信元となる前記情報処理部毎に確保された前記記憶領域に格納する手段として機能するように構成されていると好ましい。
【0021】
このように構成された情報分配処理プログラムに従った処理をコンピュータに実行させることにより、コンピュータを上記各手段として機能させれば、デバイス情報を情報処理部毎に確保された記憶領域に格納するので、複数の情報処理部がそれぞれ記憶領域に格納されたデバイス情報を利用する際に、一つの記憶領域で問題が生じても、他の記憶領域には悪影響を及ぼすことがない。
【0022】
あるいは、本発明の情報分配処理プログラムにおいて、前記デバイス情報提供手段は、前記デバイス情報取得手段によって取得した前記デバイス情報を記憶領域に格納する際、異なる前記コマンド毎に確保された前記記憶領域に格納する手段として機能するように構成されていると好ましい。
【0023】
このように構成された情報分配処理プログラムに従った処理をコンピュータに実行させることにより、コンピュータを上記各手段として機能させれば、デバイス情報が異なるコマンド毎に確保された記憶領域に格納されるので、同じコマンドに対する応答となるプリンタ情報を複数の情報処理部へ提供する場合に、情報処理部毎にプリンタ情報を記憶するものとは異なり、同じプリンタ情報を重複して記憶領域に記憶しなくても済むので、記憶領域の使用量を削減することができる。
【0024】
次に、本発明のコンピュータは、デバイスに関する情報であるデバイス情報に基づく情報処理を実行する複数の情報処理部と、前記情報処理部それぞれが前記デバイスからデバイス情報を取得するために利用されるインターフェースと、を備える情報処理装置上の、前記情報処理部のいずれかから送信されるコマンド送信要求を受信するコマンド送信要求受信手段、前記コマンド送信要求受信手段によって受信したコマンド送信要求に対応するコマンドを、前記インターフェースを通じて前記デバイスへ送信するコマンド送信手段、前記コマンドに対する応答として前記デバイスから提供される前記デバイス情報を取得するデバイス情報取得手段、および前記デバイス情報取得手段によって取得した前記デバイス情報を、前記複数の情報処理部へと提供可能なデバイス情報提供手段を備えたことを特徴とする。
【0025】
このように構成されたコンピュータは、上記請求項1に記載の情報分配処理プログラムに従った処理を実行するコンピュータにおいて機能する各手段と、同等の機能を持つ各手段を備えているので、デバイスから一度しか受信できないデバイス情報であっても、そのデバイス情報を複数の情報処理部へ提供することができ、各情報処理部に適切な情報処理を実施させることができる。
【0026】
なお、本発明のコンピュータにおいても、さらに、上記請求項2〜請求項6のいずれかに記載の情報分配処理プログラムに従った処理を実行するコンピュータにおいて機能する各手段と、同等の機能を持つ各手段を備えていると好ましい。このように構成すれば、これらのコンピュータは、それぞれ上記請求項2〜請求項6のいずれかに記載の情報分配処理プログラムに従った処理を実行するコンピュータと同等な作用、効果を奏するものとなる。
【0027】
次に、本発明の情報分配処理方法は、デバイスに関する情報であるデバイス情報に基づく情報処理を実行する複数の情報処理部と、前記情報処理部それぞれが前記デバイスからデバイス情報を取得するために利用されるインターフェースと、を備える情報処理装置上の、前記情報処理部のいずれかから送信されるコマンド送信要求を受信するコマンド送信要求受信手順、前記コマンド送信要求受信手順において受信したコマンド送信要求に対応するコマンドを、前記インターフェースを通じて前記デバイスへ送信するコマンド送信手順、前記コマンドに対する応答として前記デバイスから提供される前記デバイス情報を取得するデバイス情報取得手順、および前記デバイス情報取得手順において取得した前記デバイス情報を、前記複数の情報処理部へと提供するデバイス情報提供手順を備えることを特徴とする。
【0028】
このように構成された情報分配処理方法は、上記請求項1に記載の情報分配処理プログラムに従った処理において実行される手順と同等な手順でコマンドやデバイス情報を含む各種情報を処理する方法なので、デバイスから一度しか受信できないデバイス情報であっても、そのデバイス情報を複数の情報処理部へ提供することができ、各情報処理部に適切な情報処理を実施させることができる。
【0029】
なお、本発明の情報分配処理方法においても、さらに、上記請求項2〜請求項6のいずれかに記載の情報分配処理プログラムに従った処理において実行される手順と同等な手順を備えていると好ましい。このように構成すれば、これらの情報分配処理方法は、それぞれ上記請求項2〜請求項6のいずれかに記載の情報分配処理プログラムに従って実行される情報分配処理方法と同等な作用、効果を奏するものとなる。
【0030】
次に、本発明の情報分配処理システムは、デバイスと、前記デバイスとデータ通信可能なコンピュータとを、少なくとも備えるとともに、前記コンピュータ自体が情報処理装置として機能するように構成されるか前記コンピュータとは別の情報処理装置が前記コンピュータとデータ通信可能に構成されたシステムであり、前記コンピュータは、デバイスに関する情報であるデバイス情報に基づく情報処理を実行する複数の情報処理部と、前記情報処理部それぞれが前記デバイスからデバイス情報を取得するために利用されるインターフェースと、を備える前記情報処理装置上の、前記情報処理部のいずれかから送信されるコマンド送信要求を受信するコマンド送信要求受信手段、前記コマンド送信要求受信手段によって受信したコマンド送信要求に対応するコマンドを、前記インターフェースを通じて前記デバイスへ送信するコマンド送信手段、前記コマンドに対する応答として前記デバイスから提供される前記デバイス情報を取得するデバイス情報取得手段、および前記デバイス情報取得手段によって取得した前記デバイス情報を、前記複数の情報処理部へと提供可能なデバイス情報提供手段を備えることを特徴とする。
【0031】
このように構成された情報分配処理システムが備えるコンピュータは、上記請求項1に記載の情報分配処理プログラムに従った処理を実行するコンピュータにおいて機能する各手段と、同等の機能を持つ各手段を備えているので、デバイスから一度しか受信できないデバイス情報であっても、そのデバイス情報を複数の情報処理部へ提供することができ、各情報処理部に適切な情報処理を実施させることができる。
【0032】
なお、本発明の情報分配処理システムにおいても、各システムが備えるコンピュータは、さらに、上記請求項2〜請求項6のいずれかに記載の情報分配処理プログラムに従った処理を実行するコンピュータにおいて機能する各手段と、同等の機能を持つ各手段を備えていると好ましい。このように構成すれば、これら各情報分配処理システムが備えるコンピュータは、それぞれ上記請求項2〜請求項6のいずれかに記載の情報分配処理プログラムに従った処理を実行するコンピュータと同等な作用、効果を奏するものとなる。
【発明を実施するための最良の形態】
【0033】
次に、本発明の実施形態について、いくつかの具体的な例を挙げて説明する。
[第1実施形態]
まず、第1実施形態について説明する。
【0034】
図1は、パーソナルコンピュータ1(以下、PC1という)とデバイス2とを備えてなるシステム全体の構成を示した概略構成図である。本実施形態において例示するデバイス2は、プリンタ機能、イメージスキャナ機能、コピー機能、ファクシミリ機能、および電話機能を兼ね備えた複合機である。
【0035】
[PCの構成]
PC1は、図1に示すように、CPU11、ROM12、RAM13、ハードディスク装置14(以下、HDD14という)、操作部15、表示部16、およびUSB(Universal Serial Bus)インターフェース17(以下、USB I/F17という)などを備えている。
【0036】
CPU11は、ROM12やRAM13に記憶されたプログラムに従って、PC1各部に対する制御および各種演算を実行する装置である。
ROM12は、PC1の電源スイッチを切っても記憶内容を保持可能な記憶装置で、BIOS(Basic Input Output System)や通常であれば更新されない読み出し用のデータ等を記憶している。
【0037】
RAM13は、CPU11から直接アクセスされるメインメモリ等として利用される記憶装置で、このRAM13には、OS(Operating System)や各種アプリケーションなどのソフトウェアがHDD14から読み込まれるようになっている。
【0038】
HDD14は、OS、各種アプリケーションプログラム、および各種データファイルを保存しておくための装置である。
操作部15は、利用者からの各種指示を入力するための入力装置であり、例えば、キーボードや各種ポインティングデバイス(例えば、マウス)等によって構成される。
【0039】
表示部16は、各種情報を利用者に提示するための出力装置であり、例えば、カラー画像を表示可能な液晶ディスプレイ等によって構成される。
USB I/F17は、USB規格準拠のシリアルインターフェースで、このUSB I/F17には、様々なデバイス(例えば、プリンタ、キーボード、マウス、スキャナ、スピーカー、各種ストレージデバイスなど)を接続することができるが、本実施形態において、USB I/F17にはデバイス2が接続されている。
【0040】
また、本実施形態において、PC1にはマルチタスク機能を備えたOSが搭載されている。このような機能を有するOSの具体例としては、例えば、Windows(登録商標)、Linux(登録商標)、MacOS(登録商標)などを挙げることができる。
【0041】
PC1が備えるCPU11は、OSのマルチタスク機能により、複数のソフトウェアに基づく処理を時分割で並列に実行することができ、これにより、後から詳述する複数の情報処理部や情報分配部がPC1上で機能するようになっている。また、PC1上では、OSが備える標準機能として、上述のUSB I/F17を介してデバイスとの通信を行う機能を実現するUSBコントローラや、デバイス2へ出力する印刷データを印刷ジョブとして管理する印刷スプーラなどが機能するようになっている。
【0042】
なお、OSによって提供されるこれらの各種機能そのものは公知なので、ここでの詳細な説明は省略するが、以下の説明においては、PC1が、Windows(登録商標)によって提供される各種機能を有するとの前提で説明を続ける。
【0043】
[デバイスの構成]
デバイス2は、CPU21、ROM22、RAM23、ハードディスク装置24(以下、HDD24という)、操作キー25、表示パネル26、USB I/F27、不揮発性RAM28、印字部29、読み取り部30、およびモデム31などを備えている。
【0044】
CPU21は、ROM22に記憶されている制御プログラムに従ってデバイス2各部の制御および各種演算を実行する装置である。
ROM22は、デバイス2の電源スイッチを切っても記憶内容を保持可能な記憶装置で、上記制御プログラムの他、通常であれば更新されない読み出し用の各種データを記憶している。
【0045】
RAM23は、CPU21から直接アクセスされるメインメモリ等として利用される記憶装置で、CPU21が処理中に算出する各種データなどが一時的にRAM23に記憶されるようになっている。
【0046】
HDD24は、ファクシミリ機能により送受信する画像、イメージスキャナ機能により読み取った画像、プリンタ機能により印刷する画像など、比較的サイズが大きい画像データを記憶する装置である。
【0047】
操作キー25は、利用者がマニュアル操作でデバイス2に対して指令を与える場合に操作する入力装置である。
表示パネル26は、小型液晶ディスプレイによって構成された装置で、デバイス2の設定や状態などの情報を表示できるようになっている。
【0048】
USB I/F27は、USB規格準拠のシリアルインターフェースで、このUSB I/F27を利用することにより、PC1との間でデータ通信を実行できるようになっている。
【0049】
不揮発性RAM28は、このデバイス2に関する設定等、電力供給が断たれたときにも消失させたくないデータを記憶する記憶装置である。
印字部29は、シート状の媒体(例えば記録用紙)に対する印刷を実行可能な装置で、プリンタ機能による印刷データの印刷、ファクシミリ機能による受信画像の印刷、コピー機能によるコピー画像の印刷等を行う際に作動する。
【0050】
読み取り部30は、自動原稿送り装置(図示略)にセットされた原稿またはフラットベッドのコンタクトガラス上に置かれた原稿から画像を読み取り可能な装置で、イメージスキャナ機能による画像の読み取り、ファクシミリ機能による送信画像の読み取り等を行う際に作動する。
【0051】
モデム31は、デバイス2側で作成されたデジタルデータを音声信号に変換して公衆回線側に送信したり、公衆回線側から受信した音声信号をデジタルデータに変換してデバイス2側で処理できるようにするための装置で、ファクシミリ機能による画像の送受信、電話機能による通話を行う際に作動する。
【0052】
[PCによるデバイス情報取得方法の概要]
次に、PC1によるデバイス情報取得方法の概要について説明する。
PC1が備えるCPU11は、上述した通り、複数のソフトウェアに基づく処理を時分割で並列に実行することができ、これにより、図2に示す情報分配部41や複数の情報処理部43a〜43cなどが、PC1上で機能するようになっている。
【0053】
これらのうち、情報分配部41はサーバーとして機能、複数の情報処理部43a〜43cはクライアントとして機能し、各情報処理部43a〜43cからの要求に応じて、情報分配部41がデバイス2からデバイス情報を取得するとともに、取得したデバイス情報を、各情報処理部43a〜43cからの要求に応じて、情報分配部41が各情報処理部43a〜43cへ提供する。そして、情報処理部43a〜43cそれぞれが、デバイス情報を利用して各種情報処理を行っている。情報処理部43a〜43cが行う情報処理の具体例としては、例えば、取得したデバイス情報に基づいてデバイス2の状態をほぼリアルタイムで表示部16に表示するステータスモニターとしての処理、あるいは、取得したデバイス情報に基づいてデバイス2のシリアル番号やファームウェアヴァージョン等の情報を表示する処理などを挙げることができる。なお、本実施形態では、3つの情報処理部43a〜43cが例示してあるが、情報処理部は並列にいくつ機能してもよい。また、各情報処理部が処理を開始するタイミングや処理を終了するタイミング等は任意であり、各情報処理部毎に独立したタイミングで構わない。
【0054】
一方、デバイス2は、PC1側からの要求に応じて、デバイス2に関する情報であるデバイス情報をPC1に対して提供する機能を備えている。本実施形態の場合、デバイス2は複合機なので、デバイス情報としては、例えば、オンライン、オフラインといった「デバイスの状態に関する情報」、用紙サイズ毎の印刷枚数あるいは総印刷枚数といった「使用頻度に関する情報」、ドラム交換時期などの「交換部品の使用度合に関する情報」、トナーないしインク残量や記録用紙残量といった「消耗品の消耗度合に関する情報」、紙詰まり回数といった「異常の発生回数に関する情報」などが提供される。これらのデバイス情報のうち、どれを提供するかは、PC1側から送信されてくるコマンドにより指定される。
【0055】
本実施形態において、PC1がデバイス2に対してデバイス情報を要求する際には、PC1からデバイス2に対してPJLコマンドを送信する。PJL(Printer Job Language;プリンタジョブ言語)は、プリンタが備える各種機能を制御するために用意されたコマンド言語で、Hewlett-Packard社において開発され、その後他社でも採用された周知のものである。
【0056】
PC1からデバイス2へPJLコマンドを送信する際には、PC1からデバイス2へ印刷データを出力する場合と同等の処理がPC1において実行される。具体的には、PC1上で機能する情報処理部43a〜43cが、情報分配部41に対してコマンド送信要求を送信すると、このコマンド送信要求に応じて情報分配部41がPJLコマンドを出力する。情報分配部41が出力したPJLコマンドは、プリンタドライバ経由で印刷スプーラに引き渡され、印刷スプーラは、受け取ったPJLコマンドを印刷ジョブとして処理する。その結果、PJLコマンドは、USB I/F17を通じてデバイス2へと出力されることになる。
【0057】
デバイス2では、通常の印刷データと同様にPJLコマンドを受信するが、受信したデータのヘッダ情報からPJLコマンドであることを認識し、その内容を解析する。その解析の結果、デバイス2が応答可能なPJLコマンドであった場合は、不揮発性RAM28に蓄積されているデバイス情報を読み出して、そのデバイス情報をPC1へと送信する。
【0058】
PC1では、情報分配部41がデバイス2から返されるデバイス情報をリードバックする。具体的には、デバイス2の場合、USB I/F17を介して接続されているので、情報分配部41が情報の受信を行い、受信した情報量が0(ゼロ)であった場合には再び情報の受信を繰り返し、その繰り返し処理によって情報を取得する。何らかのデータを受信した場合は、そのデータが所期のデバイス情報であるかどうかをチェックし、所期のデバイス情報でない場合は、さらに受信処理をやり直し、最終的に所期のデバイス情報を取得することになる。
【0059】
デバイス情報を取得した情報分配部41は、情報処理部43a〜43cそれぞれに対応付けて用意されたバッファ45a〜45cにデバイス情報を格納する。すなわち、バッファ45a〜45cには、同じ内容のデバイス情報が格納される。
【0060】
そして、情報分配部41が情報処理部43a〜43cのいずれか(例えば、情報処理部43a)からのリード要求を受けた場合、情報分配部41は、要求元の情報処理部(例えば、情報処理部43a)に対応するバッファ(例えば、バッファ45a)に格納されたデバイス情報を、要求元の情報処理部(例えば、情報処理部43a)に対して送信する。
【0061】
その結果、要求元の情報処理部(例えば、情報処理部43a)は、デバイス情報を取得することができるので、取得したデバイス情報に基づく情報処理(例えば、デバイス2の状態を表示部16に表示する処理等)を実行することができる。
【0062】
さて、以上のような仕組みにより、PC1とデバイスとの間では、PJLコマンドの送受信およびデバイス情報の送受信が行われるが、デバイス2は、PC1側からの要求に応じてデバイス情報を提供するものの、情報処理部43a〜43cのいずれが要求元であるのかを認識する仕組みにはなっていない。そのため、PC1側からのリードバックを受ければ、その時点でデバイス2が要求されていたすべてのデバイス情報をPC1側へ提供する。このような仕組みを採用しているため、各情報処理部43a〜43cそれぞれがデバイス情報の取得要求を発して、それらに対する応答として返すべきデバイス情報をデバイス2が用意しても、例えば、情報処理部43aが独自にデバイス2からのリードバックを行ってしまうと、他の情報処理部43b,43cに送信されるべきデバイス情報まで情報処理部43aに送信されてしまい、送信済みのデバイス情報は、デバイス2の送信バッファ内から消されてしまう。このような状況になった場合、その後、他の情報処理部43b,43cがデバイス2からのリードバックを行ったとしても、他の情報処理部43b,43cでは、必要なデバイス情報を受け取れないという事態を招く。
【0063】
上記情報分配部41は、こうした事態が発生するのを防止するために設けられたものである。具体例を交えて説明すると、例えば、各情報処理部43a〜43cそれぞれがデバイス情報の取得要求を発した場合、それらに対する応答として返すべきデバイス情報をデバイス2が用意するが、情報分配部41は、代表してデバイス2からのリードバックを行い、取得したデバイス情報を複数のバッファ45a〜45cに複製する。そして、各情報処理部43a〜43cは、独自にデバイス2からのリードバックを行わず、必ず情報分配部41からデバイス情報の提供を受ける。ここで、例えば、情報処理部43aが情報分配部41からデバイス情報の提供を受けた場合、送信済みのデバイス情報はバッファ45a内から消されてしまう。しかし、その後も、バッファ45b,45c内には、複製されたデバイス情報が残っているので、他の情報処理部43b,43cは、情報分配部41からデバイス情報の提供を受けることができるのである。
【0064】
[情報分配部における主処理]
次に、上記のような情報分配部41の機能を実現するため、情報分配部41において実行される主処理について、図3のフローチャートに基づいて説明する。この処理は、情報分配部41を機能させたい時点で開始されていればよい処理であり、例えば、PC1の起動に伴って開始される処理となっていればよい。
【0065】
この処理を開始すると、情報分配部41(正確には、情報分配部41として機能しているCPU11;以下、単に情報分配部41という)は、まずクライアントとなる情報処理部43a〜43cからの要求待ちになる(S105)。ここで、情報処理部43a〜43cのいずれかから何らかの要求があるとS105の処理を抜け、続いて、情報分配部41は、新規クライアント追加要求か否かを判断する(S110)。
【0066】
S110の処理において、新規クライアント追加要求であった場合(S110:YES)、情報分配部41は、要求元となったクライアントのIDをRAM13に記憶させる(S115)。このIDは、新規クライアント追加要求ごとに情報分配部41によりユニークな値が生成されるものである。このIDは、このクライアントからの追加要求終了時に、後述するS122の処理により、戻り値としてクライアントに渡される。以後クライアントは、後述する別の要求(クライアント削除要求、新規コマンド送信要求、デバイス情報呼び出し情報など)を発行する際に、このIDを指定することにより、その処理対象が自分であることを情報分配部41に知らせる。図2に示すように、クライアントである情報処理部43a〜43cには、それぞれユニークなID(図2に示した例では、AP1〜AP3)が付与されて、例えば、情報処理部43aが新規クライアント追加要求を行った場合を例に挙げれば、その追加要求中にはID:AP1が含まれているので、S115の処理では、ID:AP1を記憶する。以後は、クライアントからの要求中にID:AP1が含まれていれば、その要求が情報処理部43aからの要求であることを、情報分配部41側で認識できるようになる。そして、S115の処理を終えたら、要求元となったクライアントに対応するバッファを確保する(S120)。S120の処理で確保されるバッファは、図2に示したバッファ45a〜45cに相当するものであり、例えば、情報処理部43aが新規クライアント追加要求を行った場合を例に挙げれば、S120の処理によりバッファ45aが確保されることになる。そして、S120の処理を終えたら、上述したIDを戻り値としてクライアントに返してから(S122)、S105の処理へと戻り、再びS105以降の処理を繰り返す。なお、このバッファは、先のS115の処理により、生成・記憶されたIDと関連づけられて管理される。すなわちIDが与えられれば、対応するバッファが特定できるように管理される。
【0067】
さて一方、上記S110の処理において、新規クライアント追加要求ではなかった場合(S110:NO)、続いて、情報分配部41は、クライアント削除要求か否かを判断する(S125)。
【0068】
S125の処理において、クライアント削除要求であった場合(S125:YES)、情報分配部41は、要求元となったクライアントに対応するバッファを削除する(S130)。この際、クライアントはS115の処理で自分に与えられたIDを指定して、この削除要求を発行する。情報分配部41は、その指定されたIDに対応するバッファを削除するのである。例えば、情報処理部43aが新規クライアント追加要求を行った場合を例に挙げれば、S130の処理によりバッファ45aが削除されることになる。そして、S130の処理を終えたら、S105の処理へと戻り、再びS105以降の処理を繰り返す。
【0069】
一方、上記S125の処理において、クライアント削除要求ではなかった場合(S125:NO)、情報分配部41は、新規コマンド送信要求であるか否かを判断する(S135)。本実施形態においては、各情報処理部43a〜43cからPJLコマンドを含むコマンド送信要求がクライアントを示すIDとともに送信されてくる。ただし、これは、各情報処理部43a〜43cからPJLコマンドを示すPJL識別子を含むコマンド送信要求を送信するとともに、送信されて期したPJL識別子に基づいて、情報分配部41側でPJL識別子に対応するPJLコマンドを用意するようにしてもよい。
【0070】
S135の処理において、新規コマンド送信要求であった場合(S135:YES)、情報分配部41は、送信要求されたPJLコマンドをスプーラ経由でUSB I/F17を通じてデバイス2へ送信するとともに、その送信要求されたPJLコマンドを前記IDと関連付けてRAM13に記憶させる(S140)。なお、S140の処理でRAM13に記憶させたPJLコマンドは、後述するS215の判断処理において参照されることになる。そして、S140の処理を終えたら、S105の処理へと戻り、再びS105以降の処理を繰り返す。
【0071】
一方、S135の処理において、新規コマンド送信要求ではなかった場合(S135:NO)、本実施形態では、クライアントからデバイス情報のリード要求を受けたものと判断する。すなわち、新規クライアント追加要求、クライアント削除要求、および新規コマンド送信要求のいずれでもない要求としては、デバイス情報リード要求しか存在しないとの前提で処理を進めるように構成されている。この場合、情報分配部41は、クライアントが付与したIDに基づいて要求元となったクライアントに対応するバッファをサーチし、そのバッファ内に記憶されたデバイス情報(後述する常駐スレッド処理により記憶されたもの)を読み出して(S145)、読み出したデバイス情報を要求元となったクライアントに送信する(S150)。例えば、情報処理部43aからデバイス情報のリード要求を受けた場合を例に挙げれば、S145の処理によりバッファ45aからデバイス情報が読み出され、そのデバイス情報が、S145の処理によってクライアントである情報処理部43aに送信されることになる。なお、S145の処理により、バッファから読み出されるデバイス情報は、本処理と並列に実行される常駐スレッド処理によりデバイス2から読み出されてバッファに格納されたものであるが、この常駐スレッド処理の詳細については後述する。
【0072】
そして、S150の処理を終えたら、送信分のデバイス情報をバッファから削除して(S155)、S105の処理へと戻り、再びS105以降の処理を繰り返す。
[情報分配部における常駐スレッド処理]
次に、情報分配部41において主処理と並列に実行される常駐スレッド処理について、図4のフローチャートに基づいて説明する。
【0073】
この処理を開始すると、情報分配部41は、デバイス2よりデバイス情報の読み取りを行う(S205)。ここで、まだデバイス2に対してPJLコマンドが送信されていない場合など、デバイス2側がデバイス情報を送信できる状態にない場合は、S205の処理で読み取り待ちになり、何らかの情報を読み取ったらS205の処理を抜ける。
【0074】
続いて、情報分配部41は、ループ処理にてすべてのクライアントを順に処理するため、未処理のクライアントに対応するIDの中から、処理対象とするクライアントに対応する1つのIDを選ぶ(S210)。このS210の処理において、未処理のクライアントに対応するIDとは、上記S115の処理で記憶されたすべてのIDのうち、S210の処理でまだ選ばれたことがないIDである。
【0075】
S210の処理を終えたら、情報分配部41は、S205の処理で読み取った情報が、処理対象とするクライアント(=S210の処理で選んだIDに対応するクライアント)から送信要求されたコマンドの返答か否かを判断する(S215)。クライアントから送信要求されたコマンドは、上述したS140の処理によりRAM13に記憶されている。したがって、S215の処理では、S140の処理でRAM13に記憶されたコマンドと、S205の処理で読み取った情報とを対比することにより、所期のデバイス情報であるかどうかを判断することができる。
【0076】
S215の処理において、処理対象とするクライアントから送信要求されたコマンドの返答ではなかった場合(S215:NO)、S210の処理へと戻り、S210以降の処理を繰り返す。
【0077】
一方、S215の処理において、処理対象とするクライアントから送信要求されたコマンドの返答であった場合は(S215:YES)、S210の処理で選んだIDに対応するバッファに十分な空き領域があるか否かを判断する(S220)。そして、バッファに十分な空き領域がない場合は(S220:YES)、古いデバイス情報を捨ててバッファ内の領域を空ける(S225)。一方、バッファに十分な空き領域がある場合は(S220:NO)、S225の処理をスキップする。
【0078】
こうしてS220の処理またはS225の処理を終えたら、続いて、情報分配部41は、S205の処理で読み取ったデバイス情報を、S210の処理で選んだIDに対応するバッファに追記書き込みする(S230)。このS230の処理により、バッファ45a〜バッファ45cにはデバイス情報が格納され、このデバイス情報が上述したS145の処理によってバッファ45a〜バッファ45cから読み出されることになる。その後、情報分配部41は、S140の処理で記憶された対応情報を消去する(S232)。このS232の処理により、要求コマンドの処理が完了したと判断し、その要求情報を削除するのである。なお、この際要求コマンドがUSTATUSである場合は、この処理はスキップされる。これはUSTATUSの場合、要求コマンドと返信データが1対1に対応しないため、処理完了とはならないからである。
【0079】
そして、S230の処理を終えたら、上記S115の処理で記憶されたすべてのIDについての処理が終了したか否かを判断し(S235)、終了していなければ(S235:NO)、S210の処理へと戻り、再びS210〜S235の処理を繰り返す。
【0080】
一方、上記S115の処理で記憶されたすべてのIDについての処理が終了した場合(S235:YES)、この常駐スレッド処理を終了するか否かを判断し(S240)、終了すべきであれば(S240:YES)、常駐スレッド処理を終了する。また、常駐スレッド処理を終了しない場合は(S240:NO)、1秒待機して(S245)、S205の処理へと戻り、再びS205以降の処理を繰り返す。
【0081】
以上のような常駐スレッド処理が情報分配部41において実行されることにより、S205の処理でデバイス2からデバイス情報を読み取る毎に、S210〜S235のループ処理が実行され、このループ処理により、すべてのクライアント(情報処理部43a〜43c)に対応するバッファ45a〜45cにデバイス情報が分配される。そして、このデバイス情報の分配が完了したら、1秒の待機(S245)を経て、再びデバイス2からデバイス情報を読み取る処理(S205)以降の処理が繰り返されることになる。
【0082】
[情報処理部における処理の一例]
次に、情報処理部における処理の一例として、情報処理部43aで実行されるステータスモニター処理について、図5のフローチャートに基づいて説明する。
【0083】
各情報処理部43a〜43cから情報分配部41に対する要求を行う機能は、複数の情報処理部43a〜43cにおいて同じ機能が共通に利用されるものなので、クライアントDLL(Dynamic Link Library)として提供され、各情報処理部43a〜43cがクライアントDLLを動的にリンクすることで、情報分配部41に対する要求機能を利用できるようになっている。このクライアントDLLと、情報分配部41との通信は、Windowsのリモートプロシージャーコール(RPC)などの既存のプロセス間通信の機能を使用する。
【0084】
この処理を開始すると、情報処理部43a(正確には、情報処理部43aとして機能しているCPU11;以下、単に情報処理部43aという)は、クライアントオープン処理を実行する(S305)。このクライアントオープン処理は、ステータスモニターとしての処理を開始する上で必要なバッファの確保や各種データの初期化等を行う処理であるが、その中で、情報分配部41に対して新規クライアント追加要求が送信される。この新規クライアント追加要求が、情報分配部41において上記S105の処理で受信されると、情報分配部41においてS110〜S120の処理が実行されることになる。
【0085】
この新規クライアント追加処理の戻り値として、IDが返される。このIDは、後述する各要求時に、引数として付加される。
さて、S305の処理を終えたら、情報処理部43aは、コマンド送信処理を実行する(S310)。このコマンド送信処理は、PJLコマンドの送信等を行う処理であるが、PJLコマンドの送信は上記クライアントDLLを利用して実行され、これにより、PJLコマンドを含むコマンド送信要求が情報分配部41へと送信されることになる。この新規コマンド送信要求が、情報分配部41において上記S105の処理で受信されると、情報分配部41においてS135〜S140の処理が実行されることになる。
【0086】
こうしてコマンドを送信したら、情報処理部43aは、リード処理を実行する(S315)。このリード処理は、デバイス情報を取得する処理であり、さらに取得した最新のデバイス情報に基づく表示を表示部16に表示する処理なども含まれる。デバイス情報のリード要求は上記クライアントDLLを利用して実行される。このリード要求が、情報分配部41において上記S105の処理で受信されると、情報分配部41においてS145〜S155の処理が実行され、その結果、情報分配部41からはバッファ45aに格納されたデバイス情報が提供されることになる。
【0087】
S315の処理を終えたら、情報処理部43aは、処理を終了するか否かを判断し(S320)、終了しない場合は(S320:NO)、一秒待機して(S325)、S315の処理へと戻り、S315以降の処理を繰り返す。これにより、情報処理部43aは、繰り返しリード要求を発行して最新のデバイス情報を取得し、その最新のデバイス情報に基づく表示を表示部16に表示する処理を繰り返すことになる。
【0088】
一方、S320の処理において、処理を終了すると判断した場合は(S320:YES)、クライアントクローズ処理を実行する(S330)。このクライアントクローズ処理は、ステータスモニターとしての処理を終了する上で必要なバッファの削除(開放)等を行う処理であるが、その中で、情報分配部41に対してクライアント削除要求が送信される。このクライアント削除要求が、情報分配部41において上記S105の処理で受信されると、情報分配部41においてS125〜S130の処理が実行されることになる。そして、S330の処理を終えたら、本処理を終了する。
【0089】
[第1実施形態の効果]
以上説明したように、上記第1実施形態においては、デバイス2から一度しか受信できないデバイス情報であっても、そのデバイス情報を情報分配部41が取得して、情報分配部41が複数の情報処理部43a〜43cに対応するバッファ45a〜45cに複製するので、すべての情報処理部43a〜43cに対してデバイス情報を提供することができ、各情報処理部43a〜43cに適切な情報処理を実施させることができる。
【0090】
また、上記第1実施形態においては、デバイス2に送信したPJLコマンドに対応するデバイス情報以外の情報が、何らかの原因でデバイス2から取得できてしまった場合でも、上記S215の処理により、そのような情報を各情報処理部43a〜43cへ提供しないので、PC1には無駄な情報を各情報処理部43a〜43cへ提供するための負荷(すなわち、S220〜S230の処理を実行するための負荷)がかからなくなり、各情報処理部43a〜43cでも無駄な情報を処理するための負荷がかからなくなる。なお、何らかの原因でデバイス2から取得できてしまう情報としては、例えば、情報分配部41を経由することなく直接デバイス2へPJLコマンドを送信するアプリケーションが混在した場合に、そのようなアプリケーションへの応答として返すべきデバイス情報が、デバイス2から取得できてしまう可能性がある。望ましくは、そのようなアプリケーションが混在しないようにすることが重要であるが、上記第1実施形態では、次善の策として、そのようなアプリケーションが混在した場合でも、無駄な情報を各情報処理部43a〜43cへ提供してしまわないように対処することができる。
【0091】
さらに、上記第1実施形態においては、デバイス2から取得したデバイス情報をバッファ45a〜45cに一旦格納するので、デバイス2からデバイス情報を取得するタイミングとデバイス情報を情報処理部43a〜43cへ提供するタイミングを非同期とすることができ、各情報処理部43a〜43c側それぞれでデバイス情報が必要となったときに、各情報処理部43a〜43cに対してデバイス情報を提供することができる。
【0092】
また、上記第1実施形態においては、デバイス情報を情報処理部43a〜43c毎に確保されたバッファ45a〜45cに格納するので、複数の情報処理部43a〜43cがそれぞれバッファ45a〜45cに格納されたデバイス情報を利用する際に、一つのバッファ(例えば、バッファ45a)記憶領域で問題が生じても、他のバッファ(例えば、バッファ45b,45c)には悪影響を及ぼすことがない。
【0093】
[第2実施形態]
次に、第2実施形態について説明する。
ただし、第2実施形態は、一部の構成が第1実施形態と同様になるので、第2実施形態においては、第1実施形態との相違点を中心に詳述する。具体的には、PCおよびデバイスの構成と、情報処理部における処理は、第1実施形態と同様なので、その詳細な説明については省略する。ただし、第1実施形態とほぼ同様の構成については、第1実施形態と同じ符号を付すことで、第1実施形態とほぼ同様の構成であることを示す。
【0094】
[PCによるデバイス情報取得方法の概要]
以下、PC1によるデバイス情報取得方法の概要について説明する。
PC1上で情報分配部41や複数の情報処理部43a〜43cが機能する点は、第1実施形態と同様である。ただし、第2実施形態においては、情報分配部41の確保するバッファの構造が、第1実施形態とは相違する。
【0095】
具体的には、第1実施形態においては、各情報処理部43a〜43c毎に1つずつバッファを確保することにより、複数のバッファ45a〜45cが確保されていたが、第2実施形態においては、PJLコマンドに対する応答として返されるデバイス情報と、PJLコマンドの送信を要求したクライアント(情報処理部)のIDとを1組とする、複数組分の記憶領域を備えたバッファ47が確保されるようになっている。
【0096】
次に、上記バッファ47の利用方法を、具体例を交えて説明する。
情報処理部43aが、“@PJL1 INFO STATUS”というPJLコマンドの送信を、情報分配部41に対して要求した場合、情報分配部41は、“@PJL1 INFO STATUS”に対応する1組分の記憶領域を、バッファ47内に用意する。そして、“@PJL1 INFO STATUS”に対する応答として返されるデバイス情報をデバイス2から取得した際には、そのデバイス情報と、“@PJL1 INFO STATUS”の送信を要求したクライアント(情報処理部43a)のID(AP1)が、バッファ47内にある“@PJL1 INFO STATUS”に対応する1組分の記憶領域に格納される。
【0097】
その後、情報処理部43bが、同じく“@PJL1 INFO STATUS”というPJLコマンドの送信を、情報分配部41に対して要求した場合、情報分配部41は、既に“@PJL1 INFO STATUS”に対応する1組分の記憶領域が用意されているので、この場合は、新たな記憶領域を用意することはない。そして、“@PJL1 INFO STATUS”に対する応答として返されるデバイス情報をデバイス2から取得した際には、そのデバイス情報と、“@PJL1 INFO STATUS”の送信を要求したクライアント(情報処理部43a,43b)のID(AP1,AP2)が、バッファ47内にある“@PJL1 INFO STATUS”に対応する1組分の記憶領域に格納する。
【0098】
つまり、複数のクライアントからコマンドの送信が要求された場合でも、そのコマンドが同じコマンドである場合には、バッファ47内に新たな記憶領域が確保されることはなく、クライアントのIDのみが確保済みの記憶領域に追加登録される。
【0099】
一方、情報処理部43aが、“@PJL2 INFO PAGE”というPJLコマンドの送信を、情報分配部41に対して要求した場合、情報分配部41は、“@PJL2 INFO PAGE”に対応する新たな1組分の記憶領域を、バッファ47内に用意する。そして、“@PJL2 INFO PAGE”に対する応答として返されるデバイス情報をデバイス2から取得した際には、そのデバイス情報と、“@PJL2 INFO PAGE”の送信を要求したクライアント(情報処理部43a)のID(AP1)が、バッファ47内にある“@PJL2 INFO PAGE”に対応する1組分の記憶領域に格納される。
【0100】
つまり、同じクライアントからコマンドの送信が要求された場合でも、そのコマンドが異なるコマンドである場合には、バッファ47内に新たな記憶領域が確保される。
このようにして、デバイス情報がコマンド毎にバッファ47に格納されるとともに、IDがバッファ47に格納される結果、バッファ47には、図6に示すように、デバイス情報とIDとを1組とする複数組の情報が格納されることになる。
【0101】
その後、クライアントからのリード要求を受けると、情報分配部41は、リード要求の要求元に対応するIDを検索キーにして、バッファ47内をサーチする。例えば、情報処理部43aからのリード要求を受けた場合、ID:AP1を検索キーにしてバッファ47内がサーチされ、この場合、“@PJL1 INFO STATUS”と“@PJL2 INFO PAGE”に対応する記憶領域が検出されることになる。そして、検出された2組の記憶領域からデバイス情報が読み出され、それら2組分のデバイス情報が情報処理部43aに対して提供されることになる。
【0102】
[情報分配部における主処理]
次に、上記のような情報分配部41の機能を実現するため、情報分配部41において実行される主処理について、図7のフローチャートに基づいて説明する。この処理は、情報分配部41を機能させたい時点で開始されていればよい処理であり、例えば、PC1の起動に伴って開始される処理となっていればよい。
【0103】
この処理を開始すると、情報分配部41は、まずクライアントとなる情報処理部43a〜43cからの要求待ちになる(S405)。ここで、情報処理部43a〜43cのいずれかから何らかの要求があるとS405の処理を抜け、続いて、情報分配部41は、新規クライアント追加要求か否かを判断する(S410)。
【0104】
S410の処理において、新規クライアント追加要求であった場合(S410:YES)、情報分配部41は、要求元となったクライアントのIDをRAM13に記憶させる(S415)。図6に示すように、クライアントである情報処理部43a〜43cには、それぞれユニークなID(図6に示した例では、AP1〜AP3)が付与されており、このIDが第1実施形態の場合と同様に記憶される。そして、S415の処理を終えたら、S405の処理へと戻り、再びS405以降の処理を繰り返す。
【0105】
一方、上記S410の処理において、新規クライアント追加要求ではなかった場合(S410:NO)、続いて、情報分配部41は、クライアント削除要求か否かを判断する(S420)。
【0106】
S420の処理において、クライアント削除要求であった場合(S420:YES)、情報分配部41は、要求元となったクライアントに対応するIDを削除する(S425)。また、受信したデバイス情報(バッファ47内に格納されたデバイス情報)の中から、削除対象となったクライアントからのみ要求されていたデバイス情報を削除する(S425)。そして、S425の処理を終えたら、S405の処理へと戻り、再びS405以降の処理を繰り返す。
【0107】
一方、上記S420の処理において、クライアント削除要求ではなかった場合(S420:NO)、情報分配部41は、新規コマンド送信要求であるか否かを判断する(S435)。本実施形態においても、第1実施形態と同様、各情報処理部43a〜43cからPJLコマンドを含むコマンド送信要求が送信されてくる。
【0108】
S435の処理において、新規コマンド送信要求であった場合(S435:YES)、情報分配部41は、送信要求されたPJLコマンドをスプーラ経由でUSB I/F17を通じてデバイス2へ送信するとともに、その送信要求されたPJLコマンドをRAM13に記憶させる(S440)。なお、S440の処理でRAM13に記憶させたPJLコマンドは、後述するS510の判断処理において参照されることになる。そして、S440の処理を終えたら、S405の処理へと戻り、再びS405以降の処理を繰り返す。
【0109】
一方、S435の処理において、新規コマンド送信要求ではなかった場合(S435:NO)、第1実施形態と同様、クライアントからデバイス情報のリード要求を受けたものと判断する。そして、情報分配部41は、要求元となったクライアントに対応するIDを取得して(S445)、そのIDを検索キーにしてバッファ47の検索を行う(S450)。そして、検索キーにしたIDが登録された記憶領域が1組もバッファ47内から検出されないた場合には、要求したコマンドに対応するデバイス情報が存在しないことになるので、その場合は(S455:NO)、S405の処理へと戻り、再びS405以降の処理を繰り返す。
【0110】
一方、S455の処理において、要求したコマンドに対応するデバイス情報が1組分以上存在する場合には(S455:YES)、検出した1組分以上のデバイス情報を要求元となったクライアントに送信するとともに、そのデバイス情報に関連付けられたID(S440の処理において記憶されたもの)を削除する(S460)。なお、S460の処理により、クライアントに送信されるデバイス情報は、本処理と並列に実行される常駐スレッド処理によりデバイス2から読み出されてバッファ47に格納されたものであるが、この常駐スレッド処理の詳細については後述する。
【0111】
そして、S460の処理を終えたら、その要求コマンドに対する最後のクライアントであるか否かを判断し(S465)、最後のクライアントであれば(S465:YES)、デバイス情報をバッファ47から削除して(S470)、S405の処理へと戻る一方、最後のクライアントでなければ(S465:NO)、S470の処理を実行することなく、S405の処理へと戻る。なお、これらS465〜S470の処理は、複数のクライアントから同じコマンドの送信要求が出ている場合に、あるクライアントだけがデバイス情報を取得しても、他のクライアントがデバイス情報を取得していなければ、デバイス情報をバッファ47から削除せず、一方、全てのクライアントがデバイス情報を取得した際には、デバイス情報をバッファ47から削除するために設けられている。
【0112】
[情報分配部における常駐スレッド処理]
次に、情報分配部41において主処理と並列に実行される常駐スレッド処理について、図8のフローチャートに基づいて説明する。
【0113】
この処理を開始すると、情報分配部41は、デバイス2よりデバイス情報の読み取りを行う(S505)。ここで、まだデバイス2に対してPJLコマンドが送信されていない場合など、デバイス2側がデバイス情報を送信できる状態にない場合は、S505の処理で読み取り待ちになり、何らかの情報を読み取ったらS505の処理を抜ける。
【0114】
続いて、情報分配部41は、S505の処理で読み取った情報が、クライアントから送信要求されたコマンドの返答か否かを判断する(S510)。クライアントから送信要求されたコマンドは、上述したS440の処理によりRAM13に記憶されている。したがって、S510の処理では、S440の処理でRAM13に記憶されたコマンドと、S505の処理で読み取った情報とを対比することにより、所期のデバイス情報であるかどうかを判断することができる。
【0115】
S510の処理において、クライアントから送信要求されたコマンドの返答であった場合は(S510:YES)、そのコマンドを要求したクライアントのIDをサーチして(S515)、S505の処理で読み取ったデバイス情報とS515の処理で検出したIDとを組にして、バッファ47に記憶させる。なお、S510の処理において、クライアントから送信要求されたコマンドの返答ではなかった場合は(S510:NO)、上記S515,S520の処理をスキップする。
【0116】
こうして、S510〜S520の処理を終えたら、1秒待機して(S525)、S505の処理へと戻り、S505以降の処理を繰り返す。
以上のような常駐スレッド処理が情報分配部41において実行されることにより、S505の処理でデバイス2からデバイス情報を読み取る毎に、S510以降の処理が実行され、この処理により、バッファ47には、異なるコマンド毎に各コマンドに対応するデバイス情報が格納されることになる。
【0117】
[第2実施形態の効果]
以上説明したように、上記第2実施形態においても、デバイス2から一度しか受信できないデバイス情報を情報分配部41が取得して、情報分配部41が異なるコマンド毎にデバイス情報をバッファに保存し、そのデバイス情報を複数の情報処理部43a〜43cに提供するので、各情報処理部43a〜43cに適切な情報処理を実施させることができる。
【0118】
また、上記第2実施形態においても、デバイス2に送信したPJLコマンドに対応するデバイス情報以外の情報が、何らかの原因でデバイス2から取得できてしまった場合、上記S510の処理により、そのような情報を各情報処理部43a〜43cへ提供しないようにしているので、PC1には無駄な情報を各情報処理部43a〜43cへ提供するための負荷(すなわち、S515〜S520の処理を実行するための負荷)がかからなくなり、各情報処理部43a〜43cでも無駄な情報を処理するための負荷がかからなくなる。
【0119】
さらに、上記第2実施形態においても、デバイス2から取得したデバイス情報をバッファ47に一旦格納するので、デバイス2からデバイス情報を取得するタイミングとデバイス情報を情報処理部43a〜43cへ提供するタイミングを非同期とすることができ、各情報処理部43a〜43c側それぞれでデバイス情報が必要となったときに、各情報処理部43a〜43cに対してデバイス情報を提供することができる。
【0120】
また、上記第2実施形態においては、デバイス情報をバッファ47へ格納する際に異なるコマンド毎に格納するので、複数の情報処理部43a〜43cが同じコマンドを送信している場合に、同じデバイス情報を複数のバッファに格納しなくてもよく、その分だけRAM13の使用量を削減することができる。
【0121】
[第3実施形態]
次に、第3実施形態について説明する。
ただし、第3実施形態は、一部の構成が第1,第2実施形態と同様になるので、第3実施形態においては、第1,第2実施形態との相違点を中心に詳述する。具体的には、PCおよびデバイスの構成と、情報処理部における処理は、第1,第2実施形態と同様なので、その詳細な説明については省略する。ただし、第1,第2実施形態とほぼ同様の構成については、第1,第2実施形態と同じ符号を付すことで、第1,第2実施形態とほぼ同様の構成であることを示す。
【0122】
[PCによるデバイス情報取得方法の概要]
以下、PC1によるデバイス情報取得方法の概要について、図9に基づいて説明する。
PC1上で情報分配部41や複数の情報処理部43a〜43cが機能する点は、第1,第2実施形態と同様である。ただし、第3実施形態においては、PJLコマンドの一つであるUSTATUSに特化した処理を行っている点で、第1実施形態とは相違する。
【0123】
PJLコマンドの多くは、デバイスへ送信された場合に、送信されたコマンドに対する応答として1度だけデバイス情報が返されるが、USTATUSの場合は、ONを指示するコマンドを送信すると、以後、新たに同じコマンドを送信しなくても、デバイス2が自身の状態変化を検出するたびに、何度でもデバイス情報を返すようになる。
【0124】
そこで、第3実施形態においては、クライアント(情報処理部)からコマンド送信要求を受けた場合に、そのコマンドに対応するバッファを用意し、以後、コマンドに対する応答であるデバイス情報がデバイス2から返される毎に、そのコマンドに対応するバッファにデバイス情報を格納するようにしている。
【0125】
図9に例示したもので言えば、情報処理部43aが、“@PJL USTATUS DEVICE = ON”というPJLコマンドの送信を、情報分配部41に対して要求した場合、情報分配部41は、“USTATUS DEVICE”に対応するバッファ49aを確保する。一方、情報処理部43b,43cも、“@PJL USTATUS DEVICE = ON”というPJLコマンドの送信を、情報分配部41に対して要求することがあるが、この場合、“USTATUS DEVICE”に対応するバッファ49aは既に確保されているので、新たなバッファが確保されることはなく、既存のバッファ49aが、情報処理部43b,43cからも利用される状態になる。また、情報処理部43bが、“@PJL USTATUS PAGE = ON”というPJLコマンドの送信を、情報分配部41に対して要求した場合、情報分配部41は、“USTATUS PAGE”に対応するバッファ49bを確保し、情報処理部43cが、“@PJL USTATUS JOB = ON”というPJLコマンドの送信を、情報分配部41に対して要求した場合、情報分配部41は、“USTATUS JOB”に対応するバッファ49cを確保する。以後は、上述の通り、デバイス2が自身の状態変化を検出するたびにデバイス情報を返すようになるので、デバイス2からデバイス情報をデバイス2から取得した際には、そのデバイス情報に対応するPJLコマンドを判断し、そのPJLコマンドに対応するバッファ(バッファ49a〜49cのいずれか)にデバイス情報が格納されることになる。
【0126】
[情報分配部における主処理]
次に、上記のような情報分配部41の機能を実現するため、情報分配部41において実行される主処理について、図10のフローチャートに基づいて説明する。この処理は、情報分配部41を機能させたい時点で開始されていればよい処理であり、例えば、PC1の起動に伴って開始される処理となっていればよい。
【0127】
この処理を開始すると、情報分配部41は、まずクライアントとなる情報処理部43a〜43cからの要求待ちになる(S605)。ここで、情報処理部43a〜43cのいずれかから何らかの要求があるとS605の処理を抜け、続いて、情報分配部41は、新規クライアント追加要求か否かを判断する(S610)。
【0128】
S610の処理において、新規クライアント追加要求であった場合(S610:YES)、情報分配部41は、要求元となったクライアントのIDをRAM13に記憶させる(S615)。図6に示すように、クライアントである情報処理部43a〜43cには、それぞれユニークなID(図9に示した例では、AP1〜AP3)が付与されており、このIDが第1実施形態の場合と同様に記憶される。そして、S615の処理を終えたら、S605の処理へと戻り、再びS605以降の処理を繰り返す。
【0129】
一方、上記S610の処理において、新規クライアント追加要求ではなかった場合(S610:NO)、続いて、情報分配部41は、クライアント削除要求か否かを判断する(S620)。
【0130】
S620の処理において、クライアント削除要求であった場合(S620:YES)、情報分配部41は、要求元となったクライアントに対応するIDを削除する(S625)。また、受信したデバイス情報(バッファ47内に格納されたデバイス情報)の中から、削除対象となったクライアントからのみ要求されていたデバイス情報を削除する(S625)。そして、S625の処理を終えたら、S605の処理へと戻り、再びS605以降の処理を繰り返す。
【0131】
一方、上記S620の処理において、クライアント削除要求ではなかった場合(S620:NO)、情報分配部41は、新規USTATUS取得コマンド送信要求であるか否かを判断する(S635)。本実施形態においても、第1実施形態と同様、各情報処理部43a〜43cからPJLコマンドを含むコマンド送信要求が送信されてくるが、その中に含まれるPJLコマンドはUSTATUS取得コマンドとなっている。
【0132】
S635の処理において、新規USTATUS取得コマンド送信要求であった場合(S635:YES)、情報分配部41は、送信要求されたUSTATUS ONコマンドをスプーラ経由でUSB I/F17を通じてデバイス2へ送信するとともに、もしそのPJL USTATUSコマンドがはじめて送られたものであるならば、その送信要求されたPJLコマンドに対応する新規バッファを作成する(S640)。このとき他のクライアントにより既にバッファが作成されていたならば、このS640の処理はスキップされる。なお、S640の処理で作成されたバッファには、後述する常駐スレッド処理により、不定期に何度もデバイス情報が格納されるようになる。そして、S640の処理を終えたら、S605の処理へと戻り、再びS605以降の処理を繰り返す。
【0133】
一方、S635の処理において、新規USTATUS取得コマンド送信要求ではなかった場合(S635:NO)、USTATUS削除要求であるか否かを判断する(S645)。先に説明した通り、USTATUSは、一度ONコマンドを送信すると、その後は何度でもデバイス情報が返されるため、このデバイス情報をデバイス2が返さないようにするには、OFFコマンドを送信する必要がある。S645の処理は、このOFFコマンドの送信に対応する処理であり、USTATUS削除要求であった場合(S645:YES)、情報分配部41は、それを要求してきたクライアントが最後のクライアントか否かを判断し、もし最後ならば、送信要求されたUSTATUS OFFコマンドをスプーラ経由でUSB I/F17を通じてデバイス2へ送信するとともに、その送信要求されたPJLコマンドに対応するバッファを削除する(S650)。もし他にもそのUSTATUSコマンドを要求しているクライアントがある場合は、これらコマンド送信、バッファ削除の処理(S650の処理)はスキップされる。そして、S650の処理を終えたら、S605の処理へと戻り、再びS605以降の処理を繰り返す。
【0134】
一方、S645の処理において、USTATUS削除要求ではなかった場合(S645:NO)、クライアントからデバイス情報のリード要求を受けたものと判断する。USTATUS削除要求ではなかったことをもって、リード要求を受けたものと判断できるのは、第1,第2実施例と同様の理由である。この場合、情報分配部41は、要求元となったクライアントから要求されているUSTATUSのリストを取り出して(S655)、そのリストにあるすべてのUSTATUSのバッファの内容をクライアントに送る(S660)。例えば、要求元となったクライアントが図9に示した情報処理部43bである場合、S655の処理では、クライアントから要求されているUSTATUSのリストとして、“USTATUS DEVICE”,“USTATUS PAGE”が取り出され、S660の処理では、“USTATUS DEVICE”,“USTATUS PAGE”に対応するバッファ49a,49vの内容が情報処理部43bに送られることになる。そして、S660の処理を終えたら、S605の処理へと戻り、再びS605以降の処理を繰り返す。
【0135】
[情報分配部における常駐スレッド処理]
次に、情報分配部41において主処理と並列に実行される常駐スレッド処理について、図11のフローチャートに基づいて説明する。
【0136】
この処理を開始すると、情報分配部41は、デバイス2よりデバイス情報の読み取りを行う(S705)。ここで、まだデバイス2に対してPJLコマンドが送信されていない場合など、デバイス2側がデバイス情報を送信できる状態にない場合は、S705の処理で読み取り待ちになり、何らかの情報を読み取ったらS705の処理を抜ける。
【0137】
続いて、情報分配部41は、S705の処理で読み取った情報が、クライアントから送信要求されたコマンドの返答か否かを判断する(S710)。クライアントから送信要求されたコマンドである場合、そのコマンドに対応するバッファが上述したS640の処理により確保されている。したがって、S710の処理では、S640の処理で確保されたバッファに対応するコマンドと、S705の処理で読み取った情報とを対比することにより、所期のデバイス情報であるかどうかを判断することができる。
【0138】
S710の処理において、クライアントから送信要求されたコマンドの返答であった場合は(S710:YES)、そのデバイス情報を、対応するコマンドのバッファに記憶させる(S715)。なお、S710の処理において、クライアントから送信要求されたコマンドの返答ではなかった場合は(S710:NO)、上記S715の処理をスキップする。
【0139】
こうして、S710〜S715の処理を終えたら、S705の処理へと戻り、S705以降の処理を繰り返す。
以上のような常駐スレッド処理が情報分配部41において実行されることにより、S705の処理でデバイス2からデバイス情報を読み取る毎に、S710以降の処理が実行され、この処理により、バッファ47には、異なるUSTATUS毎に各USTATUSに対応するデバイス情報が格納されることになる。
【0140】
[第3実施形態の効果]
以上説明したように、上記第3実施形態においても、デバイス2から一度しか受信できないデバイス情報を情報分配部41が取得して、情報分配部41が異なるUSTATUS毎にデバイス情報をバッファに保存し、そのデバイス情報を複数の情報処理部43a〜43cに提供するので、各情報処理部43a〜43cに適切な情報処理を実施させることができる。
【0141】
また、上記第3実施形態においても、デバイス2に送信したPJLコマンドに対応するデバイス情報以外の情報が、何らかの原因でデバイス2から取得できてしまった場合、上記S710の処理により、そのような情報を各情報処理部43a〜43cへ提供しないようにしているので、PC1には無駄な情報を各情報処理部43a〜43cへ提供するための負荷(すなわち、S715の処理を実行するための負荷)がかからなくなり、各情報処理部43a〜43cでも無駄な情報を処理するための負荷がかからなくなる。
【0142】
さらに、上記第3実施形態においても、デバイス2から取得したデバイス情報をバッファ49a〜49cに一旦格納するので、デバイス2からデバイス情報を取得するタイミングとデバイス情報を情報処理部43a〜43cへ提供するタイミングを非同期とすることができ、各情報処理部43a〜43c側それぞれでデバイス情報が必要となったときに、各情報処理部43a〜43cに対してデバイス情報を提供することができる。
【0143】
また、上記第3実施形態においては、デバイス情報をバッファ47へ格納する際に異なるUSTATUS毎に格納するので、複数の情報処理部43a〜43cが同じUSTATUS取得要求を送信している場合に、同じUSTATUSを複数のバッファに格納しなくてもよく、その分だけRAM13の使用量を削減することができる。
【0144】
[第4実施形態]
上述の第1実施形態〜第3実施形態では、PC1の利用形態について特に言及しておらず、代表的な利用形態としては、例えば、PC1を単独で利用するような利用形態などを想定できたが、上記PC1は、ターミナルサーバーとして利用した場合に優れた効果を発揮するので、以下、PC1をターミナルサーバーとして利用した実施形態について説明する。
【0145】
図12(a)は、上述の第1実施形態〜第3実施形態のいずれかで説明したPC1をターミナルサーバーとして利用した場合の概略構成図である。
PC1には、上述の第1実施形態〜第3実施形態と同様、USBインターフェースを介してデバイス2が接続されている。また、上述の第1実施形態〜第3実施形態では言及しなかったが、PC1は、複数のターミナル3a〜3cとネットワーク4を介してデータ通信可能に構成されている。
【0146】
このようなターミナルサーバーシステムの場合、ターミナル3a〜3cは、単に利用者に入出力インターフェースを提供する装置として機能するので、例えば、ハードディスク装置を持たない安価なPCを、ターミナル3a〜3cとして採用することもできる。一方、PC1には、マルチユーザ機能を備えたOSが搭載され、クライアントである複数のターミナル3a〜3cからの要求に応じて、各種アプリケーションがPC1上において並列に機能する。各ターミナル3a〜3cでの入力操作が行われた場合、その入力データ(例えば、キー入力されたデータ)はネットワーク4を通じてPC1へと伝送され、その入力データに基づく各種処理がPC1上で実行される。そして、その処理結果である出力データ(例えば、画面表示用データ)は、ネットワーク4を通じて各ターミナル3a〜3cへと伝送され、各ターミナル3a〜3cにおいて出力(例えば、画面表示)されることになる。
【0147】
以上のように構成されたターミナルサーバーシステムにおいて、各ターミナル3a〜3cの利用者は、それぞれがデバイス2の状態を知りたいことがあり、その場合、各ターミナル3a〜3cそれぞれにおいて、ステータスモニターが利用される可能性がある。ターミナルサーバーシステムの場合、各ターミナル3a〜3cそれぞれにおいてステータスモニターが利用されても、ステータスモニターが稼働するのはPC1上となる。そのため、デバイス2は、複数のステータスモニターからデバイス情報の提供を要求される可能性がある。
【0148】
しかし、デバイス情報は、単にPC1側からの要求に応じて、その時点で最新のデバイス情報をPC1側へ返すだけであり、複数のステータスモニターそれぞれに対して個別にデバイス情報を提供するような仕組みにはなっていない。
【0149】
そのため、本発明の構成を備えていないターミナルサーバー上で、複数のステータスモニターが稼働した場合、最初にデバイス情報の取得を試みたステータスモニターがデバイス情報を取得してしまうと、後からデバイス情報の取得を試みた他のステータスモニターは、所期のデバイス情報を取得することができない、という問題を招く。
【0150】
これに対し、上記各実施形態の如く構成されたPC1をターミナルサーバーとして利用すれば、図12(b)に示すように、SYSTEMコンテキスト51において上述の情報分配部41が機能するとともに、ターミナル3a〜3cに対応する各ユーザーコンテキスト52a〜52cにおいて上述の情報処理部43a〜43cに相当するステータスモニターが機能する構成とすることができる。このような構成にすれば、上記各実施形態において説明した通りの作用、効果により、各ステータスモニター(情報処理部43a〜43c)から送信要求されたコマンドに対する応答として返されるデバイス情報が、情報分配部41によって各ステータスモニター(情報処理部43a〜43c)へと送信されるので、最初にデバイス情報の取得を試みたステータスモニターはもちろんのこと、後からデバイス情報の取得を試みた他のステータスモニターも、所期のデバイス情報を取得できるようになる。
【0151】
また、複数のステータスモニター(情報処理部43a〜43c)から同じコマンドの送信要求があった場合には、最初にデバイス情報の取得を試みたステータスモニターに対して提供したデバイス情報が既にバッファの中に格納されているので、後からデバイス情報の取得を試みた他のステータスモニターに対しては、迅速にデバイス情報を提供することができる。
【0152】
さらに、上記第2,第3実施形態と同様の構成を備えている場合には、複数のステータスモニター(情報処理部43a〜43c)から同じコマンドの送信要求があった場合でも、情報分配部41ではコマンド毎にバッファが確保されるので、PC1が備えるRAM13の使用量を減らすことができる。
【0153】
[上記実施形態と本発明との対応関係]
以上説明した各実施形態において、PC1は、デバイス2に関する情報であるデバイス情報に基づく情報処理を実行する複数の情報処理部43a〜43cと、情報処理部43a〜43cそれぞれがデバイス2からデバイス情報を取得するために利用されるUSB I/F17とを備える装置であり、このPC1が本発明でいう情報処理装置に相当する。
【0154】
また、PC1がS105,S405,S605の処理を実行した際、PC1は、本発明でいう情報処理装置に相当するPC1上の、情報処理部43a〜43cのいずれかから送信されるコマンド送信要求を受信する手段として機能しており、これが本発明でいうコマンド送信要求受信手段に相当する。
【0155】
また、PC1がS135〜S140,S435〜S440,S635〜S640の処理を実行した際、PC1は、上記コマンド送信要求受信手段(S105,S405,S605)によって受信したコマンド送信要求に対応するコマンドを、USB I/F17を通じてデバイス2へ送信する手段として機能しており、これが本発明でいうコマンド送信手段に相当する。
【0156】
また、PC1がS205,S505,S705の処理を実行した際、PC1は、コマンドに対する応答としてデバイス2から提供されるデバイス情報を取得する手段として機能しており、これが本発明でいうデバイス情報取得手段に相当する。
【0157】
また、PC1がS145〜S150,S450〜S460,S655〜S660の処理を実行した際、PC1は、上記デバイス情報取得手段(S205,S505,S605)によって取得したデバイス情報を、複数の情報処理部43a〜43cへと提供可能な手段として機能しており、これが本発明でいうデバイス情報提供手段に相当する。
【0158】
さらに、PC1がS140,S440,S640の処理を実行した際、PC1は、上記コマンド送信要求受信手段(S105,S405,S605)によって受信したコマンド送信要求に対応するコマンドを示すコマンド情報を、PC1が備えるRAM13に記憶させる手段として機能しており、これが本発明でいうコマンド情報記憶制御手段に相当する。
【0159】
また、PC1がS215,S510,S710の処理を実行した際、PC1は、RAM13に記憶されたコマンド情報に基づいて、上記デバイス情報取得手段(S205,S405,S605)によって取得したデバイス情報が、コマンド情報の示すコマンドに対応するデバイス情報であるか否かを判定する手段として機能しており、これが本発明でいう判定手段に相当する。
【0160】
さらに、PC1がS515〜S520の処理を実行した際、PC1は、上記コマンド送信要求受信手段(S405)によって受信したコマンド送信要求の送信元となる情報処理部を示すID(送信元情報)を、PC1が備えるRAM13(バッファ47)に記憶させる手段として機能しており、これが本発明でいう送信元情報記憶制御手段に相当する。
【0161】
また、PC1がS445〜S450の処理を実行した際、PC1は、上記判定手段(S510)によってコマンド情報の示すコマンドに対応すると判定されたデバイス情報の提供先とすべき情報処理部を、RAM13(バッファ47)に記憶されたID(送信元情報)に基づいて複数の情報処理部の中から選択する手段として機能しており、これが本発明でいう選択手段に相当する。
【0162】
[変形例等]
以上、本発明の実施形態について説明したが、本発明は上記の具体的な一実施形態に限定されず、この他にも種々の形態で実施することができる。
【0163】
例えば、上記各実施形態においては、上記S215,S510,S710の処理を実行することにより、取得したデバイス情報が、送信したコマンドに対応するものか否かを判断していたが、この判断をすることなく、取得したデバイス情報すべてをそのまま各情報処理部へ送信するように構成してもよい。ただし、この場合は、情報処理部側にとって不要な情報が情報処理部側へ渡る可能性もあるので、情報処理部側でデバイス情報の取捨選択を適切に行うようにする。
【0164】
また、上記各実施形態においては、情報分配部−情報処理部間のデータ送信方法について特に具体的な言及をしなかったが、任意の方法でプロセス間通信を行えばよく、例えば、共有メモリなどを利用してデータのやり取りを行えばよい。
【0165】
また、上記第1実施形態においては、S255の処理により、古い情報を捨てるように構成してあったが、古い情報をそのまま残して、取得した最新の情報を捨てるように構成することも可能である。どちらの構成を採用するかは、古い情報と新しい情報のどちらがより重要かを勘案して決めればよい。
【0166】
さらに、上記各実施形態では、デバイスと接続されるPC、情報分配部としての機能を有するPC、複数の情報処理部としての機能を有するPCが、単一のPC1となっている構成例について説明したが、これらが複数のPCに分散配置され、その複数のPCが協働して上記PC1と同等に機能するように構成されていてもよい。この場合、複数のPCは、ネットワークを介して通信可能に構成され、あるPCに配された手段の出力データが別のPCに配された手段の入力データとなるのであれば、あるPCで得られた出力データをネットワークを介して別のPCへと伝送して、複数のPCを備えたネットワークシステム全体が、上記PC1と同等に機能するように構成する。
【0167】
より具体的な例を挙げれば、上記PC1にデバイス2を接続するとともに、PC1が複数の情報処理部を備える構成とし、上記PC1が備えていた情報分配部41については、PC1上には設けず、その代わりにPC1とは別のサーバー(以下、情報分配サーバーという)を設け、各情報処理部とデバイスとの間でやり取りされる各種データを、一旦PC1から情報分配サーバーへと転送して、その情報分配サーバーで上記情報分配部41において実行されていた各種処理を実行し、その処理結果を情報分配サーバーからPC1へ戻すように構成してもよい。
【図面の簡単な説明】
【0168】
【図1】第1実施形態において例示したコンピュータとデバイスの概略構成図。
【図2】第1実施形態におけるデバイス情報の分配方法を説明するための説明図。
【図3】第1実施形態の情報分配部において実行される主処理のフローチャート
【図4】第1実施形態の情報分配部において実行される常駐スレッド処理のフローチャート。
【図5】第1実施形態の情報処理部で実行されるステータスモニター処理のフローチャート。
【図6】第2実施形態におけるデバイス情報の分配方法を説明するための説明図。
【図7】第2実施形態の情報分配部において実行される主処理のフローチャート
【図8】第2実施形態の情報分配部において実行される常駐スレッド処理のフローチャート。
【図9】第3実施形態におけるデバイス情報の分配方法を説明するための説明図。
【図10】第3実施形態の情報分配部において実行される主処理のフローチャート
【図11】第3実施形態の情報分配部において実行される常駐スレッド処理のフローチャート。
【図12】第4実施形態において例示したターミナルサーバーとターミナルの概略構成図。
【符号の説明】
【0169】
1・・・パーソナルコンピュータ(PC)、2・・・デバイス、3a〜3c・・・ターミナル、4・・・ネットワーク、11,21・・・CPU、12,22・・・ROM、13,23・・・RAM、14,24・・・ハードディスク装置(HDD)、15・・・操作部、16・・・表示部、17,27・・・USBインターフェース(USB I/F)、25・・・操作キー、26・・・表示パネル、28・・・不揮発性RAM、29・・・印字部、30・・・読み取り部、31・・・モデム、41・・・情報分配部、43a〜43c・・・情報処理部、45a,45b,45c,47,49a,49b,49c・・・バッファ、51・・・SYSTEMコンテキスト、52a〜52c・・・ユーザーコンテキスト。
【特許請求の範囲】
【請求項1】
デバイスに関する情報であるデバイス情報に基づく情報処理を実行する複数の情報処理部と、前記情報処理部それぞれが前記デバイスからデバイス情報を取得するために利用されるインターフェースと、を備える情報処理装置上の、前記情報処理部のいずれかから送信されるコマンド送信要求を受信するコマンド送信要求受信手段、
前記コマンド送信要求受信手段によって受信したコマンド送信要求に対応するコマンドを、前記インターフェースを通じて前記デバイスへ送信するコマンド送信手段、
前記コマンドに対する応答として前記デバイスから提供される前記デバイス情報を取得するデバイス情報取得手段、および
前記デバイス情報取得手段によって取得した前記デバイス情報を、前記複数の情報処理部へと提供可能なデバイス情報提供手段
としてコンピュータを機能させることを特徴とする情報分配処理プログラム。
【請求項2】
さらに、
前記コマンド送信要求受信手段によって受信したコマンド送信要求に対応するコマンドを示すコマンド情報を、前記コンピュータが備える記憶手段に記憶させるコマンド情報記憶制御手段、および
前記記憶手段に記憶されたコマンド情報に基づいて、前記デバイス情報取得手段によって取得した前記デバイス情報が、前記コマンド情報の示すコマンドに対応するデバイス情報であるか否かを判定する判定手段
として、前記コンピュータを機能させるように構成されており、
前記デバイス情報提供手段は、前記判定手段によって前記コマンド情報の示すコマンドに対応するデバイス情報であると判定されたデバイス情報のみを、前記複数の情報処理部へと提供可能な手段
として機能するように構成されていることを特徴とする請求項1に記載の情報分配処理プログラム。
【請求項3】
さらに、
前記コマンド送信要求受信手段によって受信したコマンド送信要求の送信元となる前記情報処理部を示す送信元情報を、前記コンピュータが備える記憶手段に記憶させる送信元情報記憶制御手段、および
前記判定手段によって前記コマンド情報の示すコマンドに対応すると判定されたデバイス情報の提供先とすべき前記情報処理部を、前記記憶手段に記憶された送信元情報に基づいて前記複数の情報処理部の中から選択する選択手段
として、前記コンピュータを機能させるように構成されており、
前記デバイス情報提供手段は、前記判定手段によって前記コマンド情報の示すコマンドに対応するデバイス情報であると判定されたデバイス情報のみを、前記選択手段によって選択された前記情報処理部へと提供可能な手段
として機能するように構成されていることを特徴とする請求項2に記載の情報分配処理プログラム。
【請求項4】
前記デバイス情報提供手段は、前記デバイス情報取得手段によって取得した前記デバイス情報を、前記コンピュータが備える記憶手段内に確保された記憶領域に格納することにより、前記デバイス情報を取得するタイミングとは非同期で、前記記憶領域に格納されたデバイス情報を、前記複数の情報処理部へと提供可能な手段
として機能するように構成されていることを特徴とする請求項1〜請求項3のいずれかに記載の情報分配処理プログラム。
【請求項5】
前記デバイス情報提供手段は、前記デバイス情報取得手段によって取得した前記デバイス情報を前記記憶領域に格納する際、前記コマンド送信要求受信手段によって受信したコマンド送信要求の送信元となる前記情報処理部毎に確保された前記記憶領域に格納する手段
として機能するように構成されていることを特徴とする請求項4に記載の情報分配処理プログラム。
【請求項6】
前記デバイス情報提供手段は、前記デバイス情報取得手段によって取得した前記デバイス情報を記憶領域に格納する際、異なる前記コマンド毎に確保された前記記憶領域に格納する手段
として機能するように構成されていることを特徴とする請求項4に記載の情報分配処理プログラム。
【請求項7】
デバイスに関する情報であるデバイス情報に基づく情報処理を実行する複数の情報処理部と、前記情報処理部それぞれが前記デバイスからデバイス情報を取得するために利用されるインターフェースと、を備える情報処理装置上の、前記情報処理部のいずれかから送信されるコマンド送信要求を受信するコマンド送信要求受信手段、
前記コマンド送信要求受信手段によって受信したコマンド送信要求に対応するコマンドを、前記インターフェースを通じて前記デバイスへ送信するコマンド送信手段、
前記コマンドに対する応答として前記デバイスから提供される前記デバイス情報を取得するデバイス情報取得手段、および
前記デバイス情報取得手段によって取得した前記デバイス情報を、前記複数の情報処理部へと提供可能なデバイス情報提供手段
を備えたことを特徴とするコンピュータ。
【請求項8】
デバイスに関する情報であるデバイス情報に基づく情報処理を実行する複数の情報処理部と、前記情報処理部それぞれが前記デバイスからデバイス情報を取得するために利用されるインターフェースと、を備える情報処理装置上の、前記情報処理部のいずれかから送信されるコマンド送信要求を受信するコマンド送信要求受信手順、
前記コマンド送信要求受信手順において受信したコマンド送信要求に対応するコマンドを、前記インターフェースを通じて前記デバイスへ送信するコマンド送信手順、
前記コマンドに対する応答として前記デバイスから提供される前記デバイス情報を取得するデバイス情報取得手順、および
前記デバイス情報取得手順において取得した前記デバイス情報を、前記複数の情報処理部へと提供するデバイス情報提供手順
を備えることを特徴とする情報分配処理方法。
【請求項9】
デバイスと、前記デバイスとデータ通信可能なコンピュータとを、少なくとも備えるとともに、前記コンピュータ自体が情報処理装置として機能するように構成されるか前記コンピュータとは別の情報処理装置が前記コンピュータとデータ通信可能に構成されたシステムであり、
前記コンピュータは、
デバイスに関する情報であるデバイス情報に基づく情報処理を実行する複数の情報処理部と、前記情報処理部それぞれが前記デバイスからデバイス情報を取得するために利用されるインターフェースと、を備える前記情報処理装置上の、前記情報処理部のいずれかから送信されるコマンド送信要求を受信するコマンド送信要求受信手段、
前記コマンド送信要求受信手段によって受信したコマンド送信要求に対応するコマンドを、前記インターフェースを通じて前記デバイスへ送信するコマンド送信手段、
前記コマンドに対する応答として前記デバイスから提供される前記デバイス情報を取得するデバイス情報取得手段、および
前記デバイス情報取得手段によって取得した前記デバイス情報を、前記複数の情報処理部へと提供可能なデバイス情報提供手段
を備えることを特徴とする情報分配処理システム。
【請求項1】
デバイスに関する情報であるデバイス情報に基づく情報処理を実行する複数の情報処理部と、前記情報処理部それぞれが前記デバイスからデバイス情報を取得するために利用されるインターフェースと、を備える情報処理装置上の、前記情報処理部のいずれかから送信されるコマンド送信要求を受信するコマンド送信要求受信手段、
前記コマンド送信要求受信手段によって受信したコマンド送信要求に対応するコマンドを、前記インターフェースを通じて前記デバイスへ送信するコマンド送信手段、
前記コマンドに対する応答として前記デバイスから提供される前記デバイス情報を取得するデバイス情報取得手段、および
前記デバイス情報取得手段によって取得した前記デバイス情報を、前記複数の情報処理部へと提供可能なデバイス情報提供手段
としてコンピュータを機能させることを特徴とする情報分配処理プログラム。
【請求項2】
さらに、
前記コマンド送信要求受信手段によって受信したコマンド送信要求に対応するコマンドを示すコマンド情報を、前記コンピュータが備える記憶手段に記憶させるコマンド情報記憶制御手段、および
前記記憶手段に記憶されたコマンド情報に基づいて、前記デバイス情報取得手段によって取得した前記デバイス情報が、前記コマンド情報の示すコマンドに対応するデバイス情報であるか否かを判定する判定手段
として、前記コンピュータを機能させるように構成されており、
前記デバイス情報提供手段は、前記判定手段によって前記コマンド情報の示すコマンドに対応するデバイス情報であると判定されたデバイス情報のみを、前記複数の情報処理部へと提供可能な手段
として機能するように構成されていることを特徴とする請求項1に記載の情報分配処理プログラム。
【請求項3】
さらに、
前記コマンド送信要求受信手段によって受信したコマンド送信要求の送信元となる前記情報処理部を示す送信元情報を、前記コンピュータが備える記憶手段に記憶させる送信元情報記憶制御手段、および
前記判定手段によって前記コマンド情報の示すコマンドに対応すると判定されたデバイス情報の提供先とすべき前記情報処理部を、前記記憶手段に記憶された送信元情報に基づいて前記複数の情報処理部の中から選択する選択手段
として、前記コンピュータを機能させるように構成されており、
前記デバイス情報提供手段は、前記判定手段によって前記コマンド情報の示すコマンドに対応するデバイス情報であると判定されたデバイス情報のみを、前記選択手段によって選択された前記情報処理部へと提供可能な手段
として機能するように構成されていることを特徴とする請求項2に記載の情報分配処理プログラム。
【請求項4】
前記デバイス情報提供手段は、前記デバイス情報取得手段によって取得した前記デバイス情報を、前記コンピュータが備える記憶手段内に確保された記憶領域に格納することにより、前記デバイス情報を取得するタイミングとは非同期で、前記記憶領域に格納されたデバイス情報を、前記複数の情報処理部へと提供可能な手段
として機能するように構成されていることを特徴とする請求項1〜請求項3のいずれかに記載の情報分配処理プログラム。
【請求項5】
前記デバイス情報提供手段は、前記デバイス情報取得手段によって取得した前記デバイス情報を前記記憶領域に格納する際、前記コマンド送信要求受信手段によって受信したコマンド送信要求の送信元となる前記情報処理部毎に確保された前記記憶領域に格納する手段
として機能するように構成されていることを特徴とする請求項4に記載の情報分配処理プログラム。
【請求項6】
前記デバイス情報提供手段は、前記デバイス情報取得手段によって取得した前記デバイス情報を記憶領域に格納する際、異なる前記コマンド毎に確保された前記記憶領域に格納する手段
として機能するように構成されていることを特徴とする請求項4に記載の情報分配処理プログラム。
【請求項7】
デバイスに関する情報であるデバイス情報に基づく情報処理を実行する複数の情報処理部と、前記情報処理部それぞれが前記デバイスからデバイス情報を取得するために利用されるインターフェースと、を備える情報処理装置上の、前記情報処理部のいずれかから送信されるコマンド送信要求を受信するコマンド送信要求受信手段、
前記コマンド送信要求受信手段によって受信したコマンド送信要求に対応するコマンドを、前記インターフェースを通じて前記デバイスへ送信するコマンド送信手段、
前記コマンドに対する応答として前記デバイスから提供される前記デバイス情報を取得するデバイス情報取得手段、および
前記デバイス情報取得手段によって取得した前記デバイス情報を、前記複数の情報処理部へと提供可能なデバイス情報提供手段
を備えたことを特徴とするコンピュータ。
【請求項8】
デバイスに関する情報であるデバイス情報に基づく情報処理を実行する複数の情報処理部と、前記情報処理部それぞれが前記デバイスからデバイス情報を取得するために利用されるインターフェースと、を備える情報処理装置上の、前記情報処理部のいずれかから送信されるコマンド送信要求を受信するコマンド送信要求受信手順、
前記コマンド送信要求受信手順において受信したコマンド送信要求に対応するコマンドを、前記インターフェースを通じて前記デバイスへ送信するコマンド送信手順、
前記コマンドに対する応答として前記デバイスから提供される前記デバイス情報を取得するデバイス情報取得手順、および
前記デバイス情報取得手順において取得した前記デバイス情報を、前記複数の情報処理部へと提供するデバイス情報提供手順
を備えることを特徴とする情報分配処理方法。
【請求項9】
デバイスと、前記デバイスとデータ通信可能なコンピュータとを、少なくとも備えるとともに、前記コンピュータ自体が情報処理装置として機能するように構成されるか前記コンピュータとは別の情報処理装置が前記コンピュータとデータ通信可能に構成されたシステムであり、
前記コンピュータは、
デバイスに関する情報であるデバイス情報に基づく情報処理を実行する複数の情報処理部と、前記情報処理部それぞれが前記デバイスからデバイス情報を取得するために利用されるインターフェースと、を備える前記情報処理装置上の、前記情報処理部のいずれかから送信されるコマンド送信要求を受信するコマンド送信要求受信手段、
前記コマンド送信要求受信手段によって受信したコマンド送信要求に対応するコマンドを、前記インターフェースを通じて前記デバイスへ送信するコマンド送信手段、
前記コマンドに対する応答として前記デバイスから提供される前記デバイス情報を取得するデバイス情報取得手段、および
前記デバイス情報取得手段によって取得した前記デバイス情報を、前記複数の情報処理部へと提供可能なデバイス情報提供手段
を備えることを特徴とする情報分配処理システム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【公開番号】特開2007−94693(P2007−94693A)
【公開日】平成19年4月12日(2007.4.12)
【国際特許分類】
【出願番号】特願2005−282342(P2005−282342)
【出願日】平成17年9月28日(2005.9.28)
【出願人】(000005267)ブラザー工業株式会社 (13,856)
【Fターム(参考)】
【公開日】平成19年4月12日(2007.4.12)
【国際特許分類】
【出願日】平成17年9月28日(2005.9.28)
【出願人】(000005267)ブラザー工業株式会社 (13,856)
【Fターム(参考)】
[ Back to top ]