図1は、本発明に従う直接接続式の印刷システムの一実施形態の全体構成を示す。
図1に示すように、デジタルカメラ(DSC:Digital Still Camera)10と、カラーインクジェットプリンタやカラーレーザプリンタのようなデジタルプリンタ20とが、USB通信インタフェースケーブル30を介して直接接続されている。デジタルカメラ10は、写真の画像ファイル(例えば、JPEGファイル又はその他の汎用形式ファイル)を保存するためのメモリ11と、写真を撮影して電気信号に変換するための撮影装置13と、このカメラ10の各部の動作を制御するためのカメラコントローラ15と、デジタルプリンタ20のようなUSBホストと通信するためのUSBデバイスコントローラ17とを備えている。
カメラコントローラ15は、図示しないが、シャッターボタンを始めとする各種の操作ボタン及びカラー液晶表示パネルなどを備えている。そして、カメラコントローラ15は、シャッターボタン操作に応答して撮影装置13を駆動して写真を撮影させたり、撮影された写真の電気信号を撮影装置13から受けて画像ファイルを作成してメモリ11に書き込んだり、所定の画像参照ボタン操作に応答してメモリ11から所望の画像を読み出してカラー液晶表示パネルに表示したりする。さらに、カメラコントローラ15は、定期的にプリンタステータスの取得を要求する制御コマンド(プリンタステータス要求)を生成したり、ユーザの画像選択ボタン操作に応答して印刷対象の画像ファイルをメモリ11内から選択したり、ユーザの印刷設定ボタン操作に応答して印刷条件(例えば、印刷枚数、用紙種類、用紙サイズ、印刷品質、画像補正、印刷レイアウト、印刷対象画像など)の設定を表した印刷設定データを生成したり、上記画像選択ボタン操作に引き続くユーザの印刷要求ボタン操作に応答して上記印刷設定データを含んだ印刷実行を要求する制御コマンド(印刷要求)を生成したり、ユーザの印刷中止ボタン操作に応答して印刷中止を要求する制御コマンド(印刷中止要求)を生成したりする。
USBデバイスコントローラ17は、USBのストレージクラスのデバイスとしてUSBの規格に従いUSBホストと通信する機能をもち、よって、USBホストをして、メモリ11内の様々なディレクトリを探索し所望の画像ファイルを自由に読み書きすることを可能ならしめる。さらに、USBデバイスコントローラ17は、本発明の原理に従がった追加の機能をもつ。すなわち、この追加の機能により、USBデバイスコントローラ17は、上述したカメラコントローラ15が生成したプリンタステータス要求や印刷要求や印刷中止要求などの制御コマンドを、後述する方法によって、デジタルカメラ10の方から主体的に送信するのと実質的に同等の態様で(つまり、それらの制御コマンドが生成された時に実質的に遅滞無く直ちに)、デジタルプリンタ20に送信することができる。
デジタルプリンタ20は、デジタルカメラ10からのプリンタステータス要求や印刷要求や印刷中止要求などに応答してプリンタステータスの返信や印刷対象画像のメモリ11からの読み込みや印刷画像のレンダリングやその他の各種の制御を行なう印刷コントローラ21と、USBホストとしてUSBデバイスと通信するためのUSBホストコントローラ25と、印刷コントローラ21の制御下でプリントアウトを出力する印刷エンジン23などを備える。
印刷コントローラ21は、JPEGファイル又はその他の汎用形式ファイルのような汎用圧縮フォーマットの画像ファイルをデジタルカメラ10から受信して、それを伸張してビットマップ画像データにする機能と、そのビットマップ画像データのRGB画素値をCMYK画素値へ変換する色変換機能と、そのビットマップ画像データの多階調の画素値をドットと空白を表すような面積階調の画素値に変換するハーフトーニング機能とを備えている。そのため、デジタルカメラ10は、メモリ11内にあるJPEGファイルのような印刷対象の画像ファイルを伸張したり色変換したりハーフトーニングしたりする機能を具備する必要は無く、その画像ファイルをそのままデジタルプリンタ20に提供すればよい。その結果、デジタルカメラ10の構成は、デジタルプリンタ20の機種毎にカスタマイズする必要がなく、汎用的なもので良いというメリットが得られる。
USBホストコントローラ25は、ストレージクラスのUSBデバイスとして機能するデジタルカメラ10内のメモリ11に、USBの規格に従ってアクセスすることで、所望のディレクトリの所望のデータを読み書きする機能をもつ。さらに、USBホストコントローラ25は、本発明の原理に従う追加の機能を有する。すなわち、この追加の機能によって、USBホストコントローラ25は、デジタルカメラ10から、上述のプリンタステータス要求や印刷要求や印刷中止要求などを、後述する方法によって、デジタルカメラ10の方から主体的に送信されたのと実質的に同等の態様で(つまり、それらの制御コマンドが生成された時に実質的に遅滞無く直ちに)、デジタルカメラ10から受信することができる。
このように、デジタルカメラ10のUSBデバイスコントローラ17とデジタルプリンタ20のUSBデバイスコントローラ25がもつ本発明の原理に従う追加の機能によって、デジタルカメラ10の方から実質的に主体的に印刷条件設定や印刷要求などの制御又は働きかけをデジタルプリンタ20に対して行なうことができる。ここで注目すべきことは、後述の説明から理解されるように、この追加の機能は、USBの規格で定められたUSBホストとUSBストレージクラスデバイス間の通信機能を全く阻害していない(つまり、それを有効に生かしたままである)点である。従って、デジタルカメラ10をUSBを介してパーソナルコンピュータに接続した場合、そのパーソナルコンピュータのOSに標準装備のUSBホストコントローラが、デジタルカメラ10をUSBストレージクラスデバイスとして認識して正常に通信することができるのである(勿論、上記追加の機能はパーソナルコンピュータに無視されることなるが)。このことは、デジタルカメラ10をパーソナルコンピュータにUSBで接続する場合に、デジタルカメラ10専用の特別のUSBコントローラをパーソナルコンピュータにインストールする必要が無いことを意味し、これはユーザにとって大きなメリットである。
以下、上記の追加の機能について詳細に説明する。
図2は、デジタルカメラ10のUSBデバイスコントローラ17とデジタルプリンタ20のUSBホストコントローラ25が通信するときに使用する論理的なパイプ(論理的な通信チャネル)を示す。
図2に示すように、USBデバイスコントローラ17とUSBホストコントローラ25との間では、コントロールパイプ41、バルクパイプ43及びインタラプトパイプ45という3種類の通信パイプが使用される。ここで、コントロールパイプ41は、デジタルカメラ10からデジタルプリンタ20へ及びその逆方向への各種制御コマンドの伝送に使用される。バルクパイプ43は、デジタルカメラ10からデジタルプリンタ20への画像ファイルの伝送や、デジタルプリンタ20からデジタルカメラ10へのプリンタステータスデータの伝送のようなデータ伝送に使用される。また、インタラプトパイプ45は、デジタルプリンタ20からデジタルカメラ10への「Interrupt In」というリクエスト問合せコマンドの伝送に使用される。
上述の3種類のパイプは、いずれもUSBの規格で定義されている。しかし、USB規格では、USBストレージデバイスの通信に関しては、インタラプトパイプ45の使用に関して何の規定も無い。この実施形態では、インタラプトパイプ45を有効活用することで、USBストレージタイプデバイスたるデジタルカメラ10から実質的に主体的に、各種の制御コマンドをUSBホストたるデジタルプリンタ20へ送ることができる。すなわち、デジタルプリンタ20は、デジタルカメラ10とUSBで接続されている間、例えば1m秒に最低1回というようなユーザから見て非常に高速な速度で周期的に、「Interrupt In」コマンドをインタラプトパイプ45を通じてデジタルカメラ10に送る。デジタルカメラ10は、「Interrupt In」コマンドを受ける都度、それに対する応答を、コントロールパイプ41を通じてデジタルプリンタ20を返すことなる。その場合、「Interrupt In」コマンドを受けた時点で上述したプリンタステータス要求、印刷要求或るいは印刷中止要求等の制御コマンドがデジタルカメラ10内で発生してしたならば、デジタルカメラ10は、その制御コマンドを、上記「Interrupt In」コマンドに対する応答として、デジタルプリンタ20を返す。デジタルプリンタ20は、その返送された制御コマンドを解釈して、デジタルカメラ10の要求する動作(例えば、プリンタステータスの返送、印刷の実行、或るいは印刷の中止など)を実行することになる。その結果、デジタルカメラ10による実質的に自主的な制御でデジタルプリンタ20を動作させることが可能になる。
なお、デジタルプリンタ20は、上記の印刷要求に応答して印刷を実行する際、デジタルカメラ10がストレージクラスであるということを利用して、印刷に必要な各種のデータリソース(例えば、印刷対象の画像ファイルや印刷ページレイアウトの定義ファイルなど)を勝手にデジタルカメラ10から読み込む。そのため、デジタルカメラ10は、上述した印刷に必要なデータリソースに関しては、それを自分のメモリ11内に記録しておいて、デジタルプリンタ20からの読出し要求に応答してそれを読み出すという、ストレージクラスとしての動作を行なえばよいことになる。
以下、より具体的に説明する。
図3、図4及び図5は、デジタルプリンタ20とデジタルカメラ10間のUSBによる通信の流れの一例を示す。
図3は、デジタルプリンタ20とデジタルカメラ10間のUSBによる通信接続が確立された当初に行なわれる初期的な通信の流れの例を示す。
デジタルプリンタ20とデジタルカメラ10に既に電源が入っている状態で両者がUSB通信ケーブルで接続されたとき、又は、デジタルプリンタ20とデジタルカメラ10が既にUSB通信ケーブルで接続されている状態で両者が共に電源の入った状態になったとき、両者間にUSBの通信接続が確立される。USBの通信接続が確立されると、デジタルプリンタ20のUSBホストコントローラ25が、デジタルカメラ10のUSBデバイスコントローラ17から、そのUSBデバイスとしての構成を記述した「デバイスディスクリプタ」を取得する(ステップS1)。デジタルカメラ10からのデバイスディスクリプタには、デジタルカメラ10がストレージクラスのデバイスであることを記述した「インタフェースディスクリプタ」が含まれている。そして、そのインタフェースディスクリプタには、デジタルカメラ10が使用するUSBの複数のエンドポイント(図2に示した3種類のパイプ41,43,45の何れかを使ってパケットを送信又は受信するエンドポイント)を列挙した「ストリングディスクリプタ」が含まれている。このストリングディスクリプタには、具体的には、USB規格で定まったストレージクラスのデバイスが持つべきエンドポイント(例えば、「Bulk Out(バルクアウト)」エンドポイントや「Bulk In (バルクイン)」エンドポイント)に加えて、本発明の原理に従った追加のエンドポイントである「Interrupt In」エンドポイントが記述されている。従って、デジタルプリンタ20のUSBホストコントローラ25は、そのインタフェースディスクリプタ及びそのストリングディスクリプタから、デジタルカメラ10がストレージクラスのデバイスであって、かつ、「Interrupt In」コマンド(USBデバイス側のリクエストを問い合わせるコマンド)を使用するデバイスであることを認識する。
因みに、デジタルプリンタ20をパーソナルコンピュータのUSBポートに接続した場合、上記と同内容のデバイスディスクリプタがパーソナルコンピュータに送られるが、しかし、パーソナルコンピュータのOSに標準装備のUSBホストコントローラは、上述した追加の「Interrupt In」エンドポイントを無視することになる。従って、デジタルプリンタ20は、パーソナルコンピュータに対しては、「Interrupt In」は使用しない通常のストレージクラスのデバイスとして動作することになる。
さて、デジタルカメラ10のデバイススプリプタを取得したプリンタ20は、その時点から所定の短い時間以内(例えば、1秒以内)に、コントロールパイプ41を通じてデジタルカメラ10に「プリンタプロトコル確認コマンド」を送り(S4)、それにより、プリンタ20が使用する通信プロトコルのタイプ(すなわち、「Interrupt In」コマンドを使用するタイプであること)やプロトコルバージョンなどを通知する。
通信接続が確立した後、プリンタ20は、例えば1m秒以内に1回というような高速なレートで周期的に、「Interrupt In」コマンドを、インタラプトパイプ45を通じてデジタルカメラ10に送信する(S2,S5など)。デジタルカメラ10は、「Interrupt In」コマンドを受信する都度、その時点で何らかの制御コマンドがデジタルカメラ10内で発生しているか否かを調べ、何の制御コマンドも無ければ、要求なしを意味する「Nak」メッセージを、「Interrupt In」コマンドに対するリプライとしてコントロールパイプ41を通じてプリンタ20に返す(S3など)。一方、「Interrupt In」コマンドを受信した時点でデジタルカメラ10内に何らかの制御コマンドが発生していれば、デジタルカメラ10は、その制御コマンドを、「Interrupt In」コマンドに対するリプライとしてコントロールパイプ41を通じてプリンタ20に返す(S6など)。
そのような制御コマンドには、既に説明したように、プリンタステータス要求、印刷要求及び印刷中止要求などがある。例えば、図3のステップS6では、プリンタステータス要求が、ステップS5の「Interrupt In」コマンドに対するリプライとしてプリンタ20に返されている。プリンタステータス要求を受けたプリンタ20は、最新のプリンタステータスを調べ、そのプリンタステータスを示したデータを、バルクパイプ45を通じてデジタルカメラ10のメモリ11内の所定ディレクトに書き込み(S7)、それにより、デジタルカメラ10は最新のプリンタステータスを知る(そして、図示してないが、そのプリンタステータスを液晶表示パネルなどに表示する)。
プリンタ20は、また、通信接続が確立した後、印刷要求を受け入れることが可能な状態になると、その状態になってから最初にプリンタステータス要求を受けたときに(S6)、デジタルカメラ10にプリンタステータスデータを通知する(S7)だけでなく、印刷要求が受け入れ可能であることを通知するためのメッセージを、コントロールパイプ41を通じてデジタルカメラ10に送信する(S8)。
なお、プリンタステーをタス要求がデジタルカメラ10で発生する時期は、デジタルカメラ10の設計次第で如何様にもなるが、例えば、プリンタ20に印刷要求を発してから印刷が完了するまでの間や、プリンタ20に印刷中止要求を発してから印刷が中止されるまでの間などにおいて、例えば5秒間隔や1秒間隔などの定期的な時期とすることができる。
図4は、デジタルカメラ10から印刷要求が発されてプリンタ20で印刷が実行される場合の通信手順の例を示す。
図4に示すように、プリンタ20は、既に説明したように、デジタルカメラ10と接続されている間、高速なレートで周期的に「Interrupt In」コマンドをデジタルカメラ10に送り続ける(S11,S13,S17,S21,S25)。ステップS13のように或る「Interrupt In」コマンドを受けたとき、印刷要求が発生していれば、デジタルカメラ10は、ステップS14に示すように、その印刷要求を「Interrupt In」コマンドに対するリプライとして、コントロールパイプ41を通じてプリンタ20に返送する。この印刷要求には、ユーザの指定した印刷条件を示した印刷設定データが含まれている。この印刷設定データには、印刷枚数、用紙サイズ、印刷品質、画像補正方法などの一般的な印刷条件の他、印刷対象の画像ファイルのメモリ11内でのパス名とファイル名や、さらに、所定の印刷ページレイアウト(1ページ内に印刷する1又は複数の画像の配置や寸法、写真フレームや挿入文字や挿入図画などの修飾の配置や寸法やパス名・ファイル名など)を使用して印刷する場合には、その印刷ページレイアウトを定義したレイアウトファイルのメモリ11内でのパス名とファイル名などが記述されている。
上記のような印刷要求を受けたプリンタ20は、ステップS15で、その印刷要求によって要求された印刷に必要なリソースファイルをデジタルカメラ10のメモリ11から読み込むためのコマンド(リソースファイル要求コマンド)をデジタルカメラ10に送り、それに応答したデジタルカメラ10のストレージクラスUSBデバイスコントローラ17の仲介により、ステップS16で、その印刷に必要なリソースファイルをデジタルカメラ10のメモリ11から主体的に読み込み、そして、読み込んだリソースファイル使って印刷を実行する。ここで、印刷に必要なリソースファイルとは、例えば、印刷対象の画像ファイル(そのパス名やファイル名は印刷要求に書かれている)や、所定の印刷ページレイアウトを使用する場合には、その印刷ページレイアウトを定義したレイアウトファイル(そのパス名やファイル名は印刷要求に書かれている)や、印刷ページレイアウトで使用される写真フレームや挿入文字や挿入図画などのファイル(そのパス名やファイル名はレイアウトファイルに書かれている)などである。これらのリソースファイルは、プリンタ20が勝手にデジタルカメラ10のメモリ11から読み込んで、伸張や色変換やハーフトーニングなどの処理を施すので、デジタルカメラ10としては、特別に複雑な処理を行なう必要はない。
さて、印刷要求を受け入れた後も、プリンタ20は、高速レートで周期的に「Interrupt In」コマンドをデジタルカメラ10に送り続ける。そして、印刷要求を受け入れた後の「Interrupt In」コマンドに対して、デジタルカメラ10からステップS18のように、プリンタステータス要求が最初に返送されたとき、プリンタ20は、プリンタステータスを通知する(S19)とともに、印刷要求を受け入れた旨のメッセージを、コントロールパイプ41を通じてデジタルカメラ10に送る(S20)。この印刷要求受入メッセージには、その印刷ジョブをデジタルカメラ10の側で識別するためのid番号(図の例では「01」)が記述されている。それにより、デジタルカメラ10は、先ほど送出したid番号「01」の印刷ジョブの印刷要求がプリンタ20に受け入れられて、その印刷処理が開始されたことを認識する。デジタルカメラ10は、以後、そのid番号「01」の印刷ジョブに関して印刷完了の通知をプリンタ20から受けるまで、新しい印刷ジョブの印刷要求を発しないよう、デジタルカメラ10自身の動作を制御することができる。
印刷を行なっている間、プリンタ20は、「Interrupt In」コマンドに対するリプライとしてプリンタステータス要求を受ける(S22)都度、プリンタステータスを通知する(S23)だけでなく、最新の印刷状態(例えば、印刷未完了の残り枚数又は印刷完了枚数)を調べて、それを示すメッセージを、コントロールパイプ41を通じてデジタルカメラ10に送信する(S24)。
また、印刷が完了すると、プリンタ20は、完了後に最初に「Interrupt In」コマンドに対するリプライとしてプリンタステータス要求を受けたとき(S26)、プリンタステータスを通知する(S27)だけでなく、印刷が完了した旨のメッセージを、コントロールパイプ41を通じてデジタルカメラ10に送信する(S28)。この印刷完了メッセージには、完了した印刷ジョブのid番号が含まれているので、デジタルカメラ10は、そのid番号からどの印刷ジョブが完了したかを認識できる。印刷ジョブが完了すると、デジタルカメラ10は、新しい印刷ジョブの印刷要求を発行できるように、デジタルカメラ10自身の動作を制御することができる。
図5は、デジタルカメラ10から印刷要求が発された後に印刷中止要求が発された場合の通信手順の例を示す。
図5において、印刷要求が発されて印刷が実行されるステップS13〜S24の手順は、既に説明した図4のステップS13〜S24の手順と同様である。その後、印刷が完了しないうちに、デジタルカメラ10で印刷中止要求が発生すると、その直後の「Interrupt In」コマンド(S25)に対するリプライとして、その印刷中止要求がデジタルカメラ10からコントロールパイプ41を通じてプリンタ20に送られる(S31)。印刷中止要求には、中止したい印刷ジョブのid番号が含まれている。
印刷中止要求を受けたプリンタ20は、そのid番号の印刷ジョブの実行を中止する。そして、プリンタ20は、印刷を中止した後、最初に「Interrupt In」コマンドに対するリプライとしてプリンタステータス要求を受けたとき(S33)、プリンタステータスを通知する(S34)だけでなく、印刷を中止した旨のメッセージを、コントロールパイプ41を通じてデジタルカメラ10に送信する(S35)。この印刷中止メッセージには、中止した印刷ジョブのid番号が含まれているので、デジタルカメラ10は、そのid番号からどの印刷ジョブが中止されたかを認識できる。
以上のようにして、デジタルカメラ10は、プリンタ20に対してストレージクラスのUSBデバイスとして動作しつつ、プリンタ20から頻繁に来る「Interrupt In」コマンド(リクエスト問合せ)に対するリプライとして、デジタルカメラ10内で発生した各種の要求(制御コマンド)をプリンタ20に返送することによって、実質的にデジタルカメラ10からの主体的な制御でプリンタ20を動作させることができる。
図6及び図7は、本発明の別の実施形態にかかる直接接続式の印刷システムの通信手順の例を示す。
この実施形態では、上述した「Interrupt In」コマンドを使用する追加の機能は使われず、
デジタルカメラ10は全く通常のストレージクラスのUSBデバイスとして動作する。デジタルカメラ10で発生したプリンタステータス要求や印刷要求や印刷中止などのあらゆる制御コマンドは、どのようなコマンドであるかを示す特定のファイル名又は特定の識別子の付いたファイル(例えばテキストファイルであり、以下、「コマンドファイル」という)の形でメモリ11内の所定のディレクトリに書き込まれる。プリンタ20は、例えば1m秒に最低1回というようなユーザにとっては非常に高速のレートで周期的に、メモリ11内の上記所定ディレクトリにコマンドファイルが在るか否かチェックし、有れば、そのコマンドファイルを読み込むことで、デジタルカメラ10からの制御コマンドを認識する。これにより、実質的にデジタルカメラ10からの主体的な制御でプリンタ20を動作させることができる。
以下、具体的な通信手順の例を説明する。
図6のステップS51に示すように、デジタルカメラ10内のメモリ11には、例えば「\printjob」、「\printsts」及び「\imgdata」というような名称の3種類のディレクトリが予め設けられている。「\printjob」ディレクトリには、デジタルカメラ10の印刷要求に相当するファイル(以下、「印刷要求ファイル」という)が格納される。ここで、1つの印刷ジョブに係る「印刷要求ファイル」は、この実施形態では後述するように、2種類のファイルのセットから成る。以下の説明では、その2種類のファイルを纏めて呼ぶとき「印刷要求ファイル」という。「\printsts」ディレクトリには、プリンタ20からの印刷ジョブの状態を示すメッセージ(例えば、前述の実施形態で説明した印刷要求受入メッセージや印刷状態メッセージなど)に相当する何種類かのファイルが格納される。また、「\imgdata」ディレクトリには、印刷で使用される様々な種類のリソースファイル、例えば、撮影された写真の画像ファイルや、特定の印刷ページレイアウトを定義したレイアウトファイルや、その特定の印刷ページレイアウトで使用される写真フレームや挿入文字や挿入図画などの画像ファイルや文字ファイルなどが格納される。なお、図6では、「\imgdata」ディレクトリに1つの画像ファイルと1つのレイアウトファイルしか存在しないが、実際には、複数の画像ファイルと複数のレイアウトファイルが存在するのが通常である。
デジタルカメラ10だけでなく、デジタルプリンタ20も、上述したメモリ11内の3種類のディレクトリと、それが何の用途に用いられ、そこに書かれるファイルのファイル前いや識別子が何を意味しているかについての知識を、予め有している。この知識は、デジタルプリンタ20に予め固定的にプログラムされていてもよいし、或るいは、そうではなく、デジタルカメラ10とデジタルプリンタ20との間のUSB通信接続が確立されたときに、デジタルカメラ10からのデバイスデスクリプタ又は別の特別な宣言文によって、デジタルプリンタ20に通知されるようになっていてもよい。
図6のステップS41で、ユーザがデジタルカメラ10を用いて、印刷対象の画像を選択し、使用したい印刷ページレイアウトを指定し、そして印刷条件を設定する等の印刷準備ためのボタン操作を行なった上で印刷実行を命じるボタン操作を行なったとする。すると、ステップS42で、デジタルカメラ10はそのボタン操作に応答して、印刷対象の画像及び使用する印刷ページレイアウトを指定した(例えば、その画像ファイルのパス名とファイル名、及びそのレイアウトファイルのパス名とファイル名等を指定した)「画像・レイアウト指定ファイル」と、使用する印刷条件の設定を記述した「印刷設定ファイル」とを作成して、その2つのファイルのセット(つまり、上述した「印刷要求ファイル」)を、メモリ11の「\printjob」ディレクトリに書き込む。
一方、プリンタ20は、ステップS61,S62,S63などに示すように、例えば1m秒に最低1回というような高速レートで周期的に、メモリ11の「\printjob」ディレクトリをチェックする。ステップS561のように、「\printjob」ディレクトリに印刷要求ファイが存在しなければ、プリンタ20は何もしない。しかし、ステップS62のように、「\printjob」ディレクトリに印刷要求ファイル(すなわち、画像・レイアウト指定ファイルと印刷設定ファイル)が存在すれば、プリンタ20はその印刷要求ファイルを読み込む。そして、プリンタ20は、その印刷要求ファイルに記述されている印刷対象の画像ファイルのパス名とファイル名及びそのレイアウトファイルのパス名とファイル名を把握して、メモリ11の「\imgdata」ディレクトリから、その画像ファイルとレイアウトファイルを読み込む。さらに、プリンタ20は、図示してないが、レイアウトファイルに記述されている写真フレーム、挿入文字又は挿入図画などの画像ファイル又は文字ファイルのパス名とファイル名を把握して、メモリ11の「\imgdata」ディレクトリから、その写真フレーム、挿入文字又は挿入図画などの画像ファイル又は文字ファイを読み込む。そして、プリンタ20は、それら読み込んだリソースファイルを用いて、上述の印刷要求ファイル(特に印刷設定ファイル)に記述されていた印刷条件設定に従って、印刷処理を開始する。同時に、プリンタ20は、印刷要求を受け入れたことを示す「印刷要求受入ファイル」(そこには、対応する印刷ジョブのid番号が書かれている)を、メモリ11の「\printsts」ディレクトリに書き込む。
また、プリンタ20は、ステップS63に示すように、周期的チェックの結果、「\printjob」ディレクトリに既に読み込んだものと同じ印刷要求ファイルしか存在しない場合には、その既に読み込んだ印刷要求ファイルに基づく印刷処理を続行する。
また、プリンタ20は、ステップS64に示すように、印刷処理を開始した後、周期的に又は印刷状態が変化した都度、最新の印刷状態(例えば、未印刷の残り枚数又は印刷完了枚数)が記述された印刷状態ファイルを、メモリ11の「\printsts」ディレクトリに書き込む。印刷状態ファイルの書き込み方法としては、この実施形態では「上書き」(すなわち、前の印刷要求受入ファイル又は印刷状態ファイルを消去して、新しい印刷状態ファイルを書き込む方法)を採用するが、必ずしもそうである必要は無く、「追記」(すなわち、前の印刷要求受入ファイル又は印刷状態ファイルを消去せずに、新しい印刷状態ファイルを書き込む方法)であってもよい。
一方、デジタルカメラ10は、ステップS42で印刷要求を発した後、ステップS43,S44などに示すように、周期的に(望ましくは、プリンタ20と同様の高速レートで)、メモリ11の「\printjob」及び「\printsts」ディレクトリをチェックする。その結果、ステップS43のように、「\printsts」ディレクトリにプリンタ20からの印刷要求受入ファイルが存在すれば、デジタルカメラ10は、その印刷要求受入ファイルを読むことで、先刻発した印刷要求がプリンタ20に受け入れられたことを確認する。ステップS44に示すように、「\printsts」ディレクトリに印刷状態ファイルが存在すれば、デジタルカメラ10は、その印刷状態ファイルを読むことで、最新の印刷状態を確認する。
以上に後続する通信手順は図7に示されている。
図7のステップS65に示すように、プリンタ20は、印刷が完了すると、メモリ11の「\printjob」ディレクトリから完了した印刷ジョブの印刷要求ファイルを消去し、そして、メモリ11の「\printsts」ディレクトリに、印刷が完了したことを示す「印刷完了ファイル」(完了した印刷ジョブのid番号が書かれている)を書き込む。すると、ステップS45に示すように、デジタルカメラ10は、周期チェックの際に、「\printsts」ディレクトリ内の印刷完了ファイルを見つけ、それを読むことで、どの印刷ジョブが完了したかを確認する。
その後、ステップS46に示すように、デジタルカメラ10は、周期チェックの際に、「\printjob」ディレクトリに印刷要求ファイルが存在しないことを確認すると、新たな印刷要求を発することが可能な状態になる。そして、ステップS47に示すように、ユーザが新たな印刷要求のためのボタン操作を行なうと、デジタルカメラ10は、ステップS48に示すように、既に説明したと同じ手順で新たな印刷要求ファイルを作成して「\printsts」ディレクトリに書き込む。以後、既に説明したと同様な手順で、その新たな印刷要求がプリンタ20に読み込まれて(S67)、それに従った印刷処理が行なわれる。
以上のようにして、デジタルカメラ10は制御コマンドをファイルの形でメモリ11内の所定ディレクトリに書き込み、プリンタ20は頻繁にそのディレクトリを監視して、コマンドファイルが書き込まれば直ちに読み込むことによって、デジタルカメラ10はプリンタ20に対して通常のストレージとして機能するだけであっても、実質的にデジタルカメラ10から主体的にプリンタ20を制御することが可能である。
以上、本発明の実施形態を説明したが、これは本発明の説明のための例示であり、この実施形態のみに本発明の範囲を限定する趣旨ではない。従って、本発明は、その要旨を逸脱することなく、他の様々な形態で実施することが可能である。