(57)【要約】【課題】  プリンタに新たな機能を組み込もうとすると、従来から組み込まれていた機能との整合性をとって実現することが困難であった。【解決手段】  プリンタに必要な機能を、複数のモジュールの組合わせにより実現するよう、イニシエータモジュール、メンバーモジュール、ターミネータモジュールを用意し、これらのモジュールをデータ処理経路コントローラＤＰＣによりつなぎ合わせて、所定の印刷処理を実現する。その際、各モジュールが組み合わされる相手の構成や処理について知る必要がないように、データを読み取られる側、データを書き込ませる側が、読み取り用、書き込み用の関数を用意し、データ処理経路コントローラＤＰＣからの呼び出し時にこれらの関数のポインタを渡して、相手側から、データの読み取り、書き込みを実現させる。【選択図】  図１０
2005119122.tif 000002
【特許請求の範囲】
【請求項１】
印刷用のヘッドを駆動して、媒体に印刷を行なう印刷装置であって、
印刷しようとするデータを準備するモジュール、該データを印刷用に処理するモジュール、該処理済みのデータを印字するために前記ヘッドを含むハードウェアを制御するモジュールを含む複数の処理モジュールと、
当該印刷装置における複数の印刷処理を実現する前記各モジュールの組合わせを記憶する組合わせ記憶手段と、
前記複数の印刷処理の一つが指定されたとき、前記記憶されたモジュールの組合わせに従って前記複数のモジュールを組み合わせ、該印刷処理を実行する印刷処理実行手段と
を備えた印刷装置。
【請求項２】
請求項１記載の印刷装置であって、
前記モジュールの少なくとも一つは、下流に位置するモジュールからデータの読み取りを受ける関数を提供する手続、または下流に位置するモジュールに対してデータを書き込みに行く手続、を備えたモジュールである印刷装置。
【請求項３】
請求項１または請求項２記載の印刷装置であって、
前記モジュールの少なくとも一つは、上流に位置するモジュールが用意したデータを受け取りに行く手続、または上流に位置するモジュールによりデータの書き込みを受ける関数を提供する手続を備えたモジュールである印刷装置。
【請求項４】
請求項１ないし請求項３のいずれか記載の印刷装置であって、
下流に位置するモジュールに対してデータを書き込みに行く手続と、上流に位置するモジュールが用意したデータを受け取りに行く手続とを規定した手続型中間モジュールを備え、
前記印刷処理実行手段は、前記組合わせ記憶手段に記憶された各モジュールの組合わせに従って前記各モジュールを組み合わせる際、前記組み合わされるモジュールが、データの受け渡し用の関数を両者が提供する組合わせの場合には、上流に位置するモジュールと下流に位置するモジュールとの間に前記手続型中間モジュールを配置して、前記モジュールを組合わせる組合わせ修正手段を備えた
印刷装置。
【請求項５】
請求項１ないし請求項４のいずれか記載の印刷装置であって、
下流に位置するモジュールからデータの読み取りを受ける関数を提供する手続と、上流に位置するモジュールによりデータの書き込みを受ける関数を提供する手続とを規定した提供型中間モジュールを備え、
前記印刷処理実行手段は、前記組合わせ記憶手段に記憶された各モジュールの組合わせに従って前記各モジュールを組み合わせる際、前記組み合わされるモジュールが、データの受け渡しを行なおうための関数を提供するモジュールが存在しない組合わせの場合には、上流に位置するモジュールと下流に位置するモジュールとの間に前記取得型中間モジュールを配置して、前記モジュールを組合わせる組合わせ修正手段を備えた
印刷装置。
【請求項６】
前記モジュールのうち、前記組合わせの最も上流にのみ位置するモジュールについては、その上流に位置するモジュールに対する手続を持たないイニシエータモジュールである
請求項１記載の印刷装置。
【請求項７】
前記モジュールのうち、前記組合わせの最も下流にのみ位置するモジュールについては、その下流に位置するモジュールに対する手続を持たないターミネータモジュールである
請求項１記載の印刷装置。
【請求項８】
前記イニシエータモジュールは、前記印刷処理に対応したデータを記憶したデータ記憶手段を備えた請求項６記載の印刷装置。
【請求項９】
前記ターミネータモジュールは、前記印刷装置のハードウェアを制御するインタフェースモジュールである請求項７記載の印刷装置。
【請求項１０】
請求項１記載の印刷装置であって、
前記組合わせ記憶手段は、
前記各モジュールの組合わせを記憶する際、当該モジュールが、一つの印刷処理において使用中に、他の印刷処理から呼び出し可能であるか否かの排他制御情報を記憶しており、かつ
一の印刷処理のために、当該モジュールが使用中であるか否かを示す使用中情報を記憶しており、
前記印刷処理実行手段は、
所定の印刷処理の実行を外部から指示され時、前記組合わせ記憶手段が記憶している前記使用中情報と当該モジュールの前記排他制御情報とを参照し、当該外部化に指示された印刷処理に用いるモジュールの少なくとも一つが、一つの印刷処理において他の印刷処理から呼び出し可能でないモジュールであり、かつ使用中の場合には、当該外部から指示された印刷処理を実行しない印刷処理禁止手段を備えた
印刷装置。
【請求項１１】
請求項１０記載の印刷装置であって、
前記印刷処理禁止手段は、前記外部から指示された印刷処理を、キャンセルする処理、前記使用中のモジュールの使用が終了するまで延期する処理のいずれかを実行する手段である印刷装置。
【請求項１２】
請求項１記載の印刷装置であって、
外部のコンピュータと接続可能なコネクタと、
該コネクタを介して、前記コンピュータと間で、印字用に展開されたデータのやりとりを行なう通信手段とを備え、
前記組合わせ記憶手段は、前記複数の印刷処理の一つとして、前記コネクタを介して受け取った印字用データを用いて、前記印刷用のヘッドを駆動し、前記媒体上に印刷を行なう印刷処理を実現する前記各モジュールの組合わせを記憶している
印刷装置。
【請求項１３】
請求項１記載の印刷装置であって、
電子スチルカメラ、電子手帳、携帯電話などの周辺機器が接続されるコネクタと、
該コネクタを介して、前記周辺機器から、画像データを受け取る通信手段とを備え、
前記組合わせ記憶手段は、前記複数の印刷処理の一つとして、前記コネクタを介して受け取った画像データを展開して印字用データを生成し、該印字用データに基づいて前記印刷用のヘッドを駆動し、前記媒体上に印刷を行なう印刷処理を実現する前記各モジュールの組合わせを記憶している
印刷装置。
【請求項１４】
請求項１記載の印刷装置であって、
画像データを記憶したメモリカードを装着するカードスロットと、
該カードスロットに装着されたメモリカードに記憶された画像データを読み取る入力手段とを備え、
前記組合わせ記憶手段は、前記複数の印刷処理の一つとして、前記読み取った画像データを展開して印字用データを生成し、該印字用データを用いて、前記印刷用のヘッドを駆動し、前記媒体上に印刷を行なう印刷処理を実現する前記各モジュールの組合わせを記憶している
印刷装置。
【請求項１５】
請求項１記載の印刷装置であって、
電子スチルカメラ、電子手帳、携帯電話などの周辺機器から、無線通信により、画像データを受け取る無線通信手段とを備え、
前記組合わせ記憶手段は、前記複数の印刷処理の一つとして、前記無線通信により受け取った画像データを展開して印字用データを生成し、該印字用データに基づいて前記印刷用のヘッドを駆動し、前記媒体上に印刷を行なう印刷処理を実現する前記各モジュールの組合わせを記憶している
印刷装置。
【請求項１６】
請求項１記載の印刷装置であって、
前記組合わせ記憶手段は、前記複数の印刷処理の一つとして、双方向印字の位置調整用のドットパターンの印刷処理を実現するための前記各モジュールの組合わせを記憶している印刷装置。
【請求項１７】
請求項１記載の印刷装置であって、
前記組合わせ記憶手段は、前記複数の印刷処理の一つとして、ノズルチェック用のドットパターンの印刷処理を実現するための前記各モジュールの組合わせを記憶している印刷装置。
【請求項１８】
請求項１記載の印刷装置であって、
画像を光学的に読み取って画像データに変換する画像読み取り手段を備え、
前記組合わせ記憶手段は、前記複数の印刷処理の一つとして、前記読み取った画像データを展開して印字用データを生成し、該印字用データに基づいて前記印刷用のヘッドを駆動し、前記媒体上に印刷を行なう印刷処理を実現する前記各モジュールの組合わせを記憶している
印刷装置。
【請求項１９】
印刷用のヘッドを駆動して、媒体に印刷を行なう印刷方法であって、
印刷しようとするデータを準備するモジュール、該データを印刷用に処理するモジュール、該処理済みのデータを印字するために前記ヘッドを含むハードウェアを制御するモジュールを含む複数の処理モジュールを用意し、
複数の印刷処理を実現する前記各モジュールの組合わせを記憶し、
前記複数の印刷処理の一つが指定されたとき、前記記憶されたモジュールの組合わせを従って前記複数のモジュールを組み合わせ、該印刷処理を実行する
印刷処理方法。
【請求項２０】
印刷装置に内蔵されたコンピュータで実行可能であり、該印刷装置が備える印刷用のヘッドを駆動して、媒体に印刷を行なうプログラムであって、
印刷しようとするデータを準備するモジュール、該データを印刷用に処理するモジュール、該処理済みのデータを印字するために前記ヘッドを含むハードウェアを制御するモジュールを含む複数の処理モジュールを実現する第１のプログラムコードと、
複数の印刷処理の一つが指定されたとき、当該複数の印刷処理を実現する前記各モジュールの組合わせを記憶したデータテーブルを参照し、該データテーブルに記憶されたモジュールの組合わせを従って前記複数のモジュールを組み合わせる第２のプログラムコードと、
該組み合わされた複数のモジュールに、印刷しようとする画像データを渡して、前記指定された印刷処理を実行する第３のプログラムコードと
を備えプログラム。
【請求項２１】
請求項２０記載のプログラムを記録した記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、印刷を行なう技術に関し、複数の印刷処理を実現する印刷装置の内部構成に関する。
【背景技術】
【０００２】
コンピュータなどの出力端末として広く普及しているプリンタなどの印刷装置は、コンピュータ側からデータを受け取り、印刷用のヘッドを駆動して、用紙などの媒体上にドットを形成することで印刷を行なっている。プリンタの歴史を振り返ると、当初は、プリンタ内部にフォントを展開するキャラクタジェネレータを有し、コンピュータ側からテキストデータを受け取って印刷を行なっており、コンピュータにおけるグラフィック処理機能の向上・普及に伴って、画像データを受け取ってこれを印刷する処理が加わった。
【０００３】
画像データの印刷は、様々な考え方が採り得るが、コンピュータ上のアプリケーションプログラムが扱うデータの多様性を前提にすると、コンピュータにインストールされたプリンタドライバにより、プリンタのヘッドや紙送りの特性に合わせたデータを生成し、これをプリンタに転送して印刷を行なわせる構成が標準的に採用されてきた。この種のプリンタドライバは、プリンタにおける解像度、インクの色数を含む色の表現能力、印刷用ヘッドのノズル構成（ノズル数やノズルピッチ）、紙送りの精度などのデータを予め記憶しており、このデータに従って、ヘッドが形成すべきドットデータを生成する。例えば、印刷装置であるプリンタが、シアン（Ｃ）、マゼンタ（Ｍ）、イエロ（Ｙ）、ブラック（Ｋ）のインクの他に、濃度の低いライトシアン（ＬＣ）、ライトマゼンタ（ＬＭ）などのインクを備え、かつその印字ヘッドが、大中小の三種類のインク滴を吐出可能なインクジェットタイプのプリンタであれば、プリンタドライバは、アプリケーションプログラムから受け取った画像データを、ラスタライズし、色補正を行ない、６色大中小のインク滴により画像を表現するハーフトーニングの処理を行なう。こうした印刷処理装置を示す技術文献としては、例えば以下に示す特許文献１などが知られている。
【０００４】
【特許文献１】特開２００３−５１００３号公報
【０００５】
他方、近年、デジタルスチルカメラ（いわゆるデジタルカメラ）や電子手帳あるいは携帯電話などの周辺機器の普及に伴い、これらの機器のデータをコンピュータを介することなく印刷したいという要請が高まっている。こうした周辺機器は、内部のＣＰＵの処理能力やメモリ容量などが制限されているので、上述したラスタライズ、色補正、ハーフトーニングなどの処理を自分自身で行なうことは、困難である。そこで、こうしたラスタライズ、色補正、ハーフトーニングなどの処理を行なうモジュールをプリンタに組み込み、周辺機器からは、ＪＰＥＧ形式などの画像データを受け取り、これをプリンタ内部で処理して印刷を行なう印刷装置が提案されている。こうした印刷装置では、従来通り、コンピュータに接続しての印刷することも当然考えられる。このため、これらの印刷装置では、コンピュータ側で画像処理を済ませた印刷用のデータを受け取って印刷する場合もあれば、画像データそのものを受け取って、内部で画像処理を行なって印刷する場合もあった。後者の印刷を、ダイレクトプリントと呼ぶことがある。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来の印刷装置を改良する形で、新たな機能であるダイレクトプリントなどの機能を加えてきたために、印刷装置の内部構成が次第に複雑化し、複数の印刷処理を誤りなく実現することが、場合によっては困難であるという状況が生じた。特に、プリンタ内部で実現されている機能のうち、本来は競合しない二つ以上の機能を同時に使用しようとしても、それらの機能を誤りなく並行して実行することを保障できず、結局処理に時間を要するという問題があった。また、既に設計した印刷装置に新たな機能を追加しようとすると、各種の機能を実現しているモジュールとの整合性をその都度取らねばならず、印刷装置の開発に多大の手間を要するという問題もあった。
【０００７】
本発明の目的は、こうした問題の少なくとも一つを解決し、複数の印刷処理を容易に実現しうる印刷装置の内部構成を提供することにある。
【課題を解決するための手段】
【０００８】
かかる目的を達成する本発明の印刷装置は、
印刷用のヘッドを駆動して、媒体に印刷を行なう印刷装置であって、
印刷しようとするデータを準備するモジュール、該データを印刷用に処理するモジュール、該処理済みのデータを印字するために前記ヘッドを含むハードウェアを制御するモジュールを含む複数の処理モジュールと、
当該印刷装置における複数の印刷処理を実現する前記各モジュールの組合わせを記憶する組合わせ記憶手段と、
前記複数の印刷処理の一つが指定されたとき、前記記憶されたモジュールの組合わせに従って前記複数のモジュールを組み合わせ、該印刷処理を実行する印刷処理実行手段と
を備えたことを要旨とする。
【０００９】
この印刷装置では、予め、印刷しようとするデータを準備するモジュール、該データを印刷用に処理するモジュール、該処理済みのデータを印字するために前記ヘッドを含むハードウェアを制御するモジュールを含む複数の処理モジュールを用意しており、更に、複数の印刷処理を実現するこれら各モジュールの組合わせを記憶している。そこで、複数の印刷処理の一つが指定されると、記憶されたモジュールの組合わせを従って複数のモジュールを組み合わせ、該印刷処理を実行する。このため、複数の印刷処理を容易に実現することができる。また、開発に要する手間も削減することができる。
【００１０】
この発明は、印刷装置としてのみならず、印刷方法として、あるいは印刷を実現するプログラムとしても把握することができる。また、これらの印刷装置、印刷方法、印刷用プログラムにおいて、以下の構成を取ることが可能である。
【００１１】
本発明において、モジュールの少なくとも一つは、上流に位置するモジュールが用意したデータを受け取りに行く手続、または上流に位置するモジュールによりデータの書き込みを受ける関数を提供する手続を備えたモジュールとすることができる。あるいは、モジュールの少なくとも一つは、上流に位置するモジュールが用意したデータを受け取りに行く手続、または上流に位置するモジュールによりデータの書き込みを受ける関数を提供する手続を備えたモジュールとすることができる。各モジュールをこのように構成することにより、各モジュールは上流または下流に配置されるモジュールによらず設計することができる。
【００１２】
こうしたモジュール構成を採用した場合、上流側のモジュールと下流側のモジュールとの組合わせによっては、いずれのモジュールもデータを受け渡しするための関数を提供しようとする組合わせ（組合わせＡ）や、両モジュールが共に関数を提供しない組合わせ（組合わせＢ）が生じ得る。もともとこうした組合わせが生じないように、各モジュールの組合わせを記憶しても良いが、次の対応を取ることも可能である。即ち、
下流に位置するモジュールに対してデータを書き込みに行く手続と、上流に位置するモジュールが用意したデータを受け取りに行く手続とを規定した手続型中間モジュールを用意すれば、前者の組合わせＡに対処して、モジュール間でデータを受け渡すことが可能になる。あるいは、後者の組合わせＢの場合には、下流に位置するモジュールからデータの読み取りを受ける関数を提供する手続と、上流に位置するモジュールによりデータの書き込みを受ける関数を提供する手続とを規定した提供型中間モジュールを用意すればよい。
【００１３】
こうした場合には、印刷処理実行手段は、予め記憶した各モジュールの組合わせに従って各モジュールを組み合わせる際、組み合わされるモジュールの組合わせが前者、即ち組合わせＡには、上流に位置するモジュールと下流に位置するモジュールとの間に手続型中間モジュールを配置すればよい。同様に、後者、即ち組合わせＢの場合には、印刷処理実行手段は、上流に位置するモジュールと下流に位置するモジュールとの間に提供型中間モジュールを配置すればよい。
【００１４】
なお、モジュールのうち、組合わせの最も上流にのみ位置するモジュールについては、その上流に位置するモジュールに対する手続を持たないイニシエータモジュールとしたり、組合わせの最も下流にのみ位置するモジュールについては、その下流に位置するモジュールに対する手続を持たないターミネータモジュールとしたりすることも可能である。
【００１５】
こうしたイニシエータモジュールとしては、前記印刷処理に対応したデータを記憶したデータ記憶手段を備えたものを考えることができる。また、ターミネータモジュールは、前記印刷装置のハードウェアを制御するインタフェースモジュールを考えることができる。
【００１６】
各モジュールは、様々な形態で呼び出して用いられるが、例えば、各モジュールの組合わせを記憶する際、当該モジュールが、一つの印刷処理において使用中に、他の印刷処理から呼び出し可能であるか否かの排他制御情報を記憶しておき、かつ一の印刷処理のために、当該モジュールが使用中であるか否かを示す使用中情報も記憶しておき、所定の印刷処理の実行を外部から指示され時、この使用中情報と当該モジュールの排他制御情報とを参照し、当該外部から指示された印刷処理に用いるモジュールの少なくとも一つが、一つの印刷処理において他の印刷処理から呼び出し可能でないモジュールであり、かつ使用中の場合には、当該外部から指示された印刷処理を実行しないものとすることができる。こうすれば、一つのモジュールを他の印刷処理に使用したり、使用を禁止したりといった対応を容易に実現することができる。他のモジュールから呼び出し可能であるか否かは、一義的に決定してもよいが、同時に呼び出し得る最大回数を規定しておき、その回数に達するまでは、他のモジュールから呼び出し可能として扱うものとしても良い。
【００１７】
印刷処理の実行をしないという対応としては、外部から指示された印刷処理をキャンセルする処理、使用中のモジュールの使用が終了するまでその印刷処理を延期する処理などを考えることができる。
【００１８】
上記の印刷装置としては、種々の実現形態を考えることができる。例えば、外部のコンピュータと接続可能なコネクタと、このコネクタを介して、コンピュータと間で、印字用に展開されたデータのやりとりを行なう通信手段とを備え、組合わせ記憶手段は、複数の印刷処理の一つとして、このコネクタを介して受け取った印字用データを用いて、印刷用のヘッドを駆動し、媒体上に印刷を行なう印刷処理を実現する前記各モジュールの組合わせを記憶している構成を考えることができる。かかる印刷装置は、コンピュータに接続して行なわれる従来通りの印刷を実現する。
【００１９】
あるいは、電子スチルカメラ、電子手帳、携帯電話などの周辺機器が接続されるコネクタと、このコネクタを介して、これら周辺機器から、画像データを受け取る通信手段とを備え、組合わせ記憶手段は、複数の印刷処理の一つとして、コネクタを介して受け取った画像データを展開して印字用データを生成し、印字用データに基づいて印刷用のヘッドを駆動し、媒体上に印刷を行なう印刷処理を実現する各モジュールの組合わせを記憶している構成を考えることもできる。かかる印刷装置は、周辺機器から画像データそれ自体を受け取って、直接印刷することができる。
【００２０】
あるいは、画像データを記憶したメモリカードを装着するカードスロットと、このカードスロットに装着されたメモリカードに記憶された画像データを読み取る入力手段とを備え、組合わせ記憶手段は、複数の印刷処理の一つとして、読み取った画像データを展開して印字用データを生成し、この印字用データを用いて、印刷用のヘッドを駆動し、媒体上に印刷を行なう印刷処理を実現する各モジュールの組合わせを記憶している構成を考えることもできる。かかる印刷装置は、カードスロットに装着されたメモリカード内の画像を容易に印刷することができる。
【００２１】
更には、電子スチルカメラ、電子手帳、携帯電話などの周辺機器からの画像データの入力を、無線通信により行なうものとすることもできる。こうした無線通信としては、赤外線を用いた通信や短距離無線通信（例えばブルートゥース（商標））などを用いた通信などを考えることができる。
【００２２】
かかる印刷装置における複数の印刷処理の一つとしては、双方向印字の位置調整用のドットパターンの印刷処理を考えることができる。あるいは、ノズルチェック用のドットパターンの印刷処理なども考えられる。これらの印刷処理を実現するには、その印刷処理を実現するための前記各モジュールの組合わせを予め記憶しておけばよい。
【００２３】
なお、印刷装置としては、単に印刷機能だけに限る必要はなく、例えば画像を光学的に読み取って画像データに変換する画像読み取り手段を備えた印刷装置や、外部の通信回線との通信機能を備えた印刷装置、テレビやビデオなどの動画の再生機能を備えた印刷装置など、種々の付加的な可能を備えた印刷装置考えることができる。画像読み取り手段を備えた印刷装置では、複数の印刷処理の一つとして、読み取った画像データを展開して印字用データを生成し、該印字用データに基づいて印刷用のヘッドを駆動し、媒体上に印刷を行なう印刷処理を実現することが可能である。同様に、通信機能を備えた印刷装置では、ファックスの送受信機能、あるいはメールなどを受け取ったときなどに自動的に印刷する自動印刷機能などを実現することができる。テレビやビデオなどの動画再生機能を備えた場合には、同様に動画の印刷や動画タイトルの印刷などを実現することができる。
【発明を実施するための最良の形態】
【００２４】
次に、本発明を実施するための形態を、実施例を挙げて説明する。説明は以下の順に行なう。
（１）ハードウェア構成：
（２）印刷処理の概要：
（３）各モジュールの組み立て：
（４）データ処理経路コントローラＤＰＣの働き：
（５）各ソフトウェアモジュールの構造と相互のやりとり：
（６）アダプタの構成：
（７）プリンタの動作：
【００２５】
（１）ハードウェア構成：
実施例のプリンタ２０のハードウェア構成について説明する。図１は、このプリンタ２０の動作に関与する部分を中心に、その構成を模式的に示す説明図である。また、図２は、プリンタ２０の構成を制御装置２２を中心に示すブロック図である。図１に示したように、このプリンタ２０は、給紙ユニット２６から給紙されプラテン２５によって搬送される用紙Ｐに、印字ヘッド６１ないし６６から、インク滴を吐出して、用紙Ｐ上に画像を形成する。プラテン２５は、紙送り用モータ４０からギヤトレイン４１を介して伝達される駆動力により回転・駆動される。このプラテンの回転角度は、エンコーダ４２により検出される。印字ヘッド６１ないし６６は、用紙Ｐの幅方向に往復動するキャリッジ５０に設けられている。このキャリッジ５０は、ステッピングモータ２３により駆動される搬送用ベルト２１に結合されている。搬送用ベルト２１は、無端ベルトであり、ステッピングモータ２３と、その反対側に設けられたプーリ２９との間に架設されている。従って、ステッピングモータ２３が回転すると、キャリッジ５０は、搬送用ベルト２１の移動に伴い、搬送用のガイド２４に沿って往復動する。
【００２６】
次に、キャリッジ５０に搭載された６色のインクカートリッジ１１１ないし１１６について説明する。６色のインクカートリッジ１１１ないし１１６は、基本的な構造は同一であり、その内部の収容室に収容されるインクの組成、即ち色が異なっている。インクカートリッジ１１１ないし１１６には、それぞれ黒色のインク（Ｋ）、シアンインク（Ｃ）、マゼンタインク（Ｍ）、イエロインク（Ｙ）、ライトシアンインク（ＬＣ）、ライトマゼンタインク（ＬＭ）、が収容されている。ライトシアンインク（ＬＣ）、ライトマゼンタインク（ＬＭ）は、それぞれ、シアンインク（Ｃ）、マゼンタインク（Ｍ）より、その染料濃度において、１／４程度に調整された淡い色のインクである。これらのカートリッジ１１１ないし１１６には、記憶処理モジュール１２１ないし１２６が取り付けられている。この記憶処理モジュール１２１ないし１２６は、無線通信により、プリンタ２０側の制御装置２２とデータの交換などを行なうことができる。
【００２７】
これらの記憶処理モジュール１２１ないし１２６と無線によるデータ交換を行なうために、プリンタ２０には、通信用の送受信部３０が設けられている。送受信部３０は、他の電子部品、例えば、紙送り用モータ４０、ステッピングモータ２３、エンコーダ４２等と共に、制御装置２２に接続されている。制御装置２２には、この他、プリンタ２０の前面に用意された操作パネル７０やカードスロット８０、あるいは各種機器との接続を行なうコネクタ群９０などにも接続されている。操作パネル７０には、印刷のための設定を行なう各種操作スイッチ７７や、ＬＥＤ７８が設けられている。カードスロット８０には、スマートメディアやコンパクトフラッシュ（登録商標）など複数種類のメモリカードや装着されるマルチスロットである。また、コネクタ群９０には、コンピュータとの接続を行なうＵＳＢコネクタ９１，デジタルスチルカメラや携帯電話などと接続を行なうもう一つのＵＳＢコネクタ９２，赤外線通信を行なうための赤外線通信ポート９５などが設けられている。ＵＳＢコネクタが２つ、区別して設けられているのは、一つはプリンタ２０側をスレーブとして機能させるためのポートであり、もう一つがプリンタ２０側をマスタとして機能させるためのポートだからである。
【００２８】
この制御装置２２は、図２に示すように、その内部に、プリンタ２０全体の制御を司るＣＰＵ２５１、その制御プログラムを記憶したＰＲＯＭ２５２、データの一時保存に用いられるＲＡＭ２５３、ハードウェアにより画像のリサイズを行なうリサイズユニット２６１、画像の２値化処理（ハーフトーニング）を行なう２値化ユニット２６３、印字ヘッド６１ないし６６のノズル配置に合わせてデータを整序する配列ユニット２６５、外部の機器とのインタフェースを司るＰＩＯ２５４、時間を管理するためのタイマ２５５、印字ヘッド１１１ないし１１６を駆動するためのデータを蓄える駆動バッファ２５６などを備え、これらを、バス２５７で相互に接続している。制御装置２２には、これらの回路素子の他、発振器２５８や分配出力器２５９なども設けられている。分配出力器２５９は、発振器２５８から出力されるパルス信号を、６つの印字ヘッド６１ないし６６のコモン端子に分配するものである。印字ヘッド６１ないし６６は、そのオン・オフ（インクを吐出する・しない）のデータを、駆動バッファ２５６の側から受取り、分配出力器２５９から駆動パルスを受け取った時点で、駆動バッファ２５６の側から出力されたデータに従って、インクを対応するノズルから吐出する。
【００２９】
制御装置２２のＰＩＯ２５４には、既に説明したステッピングモータ２３、紙送り用モータ４０、エンコーダ４２、送受信部３０、操作パネル７０、カードスロット８０，コネクタ群９０などが接続される。また、ＰＩＯ２５４には、送受信部３０も接続されており、送受信部３０を介して、カートリッジ１１１ないし１１６の記憶処理モジュール１２１ないし１２６とデータ通信を行なうことができる。制御装置２２は、この通信により、カートリッジ１１１ないし１１６内のインク残量などを知ることができる。また、プリンタ２０の電源断時など所定のタイミングで、制御装置２２内部で演算したインク消費量（インク残量）をカートリッジ１１１ないし１１６の記憶処理モジュール１２１ないし１２６に書き込むことができる。
【００３０】
（２）印刷処理の概要：上記のハードウェア構成を有するプリンタ２０では、印刷時の動作は、概ね次の通りである。
（Ａ）コンピュータからの印刷：コンピュータＰＣ上で動作しているアプリケーションプログラムから印刷を行なう場合には、アプリケーションプログラムは、印刷すべき画像データを用意すると、オペレーティングシステムに組み込まれたプリンタドライバを呼び出し、画像データをプリンタドライバに引き渡す。画像データを受け取ったプリンタドライバは、内蔵するラスタライザ、色補正処理、ハーフトーニング処理、配列処理などを実行し、画像データを対応するプリンタにおいて印刷するための印刷データに変換する。変換済みのデータは、プリンタ２０のインク構成（インク色数、種類）やインク滴の構成（大中小）、更には印字ヘッド６１ない６６のノズル数やノズルピッチに対応している。従って、この場合、プリンタ２０は、ＵＳＢコネクタ９１から読みとったデータを単純に保存し、これを所定のタイミングで駆動バッファ２５６を介して印字ヘッド６１ないし６６に転送すれば、多色の印刷が完了する。もとより印字ヘッド６１ないし６６からインク滴が吐出されるのに同期し、ステッピングモータ２３の駆動によるキャリッジ５０の搬送（主走査）や紙送り用モータ４０の駆動による用紙Ｐの搬送（副走査）などの処理も行なわれる。なお、このプリンタ２０は、赤外線通信ポート９５を用いて、赤外線通信の機能を有する携帯電話や電子手帳などの機器と通信することができる。携帯電話などから画像データを受け取って印刷する工程は、デジタルスチルカメラＤＳＣから画像データを受け取って印刷する工程と、画像データの受け渡しの処理を除いて同様なので、処理の説明は省略する。
【００３１】
（Ｂ）デジタルスチルカメラ等からの印刷：デジタルスチルカメラＤＳＣからの印刷は、通常ダイレクトプリントとして実現される。即ち、ＵＳＢコネクタ９２に接続されたデジタルスチルカメラＤＳＣとの間では、プリンタ２０側がマスタとなってデータの交換が行なわれる。使用者は、デジタルスチルカメラＤＳＣとプリンタ２０との間のデータのやりとりが確立すると、プリンタ２０の操作パネル７０に設けられた操作スイッチ７７を操作して、印刷の様式（用紙に何枚印刷するかといった設定）を指定し、デジタルスチルカメラＤＳＣ側から、ＪＰＥＧ形式などの画像データを送信する。プリンタ２０は、ＵＳＢコネクタ９２を介して画像データを受け取ると、これを内部のリサイズユニット２６１、２値化ユニット２６３、配列ユニット２６５などより処理し、印刷データを得て、印字ヘッド６１ないし６６やステッピングモータ２３、紙送り用モータ４０などを駆動する。これにより、画像データの印刷が完了する。
【００３２】
（Ｃ）メモリカード等からの印刷：カードスロット８０にメモリカードＭＣが装着され、このメモリカードＭＣ内に画像データが存在すると、プリンタ２０は、これを読み出して印刷を行なう。このカード印刷は、上述したデジタルスチルカメラＤＳＣ内の画像データの印刷と、画像データの取出の処理を除いて、ほぼ同一の処理により行なわれる。即ち、カードプリントを行なう場合には、プリンタ２０は、カードスロット８０にメモリカードＭＣが装着されたことを検出すると、このメモリカードＭＣ内の画像データを読み取り、使用者による操作スイッチ７７を用いた指定により指定された画像データを、指定された様式で印刷する。画像のリサイズや２値化の処理などは、デジタルスチルカメラＤＳＣ空の印刷と同様である。
【００３３】
（Ｄ）メンテナンス印刷：メンテナンス印刷とは、プリンタ２０自身の必要に応じて行なうプリントである。こうしたメンテナンス印刷には、デモ画像を印刷するデモ印刷、ノズルの状態をチェックするために行なうノズルチェック印刷、双方向印字の調整を行なうためのバイデイチェック印刷、等がある。これらの印刷では、印刷する画像データは、プリンタ２０の内部に予め用意されている。この場合、印刷するデータは、基本的に最初から印字ヘッド６１ないし６６の構成に合わせた印刷データとして用意される。プリンタ２０は、メンテナンス印刷は、操作パネル７０の操作スイッチ７７を操作することにより指定される。例えば、デモ印刷の場合には、操作スイッチの一つを押したまま電源を投入することにより実行される。またノズルチェック印刷は、操作スイッチ７７のうちの特定の二つを同時に押すことにより実行される。こうしたメンテナンス印刷の一つが指定されると、プリンタ２０は、印刷すべきドットパターンをＰＲＯＭ２５２から読み出し、これを印字ヘッド６１ないし６６に出力し、合わせてステッピングモータ２３や紙送り用モータ４０を駆動することにより、デモ印刷やメンテナンスに必要な画像の印刷を行なう。
【００３４】
以上の説明では、用紙Ｐ上に画像を形成する処理については、簡略な記載にとどめたが、まとめて説明すると、次の通りである。プリンタ２０において印刷すべき画像が特定され、そのラスタライズ、色変換、ハーフトニングなどの処理が行なわれた印刷用のデータが、プリンタ２０において準備されると、制御装置２２は、キャリッジ５０の移動位置をステッピングモータ２３の駆動量により検出しつつ、紙送りの位置をエンコーダ４２からのデータで確認し、これらに合わせて、印字ヘッド６１ないし６６のノズルから吐出すべきインクのオン・オフのデータを駆動バッファ２５６に出力し、かつ分配出力器２５９を駆動して、印字ヘッド６１ないし６６から所望のインク滴を吐出させる。この処理を、用紙Ｐの先端から順次繰り返すことにより、用紙Ｐ上に画像が形成される。
【００３５】
（３）各モジュールの組み立て：
以上、プリンタ２０のハードウェア構成および印刷処理概要について説明したが、このプリンタ２０の総てのハードウェアは制御装置２２により制御される。この制御装置２２の動作は、ＰＲＯＭ２５５に記憶されたプログラムをＣＰＵ２５１が実行することにより実現される。従って、上述した各種印刷処理は、結局ＰＲＯＭ２５２に記憶されたプログラムをＣＰＵ２５１が実行することにより実施されることになる。そこで、次に、制御装置２２において実行されるプログラム、即ちソフトウェアの構成について説明する。この実施例におけるプリンタ２０では、印刷処理を実行するソフトウェアを複数のモジュールに分割し、各モジュール間のデータのやりとりの仕組みを規定することで、上述した複数の印刷処理を容易に実現しうる構造を実現した。
【００３６】
図３は、このプリンタ２０において印刷を実現するソフトウェアの概略構成を示す説明図である。実際に印刷処理が行なわれる場合には、後述するように必要なモジュールが再構成される。従って、図３は、実際に特定の印刷処理に対応したソフトウェア構成を示すのではなくは、プリンタ２０における処理の大まかなソフトウェア構成を示している。図示するように、プリンタ２０を制御するソフトウェア群の基底では、オペレーティングシステムあるＩＴＲＯＮが動作している。総てのソフトウェアは、ＩＴＲＯＮの上で開発され、必要なライブラリなどもその環境の下で用意されている。
【００３７】
オペレーティングシステムの上には、いくつかのハードウェア制御モジュールＨＡＬが用意されている。これらのハードウェア制御モジュールＨＡＬは、上述したリサイズユニット２６１，２値化ユニット２６３，配列ユニット２６５はもとより、ＰＩＯ２５４を介してアクセスされる各種ハードウェアを制御するモジュールである。これらのハードウェア制御モジュールの上部に、各種の処理をソフトウェアにより行なう処理モジュール群ＤＰＭが用意されている。更に、これらの処理モジュール群ＤＰＭの中から必要なモジュールを選択し、また必要なハードウェア制御モジュールＨＡＬを選択し、処理の流れを構築するために、専用のモジュールであるデータ処理経路コントローラＤＰＣが用意されている。
【００３８】
これらのモジュール群の上位には、順にファンクションＦＣ、サービスＳＶ、ユーザインタフェースＵＩなどか形成されている。ファンクションは、例えばカードスロット８０に装着されたメモリカードＭＣ内の画像を印刷する場合などに呼び出される機能であり、外部との通信など、プリンタに元から用意されていた機能とは異なる一群の機能を実現するために用意されている。その上のサービスＳＶは、ユーザインタフェースＵＩと協働して、操作パネル７０の操作スイッチ７７やコネクタ群９０に接続された外部の機器からの要求を受け取り、各種の印刷処理を起動する。ユーザインタフェースＵＩを介して、外部からの要求を受け取ったサービスは、ハーネスＨＮと呼ばれる機能を用いて、ファンクションＦＣやデータ処理経路コントローラＤＰＣ、あるいはその他のモジュールを呼び出す。ハーネスＨＮと呼ばれる機能別の単位を用意しているのは、プリンタ２０の内部には、単純にソフトウェアにより処理される種々の機能以外に、それらの機能に関わるハードウェアインタフェースＩＦＤや各種ハードウェアのステータスを管理するステータス管理モジュールＤＳＭなども存在するからである。ハーネスと呼ばれる機能別の単位を用意することで、ソフトウェアモジュール群の呼び出しをデータ処理経路コントローラＤＰＣを用いて行なうと共に、その他のインタフェースなどの整合性をとり、プリンタを機能別に使用可能とすることが容易となっている。
【００３９】
（４）データ処理経路コントローラＤＰＣの働き：
次に、データ処理経路コントローラＤＰＣの働きについて説明する。データ処理経路コントローラＤＰＣは、ユーザインタフェースＵＩを介して、使用者がプリンタ２０を操作したとき、使用者の操作内容に基づいて、サービスＳＶが下層のハーネスＨＮの一つを呼び出すことをきっかけとして、動作する。上位の層からみれば、データ処理経路コントローラＤＰＣに対して、モジュールの確保などを行なわせるＬｏｃｋＰｒｏｃｅｓｓなどの関数がＡＰＩが定義されている。上位の層は、これらのＡＰＩを用いて、データ処理経路コントローラＤＰＣを制御する。データ処理経路コントローラＤＰＣは、機能別の単位であるハーネスＨＮから呼び出されて動作を開始し、ハーネスＨＮが要求する処理を実現するのに必要なモジュールの組合わせを実現するのである。
【００４０】
データ処理経路コントローラＤＰＣがコントロールするモジュール群の一例を図４に示した。データ処理経路コントローラＤＰＣは、図４に示したように、このプリンタ２０では、大きくは３つに分けられる。一つは、イニシエータモジュールと呼ばれるモジュール群であり、データ処理においては常に先頭に位置するものとして規定されているモジュールである。図４では、イニシエータモジュールは、Ｉ−ＡからＩ−Ｃまで、３種類存在するものとして示した。もう一つは、ターミネータモジュールと呼ばれるモジュール群であり、これはイニシエータモジュールとは逆に、データ処理においては常に終端に位置するものとして規定されているモジュールである。図４では、ターミネータモジュールは、Ｔ−ＡからＴ−Ｃまで、３種類存在するものとして示した。これらのイニシエータモジュール、ターミネータモジュールの数は、実現しようとする印刷処理に合わせて定めればよい。最後の一つは、メンバーモジュールと呼ばれるモジュール群である。このメンバーモジュールは、図４ではＭ−ＡからＭ−Ｉまで、９種類を示したが、印刷処理の先頭と終端以外の場所に位置するモジュールである。
【００４１】
イニシエータモジュール，メンバーモジュール，ターミネータモジュールの配列については、実現すべき印刷処理の内容毎に予め決められている。その一例を図５に示した。図５では、上述した印刷種類（Ａ）ないし（Ｄ）を用いて、各モジュールの組合わせとその順序（これをデータストリームと呼ぶ）の定義を示した。例えば通常印刷（Ａ）であれば、イニシエータモジュールＩ−Ａが先頭になり、メンバーモジュールＭ−Ｅ→Ｍ−Ｈの順にデータ処理がなされ、ターミネータモジュールＴ−Ａに最終的にデータが渡されることになる。図５に示したデータストリームの定義に従い、各モジュールが配列された様子の一部を図６に示した。
【００４２】
（５）各ソフトウェアモジュールの構造と相互のやりとり：
次に、データ処理経路コントローラＤＰＣにより組み合わされて、実際のデータの処理を行なうモジュール群の構造と、モジュール相互のデータのやりとりの仕組みについて説明する。データ処理経路コントローラＤＰＣにより組み合わせされる各モジュールは、図６にも示したが、同じモジュールが異なる印刷処理において用いられることも少なくない。即ち、各モジュールは、所定の印刷処理において自分がどのように配列されるか、どのモジュールからデータをもらい、どのモジュールにデータを渡すか、といったことは、考慮することなく設計されている。そこで、各モジュールの構造について説明し、これらのモジュールが相互にデータをやりとりする仕組みについて説明する。
【００４３】
各モジュールは、予めいくつかの属性値が定義されている。図７は、各モジュールの属性の一例を示す説明図である。属性の一つは、図７に示した最大呼び出し回数ＭＡＸＣであり、もう一つは呼び出し済み回数ＡＣであり、他の一つはステータスＳＳある。最大呼び出し回数ＭＡＸＣは、そのモジュールが最大いくつの印刷処理から同時に呼び出され得るかを示すものである。プリンタ２０における処理中には、同時に実行可能なものが存在するが、どのモジュールと他のモジュールの組合わせが同時に実行可能かといった情報は、印刷処理の内容が複雑になるほど管理することは困難となる。そこで、この実施例では、データ処理経路コントローラＤＰＣにより呼び出されて組み合わされる各モジュール自身に、同時に最大いくつまで呼び出されうるかという情報を持たせている。データ処理経路コントローラＤＰＣは、後述するＧ−ＲＥＡＤＹ関数により、各モジュールの使用を予約し、その後各モジュールに処理の開始をＳＴＡＲＴ−Ｊ関数により指示するが、Ｇ−ＲＥＡＤＹ関数による呼び出しを受けた各モジュールは、その最大呼び出し回数ＭＡＸＣを参照し、呼び出し済み回数ＡＣから見て余裕があれば、そのステータスＳＳをＲＥＡＤＹとして、処理を受け付ける。具体的には、後述する引数を、データ処理経路コントローラＤＰＣ側に返し、その後、呼び出し済み回数ＡＣを値１だけインクリメントする。呼び出されて呼び出し済み回数ＡＣがインクリメントされた結果、最大呼び出し回数ＭＡＸＣと呼び出し済み回数ＡＣが等しくなっているモジュールは、もはやデータ処理経路コントローラＤＰＣからの呼び出しの要求に応えることができない。この場合は、Ｇ−ＲＥＡＤＹ関数で呼び出しを行なったとき、呼び出されたモジュールは、戻り値として「失敗」を返す。
【００４４】
呼び出されるモジュールのステータスＳＳは、図８に示すように、「ＳＴＡＮＤ−ＢＹ」「ＲＥＡＤＹ」「ＰＲＯＣＥＳＳＩＮＧ」の３つの値を取る。「ＳＴＡＮＤ−ＢＹ」は、そのモジュールがデータ処理経路コントローラＤＰＣから呼び出し可能であることを示している。また、「ＲＥＡＤＹ」は、そのモジュールが、データ処理経路コントローラＤＰＣからＧ−ＲＥＡＤＹ関数による呼び出しを受けて、いつでもジョブの実行が可能な状態となったことを示している。更に、「ＰＲＯＣＥＳＳＩＮＧ」は、データ処理経路コントローラＤＰＣからＳＴＡＲＴ−Ｊ関数を受けて、ジョブの実行中であることを示している。これらのステータスＳＳは、それぞれ、ジョブの終了やキャンセルの処理を受けて、元の状態に遷移する。
【００４５】
次に、各モジュール間のデータのやりとりについて説明する。各モジュールは、データ処理経路コントローラＤＰＣにより指定された組合わせ・順序でデータ処理の流れを形成する。その際、各モジュールは、上流側のモジュールの用意したデータを読み取るストリームリード関数、あるいはデータを下流側のモジュールに書き込むストリームライト関数のいずれかを用いてデータをやりとりする。このとき、下流側のモジュールがデータを読み取りに行く場合には、データがおかれている場所（ポインタの位置）はデータを用意した上流側のモジュールが知っており、あるいは上流側のモジュールがデータを書き込みに行く場合は、データを書き込む場所（ポインタの位置）はデータを受け取る側が知っていると考えて、本実施例では、ストリームリード関数およびストリームライト関数については、その関数を提供する側と、その関数を用いてデータの読み書きを実際に行なう側とを区別し、モジュールの組合わせによらず、データのやりとりが行なえる仕組みを用意している。
【００４６】
このために、各モジュールは、上流側のモジュールの有する機能（即ち、下流側のモジュールに対する機能）と下流側のモジュールの有する機能（即ち、上流側のモジュールに対する機能）とに分けて、次のように分類されている。下流側のモジュールに対する機能は、
タイプＡ：ストリームリード関数を提供する機能、
タイプＢ：ストリームライト関数を呼び出す機能、
がある。一方、上流側のモジュールに対する機能としては、
タイプａ：ストリームリード関数を呼び足す機能、
タイプｂ：ストリームライト関数を提供する機能、
がある。これらの機能の組合わせを図９（Ａ）に示した。メンバーモジュールは、上流側のモジュール（下流側のジュールとやりとりするもの）としてのタイプＡまたはタイプＢのいずれかの機能、下流側のモジュール（上流側のモジュールとやりとりもの）としてタイプａまたはタイプｂのいずれかの機能を有するから、結局、全部で４通りのモジュールがあり得る。各モジュールの機能の組合わせ例を図９（Ｂ）ないし（Ｅ）に示した。各モジュールがいずれの機能を有するかは、各モジュールの処理内容により決定されるが、原則としては、そのモジュール内部での処理によりバッファにデータを蓄えるタイプのモジュールは、タイプＢの機能を有するモジュールとして設計することが好ましい。
【００４７】
モジュールのうち、イニシエータモジュールは、データ処理の先頭に位置するため、上流側のモジュールに対する機能を有する必要はない。即ち、イニシエータモジュールは、上流側のモジュールに対してデータを引き渡したり受け取ったりする機能を有しない。イニシエータモジュールは、結局タイプＡかタイプＢの機能のみを有することになるが、この例を図９（Ｆ），（Ｇ）に示した。同様に、ターミネータモジュールは、データ処理の終端に位置するため、下流側のモジュールに対する機能を有する必要はない。即ち、ターミネータモジュールは、下流側のモジュールに対してデータを引き渡したり受け取ったりする機能を有しない。ターミネータモジュールは、結局タイプａかタイプｂの機能のみを有することになるが、この例を図９（Ｈ），（Ｉ）に示した。
【００４８】
データ処理経路コントローラＤＰＣは、ハーネスＨＮから所定の印刷処理の実施を指示されると、図５に示したテーブルを参照し、このテーブルに記憶されたデータストリームの定義に従って、組み合わせるべきモジュール特定する。次に、データ処理経路コントローラＤＰＣは、各モジュールに対して、Ｇ−ＲＥＡＤＹ関数を呼び出して、各モジュールの使用を予約する。各モジュールは、上述した最大呼び出し回数などを参照し、データ処理経路コントローラＤＰＣからの呼び出しに応答できる場合は、Ｇ−ＲＥＡＤＹ関数の引数に、次の値を入れて返す。データ処理経路コントローラＤＰＣからＧ−ＲＥＡＤＹ関数を呼び出す際、引数としては［Ｘ１，ＩＸ１，Ｙ１，ＩＹ１］の四つが与えられる。この引数の内容は次の通りである。
Ｘ１：タイプＡのイニシエータモジュールまたはメンバーモジュールが、自ら提供するストリームリード関数のポインタを入れて返す引数である。ターミネータモジュールおよびタイプＢのイニシエータモジュールおよびメンバーモジュールは、この引数にヌル（ＮＵＬＬ）を入れて返す。ＮＵＬＬは、何も指定されてないことを示す変数である。
ＩＸ１：タイプＡのイニシエータモジュールまたはメンバーモジュールが、自ら提供するストリームリード関数の呼び出しの際に指定すべきコンテクストＩＤを入れて返す引数である。ターミネータモジュールおよびタイプＢのイニシエータモジュールおよびメンバーモジュールは、この引数に値０を入れて返す。各モジュールが、コンテクストＩＤを返すのは、同じモジュールが同時に二つの処理に用いられる場合があるからである。この場合、データ処理経路コントローラＤＰＣは、各モジュールに対して処理開始や終了を指示する際、このコンテクストＩＤを用いて、いずれの処理であるかを特定する。
Ｙ１：タイプｂのターミネータモジュールまたはメンバーモジュールが、自ら提供するストリームライト関数のポインタを入れて返す引数である。イニシエータモジュールおよびタイプａのターミネータモジュールおよびメンバーモジュールは、この引数にヌル（ＮＵＬＬ）を入れて返す。
ＩＹ１：タイプｂのターミネータモジュールまたはメンバーモジュールが、自ら提供するストリームライト関数の呼び出しの際に指定すべきコンテクストＩＤを入れて返す引数である。イニシエータモジュールおよびタイプａのターミネータモジュールおよびメンバーモジュールは、この引数に値０を入れて返す。
【００４９】
図５に示した印刷処理のうち（Ａ）通常印刷を例にとって、各モジュールのタイプと、Ｇ−ＲＥＡＤＹ関数により引き渡される引数を、図１０に例示した。図１０では、ストリームリード関数またはストリームライト関数のいずれかを提供するモジュールをハッチングして示した。図示するように、イニシエータモジュールＩ−Ａは、タイプＡのモジュールであり、メンバーモジュールＭ−Ｅは、タイプＢ＋タイプａのモジュールであり、メンバーモジュールＭ−Ｈは、タイプＡ＋タイプｂのモジュールであり、ターミネータモジュールＴ−Ａは、タイプａのモジュールである。データ処理経路コントローラＤＰＣからＧ−ＲＥＡＤＹ関数が呼び出されると、イニシエータモジュールＩ−Ａは、上記のＧ−ＲＥＡＤＹ関数の定義に従い、ストリームリード関数を提供するとして、その関数のポインタＳＲ１とそのコンテクストＩＤ（ＲＩＤ１）を有効な引数として、データ処理経路コントローラＤＰＣに返す。また、メンバーモジュールＭ−Ｅは、タイプＢ＋タイプａのモジュールなので、自らは提供する関数がないとして、有効な引数は返さない。メンバーモジュールＭ−Ｈは、ストリームリード関数とストリームライト関数とを提供するとして、前者のポインタＳＲ２とそのコンテクストＩＤ（ＲＩＤ２）および後者のポインタＳＷ１とそのコンテクストＩＤ（ＷＩＤ１）を、引数として返す。ターミネータモジュールＴ−Ａは、タイプａのモジュールなので、自らは提供する関数がないとして、有効な引数は返さない。
【００５０】
データ処理経路コントローラＤＰＣは、これらの引数を受け取った後、データ処理に必要なタイミングで、各モジュールに対して、ＳＴＡＲＴ−Ｊ関数を呼び出すことで、データ処理の開始を指示する。このとき、ＳＴＡＲＴ−Ｊ関数には、次の引数［Ｕ１，ＩＵ１，Ｖ１，ＩＶ１］が与えられる。この引数の内容は次の通りである。
Ｕ１：モジュールが、使用するストリームリード関数のポインタを与える。このストリームリード関数のポインタは、上流側に位置するタイプＡのイニシエータモジュールまたはメンバーモジュールが、提供したものである。イニシエータモジュールおよびタイプｂのターミネータモジュールおよびメンバーモジュールは呼び出す際には、この引数をヌル（ＮＵＬＬ）としなければならない。
ＩＵ１：ストリームリード関数を利用するモジュールが指定すべきコンテクストＩＤである。このコンテクストＩＤは、上流に位置するタイプＡのイニシエータモジュールまたはメンバーモジュールが、提供したものである。イニシエータモジュールおよびタイプｂのターミネータモジュールおよびメンバーモジュールは呼び出す際には、この引数を値０としなければならない。
Ｖ１：モジュールが、使用するストリームライト関数のポインタを与える。このストリームライト関数のポインタは、下流側に位置するタイプｂのターミネータモジュールまたはメンバーモジュールが、提供したものである。ターミネータモジュールおよびタイプＡのイニシエータモジュールおよびメンバーモジュールは呼び出す際には、この引数をヌル（ＮＵＬＬ）としなければならない。
ＩＶ１：ストリームライト関数を利用するモジュールが指定すべきコンテクストＩＤである。このコンテクストＩＤは、下流に位置するタイプｂのターミネータモジュールまたはメンバーモジュールが、提供したものである。ターミネータモジュールおよびタイプＡのイニシエータモジュールおよびメンバーモジュールは呼び出す際には、この引数を値０としなければならない。
【００５１】
上記の規則に従って、（Ａ）通常印刷を行なう場合に、各モジュールに対してＳＴＡＲＴ−Ｊ関数の呼び出しの際に引き渡される引数の例を、図１０に併せて示した。図示するように、ストリームリード関数については、上流側のモジュールが用意したポインタが下流側のモジュールに引き渡され、ストリームライト関数については、下流側のモジュールが用意したポインタが上流側のモジュールに引き渡される。この結果、図１０右端に示したように、各モジュールは、ストリームリード関数を用いる場合には、下流側のモジュールが上流側のモジュールが用意したポインタを利用してデータを読み出し、ストリームライト関数を利用する場合には、上流側のモジュールが下流側のモジュールが用意したポインタを利用してデータを書き込む。こうして、各モジュールは、自らのデータを書き込んだり、相手のデータを読み出したりする条件について、データ処理経路コントローラＤＰＣにより呼び出されるまで全く知らなくても、スムーズにデータのやりとりを行なうことができる。
【００５２】
（６）アダプタの構成：
次にアダプタについて説明する。各モジュールは、上述した仕組みを有するが、各モジュールの配列については、特に制約を設けていない。このため、データ処理経路コントローラＤＰＣが選択したモジュールの組合わせによっては、上流側と下流側の両モジュールが、共にストリームリード関数およびストリームライト関数を提供する組合わせや、これとは逆に上流下流の両モジュールが、共にストリームリード関数およびストリームライト関数を提供しない組合わせがあり得る。前者の例を図１１（Ａ）に、後者の例を図１２（Ａ）に、それぞれ示した。前者の場合は、図１１（Ｂ）に示したように、両モジュールの間には、上流側からストリームリード関数のポインタを受け取るタイプａの機能と、下流側からストリームライト関数のポインタを受け取るタイプＢの機能とを有するアダプタモジュールＡＤＰ１を用意すればよい。これが請求の範囲に言う「手続型中間モジュール」に相当する。また、後者の場合には、図１２（Ｂ）に示したように、両モジュールの間には、上流側に対してストリームライト関数のポインタを提供するタイプｂの機能と、下流側に対してストリームリード関数のポインタを提供するタイプＡの機能とを有するアダプタモジュールＡＤＰ２を用意すればよい。これが請求の範囲に言う「提供型中間モジュール」に相当する。
【００５３】
かかるアダプタＡＤＰ１，ＡＤＰ２を用意し、データ処理経路コントローラＤＰＣは、各モジュールの配列を上記の組合わせが生じる場合には、間に必要なアダプタを挿入すればよい。この結果、各モジュールは、組み合わされるモジュールの性質について何ら知る必要はない。また、アダプタは僅か二種類で済ませることができる。なお、本実施例では、イニシエータモジュールとターミネータモジュールについては、メンバーモジュールとは異なり、上流側または下流側の機能を有しないものとしたが、イニシエータモジュールおよびターミネータモジュールについても、メンバーモジュールと同様に、すべて上流側と下流側の機能を持たせ、データ処理経路コントローラＤＰＣが、モジュールの配列を構成する際、先頭にイニシエータとなるアダプタを、終端にターミネータとなるアダプタを、セットするものとしても良い。こうすれば、実質的なデータ処理を行なうモジュールの種類をメンバーモジュール一種類とすることかでき好適である。
【００５４】
（７）プリンタの動作：
次に、実際のプリンタ２０の動作について説明する。図１３は、プリンタ２０の制御装置２２に内蔵されたＣＰＵ２５１が実行する処理を示すフローチャートである。制御装置２２は、プリンタ２０の電源が投入され、初期化の処理が完了すると、ハーネスからの印刷要求があるまで待機する。ハーネスからの印刷要求が伝えられると、制御装置２２は、図１３に示した処理を起動し、まず、処理を要求したハーネスを特定し、要求された処理を特定する処理を行なう（ステップＳ３００）。ここからの処理は、上述したデータ処理経路コントローラＤＰＣとしての処理に相当する。ハーネスが要求してくる印刷処理については、図５に例示した。次に、特定された印刷処理に従い、このテーブルを参照し、データストリームを取得する処理を行なう（ステップＳ３１０）。データストリームを取得することにより、印刷処理に用いるモジュールを特定することができるので、次に、各モジュールに対して、上述したＧ−ＲＥＡＤＹ関数を発行し、その使用を確保する処理を行なう（ステップＳ３２０）。図７に示したように、各モジュールは、最大呼び出し回数ＭＡＸＣと呼び出し済み回数ＡＣとを見て、新たな印刷処理のために利用可能か否かの応答を返すので、データストリームを構成する全モジュールが使用可能か否かの判断を行なう（ステップＳ３３０）。一つでも使用可能でないモジュールがあれば、エラーメッセージの出力などの処理を行ない（ステップＳ３４０）、そのまま本ルーチンを終了する。なお、エラーメッセージを出力する変わりに、使用できないモジュールの処理が終わり、利用可能となるまで待機するものとしてもよい。
【００５５】
全モジュールが使用可能であれば、各モジュールに対して呼び出したＧ−ＲＥＡＤＹ関数の引数を調べ（ステップＳ３５０）、モジュールの組合わせから、アダプタが必要か否かの判断を行なう（ステップＳ３６０）。アダプタが必要な組合わせであると判断された場合には、必要なアダプタを呼び出して、組み込む処理を行なう（ステップＳ３７０）。組み込まれるアダプタの内容については、図１１、図１２に示した。総てのモジュールについて、関数の組合わせのチェックが完了するまで、上記の処理を行ない（ステップＳ３８０）、処理が完了すれば、引き続き、印刷処理（ステップＳ４００）に移行する。
【００５６】
この印刷処理を図１０に示した印刷処理の場合のモジュールの組合わせを用いて説明する。図１０に示した印刷処理において、データ処理経路コントローラＤＰＣは、図１４に示したように、まずイニシエータモジュールに対して、ＳＴＲＡＴ−Ｊ関数を呼び出す（ステップＳ４１０）が、その内容は［ＮＵＬＬ，０，ＮＵＬＬ，０］であり、イニシエータモジュールＩ−Ａ自体は、他のモジュールに対するデータの読み書きの処理は行なわない。イニシエータモジュールＩ−Ａは、下流側もモジュールに対して、ストリームリード関数のポインタを提供するだけだからである。
【００５７】
イニシエータモジュールＩ−Ａがデータを準備し終わると、データ処理経路コントローラＤＰＣは、続いてメンバーモジュールＭ−ＥおよびＭ−Ｈに対してＳＴＡＲＴ−Ｊ関数を呼び出す手続を行なう（ステップＳ４２０）。メンバーモジュールＭ−Ｅに対するＳＴＡＲＴ−Ｊ関数の引数は、［ＳＲ１，ＲＩＤ１，ＳＷ１，ＷＩＤ１］であり、メンバーモジュールＭ−Ｅは、ストリームリード関数およびストリームライト関数のポインタの提供を受けることになる。また、メンバーモジュールＭ−Ｈに対するＳＴＡＲＴ−Ｊ関数の引数は、［ＮＵＬＬ，０，ＮＵＬＬ，０］である。メンバーモジュールＭ−Ｈは、他のモジュールに対するデータの読み書きの処理を行なわないからである。
【００５８】
ストリームリード関数のポインタを受け取ったメンバーモジュールＭ−Ｅは、この関数を、呼び出す処理を行なう。ストリームリード関数の引数は、［ＲＩＤ，＊ＢＵＦＦ，ＬＥＮ，ＳＴ］であり、それぞれ次の内容を示している。
ＲＩＤ：コンテクストＩＤであり、処理の内容を相互に特定するのに用いられる。
＊ＢＵＦＦ：ストリームリード関数において読み出したデータが保存されているバッファの先頭アドレスを示すポインタである。
ＬＥＮ：読み出されたデータの長さを示す変数である。
ＳＴ：関数のステータスを示す変数であり、関数が更に継続されるか終了かを示す。
メンバーモジュールＭ−Ｅは、この関数を実行するが、ストリームリード関数の実行は、上流側のモジュール（ここではイニシエータモジュールＩ−Ａ）が提供した関数を実行することであり、関数の内容は提供した側のモジュール、即ち、データを用意した側のモジュールが規定している。従って、この関数を、下流側のモジュール（ここでは、メンバーモジュールＭ−Ｅ）が呼び出すと、関数は、上流側モジュールが管理しているバッファＢＵＦＦから、長さＬＥＮのデータを読み取ったことおよび処理結果を示すステータスを、その引数により、呼び出した側のモジュールに、通知するのである。ステータスが「継続」であれば、下流側のモジュールは、ストリームリード関数の処理を繰り返す。ステータスが「終了」となれば、上流側もモジュールが準備したデータは尽きたとして、下流側のモジュールからのストリームリード関数の呼び出しは完了する。
【００５９】
他方、メンバーモジュールＭ−Ｅは、上流のモジュールからストリームリード関数により読み出したデータを、処理しつつ、処理済みのデータに対してストリームライト関数を実行する。ストリームライト関数の引数も、ストリームリード関数とほぼ同様である。メンバーモジュールＭ−Ｅは、この関数を実行するが、ストリームライト関数の実行は、下流側のモジュール（ここではメンバーモジュールＭ−Ｈ）が提供した関数を実行することであり、関数の内容は提供した側のモジュール、即ち、データの書き込みを受ける側のモジュールが規定している。従って、この関数を、上流側のモジュール（ここでは、メンバーモジュールＭ−Ｅ）が呼び出すと、関数は、下流側モジュールが管理しているバッファＢＵＦＦに、長さＬＥＮのデータを書き込むのである。モジュールは、処理状態を示すステータスＳＴを参照して、全データの書き込みが完了するまで、ステータスを「継続」としたまま、ストリームライト関数の処理を繰り返す。全データの書き込みが完了する際には、ステータスＳＴを「終了」とし、下流側のモジュールへのストリームライト関数の呼び出しを完了する。
【００６０】
同様に、メンバーモジュールＭ−ＨとターミネータモジュールＴ−Ａとの間でも、ストリームリード関数によるデータの受け渡しが行なわれる（ステップＳ４３０）。以上の処理により印刷処理は完了する。なお、指定された印刷処理が、（Ａ）通常印刷であれば、印字用のデータの流れは、ＵＳＢコネクタ９１に接続されたコンピュータＰＣにおけるプリンタドライバが、プリンタ２０用のドットデータを生成しこれをコネクタ９１を介して受け取ることから開始される。コネクタ９１を介してドットデータを受け取る処理をイニシエータモジュールＩ−Ａが行ない、以後、プリンタ２０独自の補正をメンバーモジュールＭ−Ｅが、印字ヘッド６１ないし６６の構成に合わせたドットデータの並べ替えをメンバーモジュールＭ−Ｈがそれぞれ行ない、ターミネータモジュールＴ−Ａが最終的なデータを、ハードウェア制御モジュールに渡すことで、駆動バッファ２５６や分配出力器２５９を用いた印字ヘッド６１ないし６６の駆動、あるいはステッピングモータ２３や紙送り用モータ４０を用いたキャリッジ５０や用紙Ｐの搬送が行なわれる。
【００６１】
また、デジタルスチルカメラＤＳＣからの（Ｂ）ダイレクト印刷や、メモリカードＭＣ内の画像データを印刷する処理である（Ｃ）カード印刷を行なう場合には、イニシエータモジュールＩ−Ｂは、ＪＰＥＧ形式などの画像データを直接受け取るモジュールとして働き、その下流側のメンバーモジュールは、ハードゥエアユニットとして用意されたリサイズユニット２６１，２値化ユニット２６３，配列ユニット２６５などを用いてデータの処理を行なう。この場合、メンバーモジュールは、直接はデータの受け渡しを行なわず、データの受け渡しのタイミングだけをやりとりしている。各ハードゥエアユニットにより処理されたデータは、ハードウェアとして用意されたデータバスを介して受け渡される。
【００６２】
同様に、プリンタ２０のメンテナンスのために、（Ｄ−１）ノズルチェック印刷や（Ｄ−２）バイディチェック印刷などを行なう場合には、用紙Ｐに所定のドットパターンを印刷するが、このドットパターンのデータは、イニシエータモジュールＩ−Ｃが、その内部に用意している。ひとつのイニシエータモジュールＩ−Ｃが二つのドットパターンを記憶しており、ハーネスからの呼び出しの指定により、いずれかのドットパターンを下流側のモジュールに引き渡している。下流側のメンバーモジュールでは、このドットパターンを処理し、最終的には印字ヘッド６１ないし６６や、ステッピングモータ２３と紙送り用モータ４０を駆動し、キャリッジ５０の搬送（主走査）に伴い、用紙Ｐ上にチェック用のパターンを印刷する。
【００６３】
以上説明したように、本実施例のプリンタ２０では、プリンタ２０が行なう複数の印刷処理を組合わせにより実現する複数のモジュールを用意し、印刷処理が指定されると、テーブルを参照して各モジュールを組み合わせ、必要なデータのやりとりを実現して、指定された印刷処理を実現している。しかも、こうしたモジュールの組合わせにおいて、各モジュールがデータを受け取る相手側、あるいはデータを引き渡す相手側の処理について、知る必要がない。各モジュールは、データ処理経路コントローラＤＰＣからの問い合わせであるＧーＲＥＡＤＹ関数の引数として、モジュールが提供しうるストリームリード関数またはストリームライト関数のポインタを引き渡すか、モジュールにおいていずれの関数を実行するかのタイプを回答するだけでよい。このため、各モジュールの設計を自律的に行なうことができ、好適である。特に、近年大規模化するプリンタのソフトウェア開発において、こうしたモジュール設計を独立に行なうことができる仕組みは有用である。
【００６４】
また、こうしたモジュール化を行なった結果、例えば図１５に示すように、プリンタ２０に新たなハードウェア（この例では、スキャナ２８０）を追加し、新たな印刷処理を追加する場合でも、他のモジュールの動作などについての整合性について特別な考慮を払う必要がない、という利点が得られる。図１５に示したスキャナ２８０を追加して、スキャナ２８０で読み取った画像をそのままプリンタ２０の印字ヘッド６１ないし６６などを利用して用紙Ｐに印刷するいわゆる（Ｆ）コピー印刷の機能を追加する場合、設計者は、スキャナ２８０の機能を利用した新たなサービスを提供するとして、サービスＳＶにその機能を追加すると共に、スキャナ２８０の機能を利用する新たなファンクションＦＣを追加し、その上で、コピー印刷を呼び出すハーネスと、コピー印刷を実現する各モジュールの新たな配列（場合によっては新たなモジュール）を追加するだけで済む。この場合、コピー印刷を実現するモジュールの構成のみ考えれば良く、他の印刷処理との競合などについて考慮する必要がない。このため、プリンタ２０に新しい機能を付け加える場合などに、極めて有効である。プリンタ２０に付加し得るこうした新たな機能としては、スキャナの追加によるコピー印刷の他、例えば、ビデオ信号を受け付けるキャプチャボードを付加し動画から得られる特定の静止画を印刷するキャプチャ印刷、所定の期間にわたる複数のフレームを連続的に印刷するフレーム印刷、ＤＶＤなどの機器を付加し、ＤＶＤなどに記録された画像を印刷する機能、あるいはＣＤやＤＶＤのレーベルを印刷するレーベル印刷、など種々の機能を考えることができる。こうした印刷を実現する場合には、各印刷に必要なメンバーモジュールを、それぞれ個別に設計すればよいことから、装置全体の開発に要する期間を大幅に短縮し、かつ信頼性を向上させることができる。
【００６５】
以上本発明の実施例について説明したが、本発明はこうした実施例に限るものではなく、本発明の要旨を逸脱しない範囲内において、種々なる態様で実施し得ることは勿論である。例えば、レーザープリンタや大判プリンタ、ネットワークを介してデータのやりとりを行なうネットワークプリンタ、両面印刷を行なうプリンタ、更には、用紙カセットやインクカートリッジを複数種類持ち、この中から特定された用紙・インクカートリッジを使用して印刷を行なうタイプのプリンタなどにも適用できることは勿論である。
【図面の簡単な説明】
【００６６】
【図１】プリンタ２０の動作に関与する部分を中心に、その構成を模式的に示す説明図である。
【図２】プリンタ２０の構成を制御装置２２を中心に示すブロック図である。
【図３】このプリンタ２０において印刷を実現するソフトウェアの概略構成を示す説明図である。
【図４】データ処理経路コントローラＤＰＣがコントロールするモジュール群の一例を示す説明図である。
【図５】印刷処理の内容毎に予め決められたイニシエータモジュール，メンバーモジュール，ターミネータモジュールの配列の一例を示す説明図である。
【図６】図５に示したデータストリームの定義に従い、各モジュールが配列された様子の一部示す説明図ある。
【図７】各モジュール属性の一例を示す説明図である。
【図８】呼び出されるモジュールのステータスＳＳの遷移状態を示す説明図である。
【図９】各モジュールにおけるタイプの組合わせを示す説明図である。
【図１０】各モジュールのタイプと、Ｇ−ＲＥＡＤＹ関数、ＳＴＡＲＴ−Ｊ関数により引き渡される引数を例示する説明図である。
【図１１】上流側と下流側の両モジュールが、共にストリームリード関数およびストリームライト関数を提供する組合わせと、その場合に用いられるアダプタＡＤＰ１の構成を例示する説明図である。
【図１２】上流下流の両モジュールが、共にストリームリード関数およびストリームライト関数を提供しない組合わせと、その場合に用いられるアダプタＡＤＰ２の構成を例示する説明図である。
【図１３】プリンタ２０の制御装置２２に内蔵されたＣＰＵ２５１が実行する処理を示すフローチャートである。
【図１４】印刷処理の概要を示すフローチャートである。
【図１５】新たなハードウェアであるスキャナ２８０を追加したプリンタの概略構成図である。
【符号の説明】
【００６７】
２０…プリンタ
２１…搬送用ベルト
２２…制御装置
２３…ステッピングモータ
２４…ガイド
２５…プラテン
２６…給紙ユニット
２９…プーリ
３０…送受信部
４０…紙送り用モータ
４１…ギヤトレイン
４２…エンコーダ
５０…キャリッジ
６１〜６６…印字ヘッド
７０…操作パネル
７７…操作スイッチ
７８…ＬＥＤ
８０…カードスロット
９０…コネクタ群
９１…ＵＳＢコネクタ
９２…ＵＳＢコネクタ
９５…赤外線通信ポート
１１１〜１１６…インクカートリッジ
１２１〜１２６…記憶処理モジュール
２５１…ＣＰＵ
２５２…ＰＲＯＭ
２５３…ＲＡＭ
２５４…ＰＩＯ
２５５…ＰＲＯＭ
２５５…タイマ
２５６…駆動バッファ
２５７…バス
２５８…発振器
２５９…分配出力器
２６１…リサイズユニット
２６３…２値化ユニット
２６５…配列ユニット
２８０…スキャナ
ＢＵＦＦ…バッファ
ＤＰＣ…データ処理経路コントローラ
ＤＰＭ…処理モジュール群
ＤＳＣ…デジタルスチルカメラ
ＤＳＭ…ステータス管理モジュール
ＦＣ…ファンクション
ＨＡＬ…ハードウェア制御モジュール
ＨＮ…ハーネス
Ｉ…イニシエータモジュール
ＩＦＤ…ハードウェアインタフェース
Ｍ…メンバーモジュール
ＭＣ…メモリカード
Ｐ…用紙
ＰＣ…コンピュータ
ＳＶ…サービス
Ｔ…ターミネータモジュール
ＵＩ…ユーザインタフェース
【図１】
2005119122.tif 000003
【図２】
2005119122.tif 000004
【図３】
2005119122.tif 000005
【図４】
2005119122.tif 000006
【図５】
2005119122.tif 000007
【図６】
2005119122.tif 000008
【図７】
2005119122.tif 000009
【図８】
2005119122.tif 000010
【図９】
2005119122.tif 000011
【図１０】
2005119122.tif 000012
【図１１】
2005119122.tif 000013
【図１２】
2005119122.tif 000014
【図１３】
2005119122.tif 000015
【図１４】
2005119122.tif 000016
【図１５】
2005119122.tif 000017