以下、添付図面に従って本発明に係る実施形態を説明する。
図1は、本発明の実施の形態に係るフォトダイレクトプリンタ装置(以下、PDプリンタ装置)1000の概観斜視図である。このPDプリンタ装置1000は、ホストコンピュータ(PC)からデータを受信して印刷する通常のPCプリンタとしての機能と、メモリカードなどの記憶媒体に記憶されている画像データを直接読取って印刷したり、或いはデジタルカメラからの画像データを受信して印刷する機能を備えている。
図1において、本実施の形態に係るPDプリンタ装置1000の外殻をなす本体は、ケースM1001、上ケース1002、アクセスカバー1003及び排出トレイ1004の外装部材を有している。また、下ケース1001は、PDプリンタ装置1000の略下半部を、上ケース1002は本体の略上半部をそれぞれ形成しており、両ケースの組合せによって内部に後述の各機構を収納する収納空間を有する中空体構造をなし、その上面部及び前面部にはそれぞれ開口部が形成されている。さらに、排出トレイ1004は、その一端部が下ケース1001に回転自在に保持され、その回転によって下ケース1001の前面部に形成される開口部を開閉させ得るようになっている。このため、記録動作を実行させる際には、排出トレイ1004を前面側へと回転させて開口部を開成させることにより、ここから記録シートが排出可能となると共に、排出された記録シートを順次積載し得るようになっている。また、排紙トレイ1004には、2枚の補助トレイ1004a,1004bが収納されており、必要に応じて各トレイを手前に引き出すことにより、用紙の支持面積を3段階に拡大、縮小させ得るようになっている。
アクセスカバー1003は、その一端部が上ケース1002に回転自在に保持され、上面に形成される開口部を開閉し得るようになっており、このアクセスカバー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)を示し、その構成は図4のブロック図を参照して詳しく後述する。3002はDSP(デジタル信号処理プロセッサ)で、内部にCPUを有し、後述する各種制御処理及び、輝度信号(RGB)から濃度信号(CMYK)への変換、スケーリング、ガンマ変換、誤差拡散等の画像処理等を担当している。3003はメモリで、DSP3002のCPUの制御プログラムを記憶するプログラムメモリ3003a、及び実行時のプログラムを記憶するRAMエリア、画像データなどを記憶するワークメモリとして機能するメモリエリアを有している。3004はプリンタエンジンで、ここでは、複数色のカラーインクを用いてカラー画像を印刷するインクジェットプリンタのプリンタエンジンが搭載されている。3005はデジタルカメラ(DSC)3012を接続するためのポートとしてのUSBコネクタである。3006はビューワ1011を接続するためのコネクタである。3008はUSBハブ(USB HUB)で、このPDプリンタ装置1000がPC3010からの画像データに基づいて印刷を行う際には、PC3010からのデータをそのままスルーし、USB3021を介してプリンタエンジン3004に出力する。これにより、接続されているPC3010は、プリンタエンジン3004と直接、データや信号のやり取りを行って印刷を実行することができる(一般的なPCプリンタとして機能する)。3009は電源コネクタで、電源3011により、商用ACから変換された直流電圧を入力している。PC3010は一般的なパーソナルコンピュータ、3011は前述したメモリカード(PCカード)、3012はデジタルカメラ(DSC:Digital Still Camera)である。
尚、この制御部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バス)である。
図26は実施形態におけるDSC3012のブロック構成図である。なお、ハードウェアそのものは、公知であるので簡単に説明する(ファームウェアはNCDP対応になっている)。
同図において、31はDSC全体の制御を司るCPUであり、32はCPU31の処理手順(ファームウェア)を記憶しているROMである(ただし、ファームウェアは適宜バージョンアップが行われることを想定し、書き込み可能な不揮発性メモリ、例えばフラッシュメモリで構成される)。33はCPU33のワークエリアとして使用されるRAMであり、34は各種操作を行うスイッチ群である。35は液晶表示器であり、撮像した画像を確認したり、各種設定を行う際のメニューを表示するために使用される。これら34、35は、本実施形態では、ダイレクトプリントシステムとして機能した場合、システム全体としてユーザインターフェースとして機能するようになる。36は光学ユニットであり、主としてレンズ及びその駆動系で構成される。37はCCD素子であり、38はCPU31の制御下において光学ユニット36を制御するドライバである。39は記憶媒体40(コンパクトフラッシュ(登録商標)メモリカード、スマートメディア等)を接続するためのコネクタであり、41はPC或いは実施形態におけるPDプリンタ1000と接続するためのUSBインターフェース(USBのスレーブ側)である。
以上が実施形態におけるPDプリンタ及びDSCの構成の説明である。以下、かかる構成に基づく動作概要を以下に説明する。
<通常のPCプリンタモード>
これはPC3010から送られてくる印刷データに基づいて画像を印刷する印刷モードである。
このモードでは、PC3010からのデータがUSBコネクタ1013(図3)を介して入力されると、USBハブ3008、USB3021を介して直接プリンタエンジン3004に送られ、PC3010からのデータに基づいて印刷が行われる。
<PCカードからの直接プリントモード>
PCカード3011がカードスロット1009に装着或いは脱着されると割り込みが発生し、これによりDSP3002はPCカード3011が装着されたか或いは脱着(取り外された)されたかを検知できる。PCカード3011が装着されると、そのPCカード3011に記憶されている圧縮された(例えばJPEG圧縮)画像データを読込んでメモリ3003に記憶する。その後、その圧縮された画像データを解凍して再度メモリ3003に格納する。次に、操作パネル101を使用して、その格納した画像データの印刷が指示されると、RGB信号からYMCK信号への変換、ガンマ補正、誤差拡散等を実行してプリンタエンジン3004で印刷可能な記録データに変換し、IEEE1284インターフェース部4002を介してプリンタエンジン3004に出力することにより印刷を行う。
<カメラからの直接プリントモード>
図5は本実施の形態に係るPDプリンタ装置1000とデジタルカメラ3012とを接続する状態を示す図である。
図において、ケーブル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を使用して印刷指定を行うことができる。また、デジタルカメラ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構成となっている。
詳細は後述するが、実施形態におけるNCDPを用いることのメリットは、PDプリンタ装置1000とDSC3012が互いにNCDPへの移行する際、及び移行した後において、互いに情報のやりとりを行う場合には、一連の情報、一連の動作手順をスクリプトで記述したファイル(テキストファイル)を生成し、それを相手側デバイスに送信し、受信側では受信したスクリプトを解釈して処理することにある。この結果、或る情報を相手側に伝えたい場合において、その情報が複数の要素で構成されている場合、1つ1つの要素をハンドシェークでやりとりすることが少なくでき、情報伝達に係るオーバーヘッドがなくなり、情報伝達の効率が向上するからである。例えば、DSC3012側で、印刷させたい画像が複数存在する場合、その印刷させたい画像を好きなだけ選択し、それぞれに対して印刷条件を設定した場合、その一連の処理手順がスクリプトとして記述されてPDプリンタ装置1000に通知することが可能になる。PDプリンタ装置1000側では、受信したスクリプトを解釈し、処理することになる。
図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画像とし、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における印刷処理が開始される。こうして、指示された画像の印刷が終了すると印刷ジョブの終了を示すコマンド(JobEnd)がPDプリンタ装置1000からDSC3012に送信される(907)。これに対してDSC3012から肯定応答(OK)が返送されると(908)、この「基本手順」による印刷処理が完了する。
この様にカメラからモード指定することは、プリント操作を行うべき装置からモードを指定することになるので、カメラを操作する使用者の意図に沿ったモードを指定しやすい。
図10は、「推奨手順」による画像印刷を行う場合のNCDPの通信手順を説明する図で、前述の図9と共通する手順には同じ番号を付して、その説明を省略する。この「推奨手順」では、PDプリンタ装置1000とDSC3012との間でのネゴシエーションを前提とした「より多彩な印刷」モードが設定でき、複数枚の写真印刷やレイアウト印刷が可能になる。また、エラーハンドリングも実行可能となる。
図10において、図9の場合と同様にして、互いにNCDPが実装されていることを確認した後、この場合では、DSC3012から「推奨手順」が指示される(910)。この後はこの「推奨手順」による手順が実行される。まず911で示すように、PDプリンタ装置1000は、自機の備えている機能及び用紙設定等を含む機能をCapability情報として生成し、その全てをDSC3012に伝える。このCapability情報は、スクリプト形式(一連の手順や情報をテキスト形式で記述されたファイル)でDSC3012に送信される。
このCapability情報の一例を図12に示す。
図12に示すように、このCapability情報は、印刷可能な用紙の種類及びサイズ、印刷品位、画像データのフォーマット、日付印刷の有無、ファイル名印刷の有無、レイアウト、画像補正の有無、更にはオプションとして、各カメラメーカの仕様に対応した機能の有無等の情報を含んでいる。
このようにCapability情報をスクリプト表記とし、更にこの表記をXML準拠とすることにより、他の通信プロトコルのアーキテクチャへの移植を簡単にし、このような機能情報のやり取りを、より標準化し易くしている。この理由は、例えば1つ1つの要素を、それぞれ専用のコマンドで記述した場合と比較すると判りやすい。例えば、図12における、PDプリンタ装置1000が処理可能なイメージタイプを通知する記述を「<ImageType=…>」にDSC3012に通知する際にそれ専用のコマンドが必要になるし、そもそも将来、新たに付加される機能について考慮した場合に備えてコマンドを用意しておくのは無理がある。スクリプトで記述することで、一連の情報を複数行のテキストとして記述できるし、もし解釈できない要素があったとしても無視すれば良いので、発展性が否定されることはない。これは他のスクリプトについても同じことが言えることを付言しておく。
さて、このようなCapability情報を受信したDSC3012は、そのPDプリンタ装置1000が備えている機能の内のいずれを使用して印刷を行うかを判定できるようになる。そして、DSC3012は、この結果に応じたメニューをユーザに提示し、印刷したい画像を選択させると共に、その画像の印刷条件をそのPDプリンタ装置1000の有している機能(印刷条件)の中から選択し、決定することになる。こうして印刷したい画像及び印刷条件などが決定されて印刷開始が指示されるとプリント命令(JobStart)がPDプリンタ装置1000に送られる。これによりPDプリンタ装置1000から、その画像データを要求するコマンド(GetImage xn)が発行され(912)、それに応答してDSC3012から、対応する画像データが、PDプリンタ装置1000が受信可能な画像フォーマット(Tiff,JPEG,RGBなど)で送信される(913)。ここで1枚の画像印刷に対して複数の画像データを送信できるようになっているのは、例えば2×2等のレイアウト印刷が指定されている場合は、1枚の用紙に対して4枚分の画像データを送信する必要があるためである。こうして、指示された画像の印刷が終了すると印刷ジョブの終了を示すコマンド(JobEnd)がPDプリンタ装置1000からDSC3012に送信される(907)。これに対してDSC3012から肯定応答(OK)が返送されると(908)、再び、この「推奨手順」による、次に画像の選択・印刷処理に移行する。
図11は、前述の「推奨手順」による画像印刷を行う場合のNCDPの通信手順において、PDプリンタ装置1000でエラーが発生した場合の通信手順を説明する図で、前述の図10と共通する手順には同じ番号を付して、その説明を省略する。
この例では、「推奨手順」での印刷処理の実行中に、PDプリンタ装置1000において給紙エラーが発生した場合の例を示している。この場合には914で、PDプリンタ装置1000からDSC3012に対して給紙エラーを示すステータス情報(Status)が送信される。これに対して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)を、画像転送のためにPIMA(Photographic and Imaging Manufacturers Association)にて定められた標準プロトコルPTPを用いて実現した(PTPによるラッパー)例を説明する。尚、本実施の形態では、PTPを用いたNCDPの場合で説明するが本発明はこれに限定されるものではなく、例えば、他のインターフェース、他のクラス(Class)上でダイレクトプリントサービスAPIを実装しても良い。
[NCDPStart]
図14は、NCDP手順の開始を指示する命令(NCDPStart)を、標準画像転送プロトコルPTPを用いて実現した例を説明する図である。より詳しくは、図7における「NCDPへ移行」を決定付づけるため、DSC3012とPDプリンタ装置が、実施形態で説明するフォトダイレクトプリントシステムとして機能できるか否かのネゴシエーションの手順を示している。
まず手順1400で、PDプリンタ装置1000からDSC3012に対してPTPコマンドGetDeviceInfoが送信され、DSC3012に対して、その保持しているオブジェクトに関する情報が要求される。これは、PDプリンタに接続されたデバイスが何であるのか問い合わせるものであると言えば判りやすい。これに対してDSC3012は、DeviceInfo Datasetにより、DSC3012に関する情報をPDプリンタ装置1000に送信(通知)する。ただし、この情報はPTP規格で規定されているカメラに関する属性情報であり、ダイレクトプリントに関する情報を含むものではない。次に手順1402で、PTPコマンドOpenSessionにより、DSC3012をリソースとして割り当て、必要に応じてデータオブジェクトにハンドルをアサインしたり、特別な初期化を行うための手順が開始される。
手順1403では、DSC3012に対してハンドルを要求する。これは、PDプリンタ装置1000にとっては、DSCが有する未知のオブジェクト(撮影画像やスクリプト等である)を特定するため、そのオブジェクトにユニークに付けられた番号を要求するものである。この要求により、手順1404で、DSC3012に保持されているハンドルリストが返送される(何個のオブジェクトがあるかを通知することと等価)。
以上の結果、PDプリンタ装置1000は、DSCが幾つのオブジェクトを保持しているのかが判明する。ネゴシエーションでは、双方がNCDPへの移行が行える機能を有するものであるのか否かを判定することが重要である。そして、この判定はパスワード、例えば、一方は“NCDP_CAMERA”、もう一方は“NCDP_PRINTER”なるパスワードを記述したスクリプトを投げかけ、双方が、相手より意図した結果が返ってきた場合に、NCDPによるダイレクトプリントモードに移行する。
従って、上記のようにして、PDプリンタ1000側としては、DSC3012が保持しているオブジェクトの中で、その属性がスクリプトである属性を有するオブジェクトを探し出す必要がある。
このため、PDプリンタ装置1000は、先ず、ハンドル“1”についてのオブジェクトについてその属性が何であるのかを問い合わせるためのPTPコマンドGetObjectInfo(Handle i)をDSC3012に出力し(この場合、i=1となる)、その結果、返送されてくるi番目の属性(ObjectInfor i Dataset)を受信することを、1乃至オブジェクトの最大数まで行う。より正確には、属性として画像ではなく、パスワード(合言葉)が記述されているスクリプトであるオブジェクトを探し出すと考えれば判りやすい。PTPコマンドGetObjectInfoではオプションとしてオブジェクトのタイプを指定することができるが、デジタルカメラによってはこのオプションがサポートされていない場合を想定しなければならないため、このようにスクリプトオブジェクトの検索が必要になる。
PDプリンタ装置1000側がスクリプトであるオブジェクトのハンドル(仮にハンドル“j”)を検出すると、そのハンドル“j”で示されるデータを要求するPTPコマンド「GetObject(Handle j)」を、DSC3012に出力する。この結果、DCS3012は「Object j Data」として、パスワード“NCDP_CAMERA”が記述されたスクリプトをPDプリンタ装置1000に出力する。
PDプリンタ装置1000は、この結果、接続中のDSC3012がNCDP対応のデジタルカメラであることを知ることができる。そこで、今度はPDプリンタ装置1000がNCDP対応プリンタであることを示すパスワード“NCDP_PRINTER”を通知することになるが、それに先立って送信するオブジェクトの属性情報をSendObjectInfoによって送信する。そして、SendObjectによってパスワード“NCDP_PRINTER”をDSC3012に通知する。なお、ここでのパスワードは一例であって、上記に限らないのは勿論である。
以上の手順の結果、双方ともNCDPに対応するデバイスであることがわかり、これ以降は、実施形態におけるNCDPによるフォトダイレクトプリントモードへ移行することになる。
以上説明した手順をフローチャートとして示すと図25に示すような手順となる。
先ず、PDプリンタ装置1000(以下、単にPD)は先ずステップS21において、デバイス情報要求(GetDeviceInfo)をDSC3012に出力する(DSCはこの要求に対して、ステップS41で、自身のデバイスの属性を示す情報をPD1000に通知する(DeviceInfoDataSet))。
次に、PD1000はステップS22でセッションを開始を宣言し(OpenSession)、DSC3012はこの宣言を受け取り、ステップS42でPD1000にOKの通知を行う。
PD1000は、ステップS23において、DSC3012が保持しているオブジェクトのハンドルを要求する(GetObjectHandles)。これにより、DSC3012は、ステップS43において、自身が保持しているオブジェクト(画像やスクリプト)をPD1000に通知し(ObjectHandleArray)、PD1000はこれを受信する(ステップS24)。
次に、PD1000は受信した情報からハンドル数がわかるので、ステップS25で、初期値としてハンドルを示す変数iに“1”と代入し、ステップS26でi番目のオブジェクトに対する属性を要求する(GetObject(Handle i))。この結果、DSC3012からは該当するオブジェクトの属性を送信してくるので(ObjectInfo i Dataset)、それを受信し、スクリプトであるか否かを判断する(ステップS27)。もし、スクリプト以外である(撮像画像である)と判断した場合には、ステップS28で変数iを1つインクリメントし、ステップS26の処理を繰り返す。
さて、i番目のオブジェクトがスクリプトであると判断した場合、処理はステップS29に進んで、i番目のオブジェクトの内容の転送を要求する(GetObject(Handle i))。すなわち、パスワード(合言葉)を期待して、それを要求することになる。この結果、DSC3012は、ステップS45で、指定されたオブジェクトの内容をPD1000に通知する(Object i Data)ので、PD1000はそれがパスワード“NCDP_CAMERA”であるかどうかを判断する(ステップS30)。もし、“NCDP_CAMERA”でなく、別なスクリプトがたまたま返送されてきたと判断した場合には、ステップS31で変数iが最後のものであるか否かを判断し、否であればステップS28に戻り、上記処理を繰り返す。こうして、最後のハンドラに到達しても、パスワード“NCDP_CAMERA”をDSCが通知してこないと判断した場合、接続中のDSC3012はNCDP未対応のデジタルカメラであると判断し、これ以上の処理を打ち切るため、例えばエラー通知を操作部に備えられたLEDを点灯させたり、ネゴシエーション失敗を意味するメッセージを表示させ、本処理を終了する。
一方、DSCよりパスワード“NCDP_CAMERA”が通知された場合、処理はステップS33に進み、PD1000がNCDP対応であること示す手順(SendObjectInfoの送信及びOKの受信)を経て、パスワード“NCDP_PRINTER”を記述したスクリプトをDSC3012に通知(SendObject)し、DSC3012より受信したスクリプトはもはや不要であるので、そのスクリプトを削除し、NCDPモードに移行する。
DSC3012側は、パスワード“NCDP_PRINTER”を受信したことは判明すると(ステップS46)、ステップS47に済んで、PD1000より受信したスクリプトを削除し、NCDPモードへ移行する。
ネゴシエーションの処理手順は以上であるが、上記例はPDプリンタ装置1000及びDSC3012の双方がNCDPをサポートしている場合のものである点に注意されたい。
実施形態におけるネゴシエーションはPTPを利用しているわけであるから、NCDP未対応のUSB接続機能を有するデジタルカメラであっても、ステップS41から、ステップS44、S45、S46の処理が実行される。ただし、S45の処理は存在しないので、無意味なデータ(スクリプト)であるものとして、単純にそのデータを受信し、保存し、S44、S45を繰り返すだけとなる。
ここで、特に注目したい点は、実施形態の場合、パスワードの発信元となるのは必ずDSC3012側になることである(DSC3012がNCDP未対応であっても、最初のスクリプトを送信する側であることに変わりはない)。つまり、パスワード“NCDP_CAMERA”に応えるパスワード“NCDP_PRINTER”を発するのはPDプリンタ装置1000側であって、しかも、最初のパスワード“NCDP_CAMERA”があってはじめて、それに応えるパスワード“NCDP_PRINTER”を発するようにした。
かかる手順にした理由は、もし、最初のパスワードをPDプリンタ装置1000が発するようにしてしまうと、DSC3012がNCDPに対応である場合には問題は発生しないが、もしDSCがNCDP未対応である場合には、ステップS47の処理に進むことができないわけであるから、意味のないスクリプトファイル(ゴミファイル)を受信しては、記憶されてしまうからである。
かかる点、上記のように、互いに認証する際の最初の認証情報(上記のパスワード又は合言葉)を出力する側がDSC側とし、PDプリンタ装置1000がそれに応える認証情報を出力することで、PDプリンタ装置1000に接続してるデバイスが如何なるものであったしても、そのデバイスにゴミが蓄積してしまうことを回避できるようになる。なぜなら、PDプリンタ装置1000は、DSCからのスクリプト中に、期待している認証情報が存在しない場合は、それに応える認証情報は出力しないからである。
また、上記処理によれば、NCDP対応のデジタルカメラであれば、パスワードを記述しているスクリプトを保持しているので、必ず、NCDPによるプリントシステムへの移行が約束される。ただし、上記から容易に想到できるように、ネゴシエーションを高速化させるには、DSC3012側が有するオブジェクトのうち、その小さいハンドル番号に認証情報(合言葉)を含むスクリプトを割り当てることである。すなわち、DSC3012がNCDP対応である場合には、ハンドル要求(GetObjectHandles)を受信した場合、合言葉を含むスクリプト(認証情報)に対してハンドル番号“1”を割り当て、それ以降に撮像し記憶保持している画像についてハンドル番号を割り当て、その結果をPDプリンタ装置1000に通知する。
この結果、ステップS26乃至S28のループ処理、或いは、ステップS26乃至S31、S28のループ処理が実質的になくなり、一気にステップS33、S34へと処理が進むことになり、ネゴシエーションを高速なものとすることができる。
DSC3012側の処理としては、例えば、図27に示す手順で処理すれば良いであろう(同手順のプログラムはDSC3012内のROM32に格納されている)。なお、同図の処理は、PDプリンタ装置1000より、ハンドル要求コマンド(GetObjectHandles)を受信した場合の処理であって、このコマンドを受信したとき、上位処理からコールされるものである。従って、GetObjectHandlesを受信したか否かの判断は、既に上位処理で行われていることに注意されたい。
先ず、ステップS51で、RAM33内に、オブジェクトとハンドルとを対応させるためのテーブル(もしは変数領域)を確保する。次いで、ステップS52に進んで、NCDP対応であることを示すスクリプトを記述しているオブジェクトを先頭のハンドルに割り当てるべく、テーブルにセットする。この後、ステップS53で、残りのオブジェクト(通常は撮像して記憶保持されている画像データ)に対するハンドラを割り当て、テーブルにセットし、その結果を、ObjectHandleArrayとしてPDプリンタ装置1000に通知する。
この結果、DSC3012及びPDプリンタ装置1000間で、オブジェクトを指し示す際の情報の共有(共通)化が可能となり、これ以降の処理においては、DSC3012内のオブジェクトをハンドルを用いてやりとりがなされることになる。
なお、PDプリンタ装置1000側が、DSC3012に対してスクリプトであるか否かを判断する順序を、最終ハンドルから遡るように処理する場合には、DSC3012がハンドルをPDプリンタ装置1000に通知するとき、最後のハンドルにパスワードとなるスクリプトを割り当てれば良いであろう。
なお、NCDP対応であることを示すスクリプトを記述しているオブジェクトに対するハンドル番号を最初にすることが、もっとも効果的であるが、必ずしも最初でなくとも、最初の番号付近であれば十分効果的である。つまり、NCDP対応であることを示すスクリプトを記述しているオブジェクトを最後の番号に対応させてしまわないようにすれば、最後の番号に対応させる場合よりも、高速化を図ることが出来る。
[ProcedureStart]
図15は、DSC3012からの、モードへの移行手順を指示する命令を受信して、そのモードに移行するための命令(ProcedureStart)をPTPアーキテクチャを用いて実現した例を説明する図である。
ここではまず1501で、PDプリンタ装置1000がサポートしている手続「基本手順」、「推奨手順」、「拡張手順」をDSC3012に通知するためにPTPコマンドSendObjectInfoにより、DSC3012に対して送信したいオブジェクト情報があることを伝える。これに対して肯定応答(OK)がDSC3012から送られてくると、1502でPTPコマンドSendObjectによりオブジェクトを送信する旨をDSC3012に伝え、次の1503のObjectDataで、このPDプリンタ装置1000がサポートしている手続に関する情報を送信する。次に1504で、DSC3012からPDプリンタ装置1000に対して、PTPで定義されるイベント通知RequestDataTransferをカメラが発行し、PTPコマンド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でPTPコマンドCloseSessionを送信して、この通信を終了させる。これによりNCDPによる通信手順を終了する。
[Capability]
図17は、本実施の形態に係るNCDPにおける、PDプリンタ装置1000の機能をDSC3012に通知するCapability命令における通信手順をPTPプロトコルを用いて実現した例を説明する図である。
この手順では、1700において、PDプリンタ装置1000からDSC3012に対して送信したいオブジェクト情報があることをPTPコマンドSendObjectInfoにより伝える。そして1701で、PTPコマンドSendObjectによりDSC3012に対してオブジェクト情報の伝送を伝え、続くObject Dataにより、PDプリンタ装置1000が有している機能をスクリプト(Script)形式(図12)で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から所望の画像ファイルを取得することができる。
[StatusSend]
図19は、本実施の形態に係るNCDPにおける、PDプリンタ装置1000からDSC3012に対してエラー状態などを通知する(StatusSend)通信手順をPTPプロトコルを用いて実現した例を説明する図である。
まず1900で、PDプリンタ装置1000からDSC3012に対して送信したいオブジェクト情報がある旨をPTPコマンドSendObjectInfoにより通知する。そして1901で、そのオブジェクト情報に関する情報セット(Object Dataset)をDSC3012に送信し、DSC3012からの肯定応答(OK)に対して、PDプリンタ装置1000におけるエラー等のステータス情報をPTPコマンドSendObjectおよびObject Datasetにより送信する。
[PageEnd]
図20は、本実施の形態に係るNCDPにおける、PDプリンタ装置1000からDSC3012に対して、1ページのプリント処理が終了したことを通知する(PageEnd)通信手順をプロトコルを用いて実現した例を説明する図である。
[JobEnd]
図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に対してPTPで定義されるイベント通知RequestObjectTransferを送り、PDプリンタ装置1000がPTPコマンドGetObjectコマンドを発行するように促す。これにより2201で、PDプリンタ装置1000からPTPコマンドGetObjectInfoが発行されると、DSC3012は送信したいオブジェクト情報に関する情報を送信し、これに対してPDプリンタ装置1000からオブジェクト情報が要求されると(GetObject:2203)、2204で、Obhect 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に対して印刷再開命令が通知される。
なお本発明は、複数の機器(例えばホストコンピュータ、インターフェース機器、リーダ、プリンタなど)から構成されるシステムに適用しても、一つの機器からなる装置(例えば、複写機、ファクシミリ装置など)に適用してもよい。
また、本発明の目的は、前述した実施形態の機能(カメラ側で行われる処理、プリンタ側で行われる各種印刷処理)を実現するソフトウェアのプログラムコードを記録した記憶媒体(または記録媒体)を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記憶媒体に格納されたプログラムコードを読み出し実行することによっても達成される。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム(OS)などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。
以上説明したように本実施の形態によれば、PDプリンタ装置をUSBホストにDSCをUSBデバイスに設定し、印刷動作に入る前に、PDプリンタ装置が有しているCapabilityに関する情報をDSCに送信し、DSC側でそのCapability情報に基づいて最適な印刷モードを決定して印刷を行わせることができる。
またこのCapability情報の送信をスクリプトにより行うことにより、他の通信プロトコルへの移植が容易になり、標準化し易くなる。
また、デバイス間の通信手順は汎用ファイル、汎用フォーマットを用いて行い、その上位レイヤに、本実施の形態に係るアプリケーションの通信手順レイヤを規定することにより、各種インターフェース仕様に依存しない通信手順を規定することができる。
また、実施形態では、フォトダイレクトプリントシステムを構築する際に、プリンター装置がUSBホスト、DSCがUSBデバイスとして説明した。上記の如く、昨今のデジタルカメラの多くは、PCとの通信のためにUSBデバイス機能を搭載しているという状況、プリンタメーカー数よりもデジタルカメラメーカーの数が多い点、更に、ホスト役となる装置が電源の心配の少ない点について考察した場合、プリンタ側がホスト役を担った方が、各メーカにとって負担が少なく、本発明の目的とするシステムを構築する際に各メーカにとってもメリットが十分にあり、ひいてはエンドユーザにとっても好ましい形態である。
また、実施形態では、デジタルカメラとプリンタとがダイレクトに通信する手段としてUSBケーブルで直接接続する例を示したが、例えばBluetoothのような無線通信によってもダイレクト通信が可能であるので、上記例により本発明が限定されるものではない。
以上説明したように本実施形態によれば、フォトダイレクトプリントシステムを構築する際に、互いに情報伝達を効率良くし、高いレスポンスでもって、ユーザの意図した画像を印刷することが可能になる。
また、情報のやりとりがスクリプトで記述されることにより、メーカ間の機能の相違が許容されることになり、将来、新たな機能がいずれか一方、或いは両方に付加されたとしても、通信そのものは流用できるので、柔軟性のある通信が可能となる。