以下、添付図面を参照して本発明の好適な実施の形態を詳しく説明する。尚、以下の実施の形態は特許請求の範囲に係る本発明を限定するものでなく、また本実施の形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。
図1は、本発明の実施例に係るフォトダイレクトプリンタ装置(以下、PDプリンタ)1000の概観斜視図である。このPDプリンタ1000は、ホストコンピュータ(PC)からデータを受信して印刷する通常のPCプリンタとしての機能と、メモリカードなどの記憶媒体に記憶されている画像データを直接読取って印刷したり、或いはデジタルカメラやPDAなどからの画像データを受信して印刷する機能を備えている。
図1において、本実施例に係るPDプリンタ1000の外殻をなす本体は、下ケース1001、上ケース1002、アクセスカバー1003及び排出トレイ1004の外装部材を有している。また、下ケース1001は、PDプリンタ1000の略下半部を、上ケース1002は本体の略上半部をそれぞれ形成しており、両ケースの組合せによって内部に後述の各機構を収納する収納空間を有する中空体構造をなし、その上面部及び前面部にはそれぞれ開口部がされている。さらに、排出トレイ1004は、その一端部が下ケース1001に回転自在に保持され、その回転によって下ケース1001の前面部に形成される開口部を開閉させ得るようになっている。このため、記録動作を実行させる際には、排出トレイ1004を前面側へと回転させて開口部を開成させることにより、ここから記録されたシート(普通紙、専用紙、樹脂シート等を含む。以下単にシートとする)が排出可能となると共に、排出されたシートを順次積載し得るようになっている。また排紙トレイ1004には、2枚の補助トレイ1004a,1004bが収納されており、必要に応じて各トレイを手前に引き出すことにより、シートの支持面積を3段階に拡大、縮小させ得るようになっている。
アクセスカバー1003は、その一端部が上ケース1002に回転自在に保持され、上面に形成される開口部を開閉し得るようになっており、このアクセスカバー1003を開くことによって本体内部に収納されている記録ヘッドカートリッジ(不図示)或いはインクタンク(不図示)等の交換が可能となる。尚、ここでは特に図示しないが、アクセスカバー1003を開閉させると、その裏面に形成された突起がカバー開閉レバーを回転させるようになっており、そのレバーの回転位置をマイクロスイッチなどで検出することにより、アクセスカバー1003の開閉状態を検出し得るようになっている。
また、上ケース1002の上面には、電源キー1005が設けられている。また、上ケース1002の右側には、液晶表示部1006や各種キースイッチ等を備える操作パネル1010が設けられている。この操作パネル1010の構造は、図2を参照して詳しく後述する。1007は自動給送部で、シートを装置本体内へと自動的に給送する。1008は紙間選択レバーで、プリントヘッドとシートとの間隔を調整するためのレバーである。1009はカードスロットで、ここにメモリカードを装着可能なアダプタが挿入され、このアダプタを介してメモリカードに記憶されている画像データを直接取り込んで印刷することができる。このメモリカード(PC)としては、例えばコンパクトフラッシュ(登録商標)メモリ、スマートメディア、メモリスティック等がある。1011はビューワ(液晶表示部)で、このPDプリンタ1000の本体に着脱可能であり、PCカードに記憶されている画像の中からプリントしたい画像を検索する場合などに、1コマ毎の画像やインデックス画像などを表示するのに使用される。1012は後述するデジタルカメラを接続するためのUSB端子である。また、このPD装置1000の後面には、パーソナルコンピュータ(PC)を接続するためのUSBコネクタが設けられている。
<プリンタ操作部の概要説明>
図2は、本実施例に係るPDプリンタ1000の操作パネル1010の概観図である。
図において、液晶表示部1006には、その左右に印刷されている項目に関するデータを各種設定するためのメニュー項目が表示される。ここに表示される項目としては、例えば、複数ある写真画像ファイルの内、印刷したい写真画像の先頭番号、指定コマ番号(開始コマ指定/印刷コマ指定)、印刷を終了したい最後の写真番号(終了)、印刷部数(部数)、印刷に使用するシートの種類(用紙種類)、1枚のシートに印刷する写真の枚数設定(レイアウト)、印刷の品位の指定(品位)、撮影した日付を印刷するかどうかの指定(日付印刷)、写真を補正して印刷するかどうかの指定(画像補正)、印刷に必要なシートの枚数表示(用紙枚数)等がある。これら各項目は、カーソルキー2001を用いて選択、或いは指定される。2002はモードキーで、このキーを押下する毎に、印刷の種類(インデックス印刷、全コマ印刷、1コマ印刷、指定コマ印刷等)を切り替えることができ、これに応じてLED2003の対応するLEDが点灯される。2004はメンテナンスキーで、プリントヘッドのクリーニング等、プリンタのメンテナンスを行わせるためのキーである。2005は印刷開始キーで、印刷の開始を指示する時、或いはメンテナンスの設定を確立する際に押下される。2006は印刷中止キーで、印刷を中止させる時や、メンテナンスの中止を指示する際に押下される。
<プリンタ電気仕様概要>
次に図3を参照して、本実施例に係るPDプリンタ1000の制御に係る主要部の構成を説明する。尚、この図3において、前述の図面と共通する部分は同じ記号を付与して、それらの説明を省略する。
図3において、3000は制御部(制御基板)を示している。3001はASIC(専用カスタムLSI)を示している。3002はDSP(デジタル信号処理プロセッサ)で、内部にCPUを有し、後述する各種制御処理及び、輝度信号(RGB)から濃度信号(CMYK)への変換、スケーリング、ガンマ変換、誤差拡散等の画像処理等を担当している。3003はメモリで、DSP3002のCPUの制御プログラムを記憶するプログラムメモリ3003a、及び実行時のプログラムを記憶するRAMエリア、画像データなどを記憶するワークメモリとして機能するメモリエリアを有している。3004はプリンタエンジンで、ここでは、複数色のカラーインクを用いてカラー画像を印刷するインクジェットプリンタのプリンタエンジンが搭載されている。3005はデジタルカメラ(DSC)3012を接続するためのポートとしてのUSBコネクタである。3006はビューワ1011を接続するためのコネクタである。3008はUSBハブ(USBHUB)で、このPDプリンタ1000がPC3010からの画像データに基づいて印刷を行う際には、PC3010からのデータをそのままスルーし、USB3021を介してプリンタエンジン3004に出力する。これにより、接続されているPC3010は、プリンタエンジン3004と直接、データや信号のやり取りを行って印刷を実行することができる(一般的なPCプリンタとして機能する)。3009は電源コネクタで、電源3019により、商用ACから変換された直流電圧を入力している。PC3010は一般的なパーソナルコンピュータ、3011は前述したメモリカード(PCカード)、3012はデジタルカメラ(DSC:DigitalStillCamera)である。
尚、この制御部3000とプリンタエンジン3004との間の信号のやり取りは、前述したUSB3021又はIEEE1284バス3022を介して行われる。
図4は、ASIC3001の構成を示すブロック図で、この図4においても、前述の図面と共通する部分は同じ記号を付与して、それらの説明を省略する。
4001はPCカードインターフェース部で、装着されたPCカード3011に記憶されている画像データを読取ったり、或いはPCカード3011へのデータの書き込み等を行う。4002はIEEE1284インターフェース部で、プリンタエンジン3004との間のデータのやり取りを行う。このIEEE1284インターフェース部4002は、デジタルカメラ3012或いはPCカード3011に記憶されている画像データを印刷する場合に使用されるバスである。4003はUSBインターフェース部で、PC3010との間でのデータのやり取りを行う。4004はUSBホストインターフェース部で、デジタルカメラ3012との間でのデータのやり取りを行う。4005は操作パネル・インターフェース部で、操作パネル1010からの各種操作信号を入力したり、表示部1006への表示データの出力などを行う。4006はビューワ・インターフェース部で、ビューワ1011への画像データの表示を制御している。4007は各種スイッチやLED4009等との間のインターフェースを制御するインターフェース部である。4008はCPUインターフェース部で、DSP3002との間でのデータのやり取りの制御を行っている。4010はこれら各部を接続する内部バス(ASICバス)である。
以上の構成に基づく動作概要を以下に説明する。
<通常のPCプリンタモード>
これはPC3010から送られてくる印刷データに基づいて画像を印刷する印刷モードである。
このモードでは、PC3010からのデータがUSBコネクタ1013(図3)を介して入力されると、USBハブ3008、USB3021を介して直接プリンタエンジン3004に送られ、PC3010からのデータに基づいて印刷が行われる。
<PCカードからの直接プリントモード>
PCカード3011がカードスロット1009に装着或いは脱着されると割り込みが発生し、これによりDSP3002はPCカード3011が装着されたか或いは脱着(取り外された)されたかを検知できる。PCカード3011が装着されると、そのPCカード3011に記憶されている圧縮された(例えばJPEG圧縮)画像データを読込んでメモリ3003に記憶する。次に操作パネル101を使用して、その格納した画像データの印刷が指示されると、圧縮された画像データを解凍してメモリ3003に格納し、RGB信号からYMCK信号への変換、ガンマ補正、誤差拡散等を実行してプリンタエンジン3004で印刷可能な記録データに変換し、IEEE1284インターフェース部4002を介してプリンタエンジン3004に出力することにより印刷を行う。
<カメラ/プリンタの接続概要説明>
図5は、本実施例に係るPDプリンタ1000とDSC3012との接続を説明する図で、前述の図面と共通している部分は同じ記号で示し、その説明を省略している。
図において、ケーブル5000は、PDプリンタ1000のコネクタ1012と接続されるコネクタ5001と、デジタルカメラ3012の接続用コネクタ5003と接続するためのコネクタ5002とを備えており、また、デジタルカメラ3012は、内部のメモリに保存している画像データを、接続用コネクタ5003を介して出力可能に構成されている。なお、デジタルカメラ3012の構成としては、内部に記憶手段としてのメモリを備えるものや、取外し可能なメモリを装着するためのスロットを備えたものなど、種々の構成を採用することができる。この図5に示すようにして、ケーブル5000を介してPDプリンタ1000とデジタルカメラ3012とを接続することにより、デジタルカメラ3012からの画像データを直接PDプリンタ1000で印刷することができる。
ここで図5に示すようにしてPDプリンタ1000にデジタルカメラ3012が接続された場合は、操作パネル1010の表示部1006にはカメラマークのみが表示され、操作パネル1010における表示及び操作が無効になり、又ビューワ1011への表示も無効になる。従って、これ以降はデジタルカメラ3012でのキー操作及びデジタルカメラ3012の表示部(不図示)への画像表示のみが有効になるので、ユーザはそのデジタルカメラ3012を使用して印刷指定を行うことができる。
本実施例では、複数のメーカのデジタルカメラを接続してプリントすることができるPDプリンタを提供することを目的とし、本実施例に係るPDプリンタ1000とデジタルカメラとを接続してプリントを行なう場合の通信規約について詳しく説明する。
本実施例においては、PDプリンタとデジタルカメラとの間の通信制御を汎用ファイル、汎用フォーマットを用いて行い、インターフェースに依存しないNCDP(New Camera Direct Print)を提案する。
図6は、このNCDPの構成の一例を示す図である。
図において、600はUSBによるインターフェース、601はブルーツース(Bluetooth)によるインターフェースを示している。602はNCDPによるシステムを構築する際に組込まれるアプリケーションレイヤを示している。603は既存のプロトコル及びインターフェースを実行するためのレイヤで、ここではPTP(Picture Transfer Protocol),SCSI及びブルーツースのBIP(Basic Image Profile),USBインターフェース等が実装されている。本実施例に係るNCDPは、このようなプロトコルレイヤ等のアーキテクチャが実装されていて、その上にアプリケーションとして実装されることが前提である。ここではPDプリンタ1000は、USBホスト、カメラ3012はUSBスレーブとして規定されており、図6に示すように、それぞれ同じNCDP構成となっている。
図7は、本実施例に係るNCDPによる、PDプリンタ1000とデジタルカメラ(DSC)3012との間での通信手順の流れを説明する図である。
ここでは、図5に示すようにUSBケーブル5000によりPDプリンタ1000とDSC3012とが接続されたことが検知されると、これら機器間での通信が可能になる。これにより、これら機器に実装されているアプリケーションが実行されてNCDPによる手順701への移行が開始される。702はNCDPの初期状態を示し、ここでは互いの機種がNCDPを実行可能かどうかを判断し、可能であればNCDPによる手順701に移行している。もしここで、DSC3012がNCDPを実装していない場合には、NCDPによる通信制御は実行されない。こうしてNCDPに移行した後、703で示すように、DSC3012から「基本手順」による画像データの転送/印刷が指示されると、DSC3012から画像ファイルをPDプリンタ1000に転送して印刷する簡易印刷モードに移行する。また704で示すように、DSC3012から「推奨手順」による画像データの転送/印刷が指示されると、DSC3012とPDプリンタ1000との間で各種ネゴシエーションを行ってその印刷条件等を決定した後、画像ファイルをDSC3012からPDプリンタ1000に転送して印刷する、より多彩な印刷モードに移行する。また705は「拡張手順」を示し、この「拡張手順」の指示がDSC3012によりなされると、例えばDPOF,XHTML-print,SVG等の高度レイアウト機能、及び各社ベンダーユニークな仕様での印刷を行うモードが設定される。尚、この「拡張手順」による詳細仕様に関しては、DSCのメーカ各社個別の拡張仕様書で規定されるので、ここでは特に説明しない。尚、これら「基本手順」及び「推奨手順」による画像印刷に関しては、図9乃至図11を参照して後述する。
図8は、本実施例に係るNCDPにおいてプリントを行うために規定したコマンドを説明する図である。
図8において、「対応モード」はDSC3012から指示される、前述した「基本手順」、「推奨手順」及び「拡張手順」に対応している。「推奨手順」では全てのコマンドが使用できるのに対し、「基本手順」は簡易印刷モードであるため、NCDPへの移行及びその終了、「基本手順」、「推奨手順」及び「拡張手順」の各モードへの移行コマンド及びカメラ3012からの画像データの取得及びカメラ3012よりの印刷命令のみが使用可能である。尚、「拡張手順」では、NCDPへの移行及びその終了、「基本手順」、「推奨手順」及び「拡張手順」の各モードへの移行コマンドだけが用いられるように記載されているが、前述のように、各社の仕様に応じて他のコマンドが用いられても良いことはいうまでもない。
以下、前述した「基本手順」及び「推奨手順」による画像印刷について説明する。
図9は、「基本手順」による画像印刷を行う場合のNCDPの通信手順を説明する図である。この「基本手順」は、DSCからPDプリンタ1000に対して1枚の画像ファイルを転送して印刷するだけの簡易印刷モードであり、対応している画像フォーマットとしては、例えばVGAサイズ(640×480画素)のRGB画像、VGAサイズ(640×480画素)のJPEG画像とし、画像ファイルサイズとしては約1Mバイト以下としている。DSC3012はPDプリンタ1000がサポートしている画像フォーマットで送信する。この場合はエラーハンドリグは実行しない。
まず900で、PDプリンタ1000からDSC3012に対してNCDPへの移行を指示するコマンド(NCDPStart)を送信する。ここでDSC3012がNCDPを実装していればOKが返送される(901)。尚、このNCDPの確認手順を行う場合の一例としてPTPを用いた場合の具体例に関しては、図14を参照して詳しく後述する。
こうして互いにNCDPが実装されていることが確認されると、PDプリンタ1000からモードに移行するように命令(ProcedureStart)がDSC3012に送信される(902)。これに対して903で、DSC3012から簡易印刷モードである「基本手順」が送られてくると、これ以降は「基本手順」による印刷モードに移行する。この場合は、DSC3012における操作により印刷したい画像が選択されて印刷が指示されると、印刷の開始を指示するコマンド(JobStart)がDSC3012からPDプリンタ1000に送られる(904)。これによりPDプリンタ1000は簡易印刷モードとなり、DSC3012に対してコマンド(GetImage)を送信してJPEG画像を要求する(905)。これによりDSC3012からJPEG画像がPDプリンタ1000に送信され(906)、PDプリンタ1000における印刷処理が開始される。こうして、指示された画像の印刷が終了すると印刷ジョブの終了を示すコマンド(SendStatus)がPDプリンタ1000からDSC3012に送信される(907)。これに対してDSC3012から肯定応答(OK)が返送されると(908)、この「基本手順」による印刷処理が完了する。尚、この「基本手順」でやり取りするかどうかに関しても、DSCとPDプリンタの双方のCapabilityで決定される。
図10は、「推奨手順」による画像印刷を行う場合のNCDPの通信手順を説明する図で、前述の図9と共通する手順には同じ番号を付して、その説明を省略する。この「推奨手順」では、PDプリンタ1000とDSC3012との間でのネゴシエーションを前提とした「より多彩な印刷」モードが設定でき、複数枚の写真印刷やレイアウト印刷が可能になる。また、エラーハンドリングも実行可能となる。
図10において、図9の場合と同様にして、互いにNCDPが実装されていることを確認した後、この場合では、DSC3012から「推奨手順」が指示される(910)。この後はこの「推奨手順」による手順が実行される。まず911で示すように、DSC3012からPDプリンタ1000に対してCapabilityが要求されると、PDプリンタ1000は、自機の備えている機能及び用紙設定等を含む機能をCapability情報として全てDSC3012に伝える。このCapability情報は、スクリプト形式(テキスト)でDSC3012に送信される。
このCapability情報の一例を図12に示す。
図12に示すように、このCapability情報は、印刷可能な用紙の種類及びサイズ、印刷品位、画像データのフォーマット、日付印刷の有無、ファイル名印刷の有無、レイアウト、画像補正の有無、更にはオプションとして、各カメラメーカの仕様に対応した機能の有無等の情報を含んでいる。
このようにCapability情報をスクリプト表記とすることにより、他の通信プロトコルのアーキテクチャへの移植を簡単にし、このような機能情報のやり取りを、より標準化し易くしている。尚、このスクリプト表記はXML準拠であっても良い。
このようなCapability情報を受信したDSC3012のユーザは、そのPDプリンタ1000が備えている機能の内のいずれを使用して印刷を行うかを判定し、印刷したい画像を選択すると共に、その画像の印刷条件をそのPDプリンタ1000の有している機能の中から選択して決定する。こうして印刷したい画像及び印刷条件などが決定されて印刷開始が指示されるとプリント命令(JobStart)がPDプリンタ1000に送られる。これによりPDプリンタ1000から、その画像データを要求するコマンド(GetImage xn)が発行され(912)、それに応答してDSC3012から、対応する画像データが、PDプリンタ1000が受信可能な画像フォーマット(Tiff,JPEG,RGBなど)で送信される(913)。ここで1枚の画像印刷に対して複数の画像データを送信できるようになっているのは、例えば2×2等のレイアウト印刷が指定されている場合は、1枚の用紙に対して4枚分の画像データを送信する必要があるためである。こうして、指示された画像の印刷が終了すると印刷ジョブの終了を示すステータス情報(SendStatus)がPDプリンタ1000からDSC3012に送信される(907)。ここでは正常終了を示す「endednormaly」が送信されている。これに対してDSC3012から肯定応答(OK)が返送されると(908)、再び、この「推奨手順」による、次に画像の選択・印刷処理に移行する。
図11は、前述の「推奨手順」による画像印刷を行う場合のNCDPの通信手順において、PDプリンタ1000でエラーが発生した場合の通信手順を説明する図で、前述の図10と共通する手順には同じ番号を付して、その説明を省略する。
この例では、「推奨手順」での印刷処理の実行中に、PDプリンタ1000において給紙エラーが発生した場合の例を示している。この場合には914で、PDプリンタ1000からDSC3012に対して給紙エラーを示すステータス情報(SendStatus("Warning"))が送信される。これに対してDSC3012のユーザによる判断に基づいて、その印刷処理を継続するか(JobContinue)、中止するか(JobAbort)を示すコマンドがPDプリンタ1000に送信される(915)。これによりPDプリンタ1000では、中止の場合はその印刷処理を中止してプリントジョブの終了通知(JobEnd)を送信して印刷を中止する。或いは継続が指示された場合には、その給紙エラーの修復を待って、印刷処理を継続するように動作する。
次に、前述した処理手順を図13のフローチャートを参照して説明する。
図13は、図7に示す処理手順を説明するフローチャートである。
まずステップS1で、デジタルカメラ(DSC)3012とPDプリンタ1000との間の通信を確立し(700)、ステップS2で、これら機器がNCDPを実装済みかどうかを判定し、実装済みであればNCDPに移行する。次にステップS3に進み、DSC3012からの手順指示を受信して、その指示された手順に移行する。ここで「基本手順」が指示された時はステップS4からステップS5に進み、「基本手順」による印刷処理を実行する。また「推奨手順」が指示された時はステップS6からステップS7に進み、前述した「推奨手順」による印刷処理を実行する。更に「拡張手順」が指示された時はステップS8からステップS9に進み、各ベンダーに応じた「拡張手順」による印刷処理を実行する。それ以外の場合はステップS10に進み、このPDプリンタ1000とDSC3012とによる独自のモードでの印刷を実行する。
次に上述したNCDPにおける各種コマンド(図8)を、汎用のPTPを用いて実現した(PTPによるラッパー)例を説明する。尚、本実施例では、PTPを用いたNCDPの場合で説明するが本発明はこれに限定されるものではなく、例えば、他のインターフェース、他のクラス(Class)上でダイレクトプリントサービスAPIを実装しても良い。
[NCDPStart]
図14は、NCDP手順の開始を指示する命令(NCDPStart)をPTPアーキテクチャを用いて実現した例を説明する図である。
PDプリンタ1000とDSC3012とが物理的に接続された後、まず1400で、PDプリンタ1000からDSC3012に対してGetDeviceInfoが送信され、DSC3012に対して、その保持しているオブジェクトに関する情報が要求される。これに対してDSC3012は、DeviceInfo Datasetにより、DSC3012に保持しているオブジェクトに関する情報をPDプリンタ1000に送信する。次に1402で、OpenSessionにより、DSC3012をリソースとして割り当て、必要に応じてデータオブジェクトにハンドルをアサインしたり、特別な初期化を行うための手順の開始要求が発行されてDSC3012から肯定応答(OK)が返送されるとPTPでの通信が開始される。次に1403で、DSC3012に対してスクリプト形式の全てのハンドルを要求する(Storage ID: FFFFFF, Object Type: Script)と、これに対して1404で、DSC3012に保持されている全てのハンドルリストが返送される。次に1405,1406において、PDプリンタ1000からi番目のオブジェクトハンドルの情報を取得する。ここで、このオブジェクトに、DSC3012の識別を示すキーワード(例えば「山」)が含まれていると、次に1407において、PDプリンタ1000からオブジェクト情報の送信を指示して(SendObjectInfo)、それに対して肯定応答(OK)を受信すると、SendObjectにより、オブジェクト情報をPDプリンタ1000からDSC3012に対して送信する。ここで、このオブジェクトには、前述のキーワードに対する応答キーワード(合言葉)として例えば「川」が含まれている。
このようにして、PDプリンタ1000とDSC3012の双方が互いに接続相手を認識できることになり、これ以降はNCDPによる手順(図7の701)に移行することができる。このようにファイルの受渡しができるトランスポートレイヤーであればキーワードの受渡しを確実に行うことができる。即ち、本実施例のNCDPにユニークなコマンド等を追加することなく、キーワードを交換することができる。尚、ここでキーワードとしては、上述の例に限定されるものでなく、同じキーワードであっても良い。またこのキーワードによるネゴシエーションを行う時間を短縮するために、スクリプト形式のハンドルの最初にこのキーワードを入れておくことにより、互いの機器を確認するのに要する時間を短縮できる。
[ProcedureStart]
図15は、DSC3012からの、モードへの移行手順を指示する命令を受信して、そのモードに移行するための命令(ProcedureStart)をPTPアーキテクチャを用いて実現した例を説明する図である。
ここではまず1501で、PDプリンタ1000がサポートしている手続「基本手順」、「推奨手順」、「拡張手順」をDSC3012に通知するためにSendObjectInfoにより、DSC3012に対して送信したいオブジェクト情報があることを伝える。これに対して肯定応答(OK)がDSC3012から送られてくると、1502でSendObjectによりオブジェクトを送信する旨をDSC3012に伝え、次の1503のObjectDataで、このPDプリンタ1000がサポートしている手続に関する情報を送信する。次に1504で、DSC3012からPDプリンタ1000に対して、GetObject動作を起動したい(プッシュモードに移行)旨を伝える。これにより1505で、PDプリンタ1000からオブジェクト情報に関する情報を受信する旨が伝えられると(GetObjectInfo)、1506で、ObjectInfo Datasetにより、その情報が返送され、次に1507で、そのオブジェクト情報を指定してオブジェクト情報そのものが要求されると、Object Datasetにより、DSC3012が使用する手続(「基本」、「推奨」、「拡張」等)をPDプリンタ1000に知らせる(1508)。
これにより、DSC3012からPDプリンタ1000に対して、画像の印刷モードを指定することができる。
[NCDPEnd]
図16は、本実施例に係るNCDPにおける通信制御手順を終了する命令(NCDPEnd)をPTPアーキテクチャを用いて実現した例を説明する図である。
この手順では、1600において、PDプリンタ1000からDSC3012に対して送信したいオブジェクト情報があることを伝え、ObjectDataにより、DSC3012に対してNCDPのモードから抜けることを通知する。これに対して肯定応答(OK)を受信すると、1601でCloseSessionを送信して、この通信を終了させる。これによりNCDPによる通信手順を終了する。
[getCapability]
図17は、本実施例に係るNCDPにおける、PDプリンタ1000の機能をDSC3012に通知するCapability命令における通信手順をPTPアーキテクチャを用いて実現した例を説明する図である。
この手順では、1701において、DSC3012からPDプリンタ1000に対して(RequestObjectTransfer)により、DSC3012からプリンタ1000に対して送信したいオブジェクトがある旨を通知する。これに対して1702で、プリンタ1000より、そのオブジェクトの情報が要求されると、1703で、その転送したいオブジェクトのデータセットをプリンタ1000に通知する。そして1704で、プリンタ1000からDSC3012に対してオブジェクトの取得コマンド(GetObject)が発行されると、それに応答してオブジェクトがDSC3012からプリンタ1000に対して送信され、このオブジェクトの送信により、DSC3012がプリンタ1000のCapabilityを要求しているとみなす(1705)。
これによりプリンタ1000は、自分の有している、その要求されたオブジェクトに関する情報をDSC3012に送信する。そして1707で、プリンタ1000が有している機能を示すCapabilityをSendObject,ObjcetDataにより、スクリプト(Script)形式でPDプリンタ1000からDSC3012に対して送信する。以上により、PDプリンタ1000とDSC3012とが有している機能情報の交換が成立する。
[GetImage]
図18は、本実施例に係るNCDPにおけ+る、PDプリンタ1000がDSC3012に保持されている画像データ(JPEG画像)を取得する(GetImage)通信手順をPTPアーキテクチャを用いて実現した例を説明する図である。
まず1800で、DSC3012が保持しているオブジェクトに関する情報を要求すると、1801で、そのオブジェクトに関する情報(Object Dataset)がDSC3012からPDプリンタ1000に送られる。次に、1802で、そのオブジェクトを指定して取得要求(GetObject)を発行すると、1803で、その要求された画像ファイル(Object Dataset)がDSC3012からPDプリンタ1000に対して送信される。この様にしてPDプリンタ1000は、DSC3012から所望の画像ファイルを取得することができる。
[sendStatus]
図19は、本実施例に係るNCDPにおける、PDプリンタ1000からDSC3012に対してエラー状態などを通知する(Status)通信手順をPTPアーキテクチャを用いて実現した例を説明する図である。
まず1900で、PDプリンタ1000からDSC3012に対して送信したいオブジェクト情報がある旨をSendObjectInfoにより通知する。そして1901で、そのオブジェクト情報に関する情報セット(Object Dataset)をDSC3012に送信し、DSC3012からの肯定応答(OK)に対して、PDプリンタ1000におけるエラー等のステータス情報をSendObjectおよびObject Datasetにより送信する。
[PageEnd]
図20は、本実施例に係るNCDPにおける、PDプリンタ1000からDSC3012に対して、1ページのプリント処理が終了したことを通知する(PageEnd)通信手順をPTPアーキテクチャを用いて実現した例を説明する図である。
図21は、本実施例に係るNCDPにおける、PDプリンタ1000からDSC3012に対して、プリントジョブが終了したことを通知する(JoeEnd)通信手順をPTPアーキテクチャを用いて実現した例を説明する図である。
図20,図21においては、図19の1900乃至1901の手順実行後、図20の1910で、PDプリンタ1000からDSC3012に対して1ページ印刷処理が終了したことが通知され、図21の1911では、PDプリンタ1000からDSC3012に対して印刷ジョブが終了したことが通知される。
[JobStart]
図22は、本実施例に係るNCDPにおける、DSC3012からPDプリンタ1000に対して、プリントジョブの開始を通知する(JobStart)通信手順をPTPアーキテクチャを用いて実現した例を説明する図である。
まず2200において、DSC3012からPDプリンタ1000に対してRequestObjectTransferを送り、PDプリンタ1000がGetObjectコマンドを発行するように促す。これにより2201で、PDプリンタ1000からGetObjectInfoが発行されると、DSC3012は送信したいオブジェクト情報に関する情報を送信し、これに対してPDプリンタ1000からオブジェクト情報が要求されると(GetObject:2203)、2204で、Object Datasetを送信して、DSC3012からPDプリンタ1000に対して印刷命令を発行する。
[JobAbort]
図23は、本実施例に係るNCDPにおける、DSC3012からPDプリンタ1000に対してプリント中止命令を発行する(JobAbort)通信手順をPTPアーキテクチャを用いて実現した例を説明する図である。
[JobContinue]
図24は、本実施例に係るNCDPにおける、DSC3012からPDプリンタ1000に対してプリント再開命令を発行する(JobContinue)通信手順をPTPアーキテクチャを用いて実現した例を説明する図である。
図23及び図24において、図22の2200乃至2203の手順を実行した後、図23の2301で、DSC3012からPDプリンタ1000に対して印刷中止命令が発行され、図24の2401では、DSC3012からPDプリンタ1000に対して印刷再開命令が通知される。
[Capability]
次に本実施例に係る特徴部分であるPDプリンタ1000とDSC3012との間での通信手順と、PDプリンタ1000とDSC3012における処理について説明する。
本実施例では、PDプリンタ1000に接続されるDSC3012は、各メーカで製造された不特定のデジタルカメラが接続されることを前提としているため、例えばPDプリンタ1000からDSCに対して、そのPDプリンタ1000が有している全ての情報をCapabilityとしてDSCに送信しても、そのDSCは、そのCapabilityの内容を全て或いはある一部を理解できない可能性がある。その様な場合には、PDプリンタ1000が意図していない印刷条件が記述されたプリントジョブファイルがDSCから送られてくることになり、このような場合に、そのプリントジョブファイルで指示された通りの印刷条件で印刷を行うことができない場合、プリンタは前記プリントジョブを処理できない旨DSCに通知することとする。
図25は、図11に示す「推奨手順」におけるCapabilityのやり取りの手順を説明する図である。
図において、2501で、前述したようにPDプリンタ1000からDSC3012に対してCapabilityがスクリプト表記で送信される。DSC3012はこのCapabilityを解釈し、理解できない事項があればそれを無視する。次に2502で、DSC3012のユーザは、このDSC3012のUIを使用して印刷したい画像ファイルや印刷条件(用紙種類、用紙サイズ、画像品位等)を指定する。これによりプリントジョブを指定するプリントジョブ形式のファイルを作成する。そして2503で、そのプリントジョブを指定するプリントジョブファイルをDSC3012からPDプリンタ1000に送信する。これを受信したPDプリンタ1000は、そのプリントジョブファイルに記述されている内容を解析し、次に2504で受信した画像ファイルを、そのプリントジョブファイルで指定された印刷条件で印刷する。こうして印刷が終了すると2505で、プリントジョブが終了したことをDSC3012に通知する。
尚、ここで、PDプリンタ1000にセットされている用紙サイズが「L判」であるのに対して、DSC3012から受信したプリントジョブファイルのCapabilityの用紙サイズに「A4判」が指定されていた場合、PDプリンタ1000は、そのプリントジョブを処理できない旨DSCに通知する。
図26は、上述の「推奨手順」での処理手順におけるDSC3012での処理を説明するフローチャートである。
まずステップS21で、PDプリンタ1000からCapabilityを受信するとステップS22に進み、そのCapabilityを解析する。ここで、理解できない事項があればそれを無視する。次にステップS23に進み、印刷指示画面(UI)をカメラ3012の表示部に表示し、ステップS24で、そのUI画面を使用して、ユーザによる印刷指示が入力される。こうして印刷指示が入力されるとステップS25に進み、UIを使用して設定された印刷対象画像ファイル及び各種印刷条件などを記述したプリントジョブファイルを作成し、ステップS26で、そのプリントジョブファイルをPDプリンタ1000に送信する。続いてステップS27で、そのプリントジョブファイルに記述されている画像ファイルをPDプリンタ1000に送信する。
<デジタルカメラの概要説明>
図27は、本実施例に係るDSC(デジタルカメラ)3012の構成を示すブロック図である。
同図において、3100はDSC3012全体の制御を司るCPUであり、3101はCPU3100による処理手順を記憶しているROMである。3102はCPU3100のワークエリアとして使用されるRAMであり、3103は各種操作を行うスイッチ群で、シャッター、モード切替スイッチ、選択スイッチやカーソルキー等が含まれている。2700は液晶表示部であり、現時点で撮影している映像や、撮像されてメモリカードに記憶されている画像を表示したり、各種設定を行う際のメニューを表示するために使用される。3105は光学ユニットであり、主としてレンズ及びその駆動系で構成される。3106はCCD素子であり、3107はCPU3100の制御下において光学ユニット3105を駆動制御するドライバである。3108は記憶媒体3109(コンパクトフラッシュ(登録商標)メモリカード、スマートメディア等)を接続するためのコネクタであり、3110はPC或いは実施例におけるPDプリンタ1000と接続するためのUSBインターフェース(USBのスレーブ側)である。
[第1実施例]
次に本発明の第1実施例について説明する。この第1実施例では、capabilityが変更されたことを伝えるcapabilityChanged機能をサポートしていないDSC3012と、それをサポートしているPDプリンタ1000との間での処理について説明する。
まず、capabilityが変更されたことを伝えるcapabilityChangedタグは、DSC3012とプリンタ1000の両方においてOptional(オプション)であり、この機能をサポートするか否かは各ベンダの任意の設計事項とする。この第1実施例において、PDプリンタ1000は、DSC3012がcapabilityChangedをサポートしているか否かを示す情報を取得するコマンドを持たないこととする。また、このcapabilityChangedタグを受信した場合、そのタグを解釈せず無視してOKを返信することが可能である。
capabilityChangedタグは、内部に「True」と「False」の2つの状態を持ち、「True」の状態はプリンタ1000がサポートしているcapabilityが変更されたことを示し、「False」の状態は、capabilityが変更されない状態であることを示している。
具体的には、例えばPDプリンタ1000の用紙トレイ1004にL版の用紙を載置するトレイが装備されていると、このときのcapabilityの用紙サイズは<PaperSize=L>となる。このL版のトレイが、葉書用のトレイに交換されたとき、capabilityの用紙サイズは<PaperSize=Hagaki>に変更される。この状態においてCapabilityChangedは、capabilityが変更されたことを示す「True」となる。
一方、用紙トレイ1004が交換されない、つまりcapbilityの用紙サイズがNCDP開始から現在に至るまで<PaperSize=L>の場合には、capabilityChangedは「False」のままである。
このような前提条件の下で、PDプリンタ1000は、DSC3012に「sendStatus(capabilityChanged=True)」を送信してcapabilityが変更されたことをDSC3012に通知した場合、DSC3012は、このcapabilityChangedタグをサポートしていないため、capabilityが変わったことを理解できない。このため、PDプリンタ1000では、それに対するOKをDSC3012から受信しても、それが正しくDSC3012で理解できたかどうかまでは判定できないことになる。従って、PDプリンタ1000は、capabilityが変更された状態であり、DSC3012がそれを理解できていない状態で設定された「jobStart」コマンドをプリンタ1000送信して印刷を指示するといった問題が発生する。
一方、capabilityChangedタグをサポートしていないDSC3012に対しては、PDプリンタ1000の用紙トレイが交換された場合でも、その旨を通達する手段がないので、プリンタ1000がサポートしていないcapabilityに基づいてを設定された「jobStart」コマンドが、DSC3012からPDプリンタ1000に送信されてしまうという問題が発生する。
図28は、本発明の第1実施例に係るPDプリンタ1000における処理を説明するフローチャートで、この処理を実行するプログラムはプログラムメモリ3003aに記憶されており、CPU3002の制御の下に実行される。
まずステップS31で、PDプリンタ1000は、DSC3012に対して「sendStatus(capaiblityChanged=True)」を送信して、プリンタ1000のCapabilityが変更したことを通知する。次にステップS32に進み、プリンタ1000はDSC3012から「jobStart」により印刷ジョブを受信するとステップS33に進み、PDプリンタ1000は、ステップS31で「sendStatus(capabilityChanged=True)」を送信してからステップS32で「jobStart」を受信するまでの間に、DSC3012から、その変更した新たなcapabilityを要求する「getCapablity」を受信したか否かを判断する。ここで「getCapability」を受信している場合は、DSC3012は、PDプリンタ1000がステップS31で送信したcapabilityChangedタグを理解していることを示しているので、ステップS32で受信した「jobStart」のcapabilityは、その変更を通知したcapabilityに矛盾したものではないと推定できる。従って、この場合は、ステップS35に進み、そのまま通常の印刷処理に移行する。
一方、ステップS33で、「getCapability」を受信していないと判定されるとステップS34に進み、この場合は、DSC3012がcapabilityChangedタグをサポートしていないと推測されるため、ステップS32で受信した「jobStart」のcapabilityの設定は、現時点のPDプリンタ1000がサポートしていないcapabilityを含んでいる可能性がある。このため、PDプリンタ1000は一旦、USB切断を行い、その後、再度USB接続を行う。これによって、改めてNCDP接続を開始することになり、PDプリンタ1000は、DSC3012から「getCapability」を受信して、capabilityを通知することができる。
以上説明したように、DSC3012が特定のタグをサポートしているかどうか不明な場合においても、その特定のタグの内容に応じてDSC3012が取るべき動作と比較し、その比較結果に基づいて、DSC3012がその特定のタグの機能をサポートしているかどうかを判定することができる。
その結果、プリンタ1000のcapabilityが変更した場合に、プリンタ1000はDSC3012に、その変更したcapabilityを取得させることができ、そして、現時点でプリンタがサポートしているcapabilityに基づいてが印刷ジョブが設定された「jobStart」コマンドを、DSC3012から受信することができる。
尚、DSC3012が新たなcapabilityを受信した後、既に作成した印刷ジョブを新たなcapabilityに適合するように修正し、その修正した後の印刷ジョブをPDプリンタ1000に送信するようにすると更に好適である。この印刷ジョブの修正は自動的に行うようにしてもよいが、変更後のcapabilityに不適合な印刷ジョブの内容を、UIを使用してユーザに提示して変更させるようにしてもよい。例えば、印刷ジョブの内容を文字列等でUI表示し、新たなcapabilityに不適合な箇所を色を変える等してユーザに修正を促すようにすることなどが考えられる。
尚、この第1実施例のステップS33における、capabiityChangedタグをサポートしているか否かを判別する手段は、ステップS32で受信した「jobStart」に設定されたcapabilityを、capability変更後のPDプリンタ1000がサポートしているか否かにより判断することもできる。更に、ステップS32で受信した「jobStart」に設定されたcapabilityに基づく判定と、ステップS33の処理との両方を用いても実現可能である。
更にこの第1実施例のステップS34において、PDプリンタ1000がDSC3012にcapabilityを取得させる手段は、NCDPEndを実行してNCDPモードを終了させ、次に再度、NCDPへの移行を指示するNCDPStartを実行することでも実現できる。また或は、PTPのcloseSessionを実行し、次にopenSessionを実行することでも実現可能である。
図29は、本発明の第1実施例に係るDSC3012における処理を示すフローチャートで、この処理を実行するプログラムはDSC3012のROM3101に記憶されている。
まずステップS41で、DSC3012は「getCapability」をPDプリンタ1000に送信して、PDプリンタ1000に対してcapabilityを要求する。次にステップS42に進み、DSC3012は「jobStart」により印刷ジョブをPDプリンタ1000に送信する。次にステップS43に進み、ステップS42で送信した「jobStart」に対してPDプリンタ1000からの応答が「プリンタで処理できない」旨を含んでいるか否かを判断する。処理できない旨を受信した場合は、PDプリンタ1000がcapabilityChangedタグをサポートしていないと推定でき、プリンタ1000がサポートしているCapabilityが変わったと推定できる。
即ち、ステップS41でPDプリンタ1000のcapabilityが取得された後、ステップS42で、DSC3012がPDプリンタ1000に対して印刷ジョブを発行する前に、PDプリンタ1000のcapabilityが変更された場合を想定している。この場合、もしPDプリンタ1000がcapabilityChangedタグをサポートしていれば、ステップS42の前に、PDプリンタ1000からcapabilityChangedタグが送信されてくるはずである。このcapabilityChangedタグが送信されてこなくて、ステップS41で取得したPDプリンタ1000のcapabilityに従った印刷ジョブをPDプリンタ1000に発行した場合に、その印刷ジョブにその時点でのPDプリンタ1000のcapabilityと一致しない項目が含まれているということは、PDプリンタ1000はcapabilityChangedタグをサポートしていないと判定する。
一方、ステップS43で、「プリンタで処理できない」旨以外の応答を受信した場合は、DSC3012はPDプリンタ1000がサポートしているcapabilityが変更していないと推定できるため、ステップS45に進んで、通常の処理を実行する。
ステップS43で、DSC3012は「getCapability」を実行することにより、PDプリンタ1000がサポートしているcapabilityを取得することができ、プリンタ1000がサポートしているcapabilityを設定した「jobStart」を送信することができる。そしてステップS3104へ進み処理を終了する。
以上説明したように第1実施例によれば、プリンタ1000が特定のタグをサポートしているかどうかが不明な場合に、その特定のタグの内容が特定の状態において、推定したあるべきプリンタ1000の動作とを比較し、その結果が一致するか否かにより、プリンタ1000がそのタグをサポートしているかどうかを判定することができる。その結果、互いに混乱が起きない様に適切な対応を行うことができる。
[第2実施例]
前述の第1実施例では、capabilityChangedタグの場合の処理について説明したが、この第2実施例では、disconnectEnableタグに関する処理について説明する。このdisconnectEnableタグは、DSC3012及びPDプリンタ1000の両方においてオプションであり、サポートするか否かは各ベンダの任意の設計事項とする。この第2実施例では、前述の第1実施例とは逆に、DSC3012はPDプリンタ1000がdisconnectEnableをサポートしているか否かを取得するコマンドを持たないこととする。つまりDSC3012からPDプリンタ1000への「getCapability」に対する返答スクリプトに、disconnectEnableに関する情報が含まれていないことになる。このdisconnectEnableのデフォルト値は「False」であり、仮にdisconnectEnableタグが「sendStatus」コマンドで省略されていた場合には「False」とみなされるものとする。このdisconnectEnableタグは「True」と「False」の2つの状態を持ち、「True」の状態は、USBケーブルによるDSC3012とPDプリンタ1000との間の接続を切断しても問題が発生しない状態を示し、「False」は切断すると問題が発生する状態を示す。
具体的には、DSC3012が「jobStart」コマンドを発行した後、PDプリンタ1000が「getImage」を発行して、印刷が指定された画像ファイルを取得する。ここで全ての画像ファイルの取得を完了する前にUSB接続が切断されてしまうと、その「jobStart」で要求されている印刷を完了することができなくなる。つまり、この状態においてdisconnectEnableは「False」であるべきである。一方、プリンタ1000が印刷完了前に、全ての画像ファイルの取得を完了した場合には、現在印刷中ではあるが、USB接続が切断されても「jobStart」で要求されている印刷を完了することができる。つまり、この状態ではdisconnectEnableは「True」であり得る。
上記の前提条件の下では、DSC3012はPDプリンタ1000から送信される「sendStatus」の中身を解析し、その結果、dinsconnectEnableが「False」を示していたとしても、それが本当にPDプリンタ1000がdisconenctEnableタグをサポートしていて、現在USB接続を切断した場合に問題が起こるために「False」となっているのか、それともPDプリンタ1000がdisconenctEnableタグをサポートしていないために「False」となっているのかの判別が付かない。よってDSC3012は、このような状態において、表示部2700に表示するUI表示により、ユーザに対して「USBケーブルを抜かないで下さい」等のメッセージを表示して良いのかどうかの判別が付かない。
図30は、この第2実施例におけるDSC3012における処理を示すフローチャートで、この処理を実行するプログラムはROM」3101に記憶されている。
まずステップS51で、DSC3012は、自分が「jobStart」を発行していない状態で「getStatus」を発行し、最新のPDプリンタ1000のstatusを取得する。次にステップS52に進み、その取得したステータスに記載されているdinsconnectEnableの内容を確認する。DSC3012が「jobStart」を発行する前であれば、PDプリンタ1000としてはUSB接続が切断されたとしても問題は発生しない筈なので、仮にPDプリンタ1000がdisconnectEnableタグをサポートしていれば、その内容は「True」となっているはずと推定できる。またもしその内容が「True」では無く「False」になっていたとすれば、PDプリンタ1000は、disconnectEnableタグをサポートしていないという推定が成り立つ。よってステップS53で、取得したdisconnectEnableタグの内容を、推定される内容と比較し、推定した内容と一致した場合にはステップS54に進み、DSC3012は、表示部2700に表示するメッセージをdisconnectEnableタグの内容に準じて設定する。
一方、ステップS53で不一致の場合にはステップS55に進み、表示部2700に表示するメッセージの表示を、disconnectEnableタグの内容に準じて設定せずに、例えば、printServiceStatusタグの内容がアイドルになっている場合にUSB接続が切断でき、逆に、印刷中や停止状態になっている場合にはUSB接続が切断できないというように、printServiceStatusに準じてユーザに提示する。
以上説明したように第2実施例によれば、「getCapability」等で実際にPDプリンタ1000が特定のタグをサポートしているかどうか不明な場合においても、そのタグの内容が推定可能な状態で、実際に取得したタグの内容と、推定したあるべきタグ内容とを比較し、その結果が一致するか否かで、PDプリンタ1000がそのタグをサポートしているかどうかを判定することができる。これにより、ユーザが混乱を起こさない様な適切なUI表示を行うことができる。
[第3実施例]
この第3実施例では、jobEndReasonをサポートしているDSC3012とサポートしていないプリンタ1000の間での処理について説明する。このjobEndReasonタグは、印刷ジョブが終了した理由を報告するもので、DSC3012及びPDプリンタ1000の両方においてオプションであり、このタグ機能をサポートするか否かは各ベンダの任意の設計事項とする。この第3実施例においては、前述の第2実施例と同様に、DSC3012が、PDプリンタ1000がjobEndReasonをサポートしているか否かを取得するコマンドを持たないものとする。つまり「getCapability」に対する返答スクリプト中にjobEndReasonに関する情報は含まれない。このjobEndReasonのdefault値は「notEnded」であり、仮にjobEndReasonタグが「sendStatus」コマンド中で省略されていた場合には「notEnded」と見なされるものとする。
このjobEndReasonタグは、「notEnded」(ジョブ未終了),「endedNormally」(正常終了),「endedByJobAbort」(停止命令による停止)及び「endedByprinterReason」(プリンタに起因する終了)の4つの状態をとり得る。「notEnded」状態は、まだ印刷ジョブが完了していないことを示し、「endedNormally」は印刷ジョブが正常に終了したことを示す。また「endedByJobAbort」は、DSC3012からの「jobAbort」コマンドによって印刷ジョブが中断されたことを示し、「endedByprinterReason」は、PDプリンタ1000のオペレーション(例えば、PDプリンタ1000に設置されている印刷キャンセルボタンをユーザが押下した等)によって印刷ジョブが中断された事を示す。
具体的には、「jobStart」コマンドがDSC3012から発行された後、PDプリンタ1000は「jobStart」で指定された印刷ジョブを実行するが、例えば印刷ジョブの完了とほぼ同時にDSC3012が印刷停止(jobAbort)を発行した場合を想定する。この場合、DSC3012としては、印刷ジョブの完了理由が「jobAbort」であるか、正常終了なのかを区別できれば、それに応じたUI表示を表示部2700に表示することができる。また「jobAbort」を発行していない状態で印刷ジョブが終了し、printServiceStatusが印刷中からアイドル状態へ遷移した場合、それが正常終了なのか、プリンタ1000の理由による中断なのかを区別できる場合には、それに応じた適正なUI表示を行うことができる。
一方、印刷ジョブの終了理由を取得できない場合には、DSC3012は印刷ジョブが終了し、printServiceStatusが印刷中からアイドル状態に遷移した場合、DSC3012はUI表示に「印刷が完了しました」等のメッセージを表示して良いのかどうかの判別が付かない。このような問題を解決するのがこの第3実施例である。
図31は、本発明の第3実施例に係るDSC3012における処理を示すフローチャートで、この処理を実行するプログラムはROM3101に記憶されている。
まずステップS61で、DSC3012が「jobStart」を発行する。次にステップS62に進み、PDプリンタ1000から送られる「sendStatus」を受信するために待機状態に移行する。次にステップS63に進み、PDプリンタ1000から「sendStatus」を受信してprintServiceStatusの内容を取得する。次にステップS64に進み、印刷ジョブを開始したPDプリンタ1000の状態が印刷中(printing)へ遷移したかどうかを確認する。もし印刷中へ遷移していない場合にはステップS62に戻って前述の処理を実行する。
こうしてステップS64で、PDプリンタ1000の状態が印刷中(printing)へ移行するとステップS65に進み、PDプリンタ1000から送られる「sendStatus」を受信するために待機状態となる。そしてステップS66に進み、PDプリンタ1000からステータスを受信し、その受信した「sendStatus」のprintServiceStatusの内容を確認する。そしてステップS67に進み、印刷ジョブを完了したPDプリンタ1000の状態がアイドル(待機状態)へ遷移したかどうかをみる。もし待機状態へ遷移していない場合にはステップS65に戻る。
そしてステップS67で、PDプリンタ1000の状態がアイドル(待機状態)へ遷移するとステップS68に進み、printServiceStatusが待機状態の時のjobEndReasonタグの内容を取得する。ここでDSC3012が「jobStart」を発行した後に、printServiceStatusの内容が待機状態へ遷移したのであれば、PDプリンタ1000としてはいかなる理由であれ、印刷ジョブは終了しているものと推定する。従って、仮にPDプリンタ1000がjobEndReasonタグをサポートしていれば、その内容は「notEnded」以外となっているはずと推定できる。
またもしその内容が「notEnded」になってればPDプリンタ1000がjobEndReasonタグをサポートしていないという推定が成り立つ。よってステップS69では、jobEndReasonの内容を、ここでは有り得ないと推定される内容「notEnded」と比較し、有り得ると推定される内容であればステップS70に進み、DSC3012は表示部2700に、ユーザに対してのメッセージの表示を、jobEndReasonタグの内容に準じて設定する。
一方、ステップS69で、有り得ない「notEnded」の場合はステップS71に進む。この場合DSC3012は、UI表示のメッセージを、jobEndReasonタグの内容に準じて設定せずに、他のメッセージを表示する。例えば、printServiceStatusタグの内容が待機状態(idle)に遷移した場合、特に理由を説明せずに「印刷が終了しました」等と表示し、例えば中断された印刷ジョブの再開等のメニューは表示しないというように、printServiceStatusの内容に準じて行うことが好ましい。
以上の説明したようにこの第3実施例によれば、「getCapability」等で、実際にPDプリンタ1000が特定のタグをサポートしているかどうか不明な場合においても、そのタグの内容が推定可能な特定の状態において実際に取得したタグの内容と、推定したあるべきタグ内容とを比較し、その結果が一致するか否かでPDプリンタ1000がそのタグ機能をサポートしているかどうかを判定することができる。これにより、ユーザに混乱を起こさない、適切なUI表示を行うことができる。
[他の実施の形態]
本実施例では、画像供給装置としてのDSC3012がプリンタの機能情報を要求することから始まって、お互いの機能情報を交換したが、画像記録装置としてのプリンタ1000が画像供給装置としてのDSC3012の機能情報を要求することから始めて、機能情報をお互いに取得することによっても達成できる。
本発明の目的は前述したように、実施例の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体をシステム或は装置に提供し、そのシステム或は装置のコンピュータ(又はCPUやMPU)が記憶媒体に格納されたプログラムコードを読み出し実行することによっても達成される。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フロッピィ(登録商標)ディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM,CD−R、磁気テープ、不揮発性のメモリカード、ROMなどを用いることができる。
また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施の形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているOS(オペレーティングシステム)などが実際の処理の一部又は全部を行い、その処理によって前述した実施例の機能が実現される場合も含まれる。
更に、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書きこまれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部又は全部を行い、その処理によって前述した実施例の機能が実現される場合も含む。