(57)【特許請求の範囲】
【請求項１】
情報処理装置と、前記情報処理装置とＢｌｕｅｔｏｏｔｈ（登録商標）通信を用いて通信する周辺装置から成る周辺装置制御システムであって、
前記情報処理装置は、自装置で動作して、周辺装置の状態を監視して表示を行うためのステータスモニタの機能として、
前記情報処理装置を制御するオペレーティングシステムのバージョン情報を取得する第１のバージョン情報取得手段と、
前記第１のバージョン情報取得手段により取得したオペレーティングシステムのバージョン情報が、前記情報処理装置からのＢｌｕｅｔｏｏｔｈ通信による双方向通信をサポートするかを特定する特定手段と、
前記周辺装置を制御するファームウェアのバージョン情報を取得する第２のバージョン情報取得手段と、
前記第１のバージョン情報取得手段により取得されたオペレーティングシステムのバージョン情報が双方向通信をサポートすると前記特定手段により特定された場合に、前記第２のバージョン情報取得手段で取得した前記周辺装置を制御するファームウェアのバージョン情報に基づいて、前記周辺装置の状態を監視するための制御方法を選択する制御方法選択手段と、
前記制御方法選択手段により選択された制御方法に従って、前記周辺装置を監視する制御手段とを備え、
前記制御方法選択手段は、前記周辺装置の状態を取得するためにジョブを発行する制御方法と、前記周辺装置の状態を取得するためにジョブを発行することなく状態取得が可能な制御方法とから選択を行うことを特徴とする周辺装置制御システム。
【請求項２】
前記情報処理装置は、更に前記ステータスモニタの機能として、
前記周辺装置を制御するドライバプログラムのバージョン情報を取得する第３のバージョン情報取得手段を備え、
前記制御方法選択手段は、前記第１のバージョン情報取得手段により取得されたオペレーティングシステムのバージョン情報が双方向通信をサポートすると前記特定手段により特定された場合に、前記第３のバージョン情報取得手段で取得した前記ドライバプログラムのバージョン情報に基づいて、制御方法を選択することを特徴とする請求項１記載の周辺装置制御システム。
【請求項３】
情報処理装置とＢｌｕｅｔｏｏｔｈ通信を用いて通信する周辺装置を制御する、前記情報処理装置における周辺装置制御方法であって、
前記情報処理装置は、自装置で動作して、周辺装置の状態を監視して表示を行うためのステータスモニタの機能として、
前記情報処理装置を制御するオペレーティングシステムのバージョン情報を取得する第１のバージョン情報取工程と、
前記第１のバージョン情報取得工程により取得したオペレーティングシステムのバージョン情報が、前記情報処理装置からのＢｌｕｅｔｏｏｔｈ通信による双方向通信をサポートするかを特定する特定工程と、
前記周辺装置を制御するファームウェアのバージョン情報を取得する第２のバージョン情報取得工程と、
前記第１のバージョン情報取得工程により取得されたオペレーティングシステムのバージョン情報が双方向通信をサポートすると前記特定工程により特定された場合に、前記第２のバージョン情報取得工程で取得した前記周辺装置を制御するファームウェアのバージョン情報に基づいて、前記周辺装置の状態を監視するための制御方法を選択する制御方法選択工程と、
前記制御方法選択工程により選択された制御方法に従って、前記周辺装置を監視する制御工程とを備え、
前記制御方法選択工程は、前記周辺装置の状態を取得するためにジョブを発行する制御方法と、前記周辺装置の状態を取得するためにジョブを発行することなく状態取得が可能な制御方法とから選択を行うことを特徴とする周辺装置制御方法。
【請求項４】
前記ステータスモニタの機能として、
前記周辺装置を制御するドライバプログラムのバージョン情報を取得する第３のバージョン情報取得工程を更に備え、
前記制御方法選択工程では、前記第１のバージョン情報取得工程により取得されたオペレーティングシステムのバージョン情報が双方向通信をサポートすると前記特定工程により特定された場合に、前記第３のバージョン情報取得工程で取得した前記ドライバプログラムのバージョン情報に基づいて、制御方法を選択することを特徴とする請求項３記載の周辺装置制御方法。
【請求項５】
Ｂｌｕｅｔｏｏｔｈ通信を用いて通信する周辺装置を利用すると共に、前記周辺装置の状態を監視する情報処理装置であって、
前記情報処理装置を制御するオペレーティングシステムのバージョン情報を取得する第１のバージョン情報取得手段と、
前記第１のバージョン情報取得手段により取得したオペレーティングシステムのバージョン情報が、前記情報処理装置からのＢｌｕｅｔｏｏｔｈ通信による双方向通信をサポートするかを特定する特定手段と、
前記周辺装置を制御するファームウェアのバージョン情報を取得する第２のバージョン情報取得手段と、
前記第１のバージョン情報取得手段により取得されたオペレーティングシステムのバージョン情報が双方向通信をサポートすると前記特定手段により特定された場合に、前記第２のバージョン情報取得手段で取得した前記周辺装置を制御するファームウェアのバージョン情報に基づいて、前記周辺装置の状態を監視するための制御方法を選択する制御方法選択手段と、
前記制御方法選択手段により選択された制御方法に従って、前記周辺装置を監視する制御手段とを備え、
前記制御方法選択手段は、前記周辺装置の状態を取得するためにジョブを発行する制御方法と、前記周辺装置の状態を取得するためにジョブを発行することなく状態取得が可能な制御方法とから選択を行うことを特徴とする情報処理装置。
【請求項６】
更に、前記周辺装置を制御するドライバプログラムのバージョン情報を取得する第３のバージョン情報取得手段を備え、
前記制御方法選択手段は、前記第１のバージョン情報取得手段により取得されたオペレーティングシステムのバージョン情報が双方向通信をサポートすると前記特定手段により特定された場合に、前記第３のバージョン情報取得手段で取得した前記ドライバプログラムのバージョン情報に基づいて、制御方法を選択することを特徴とする請求項５記載の情報処理装置。
【請求項７】
Ｂｌｕｅｔｏｏｔｈ通信を用いて通信する周辺装置を利用すると共に、前記周辺装置の状態を監視する際に用いるコンピュータプログラムであって、
コンピュータを、
前記コンピュータで実行されるオペレーティングシステムのバージョン情報を取得する第１のバージョン情報取手段と、
前記第１のバージョン情報取得手段により取得したオペレーティングシステムのバージョン情報が、前記Ｂｌｕｅｔｏｏｔｈ通信による双方向通信をサポートするかを特定する特定手段と、
前記周辺装置を制御するファームウェアのバージョン情報を取得する第２のバージョン情報取得手段と、
前記第１のバージョン情報取得手段により取得されたオペレーティングシステムのバージョン情報が双方向通信をサポートすると前記特定手段により特定された場合に、前記第２のバージョン情報取得手段で取得した前記周辺装置を制御するファームウェアのバージョン情報に基づいて、前記周辺装置の状態を監視するための制御方法を選択する制御方法選択手段と、
前記制御方法選択手段により選択された制御方法に従って、前記周辺装置を監視する制御手段として機能させ、
前記制御方法選択手段は、前記周辺装置の状態を取得するためにジョブを発行する制御方法と、前記周辺装置の状態を取得するためにジョブを発行することなく状態取得が可能な制御方法とから選択を行うことを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置とプリンタ等の周辺装置から構成される周辺装置制御システムに関する。
【背景技術】
【０００２】
従来、情報処理装置と周辺装置とのインタフェースとして、例えば、パラレル、シリアル、IrDA、Universal Serial Bus（ＵＳＢ）、Ethernet（登録商標）等が主に利用されていた。ここで、情報処理装置としては、（パーソナルコンピュータ、デジタルカメラ、デジタルビデオカメラ等が挙げられる。また、周辺装置としては、プリンタ（印刷装置）、複写機、ファクシミリ、スキャナ、デジタルカメラ、デジタルビデオカメラ、及びこれらの複合機能を備える画像処理装置等が挙げられる。
【０００３】
近年では、機器間の通信インタフェースとして、Bluetooth、無線ＬＡＮ（IEEE 802.11a/b/g等）、IEEE 1394が新に加わってきた。また、これ以外の新たな通信インターフェースとして、FotoNation社（http://www.fotonation.com/index.php）が開発したPicture Transfer Protocol over Internet Protocol（PTP/IP）がある。また、Wireless USB Promoter Groupが策定したWireless USBもある。また、カメラ映像機器工業会（CIPA）が標準化したPictBridge（http://www.cipa.jp/pictbridge/index_j.html）等の新しいインタフェースが利用されるようになってきた。
【０００４】
これに伴い、これらの新しいインタフェースをサポートする為に、情報処理装置のＯＳ（Operating System）の一部をアップデートする等の対応が行われている。例えば米国マイクロソフト社のWindows（登録商標）XPのＯＳの場合、Windows（登録商標）XP Service Pack、Windows（登録商標）Update、ＯＳをアップデートするＱＦＥ等によるＯＳのアップデートが行われている。また、このようなアップデートにより、セキュリティが強化される場合もある。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
このようにＯＳがアップデートされた場合、アップデートされたＯＳの仕様に合わせて、周辺装置のファームウェアやその周辺装置を制御するドライバをアップデートすることで、以前より優れた仕様の周辺装置制御システムを提供することができる。また、ＯＳのアップデートによるセキュリティの強化等により、以前のＯＳで正常に動作していた周辺装置やその周辺装置を制御するドライバが、以前の仕様で動作できなくなる場合もある。この場合も正常に動作させる為に、周辺装置のファームウェアやその周辺装置を制御するドライバをアップデートする必要がある。
【０００６】
しかしながら、このようにアップデート後のＯＳのバージョン、周辺装置のファームウェアのバージョン、その周辺装置を制御するドライバのバージョンの組み合わせが合致しない場合、周辺装置制御システムとして正常に動作しない、という問題があった。
【０００７】
本発明は、かかる問題点に鑑みなされたものであり、パーソナルコンピュータ等の情報処理装置のＯＳ、周辺装置のファームウェアの組み合わせから、周辺装置の制御にかかる最適な処理を選択する技術を提供しようとするものである。
【課題を解決するための手段】
【０００８】
この課題を解決するため、例えば、本発明の周辺装置制御システムは以下の構成をそなえる。すなわち、
情報処理装置と、前記情報処理装置とＢｌｕｅｔｏｏｔｈ通信を用いて通信する周辺装置から成る周辺装置制御システムであって、
前記情報処理装置は、自装置で動作して、周辺装置の状態を監視して表示を行うためのステータスモニタの機能として、
前記情報処理装置を制御するオペレーティングシステムのバージョン情報を取得する第１のバージョン情報取得手段と、
前記第１のバージョン情報取得手段により取得したオペレーティングシステムのバージョン情報が、前記情報処理装置からのＢｌｕｅｔｏｏｔｈ通信による双方向通信をサポートするかを特定する特定手段と、
前記周辺装置を制御するファームウェアのバージョン情報を取得する第２のバージョン情報取得手段と、
前記第１のバージョン情報取得手段により取得されたオペレーティングシステムのバージョン情報が双方向通信をサポートすると前記特定手段により特定された場合に、前記第２のバージョン情報取得手段で取得した前記周辺装置を制御するファームウェアのバージョン情報に基づいて、前記周辺装置の状態を監視するための制御方法を選択する制御方法選択手段と、
前記制御方法選択手段により選択された制御方法に従って、前記周辺装置を監視する制御手段とを備え、
前記制御方法選択手段は、前記周辺装置の状態を取得するためにジョブを発行する制御方法と、前記周辺装置の状態を取得するためにジョブを発行することなく状態取得が可能な制御方法とから選択を行うことを特徴とする。
【発明の効果】
【０００９】
本発明によれば、情報処理装置のＯＳのバージョンのアップデートや、周辺装置のファームウェアのバージョンアップを行った場合であっても、それに伴って最適な処理を選択することで、その周辺装置の制御が行える。
【００１０】
また、周辺装置制御システムの構成から最適な処理を選択する際に、ユーザによる特別な操作が不要であり、自動的に最適な処理が選択されるので、ユーザの操作性にも優れる。
【００１１】
さらに、一つのアプリケーションと一つの周辺装置制御用ドライバで、従来の仕様と新仕様の両仕様を両立できるので、ユーザの操作性に優れ、トータルコストも削減できる。
【発明を実施するための最良の形態】
【００１２】
以下、添付図面に従って本発明に係る実施形態を詳細に説明する。
【００１３】
以下の説明で引用される関数（情報）の内、特に詳しい説明を付加していないものに関しては、２００４年７月１５日現在、Microsoft Developer Network (MSDN)のサイトでインターネット上で公開されている関数（情報）であるとし、その詳述は省略する。また、以下の説明において、Bluetoothは双方向通信が可能な公知の無線インタフェースであり、その仕様は公開されているので、その詳細についても省略する。
【００１４】
図１は本発明の情報処理装置及び周辺装置からなる周辺装置制御システムの構成を示すブロック図である。同図において、１は情報処理装置であり、一般的なパーソナルコンピュータ（以下、ＰＣと略す場合がある）で構成される。ＰＣ１は図２で後述するようなハードウェアで構成され、ＯＳ（Operating System）として米国マイクロソフト社のWindows（登録商標）XPがインストールされているものとする。３はプリンタ（印刷装置もしくは画像形成装置）であり、カラーインクジェットプリンタで構成され、本実施形態における周辺装置に相当する。プリンタ３はＸＹＺ社製のｋｍｍｎというモデル名のプリンタであるとする。尚、本発明における周辺装置としては、プリンタ、複写機、ファクシミリ、またはこれらの複合機などの画像形成装置、スキャナ、デジタルカメラであってもよい。プリンタ３は図３で後述するようなハードウェアで構成され、ＰＣ１とBluetoothインタフェース９を介して接続されており、互いに双方向通信が可能である。３６は図４で後述するランゲージモニタ（language Monitor;以降、ＬＭと略す場合がある）であり、Windows（登録商標）用のダイナミックリンクライブラリで構成される。３０はアプリケーションであり、Windows（登録商標）用の実行可能形式のファイル（*.EXE）で構成される。アプリケーション３０の一例としては、プリンタ３の状態を表示するようなステータスモニタ等が挙げられる。アプリケーション３０は前記ＭＳＤＮのサイトで公開されているPrinting and Print Spooler Interfacesを利用して、ＬＭ３６へデータ（情報）を送ったり、ＬＭ３６からデータ（情報）を受け取ったりすることができる。これはWindows（登録商標）XPの公知の機能であるので、その詳細説明は省略する。
【００１５】
図２はＰＣのハードウェア構成の一例を表すブロック図である。ここではＰＣ１を例にして説明する。ＰＣ１はランダムアクセスメモリ部（ＲＡＭ１２０１）、記憶部であるハードディスクドライブ部（ＨＤＤ１２０２）、入力部の一例であるキーボード部（ＫＢＤ１２０３）を備える。また、このＰＣ１は、制御部としてのＣＰＵ１２０４、表示部の一例である表示用ディスプレイ（ＬＣＤ１２０５）、通信制御部の一例であるネットワークボード（ＮＢ１２０７）を備える。そして、バス１２０６は、以上のＰＣ１の構成要素を互いに接続する。ＮＢ１２０７は、Bluetoothインタフェース９用の接続ポートを含み、Bluetoothの通信を制御する。なお、記憶部は、可搬性ＣＤ−ＲＯＭまたは内部据付のＲＯＭなどであってもよい。図１に示すＰＣ１の各モジュール（アプリケーション３０、ＬＭ３６）は、ＨＤＤ１２０２に記憶され、必要に応じてＲＡＭ１２０１に読み出されてＣＰＵ１２０４により実行される。これにより、ＣＰＵ１２０４が、図１に示す各モジュールの機能を実現する。
【００１６】
図３はプリンタのハードウェア構成を表すブロック図である。プリンタ３は同図に示すようなハードウェア構成を持つ。同図において、１５はマイクロプロセッサ等から構成されるＣＰＵであり、プリンタ３の中央処理装置として、ＲＯＭ１６に記憶されているプログラムに従って、ＲＡＭ１７、通信部１８、記録部１９を制御する。ＰＣ１側のプリンタドライバ５０（図４で後述する）による要求に応じて、プリンタ３の記録（印刷）処理や、状態をＰＣ１へ伝える処理を行うプログラムも、このＲＯＭ１６に記憶されている。ＲＡＭ１７は主にＰＣ１から送られて、それをもとに記録部１９によって印刷される印字データが一時的に記憶される。通信部１８にはBluetoothインタフェース９用の接続ポートが含まれており、Bluetoothの通信を制御する。
【００１７】
記録部１９は、インクジェット方式の記録ヘッド、各カラーインク、キャリッジ、記録紙搬送機構等から構成される記録ユニットを備える。また、この記録部１９は、印字データをもとに前記記録ヘッドにて印字用パルスを発生させる為のＡＳＩＣ等から構成される電気回路を備える。
【００１８】
上記構成において、ＰＣ１上で実行する印刷出力機能を有するアプリケーション上で、ユーザが印刷指示を行う。この結果、そのアプリケーションで開かれているファイルの表示内容（画像データ）が、ＥＭＦ形式のスプールファイルとしてＰＣ１のＨＤＤ１２０２に一時的に格納される。そして、プリンタドライバ５０は、そのスプールファイルを、プリンタ３の制御用コマンドを含む印字データに変換した後、Bluetoothインタフェース９を介してプリンタ３に送信する。プリンタ３は、印刷データを受信し、記録部１９によって印字用パルスに変換されて、記録紙上に印刷することになる。
【００１９】
図４は、ＰＣ１におけるプリンタドライバの構成を表すブロック図である。同図において、プリンタドライバ５０はＰＣ１にインストールされているドライバであり、３３〜３８で示す複数のモジュールを備えている。アプリケーション３０は印刷指令やプリンタの状態表示が可能なアプリケーションソフトウェアであり、例えば、Windows（登録商標） XP ＯＳ に標準で同梱されているテキストエディタであるNotepad（Notepad.exe）等に相当する。尚、本実施形態では、アプリケーション３０はステータスモニタ等である。３１はＧＤＩ（Graphics Device Interface）であり、Windows （登録商標）XP ＯＳの一部である。３２はプリンタキューで、Windows （登録商標）XP ＯＳのSpoolerの一部であり、印刷ジョブをキューイングする。
【００２０】
次にプリンタドライバ５０の構成を説明する。３３はプリントプロセッサであり、印刷レイアウトの変更や印刷画像の特殊処理を行う。３４はグラフィックスドライバで、プリンタドライバ５０の画像処理のコアとして動作し、ＧＤＩ３１から送られて来る描画命令に基づき印刷用の画像処理を行い、印刷制御コマンドを作成する。３５はＵＩモジュールで、プリンタドライバ５０のユーザインタフェースの提供及び制御を行う。３６は図１で説明したランゲージモニタであり、データの通信Ｉ／Ｆとしてデータの送受信を制御する。３７はポートモニタ（以降ＰＭと略す場合がある）であり、ＬＭ３６から送られてくるデータを適切なポートに対して送信したり、プリンタ３から送られてくるデータを、クラスドライバ３８を介して受信したりする。クラスドライバ３８は、最もポートに近いローレベルのモジュールである。本実施形態でのクラスドライバ３８は、BluetoothのHardcopy Cable Replacement Profile（HCRP）のスタックを制御するドライバに相当し、ポート（本発明ではBluetoothポート）を制御する。
【００２１】
図５はアプリケーション３０がプリンタ３から、インクの情報及び状態を取得する時に使用するスキーマを表す図である。このスキーマは、アプリケーション３０がPrinting and Print Spooler Interfacesを介してＬＭ３６経由でプリンタ３からインクの情報及び状態を取得する時に指定される。具体的には、このスキーマは、ＯＳで使用できるＣＯＭインタフェースIBidiSpl のＡＰＩ関数IBidiSpl::SendRecv()をコールする際に引数として指定される。
【００２２】
同図において、InkInfoはインクの情報を表すPropertyであり、スキーマのフルパスの指定は\Printer.InkInfoである。[Color]は色の情報を表すPropertyであり、スキーマのフルパスの指定は\Printer.InkInfo.[Color]である。[Color]で設定可能な値は、黒を表すBlack、シアンを表すCyan、マゼンタを表すMagenta、黄を表すYellowの何れかである。例えば、黒インクの情報を取得したい場合は、\Printer.InkInfo.Blackと指定する。
【００２３】
Installedは[Color]色のインクが搭載されているか否かを表すValueであり、データ型はBoolean、スキーマのフルパスの指定は\Printer.InkInfo.[Color]:Installedである。また、設定可能な値は、搭載されていること表すTrue、搭載されていないを表すFalseの何れかである。
【００２４】
Levelは[Color]色のインクの残量を表すValueであり、データ型はInt、スキーマのフルパスの指定は\Printer.InkInfo.[Color]:Levelである。設定可能な値は、インク残量無しを表す０（単位： ％）からインク残量満タンを表す１００（単位： ％）までの間の整数か、インク残量不明を表す−１である。
【００２５】
ModelNameは[Color]色のインクの型名を表すValueであり、データ型はString、スキーマのフルパスの指定は\Printer.InkInfo.[Color]:ModelNameである。設定可能な値の例は、同図のExamplesのようなASCIIの文字列である。
【００２６】
Installed、Level、ModelName等のValueはＬＭ３６またはプリンタ３からアプリケーション３０へ返される値である。
【００２７】
このように、これらの図で定義されているスキーマを使って、アプリケーション３０はプリンタ３に搭載されているインクの情報及び状態、具体的な例としては、インクが搭載されているか否か、残量、型名を取得することができる。
【００２８】
図６は図５で定義されているスキーマを使ってインクの情報及び状態を列挙（Enumeration）する時のスキーマ及び値を表す図である。同図において、アプリケーション３０（ステータスモニタ等）から\Printer.InkInfoのスキーマを指定してIBidiSpl::SendRecv()関数をコールする（Query (Schema)）。この結果、プリンタ３からＰＣ１には、全インクの情報及び状態のスキーマ（Retrieve (Schema)）と値（Retrieve (Value)）がセットで返される。同図の例では、プリンタ３に黒、黄、マゼンタ、シアンのインクが搭載されていて、インクの残量がそれぞれ、８０％、５０％、０％（インク残量無し）、１００％（インク残量満タン）である例を示している。また、インクの型名がそれぞれ、CI-B、CI-Y、CI-M、CI-Cであることを表している。このようにインクの情報及び状態を列挙（Enumeration）することにより、インクの情報及び状態、具体的な例としては、インクが搭載されているか否か、残量、型名を取得することができる。
【００２９】
図７はプリンタの状態をモニタするアプリケーション３０（ステータスモニタ）のＧＵＩを表す図である。同図において、２０１はステータスモニタのメインウィンドウであり、プリンタ３（XYZ社製のkmmnというモデル名のプリンタ）の現在の状態を表している。２０２はプリンタ情報（Printer Information）表示部であり、プリンタがOnline（オンライン）の状態であることを表している。２０３はインク情報（Ink Information）表示部であり、プリンタ３のインクの情報を表す。２０４はインク残量表示部であり、プリンタ３に搭載されている各インクの残量を表示する。同図に示す通り、プリンタ３には黒（Black）、黄（Yellow）、マゼンタ（Magenta）、シアン（Cyan）の４色のインクが装着されていることが示されている。また、それぞれの色のインクの残量が８０％、５０％、０％（インク残量無し）、１００％（インク残量満タン）であることが表示されている。
【００３０】
図８はＰＣ１がプリンタ３からインク情報を取得する時の送受信データを表す図である。実際にＰＣ１とプリンタ３との間で送受信されるデータはバイナリデータであるが、同図では理解しやすくすることを考えて、ASCII文字コードでエンコードした後のテキストデータとして表している。同図において、ＰＣ１が要求コマンド：Ink;をプリンタ３にBluetoothインタフェース９を介して送信すると、インク情報がプリンタ３からＰＣ１にBluetoothインタフェース９を介して返される。このインク情報は次の内容を表している。
＜色＞    ＜型名＞  ＜残量＞
黒        CI-B      ８０％
黄        CI-Y      ５０％
マゼンタ  CI-M      ０％
シアン    CI-C      １００％
【００３１】
尚、この仕様はプリンタ３のファームウェアのバージョンには依存せず、任意のバージョンのファームウェアを搭載するプリンタ３において、サポートされる仕様である。
【００３２】
図９はＰＣ１がプリンタ３からインク情報を取得する時の送信データを表す図である。実際にＰＣ１からプリンタ３へ送信されるデータはバイナリデータであるが、同図では理解しやすくすることを考えて、ASCII文字コードでエンコードした後のテキストデータとして表している。同図において、ＰＣ１が設定コマンド：Set Ink;をプリンタ３にBluetoothインタフェース９を介して送信し、プリンタ３がこの設定コマンドを受信すると、プリンタ３がインク情報返却モードを開始する（詳細は図１５、図１６で後述）。尚、この仕様はプリンタ３のファームウェアのバージョンには依存せず、任意のバージョンのファームウェアを搭載するプリンタ３において、サポートされる仕様である。
【００３３】
図１０はＰＣ１のＯＳのバージョン、プリンタのファームウェアのバージョン及びプリンタドライバのバージョンの組み合わせにおけるステータスモニタ（常駐時）の動作を示す表である。同図において、［OS Version］欄は、ＰＣ１のＯＳのバージョン情報である。また、［Firmware Version］欄は、プリンタ３のファームウェアのバージョン情報である。［Driver Version］欄にはプリンタドライバ５０のバージョン情報である。［ステータスモニタ（常駐時）の動作］欄にはステータスモニタが起動して常駐している時の動作が、それぞれ記載されている。
【００３４】
ここで、ステータスモニタが起動して常駐しているとは、印刷中以外の時にステータスモニタを起動して、プリンタ３の状態を常時監視している状態を意味する。
【００３５】
同図に示す通り、ＰＣ１のＯＳのバージョン情報がWindows （登録商標）XP Service Pack 1（SP1）以前の場合、ＯＳの仕様によりＰＣ１からプリンタ３へのBluetooth通信による送信だけの片方向通信である。従って、プリンタ３のファームウェアのバージョン情報及びプリンタドライバ５０のバージョン情報に依存することなく、ステータスモニタがプリンタ３の状態を取得することができない。つまり、アプリケーションであるステータスモニタ３０は、ＰＣ１のＯＳがWindows （登録商標）XP Service Pack 1（SP1）以前の場合のバージョンをサポートできない。尚、この場合におけるＯＳの仕様は図１１を用いて後述する。
【００３６】
ＰＣ１のＯＳのバージョン情報がWindows （登録商標）XP Service Pack 2（SP2）の場合、ＯＳの仕様により印刷ジョブ内でＰＣ１とプリンタ３間でのBluetooth通信による送受信が可能である。また、任意のバージョンのファームウェアを搭載するプリンタ３が、任意のバージョンのプリンタドライバ５０の制御のもとでこのような印刷ジョブ内での送受信をサポートしている。従って、Null Job方式の双方向通信によるステータスモニタの動作をサポートする。尚、この場合におけるＯＳの仕様及びNull Job方式の双方向通信に関しては図１２で後述する。
【００３７】
ＰＣ１のＯＳのバージョン情報がWindows （登録商標）XP Full Bluetooth Supportの場合、ＯＳの仕様により任意のケースでのBluetooth通信による送受信が可能である。バージョン１．ｘｘのファームウェアを搭載するプリンタ３が任意のバージョンのプリンタドライバ５０の制御のもとで印刷ジョブ内での送受信をサポートしている。また、Null Job方式の双方向通信によるステータスモニタの動作をサポートする。
【００３８】
また、バージョン２．００以降のファームウェアを搭載するプリンタ３は、バージョン５．００以降のプリンタドライバ５０の制御のもとで印刷ジョブ内での送受信及びそれ以外でのＰＣ１への送信をサポートしている。従って、Direct Read方式の双方向通信によるステータスモニタの動作をサポートする。また、バージョン５．００より古いプリンタドライバ５０の制御のもとで印刷ジョブ内での送受信をサポートしているが、それ以外でのＰＣ１への送信をサポートしていないので、Null Job方式の双方向通信によるステータスモニタの動作をサポートする。尚、この場合におけるＯＳの仕様及びDirect Read方式の双方向通信に関しては図１３で後述する。
【００３９】
このように、ＰＣ１のＯＳのバージョン、プリンタ３のファームウェアのバージョン、及びプリンタドライバ５０のバージョンの組み合わせにより、ステータスモニタの動作が異なる。そして、これらの中で最も理想的なステータスモニタの動作は、プリンタ３の状態を監視する為の印刷ジョブが不要で、任意のタイミングでプリンタの状態を表す情報を取得できるDirect Read方式の双方向通信を利用する場合である。尚、Windows （登録商標）XP Full Bluetooth SupportというＯＳのバージョン情報及びBluetooth通信におけるDirect Read方式の双方向通信に関しては、本発明で新たに提案する仕様である。つまり、現時点におけるWindows （登録商標）XP、Windows （登録商標）XP Service Pack、Windows （登録商標）Update、ＯＳをアップデートするＱＦＥ等によるＯＳのアップデートではサポートされていない新しい仕様である。
【００４０】
図１１はＬＭ３６からＰＭ（ポートモニタ）３７がエクスポートしている関数を呼び出す時のコーリングシーケンスを表す図である。同図はＰＣ１のＯＳのバージョン情報がWindows （登録商標）XP Service Pack 1（SP1）以前の場合を表す。同図において、印刷ジョブが開始されるとWindows （登録商標）XP ＯＳのSpoolerがＬＭ３６がエクスポートしているStartDocPort()関数を呼び出し、ＬＭ３６はこの関数内でＰＭ３７がエクスポートしているStartDocPort()関数を呼び出す。その後、ＰＭ３７がエクスポートしているWritePort()関数を呼び出してプリンタ３に印刷開始時の制御コマンドを送信し、印刷ジョブを開始する。
【００４１】
印刷ジョブが終了すると前記SpoolerがＬＭ３６がエクスポートしているEndDocPort()関数を呼び出し、ＬＭ３６はこの関数内でＰＭ３７がエクスポートしているEndDocPort()関数を呼び出す。その後、ＰＭ３７がエクスポートしているWritePort()関数を呼び出してプリンタ３に印刷終了時の制御コマンドを送信し、印刷ジョブを終了する。
【００４２】
このように、前記Spooler がＬＭ３６がエクスポートしているStartDocPort()を呼び出してからＬＭ３６がエクスポートしているEndDocPort()を呼び出す迄が印刷ジョブ内を表す。この印刷ジョブ内において、ＬＭ３６はＰＭ３７がエクスポートしているWritePort()関数を呼び出すことで、プリンタ３に印刷制御コマンドを送信することができる。
【００４３】
ＰＭ３７はプリンタ３からＰＣ１へ送信されるデータを受信する為のReadPort()関数をエクスポートしている。しかし、同図に示すようなＰＣ１のＯＳのバージョン情報がWindows （登録商標）XP Service Pack 1（SP1）以前の場合は、ＬＭ３６がこのReadPort()関数を呼び出しても失敗するので、ＬＭ３６はプリンタ３からＰＣ１へ送信されるデータを受信することができない。
【００４４】
図１２はＬＭ３６からＰＭ３７がエクスポートしている関数を呼び出す時のコーリングシーケンスを表す図である。同図はＯＳのバージョン情報がWindows （登録商標）XP Service Pack 2（SP2）の場合を表す。同図において、印刷ジョブが開始されるとWindows （登録商標）XP ＯＳのSpoolerがＬＭ３６がエクスポートしているStartDocPort()関数を呼び出し、ＬＭ３６はこの関数内でＰＭ３７がエクスポートしているStartDocPort()関数を呼び出す。この後、ＰＭ３７がエクスポートしているWritePort()関数を呼び出してプリンタ３に印刷開始時の制御コマンドを送信し、印刷ジョブを開始する。
【００４５】
印刷ジョブが終了すると前記SpoolerがＬＭ３６がエクスポートしているEndDocPort()関数を呼び出し、ＬＭ３６はこの関数内でＰＭ３７がエクスポートしているEndDocPort()関数を呼び出す。この後、ＰＭ３７がエクスポートしているWritePort()関数を呼び出してプリンタ３に印刷終了時の制御コマンドを送信し、印刷ジョブを終了する。
【００４６】
このように、前記Spooler がＬＭ３６がエクスポートしているStartDocPort()を呼び出してからＬＭ３６がエクスポートしているEndDocPort()を呼び出す迄が印刷ジョブ内を表す。この印刷ジョブ内において、ＬＭ３６はＰＭ３７がエクスポートしているWritePort()関数を呼び出すことで、プリンタ３に印刷制御コマンドを送信することができる。また、ＰＭ３７はプリンタ３からＰＣ１へ送信されるデータを受信する為のReadPort()関数をエクスポートしている。しかし、同図に示すようなＰＣ１のＯＳのバージョン情報がWindows （登録商標）XP Service Pack 2（SP2）の場合は、印刷ジョブ内でＬＭ３６がこのReadPort()関数を呼び出すこともできる。プリンタ３がＰＣ１へ送信するデータを準備している場合、ＬＭ３６が印刷ジョブ内でこのReadPort()関数を呼び出すことで、ＬＭ３６はこのデータを受信することができる。尚、印刷ジョブ内以外では、ＬＭ３６がこのReadPort()関数を呼び出しても失敗するので、印刷ジョブ内以外でＬＭ３６はプリンタ３からＰＣ１へ送信されるデータを受信することができない。
【００４７】
図１３はＬＭ３６からＰＭ３７がエクスポートしている関数を呼び出す時のコーリングシーケンスを表す図である。同図はＯＳのバージョン情報がWindows （登録商標）XP Full Bluetooth Supportの場合を表す。
【００４８】
同図において、印刷ジョブが開始されるとWindows （登録商標）XP ＯＳのSpoolerがＬＭ３６がエクスポートしているStartDocPort()関数を呼び出し、ＬＭ３６はこの関数内でＰＭ３７がエクスポートしているStartDocPort()関数を呼び出す。この後、ＰＭ３７がエクスポートしているWritePort()関数を呼び出してプリンタ３に印刷開始時の制御コマンドを送信し、印刷ジョブを開始する。
【００４９】
印刷ジョブが終了すると前記SpoolerがＬＭ３６がエクスポートしているEndDocPort()関数を呼び出し、ＬＭ３６はこの関数内でＰＭ３７がエクスポートしているEndDocPort()関数を呼び出す。この後、ＰＭ３７がエクスポートしているWritePort()関数を呼び出してプリンタ３に印刷終了時の制御コマンドを送信し、印刷ジョブを終了する。
【００５０】
このように、前記Spooler がＬＭ３６がエクスポートしているStartDocPort()を呼び出してからＬＭ３６がエクスポートしているEndDocPort()を呼び出す迄が印刷ジョブ内を表す。この印刷ジョブ内において、ＬＭ３６はＰＭ３７がエクスポートしているWritePort()関数を呼び出すことで、プリンタ３に印刷制御コマンドを送信することができる。また、ＰＭ３７はプリンタ３からＰＣ１へ送信されるデータを受信する為のReadPort()関数をエクスポートしている。しかし、同図に示すようなＰＣ１のＯＳのバージョン情報がWindows （登録商標）XP Full Bluetooth Supportの場合は、印刷ジョブ内でＬＭ３６がこのReadPort()関数を呼び出すこともできる。また、プリンタ３がＰＣ１へ送信するデータを準備している場合、ＬＭ３６が印刷ジョブ内でこのReadPort()関数を呼び出すことで、ＬＭ３６はこのデータを受信することができる。さらに、印刷ジョブ内以外でもＬＭ３６がこのReadPort()関数を呼び出すことができる。プリンタ３がＰＣ１へ送信するデータを準備している場合、ＬＭ３６が印刷ジョブ内以外でこのReadPort()関数を呼び出すことで、ＬＭ３６はこのデータを受信することができる。
【００５１】
図１４はプリンタからＰＣへ送信されるDevice IDの例を表す図である。同図はプリンタ３からＰＣ１へ送信されるDevice IDの例である。MFGはプリンタ３の製造元がXYZであることを表わしている。CMDはプリンタ３がサポートしている制御コマンドがRasterとSTSであることを表わしている。また、MDLはプリンタ３のモデル名がkmmnであること、CLSはプリンタ３のデバイスクラスがPRINTERであることを表わしている。そして、DESはプリンタ３のデバイスディスクリプションがXYZ kmmnであること、VERはプリンタ３のファームウェアのバージョン情報が１．００であることを表わしている。例えば、プリンタのファームウェアがアップデートされて、同図に示すDevice IDの中ではバージョン情報だけが２．００と変更された場合、同図においてVERがVER:2.00;というように変更されたDevice IDとなる。
【００５２】
以下、図１５〜図２１のフローチャートを用いて、本発明の実施の形態の動作について説明する。
【００５３】
図１５はプリンタ３がBluetooth通信の接続を開始してから終了する迄の処理を表すフローチャートである。同図はプリンタ３のファームウェアのバージョンが１．ｘｘの場合の処理を表す。
【００５４】
同図において、プリンタ３がBluetooth通信の接続を開始すると（ステップＳ１５０１）、Bluetooth通信の接続リンクを確立する（ステップＳ１５０２）。
【００５５】
次いで、ＰＣ１からの設定コマンド：Set Ink;を受信したか否かを判断する（ステップＳ１５０３）。ＰＣ１からの設定コマンド：Set Ink;を受信していないと判断した場合には、ステップＳ１５０３に戻る。また、設定コマンド：Set Ink;を受信したと判断した場合には、インク情報を用意してＰＣ１からのリード要求に対していつでもインク情報を返すことができるインク情報返却モードを開始する（ステップＳ１５０４）。
【００５６】
次いで、Bluetooth通信の接続リンクが切断されたか否かを判断する（ステップＳ１５０５）。ステップＳ１５０５において、Bluetooth通信の接続リンクが維持されていると判断した場合には、ステップＳ１５０３に戻る。また、通信接続が切断されたと判断した場合には、用意しているインク情報をクリアし（ステップＳ１５０６）、インク情報返却モードを終了し（ステップＳ１５０７）、Bluetooth通信の接続を終了する（ステップＳ１５０８）。
【００５７】
ここで、インク情報返却モードの処理中では、プリンタ３は、ＰＣ１からのリード要求に対して、図８に示すインク情報を返す。
【００５８】
図１６はプリンタがBluetooth通信の接続を開始してから終了する迄の処理を表すフローチャートである。同図はプリンタ３のファームウェアのバージョンが２．００以降の場合の処理を表す。
【００５９】
同図において、プリンタ３がBluetooth通信の接続を開始すると（ステップＳ１６０１）、Bluetooth通信の接続リンクを確立する（ステップＳ１６０２）。
【００６０】
次に、ＰＣ１からの設定コマンド：Set Ink;を受信したか否かを判断する（ステップＳ１６０３）。否の場合にはステップＳ１６０３に戻る。また、ＰＣ１から設定コマンド：Set Ink;を受信したと判断した場合には、インク情報を用意してＰＣ１からのリード要求に対していつでもインク情報を返すことができるインク情報返却モードを開始する（ステップＳ１６０４）。
【００６１】
次いで、Bluetooth通信の接続リンクが切断されたか否かを判断する（ステップＳ１６０５）。通信接続が維持されている場合には、ステップＳ１６０３に処理を戻す。また、通信接続が切断されたと判断した場合には、Bluetooth通信の接続を終了する（ステップＳ１６０６）。
【００６２】
ここでプリンタ３におけるインク情報返却モードの処理中は、プリンタ３は、ＰＣ１からのリード要求に対して図８に示すようなインク情報をＰＣ１に返す。
【００６３】
次に、実施形態におけるＰＣ１側のアプリケーション（ステータスモニタ）３０のメイン処理を、図１７のフローチャートに従って説明する。
【００６４】
同図において、アプリケーション３０（ステータスモニタ）が起動すると（ステップＳ１７０１）、設定コマンド：Set Ink;をプリンタ３に送信する為の印刷ジョブを発行する（Ｓ１７０２）。
【００６５】
次いで、ステータスモニタのメインウィンドウ２０１を表示する（ステップＳ１７０３）。この後、５秒間間隔毎の割り込みイベント処理を開始し（ステップＳ１７０４）、メッセージループを作成する（ステップＳ１７０５）。
【００６６】
５秒経過の割り込みが発生した場合（ステップＳ１７０６）、図１８で後述するインク情報の取得と更新処理を行う（ステップＳ１７０７）。また、５秒経過の割り込みが発生していないと判断した場合には、ステップＳ１７０７の処理を行わず、ステップＳ１７０８に進む。
【００６７】
次いで、メッセージを受信したか否かを判断する（ステップＳ１７０８）。メッセージを受信しなかった場合には、次の割り込みイベントに備えるため、ステップＳ１７０６に戻る。
【００６８】
また、メッセージを受信したと判断した場合には、そのメッセージが終了メッセージであるか否かを判断する（Ｓ１７０９）。終了メッセージ以外であると判断した場合は、そのメッセージに対応する各種の処理を行い（ステップＳ１７１０）、ステップＳ１７０６に戻る。
【００６９】
また、メッセージが終了メッセージであると判断した場合には、アプリケーション３０（ステータスモニタ）を終了する（ステップＳ１７１１）。
【００７０】
次に、実施形態におけるアプリケーション（ステータスモニタ）がプリンタのインク情報を取得してインク情報の表示を更新する処理（上記ステップＳ１７０７）を、図１８のフローチャートに従って説明する。
【００７１】
同図において、アプリケーション３０（ステータスモニタ）がプリンタ３のインク情報を取得してインク情報の表示を更新する処理をスタートする（ステップＳ１８０１）。この後、後述する図１９の双方向通信の確認を行う（ステップＳ１８０２）。次いで、ＯＳのレジストリに記憶されている通信に関する情報が片方向通信を示しているか否かを判断する（ステップＳ１８０３）。ここで、片方向通信状態であると判断した場合には、プリンタ３のインク情報の取得及びインク情報の表示更新の処理は行わず、リターンする（ステップＳ１８１２）。
【００７２】
ステップＳ１８０３において、レジストリに記憶されている通信情報が片方向通信でない場合、すなわち、Null Job方式の双方向通信またはDirect Read方式の双方向通信であると判断した場合、ステップＳ１８０４に処理を進める。このステップＳ１８０４では、図５で定義されている\Printer.InkInfoのスキーマを引数として、ＣＯＭインタフェースIBidiSpl のＡＰＩ関数IBidiSpl::SendRecv()をコールしてインク情報の取得を開始する（ステップＳ１８０４）。
【００７３】
この結果、Printing and Print Spooler Interfacesを介して、ＬＭ３６がエクスポートしているSendRecvBidiDataFromPort()関数がSpoolerからコールされて、この関数における処理が開始される（ステップＳ１８０５）。ＬＭ３６のSendRecvBidiDataFromPort()関数内において、ＰＭ３７がエクスポートしているReadPort()関数を呼び出すと、ＰＣ１からプリンタ３に対してリード要求が発行される。この結果、プリンタ３は、このリード要求に対して図８に示すインク情報をＰＣ１に返すので、ＬＭ３６はそのインク情報を取得し（ステップＳ１８０６）。この取得したインク情報をSendRecvBidiDataFromPort()関数の引数として指定されている\Printer.InkInfoのスキーマの定義に従って変換（図２０で後述）される（ステップＳ１８０７）。そして、ＬＭ３６は、SendRecvBidiDataFromPort()関数の引数として図６に示すようなスキーマの定義に変換されたインク情報をアプリケーションに返し、ＬＭ３６のSendRecvBidiDataFromPort()関数の処理を終了する（ステップＳ１８０８）。
【００７４】
アプリケーション３０（ステータスモニタ）において、IBidiSpl::SendRecv()関数がリターンされ、引数として図６に示すようなスキーマの定義で返されたインク情報を取得する（ステップＳ１８０９）。そして、インク情報表示用のデータを作成（図２１で後述）し（ステップＳ１８１０）、このデータを使ってインク情報を更新する（ステップＳ１８１１）。このステップＳ１８１１では、アプリケーション３０（ステータスモニタ）がプリンタ３のインク情報を取得してインク情報の表示を更新する処理も行う。この後、本処理をリターンする（Ｓ１８１２）。
【００７５】
図１９は、実施形態におけるアプリケーション（ステータスモニタ）における、上記の双方向通信の確認処理（ステップＳ１８０２）の詳細を示すフローチャートである。
【００７６】
同図において、アプリケーション３０（ステータスモニタ）が双方向通信の確認処理を開始すると（ステップＳ１９０１）、Win32 APIのGetVersionEx()関数を使ってＰＣ１のＯＳのバージョン情報を取得する（ステップＳ１９０２）。次いで、取得したＯＳのバージョンがWindows （登録商標）XP SP1以前であるか否かを判断する（ステップＳ１９０３）。
【００７７】
ＯＳのバージョンがWindows （登録商標）XP SP1以前であると判断した場合には、実施形態におけるアプリケーションが利用しようとしているBluetooth通信は片方向通信であるので、その旨の情報をレジストリに記憶し（ステップＳ１９１１）、リターンする（ステップＳ１９１４）。
【００７８】
また、ステップＳ１９０３において、ＯＳのバージョンがWindows （登録商標）SP1より新しいと判断した場合、処理はステップＳ１９０４に進んで、ＯＳのバージョンがWindows （登録商標）XP SP2であるか否かを判断する。ＯＳのバージョンがWindows （登録商標）XP SP2であると判断した場合には、要求コマンド：Ink;の印刷ジョブを発行する（ステップＳ１９０９）。そして、通信の種類がNull Job方式の双方向通信であるという情報をレジストリに記憶し（ステップＳ１９１０）、リターンする（ステップＳ１９１４）。
【００７９】
一方、ステップＳ１９０４において、ＯＳのバージョンがWindows （登録商標）SP2ではないと判断した場合には、ステップＳ１９０５に進んで、ＯＳのバージョンがXP Full Bluetooth Supportであるか否かを判断する。ＯＳのバージョンがXP Full Bluetooth Supportであると判断した場合には、プリンタ３からDevice IDを取得して、取得された図１４で示すようなDevice IDからプリンタ３のファームウェアのバージョン情報を取得する（ステップＳ１９０６）。そして、プリンタ３のファームウェアのバージョンが２．００以降であるか否かを判断する（ステップＳ１９０７）。プリンタ３のファームウェアのバージョンが２．００より前、すなわち、バージョンが１．ｘｘｘであると判断した場合には、ステップＳ１９０９の処理を行う。また、プリンタ３のファームウェアのバージョンが２．００以降であると判断した場合には、ステップＳ１９０８に処理を進める。
【００８０】
ステップＳ１９０８では、ＰＣ１にインストールされているプリンタドライバ５０のバージョンを取得する。次いで、ステップＳ１９１２にて、プリンタドライバ５０のバージョンが５．００以降であるか否かを判断する。プリンタドライバ５０のバージョンが５．００以降であると判断した場合には、通信の種類としてDirect Read方式の双方向通信が可能であるので、Direct Readであることを示す情報をレジストリに記憶し（ステップＳ１９１３）、リターンする（ステップＳ１９１４）。
【００８１】
また、ステップＳ１９１２において、プリンタドライバのバージョンが５．００より古い場合、ステップＳ１９０９に進む。また、ステップＳ１９０５において、XP Full Bluetooth Supportでない場合、ＯＳのバージョンが不明であると判断して、ステップＳ１９１１に進む。
【００８２】
なお、ステップＳ１９０９で発行した印刷ジョブ（要求コマンド：Ink;）を受信したプリンタ３は、その後のＰＣ１からのリード要求に対して、図８のプリンタから返されるインク情報に示すようなインク情報を一度返す用意を行う。ステップＳ１９０９で要求コマンド：Ink;をの印刷ジョブが発行されるケースでは、プリンタ３からインク情報を取得する為に、同図に示す双方向通信の確認処理が行われる度に印刷ジョブを発行する必要がある。本実施形態では、これをNull Job方式の双方向通信と定義する。
【００８３】
また、ステップＳ１９１３を通るケースでは、プリンタ３からインク情報を取得する為に、ステップＳ１９０９で発行するような印刷ジョブが不要である。本実施形態ではこれをDirect Read方式の双方向通信と定義する。そして、このDirect Read方式の双方向通信を利用することが最も効率の良い理想的な実現手段である。
【００８４】
図２０は、ＬＭ３６におけるインク情報をスキーマの定義に変換する処理（図１８のステップＳ１８０７の詳細）を表すフローチャートである。
【００８５】
同図において、ＬＭ３６におけるインク情報をスキーマの定義に変換する処理が開始されると（ステップＳ２００１）、図１８のステップＳ１８０６で取得したプリンタ３から返されるインク情報からインクの色を取得する（ステップＳ２００２）。色が有る（見つかった）場合（ステップＳ２００３）、その色をステップＳ２００７におけるリターン時の戻り値格納用バッファ（メモリ）にセットする（ステップＳ２００４）。そして、その色のインクの型名を取得してその型名をステップＳ２００７におけるリターン時の戻り値格納用バッファ（メモリ）にセットする（ステップＳ２００５）。また、その色のインクの残量を取得してその残量を、ステップＳ２００７におけるリターン時の戻り値格納用バッファ（メモリ）にセットし（ステップＳ２００６）、ステップＳ２００２に戻る。
【００８６】
なお、ステップＳ２００３において、色が無い（見つからなかった）場合、全ての色のインクに対する処理が完了したことを意味する。従って、戻り値格納用バッファにセットされている色（図５の[Color]）、及び、その色のインクが搭載されているか否か（図５のInstalled）、その色のインクの型名（図５のModelName）、その色のインクの残量（図５のLevel）をメイン処理返すためにリターンする（ステップＳ２００７）。
【００８７】
図２１は、実施形態におけるアプリケーションにおけるインク情報表示用データの作成処理（図１８のステップＳ１８１０）を表すフローチャートである。
【００８８】
同図において、アプリケーション３０（ステータスモニタ）におけるインク情報表示用データの作成処理が開始される（ステップＳ２１０１）。次いで、図１８のステップＳ１８０９で取得したIBidiSpl::SendRecv()関数の引数として図６に示すようなスキーマの定義で返されたインク情報からインクの色を取得する（ステップＳ２１０２）。色情報が有る（見つかった）と判断した場合（ステップＳ２１０３）、その色情報をステップＳ２１０６におけるリターン時の戻り値格納用バッファ（メモリ）にセットする（ステップＳ２１０４）。また、その色のインクの残量を取得してその残量をステップＳ２１０６におけるリターン時の戻り値格納用バッファ（メモリ）にセットし（ステップＳ２１０５）、ステップＳ２１０２に戻る。
【００８９】
また、ステップＳ２１０３において、色情報が無い（見つからなかった）場合、全ての色のインクに対する処理が完了したことを意味するので、戻り値格納用バッファにセットされている色（図５の[Color]）、及び、その色のインクが搭載されているか否か（図５のInstalled）、その色のインクの残量（図５のLevel）をメイン処理に返して、リターンする（ステップＳ２１０６）。
【００９０】
以下、図２２に示すメモリマップを参照して、上記実施形態に係る情報処理装置及び周辺装置からなる周辺装置制御システムで読み出し可能なデータ処理プログラムの構成について説明する。
【００９１】
図２２は、本実施形態に係る周辺装置制御システムで読み出し可能な各種データ処理プログラムを格納する記憶媒体のメモリマップを示す図である。なお、特に図示しないが、記憶媒体に記憶されるプログラム群を管理する情報、例えばバージョン情報，作成者等もこの記憶媒体に記憶され、かつ、プログラム読み出し側のＯＳ等に依存する情報、例えばプログラムを識別表示するアイコン等も記憶される場合もある。同図において、６４は記憶媒体であり、ここではハードディスクで構成されているものとする。６５はディレクトリ情報管理部であり、各種プログラムに従属するデータがこのディレクトリ情報管理部６５で管理されている。６６はプログラム格納部であり、各種プログラムを情報処理装置にインストールするためのプログラムや、インストールするプログラムが圧縮されている場合に解凍するためのプログラム等も記憶される場合がある。本発明の実施の形態における図１５〜図２１にそれぞれ示す各フローチャートで実現される処理は、このプログラム格納部６６に記憶されており、それぞれ実行される。これらの各フローチャートの実行によって実現できる各機能が、外部からインストールされるプログラムによって、情報処理装置によって実現されるようにしてもよい。そして、その場合、ＣＤ−ＲＯＭやフラッシュメモリやフレキシブルディスク等の記憶媒体により、あるいはネットワークを介して外部の記憶媒体から、プログラムを含む情報群が情報処理装置や周辺装置に供給される場合でも、本発明は適用されるものである。
【００９２】
上記実施の形態では、アプリケーション３０の一例としてステータスモニタを挙げたが、この例に限られることなく、例えば周辺装置から情報を取得して、それを利用するような任意のアプリケーションで実現可能であり、有効である。
【００９３】
また、上記実施の形態では、アプリケーション（ステータスモニタ）３０でプリンタ３に搭載されているインクの情報及び状態をモニタする例を説明したが、この例に限られることなく、例えば、周辺装置の動作状態や、警告、エラーの状態、オプションの装着状態等の任意の情報や状態の取得に有効活用できる。
【００９４】
また、上記実施の形態では、プリンタの例としてカラーインクジェットプリンタを使用したが、この例に限られることなく、例えば、モノクロＬＢＰ等の任意のプリンタを使用することができる。
【００９５】
また、上記実施の形態では、情報処理装置としてパーソナルコンピュータを想定したが、この例に限られるものではない。情報処理装置としては、例えばデジタルカメラ、デジタルビデオカメラ、ＤＶＤビデオプレーヤー、ゲーム、セットトップボックス、インターネット家電等、同様な使用方法が可能な任意の端末に対して実現することができ、有効である。
【００９６】
また、上記実施の形態では、周辺装置としてプリンタを例示しているが、周辺装置として他に、複写機、ファクシミリ、スキャナ、デジタルカメラ、デジタルビデオカメラ、及びこれらの複合機能を備える装置などのいずれかが、本発明の適用対象となり得る。
【００９７】
また、上記実施の形態では、ＯＳに例としてWindows （登録商標）XPを使用したが、このＯＳに限られることなく、任意のＯＳを使用することができる。
【００９８】
また、上記実施の形態では、ＰＣ１とプリンタ３との間のインタフェースとして、Bluetoothインタフェースを用いたが、このインタフェースに限られるものでもない。例えば、例えば、USB、Ethernet（登録商標）、無線LAN（IEEE 802.11a/b/g等）、IEEE 1394、IrDA、パラレル、シリアル、FotoNation社（http://www.fotonation.com/index.php）が開発したPicture Transfer Protocol over Internet Protocol（PTP/IP）、Wireless USB Promoter Groupが策定したWireless USB、カメラ映像機器工業会（CIPA）が標準化したPictBridge（http://www.cipa.jp/pictbridge/index_j.html）等の任意のインタフェースを用いるようにしてもよい。
【００９９】
また、本発明の目的は、前述した実施の形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読み出し実行することによっても、達成されることは言うまでもない。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、プログラムコード自体及びそのプログラムコードを記憶した記憶媒体は本発明を構成することになる。プログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭ等を用いることができる。また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳ(基本システム或いはオペレーティングシステム)などが実際の処理の一部又は全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵ等が実際の処理の一部又は全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【図面の簡単な説明】
【０１００】
【図１】本発明の情報処理装置及び周辺装置からなる周辺装置制御システムの構成を示すブロック図である。
【図２】ＰＣのハードウェア構成の一例を表すブロック図である。
【図３】プリンタのハードウェア構成を表すブロック図である。
【図４】ＰＣにおけるプリンタドライバの構成を表すブロック図である。
【図５】アプリケーションがプリンタからインクの情報及び状態を取得する時に使用するスキーマを表す図である。
【図６】図５で定義されているスキーマを使ってインクの情報及び状態を列挙（Enumeration）する時のスキーマ及び値を表す図である。
【図７】プリンタの状態をモニタするステータスモニタを表す図である。
【図８】ＰＣがプリンタからインク情報を取得する時の送受信データを表す図である。
【図９】ＰＣがプリンタからインク情報を取得する時の送信データを表す図である。
【図１０】ＰＣのＯＳのバージョン、プリンタのファームウェアのバージョン及びプリンタドライバのバージョンの組み合わせにおけるステータスモニタ（常駐時）の動作を示すテーブルである。
【図１１】ＬＭ３６からＰＭ３７がエクスポートしている関数を呼び出す時のコーリングシーケンスを表す図である。
【図１２】ＬＭ３６からＰＭ３７がエクスポートしている関数を呼び出す時のコーリングシーケンスを表す図である。
【図１３】ＬＭ３６からＰＭ３７がエクスポートしている関数を呼び出す時のコーリングシーケンスを表す図である。
【図１４】プリンタからＰＣへ送信されるDevice IDの例を表す図である。
【図１５】プリンタがBluetooth通信の接続を開始してから終了する迄の処理を表すフローチャートである。
【図１６】プリンタがBluetooth通信の接続を開始してから終了する迄の処理を表すフローチャートである。
【図１７】アプリケーション（ステータスモニタ）のメイン処理を表すフローチャートである。
【図１８】アプリケーション（ステータスモニタ）がプリンタのインク情報を取得してインク情報の表示を更新する処理を表すフローチャートである。
【図１９】アプリケーション（ステータスモニタ）の双方向通信の確認処理を表すフローチャートである。
【図２０】ＬＭにおけるインク情報をスキーマの定義に変換する処理を表すフローチャートである。
【図２１】アプリケーションにおけるインク情報表示用データの作成処理を表すフローチャートである。
【図２２】周辺装置制御システムで読み出し可能な各種データ処理プログラムを格納する記憶媒体のメモリマップを示す図である。
【図１】
0004827445.tif 000002
【図２】
0004827445.tif 000003
【図３】
0004827445.tif 000004
【図４】
0004827445.tif 000005
【図５】
0004827445.tif 000006
【図６】
0004827445.tif 000007
【図７】
0004827445.tif 000008
【図８】
0004827445.tif 000009
【図９】
0004827445.tif 000010
【図１０】
0004827445.tif 000011
【図１１】
0004827445.tif 000012
【図１２】
0004827445.tif 000013
【図１３】
0004827445.tif 000014
【図１４】
0004827445.tif 000015
【図１５】
0004827445.tif 000016
【図１６】
0004827445.tif 000017
【図１７】
0004827445.tif 000018
【図１８】
0004827445.tif 000019
【図１９】
0004827445.tif 000020
【図２０】
0004827445.tif 000021
【図２１】
0004827445.tif 000022
【図２２】
0004827445.tif 000023