(57)【特許請求の範囲】
【請求項１】
スキャナ部とプリンタ部とを有するマルチファンクションプリンタであって、
コンピュータから、前記プリンタ部をリセットするプリンタ部リセットコマンドを受信する、受信手段と、
前記受信手段が前記プリンタ部リセットコマンドを受信した場合に、前記スキャナ部が動作中であっても、前記プリンタ部のみをリセットする、リセット手段と、
を備えるとともに、
前記リセット手段は、少なくとも、
前記プリンタ部リセットコマンドを受信した場合には、コンピュータから送信された印刷データを格納する入力バッファに、印刷データの解釈上は無意味なデータと解釈されるダミーデータを印刷データとして書き込む、第１タスクと、
前記入力バッファに格納されている前記印刷データを読み出して、イメージデータに展開する、第２タスクとを、
中央処理装置で実行することにより実現される、ことを特徴とするマルチファンクションプリンタ。
【請求項２】
前記中央処理装置は前記マルチファンクションプリンタに１つだけ設けられている、ことを特徴とする請求項１に記載のマルチファンクションプリンタ。
【請求項３】
前記リセット手段は、前記中央処理装置で実行されるタスクとして、
前記プリンタ部リセットコマンドを受信した場合に、前記プリンタ部がリセット処理中であることを示すリセット中識別情報をセットする、第３タスクをさらに備えることを特徴とする請求項１又は請求項２に記載のマルチファンクションプリンタ。
【請求項４】
前記第２タスクは、最も上位のメインループ処理と、このメインループ処理から階層的に派生する下位のループ処理とを有しており、前記下位のループ処理は、前記リセット中識別情報がセットされている場合には、その処理を抜けて上位のループ処理に戻るよう構成されている、ことを特徴とする請求項３に記載のマルチファンクションプリンタ。
【請求項５】
前記第２タスクでは、その時点のモードがキャラクタデータを印刷するキャラクターモードである場合には、前記ダミーデータが所定回数以上連続したかどうかを判断する連続回数判断処理を行い、その時点のモードがグラフィックデータを印刷するグラフィックモードである場合には、この連続回数判断処理を行わない、ことを特徴とする請求項３又は請求項４に記載のマルチファンクションプリンタ。
【請求項６】
受信した印刷データを展開するデータ展開処理手段であって、前記リセット手段が前記プリンタ部リセットコマンドを受信した場合には、印刷データの展開処理を途中終了する、データ展開処理手段と、
前記データ展開処理手段により起動される、下位の処理手段であって、起動された後に所定時間経過した場合は、その処理が終了していない場合であっても、前記データ展開処理手段に戻る、下位の処理手段と、
をさらに備えることを特徴とする請求項１乃至請求項５のいずれかに記載のマルチファンクションプリンタ。
【請求項７】
前記データ展開処理手段の印刷データの展開処理が途中終了した場合に、プリントエンジンを初期状態に戻すプリントエンジン初期化手段を、さらに備えることを特徴とする請求項６に記載のマルチファンクションプリンタ。
【請求項８】
前記プリントエンジン初期化手段がプリントエンジンを初期状態に戻した後に、前記データ展開手段の設定状態を初期状態に戻す、ことを特徴とする請求項７に記載のマルチファンクションプリンタ。
【請求項９】
スキャナ部とプリンタ部とを有するマルチファンクションプリンタの制御方法であって、
コンピュータから、前記プリンタ部をリセットするプリンタ部リセットコマンドを受信するステップと、
前記プリンタ部リセットコマンドを受信した場合に、前記スキャナ部が動作中であっても、前記プリンタ部のみをリセットするステップと、
を備えるとともに、
前記プリンタ部のみをリセットするステップは、少なくとも、
前記プリンタ部リセットコマンドを受信した場合には、コンピュータから送信された印刷データを格納する入力バッファに、印刷データの解釈上は無意味なデータと解釈されるダミーデータを印刷データとして書き込むステップと、
前記入力バッファに格納されている前記印刷データを読み出して、イメージデータに展開するステップとを、
備えることを特徴とするマルチファンクションプリンタの制御方法。
【請求項１０】
スキャナ部とプリンタ部とを有するマルチファンクションプリンタを制御するためのプログラムであって、
コンピュータから、前記プリンタ部をリセットするプリンタ部リセットコマンドを受信するステップと、
前記プリンタ部リセットコマンドを受信した場合に、前記スキャナ部が動作中であっても、前記プリンタ部のみをリセットするステップと、
を前記マルチファンクションプリンタに実行させるとともに、
前記プリンタ部のみをリセットするステップでは、少なくとも、
前記プリンタ部リセットコマンドを受信した場合には、コンピュータから送信された印刷データを格納する入力バッファに、印刷データの解釈上は無意味なデータと解釈されるダミーデータを印刷データとして書き込むステップと、
前記入力バッファに格納されている前記印刷データを読み出して、イメージデータに展開するステップとを、
前記マルチファンクションプリンタに実行させるためのプログラム。
【請求項１１】
スキャナ部とプリンタ部とを有するマルチファンクションプリンタを制御するためのプログラムが記録された記録媒体であって、
コンピュータから、前記プリンタ部をリセットするプリンタ部リセットコマンドを受信するステップと、
前記プリンタ部リセットコマンドを受信した場合に、前記スキャナ部が動作中であっても、前記プリンタ部のみをリセットするステップと、
を前記マルチファンクションプリンタに実行させるとともに、
前記プリンタ部のみをリセットするステップでは、少なくとも、
前記プリンタ部リセットコマンドを受信した場合には、コンピュータから送信された印刷データを格納する入力バッファに、印刷データの解釈上は無意味なデータと解釈されるダミーデータを印刷データとして書き込むステップと、
前記入力バッファに格納されている前記印刷データを読み出して、イメージデータに展開するステップとを、
前記マルチファンクションプリンタに実行させるためのプログラムが記録された記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、スキャナ部とプリンタ部とを有するマルチファンクションプリンタに関し、特に、スキャナ部とプリンタ部とが独立に動作可能なマルチファンクションプリンタに関する。
【０００２】
【従来の技術】
スキャナ部とプリンタ部とが一体化されて、１つの筐体に格納されたマルチファンクションプリンタが普及してきている。このようなマルチファンクションプリンタにおいては、１台で、スキャナとしての役割と、プリンタとしての役割と、コピー機としての役割とを、果たすことができる。この場合、カラー印刷やカラーコピーを可能にするため、プリンタ部としては、いわゆるカラーインクジェットプリンタが用いられている場合が多い。
【０００３】
このようなマルチファンクションプリンタにおいて、ユーザが何らかの理由により、プリンタ部で印刷中のジョブをキャンセルしたい場合がある。この場合、ユーザは、マルチファンクションプリンタに接続されたコンピュータから、リセットコマンドを送信し、マルチファンクションプリンタでは、このリセットコマンドに基づいて、印刷中のジョブのキャンセルを行う。
【０００４】
【発明が解決しようとする課題】
しかしながら、従来のマルチファンクションプリンタにおいては、このキャンセルにあたって、印刷を実行するために動作している各種のタスクを初期状態に戻すために、リブートの処理を実行していた。すなわち、マルチファンクションプリンタ上の各種タスクは、リアルタイムＯＳ（Operating System）上で動作しているため、このリアルタイムＯＳそのものをリブートすることにより、マルチファンクションプリンタを初期化して、印刷中のジョブをキャンセルしていた。
【０００５】
しかし、スキャナ部が、プリンタ部と独立して動作可能なマルチファンクションプリンタもある。このようなマルチファンクションプリンタにおいては、プリンタ部がコンピュータから受信した印刷データの印刷をしつつ、これと並行して、スキャナ部が原稿等のスキャン動作を行うことが可能になる。このように並行動作している最中に、リアルタイムＯＳそのものをリブートしてしまうと、本来はユーザがリセットするつもりのないスキャナ部までもが、リセットされてしまう。
【０００６】
しかも、ユーザが再度スキャンをやり直そうとして、コマンドをコンピュータからマルチファンクションプリンタに送信すると、リアルタイムＯＳがリブートして立ち上がり直されているので、通信エラーを起こしてしまう場合も生じてしまう。この場合、ユーザは、再度、コンピュータのスキャナ用のドライバを立ち上げ直して、通信エラーを解消しなければならない。
【０００７】
そこで本発明は、前記課題に鑑みてなされたものであり、プリンタ部とスキャナ部とを有するマルチファンクションプリンタにおいて、プリンタ部で行われている印刷動作のみを、キャンセルすることができるようにすることを目的とする。
【０００８】
【課題を解決するための手段】
上記課題を解決するため、本発明に係るマルチファンクションプリンタは、
スキャナ部とプリンタ部とを有するマルチファンクションプリンタであって、
コンピュータから、前記プリンタ部をリセットするプリンタ部リセットコマンドを受信する、受信手段と、
前記受信手段が前記プリンタ部リセットコマンドを受信した場合に、前記スキャナ部が動作中であっても、前記プリンタ部のみをリセットする、リセット手段と、
を備えるとともに、
前記リセット手段は、少なくとも、
前記プリンタ部リセットコマンドを受信した場合には、コンピュータから送信された印刷データを格納する入力バッファに、印刷データの解釈上は無意味なデータと解釈されるダミーデータを印刷データとして書き込む、第１タスクと、
前記入力バッファに格納されている前記印刷データを読み出して、イメージデータに展開する、第２タスクとを、
中央処理装置で実行することにより実現される、ことを特徴とする。
【０００９】
これにより、ユーザは、コンピュータからプリンタ部リセットコマンドを送信することにより、スキャナ部とプリンタ部とが並行して動作している場合にも、プリンタ部のみをリセットすることができるようになる。また、このように、入力バッファにダミーデータを格納しておくことにより、入力バッファから印刷データを読み出してイメージデータに展開する第２タスクは、どのような処理をしていたとしても、いずれ、その展開処理が終わることになる。
【００１０】
さらにこの場合、前記中央処理装置は前記マルチファンクションプリンタに１つだけ設けられているようにしてもよい。
【００１２】
さらに、前記リセット手段は、前記中央処理装置で実行されるタスクとして、前記プリンタ部リセットコマンドを受信した場合に、前記プリンタ部がリセット処理中であることを示すリセット中識別情報をセットする、第３タスクを備えるようにしてもよい。これにより、このリセット中識別情報をチェックすることにより、各タスクがその時点でプリンタ部がリセット処理中であることを識別できるようになる。
【００１３】
また、前記第２タスクは、最も上位のメインループ処理と、このメインループ処理から階層的に派生する下位のループ処理とを有しており、前記下位のループ処理は、前記リセット中識別情報がセットされている場合には、その処理を抜けて上位のループ処理に戻るよう構成してもよい。これにより、プリンタ部がリセット処理中である場合には、第２タスクに含まれている下位のループ処理は、順次、その処理を抜けて上位のループ処理に移行し、やがて、最も上位のメインループ処理に戻ることができる。
【００１４】
さらに、前記第２タスクでは、その時点のモードがキャラクタデータを印刷するキャラクタモードである場合には、前記ダミーデータが所定回数以上連続したかどうかを判断する連続回数判断処理を行い、その時点のモードがグラフィックデータを印刷するグラフィックモードである場合には、この連続回数判断処理を行わないようにしてもよい。これにより、ダミーデータと同じ印刷データが出現しやすいキャラクタモードにおけるスループットの低下を抑止することができる。
【００１５】
一方、本発明に係るマルチファンクションプリンタは、受信した印刷データを展開するデータ展開処理手段であって、前記リセット手段が前記プリンタ部リセットコマンドを受信した場合には、印刷データの展開処理を途中終了する、データ展開処理手段と、前記データ展開処理手段により起動される、下位の処理手段であって、起動された後に所定時間経過した場合は、その処理が終了していない場合であっても、前記データ展開処理手段に戻る、下位の処理手段と、をさらに備えるようにしてもよい。このようにすれば、上述したようなダミーデータの書き込みを行わずとも、プリンタ部のみをリセットすることができるようになる。
【００１６】
さらに、本発明に係るマルチファンクションプリンタは、前記データ展開処理手段の印刷データの展開処理が途中終了した場合に、プリントエンジンを初期状態に戻すプリントエンジン初期化手段を、備えるようにしてもよい。またこの場合、前記プリントエンジン初期化手段がプリントエンジンを初期状態に戻した後に、前記データ展開手段の設定状態を初期状態に戻すようにしてもよい。
【００１７】
なお、本発明は上述したようなマルチファンクションプリンタを実現するための制御方法としてとらえることもでき、また、そのためのプログラム及びそのプログラムが記録された記録媒体としてとらえることもできる。
【００１８】
【発明の実施の形態】
〔第１実施形態〕
本発明は、プリンタ部だけをリセットするプリンタ部リセットコマンドを受信したことを、必要なタスクに通知するとともに、印刷処理に関する各種タスクがその時点で行っている処理から抜け出せるように、印刷データを格納する入力バッファに、印刷データの解釈上は意味のないダミーデータを連続して書き込むようにしたものである。そして、これにより、印刷処理に関する各種の複雑なタスクが、その時点で行っている処理から自ら抜け出して、プリンタ部のみをリセットすることができるようにしたものである。以下、本発明に係る一実施形態を詳細に説明する。
【００１９】
まず、図１に基づいて、本実施形態に係るマルチファンクションプリンタ１０の内部構成を説明する。この図１は、スキャナ部とプリンタ部とが一体化されたマルチファンクションプリンタ１０の内部構成を示すブロック図である。
【００２０】
図１に示すように、マルチファンクションプリンタ１０は、ＲＡＭ（Random Access Memory）１２と、ＲＯＭ（Read Only Memory）１４と、ＣＰＵ（Central Processing Unit：中央処理装置）１６と、スキャナスキャナＡＳＩＣ（Application Specific IC）１８と、プリンタＡＳＩＣ２０とを備えており、これらは内部バスを介して、相互に接続されている。このことから分かるように、本実施形態に係るマルチファンクションプリンタ１０においては、ＣＰＵは１つだけ設けられている。
【００２１】
スキャナＡＳＩＣ１８には、実際のスキャン動作を行うスキャナ機構部２２が接続されている。また、プリンタＡＳＩＣ２０には、実際に印刷動作を行うプリントエンジン２４が接続されている。
【００２２】
さらに、マルチファンクションプリンタ１０は、ＵＳＢケーブルを介してコンピュータに接続されるＵＳＢ（Universal Serial Bus）ポート２６を備えている。このＵＳＢポート２６はＵＳＢハブ２８に接続されており、ＵＳＢハブ２８はスキャナＡＳＩＣ１８とプリンタＡＳＩＣ２０とに接続されている。したがって、コンピュータから送信されたデータやコマンドは、ＵＳＢハブ２８を介して、スキャナＡＳＩＣ１８とプリンタＡＳＩＣ２０の双方に入力される。
【００２３】
例えば、コンピュータからマルチファンクションプリンタ１０に送信された印刷データは、プリンタＡＳＩＣ２０で受信され、ＲＡＭ１２に形成された入力バッファに格納される。入力バッファに格納された印刷データは、順次、イメージデータに展開されて、プリンタＡＳＩＣ２０を介して、プリントエンジン２４で印刷される。本実施形態に係るプリントエンジン２４は、カラーのインクジェットヘッドを有しており、このヘッドをキャリッジに搭載して主走査方向に交互に移動することにより、カラー印刷が可能になっている。
【００２４】
一方、スキャナ機構部１０は、光学的に原稿を読み取るラインイメージセンサを有している。このラインイメージセンサは、キャリッジに搭載されており、キャリッジを原稿の一端側から他端側まで移動させることにより、原稿全体を読み取ることが可能である。この読み取り動作は、スキャナＡＳＩＣ１２が制御しており、読み取ったスキャンデータは、ＲＡＭ１２に形成されたスキャナバッファに格納される。
【００２５】
本実施形態に係るマルチファンクションプリンタ１０においては、スキャナ部を構成するスキャナ機構部２２におけるスキャン動作と、プリンタ部を構成するプリントエンジン２４における印刷動作とが、並行して行えるようになっている。例えば、スキャナ機構部２２で原稿のスキャン動作をしながら、プリントエンジン２４でコンピュータから送信されてきている印刷データの印刷を、順次、行うことが可能である。また、本実施形態に係るマルチファンクションプリンタ１０においては、スキャナ部とプリンタ部とが並行して動作している状態で、プリンタ部のみをリセット（印刷ジョブのキャンセル）することが可能である。
【００２６】
このプリンタ部のみをリセットする際の全体的な処理の流れを、図２に基づいて説明する。この図２は、プリンタ部をリセットし、スキャナ部の動作は継続させるためのプリンタ部リセットコマンドを、コンピュータから受信した場合のマルチファンクションプリンタ１０の処理を説明するタイミングチャートである。
【００２７】
図２に示すように、本実施形態に係るマルチファンクションプリンタ１０は、インターフェース制御タスクＴ１０と、制御コマンド解釈タスクＴ２０と、メインタスクＴ３０と、ジョブコントロールタスクＴ４０とを、備えている。なお、これ以外のタスクも、マルチファンクションプリンタ１０は備えているが、ここでは、本実施形態に関係のあるタスクのみを示している。また、これらのタスクは、このマルチファンクションプリンタ１０の備えるリアルタイムＯＳ上で管理されており、ＣＰＵ１６で実行される。
【００２８】
まず、ユーザが印刷中のジョブをキャンセルするために、コンピュータから、プリンタ部リセットコマンドを、マルチファンクションプリンタ１０に送信する。このプリンタ部リセットコマンドは、インターフェース制御タスクＴ１０により受信される。インターフェース制御タスクＴ１０は、受信したコマンドが制御系のコマンドであるか、印刷データ等であるのかを判断し、この例では制御系のコマンドであるので、このプリンタ部リセットコマンドの解釈を要求すべく、これを制御コマンド解釈タスクＴ２０に送信する。
【００２９】
これを受信した制御コマンド解釈タスクＴ２０が、これを解釈することにより、受信したコマンドがプリンタ部リセットコマンドであることが判明する。このため、制御コマンド解釈タスクＴ２０は、インターフェース制御タスクＴ１０にリプライを依頼し、インターフェース制御タスクＴ１０はこれに基づいてリプライをコンピュータに返信する。また、制御コマンド解釈タスクＴ２０は、リセットコマンド受信メッセージを、ジョブコントロールタスクＴ４０に送信する。
【００３０】
リセットコマンド受信メッセージを受け取ったジョブコントロールタスクＴ４０は、リセット中フラグＲＳＦをセットするとともに、リセット処理移行要求を、インターフェース制御タスクＴ１０へ送信する。そして、ジョブコントロールタスクＴ４０は、それ以降の印刷、紙送り要求などのジョブを、徹底的に読み捨てる。但し、応答が必要なメッセージについては、とりあえず必要な返信のみ行っておく。
【００３１】
このリセット処理移行要求を受け取ったインターフェース制御タスクＴ１０は、印刷データを格納しておく入力バッファの全領域に１６進数の「００」である０ｘ００をダミーデータとして書き込み、受信データ管理タスクに、データが到着した旨を通知する。
【００３２】
プリンタ部が印刷中の場合、メインタスクＴ３０では、様々なループ処理を行っているが、印刷データの先頭にはデータ量を示す所定のコマンドが付加されており、受信データ管理タスクはコマンドに付加されたデータ量を受信するまでは待機しつづける。この待機状態を終了させるためには、コマンドに付加されたデータ量を少なくとも受信する必要がある。そこで、本実施形態においては、コマンドに付加されたデータ量を少なくとも満たすデータ量の０ｘ００、つまり、コマンドとして通常存在しない無意味なＮＵＬＬデータを書き込むことにより、この待機状態を終了させる。これにより、他のコマンドと混同することなく、リセット処理が可能になる。
【００３３】
メインタスクで取得すべき印刷データが、入力バッファになくなった場合は、受信データ管理タスク（図示省略）を経由して、印刷データ獲得要求がインターフェース制御タスクＴ１０に発行される。この場合も、インターフェース制御タスクＴ１０は、０ｘ００のダミーの印刷データを入力バッファに書き込み、受信データ管理タスクに、データが到着した旨を通知する。
【００３４】
このように、メインタスクＴ３０は、ＮＵＬＬデータのみを取得することになるので、いずれ下位のループ処理を抜けて、メインタスクＴ３０の最上位のループ処理に戻ってくることができる。最上位のループ処理に戻った場合には、メインタスクＴ３０は、ジョブコントロールタスクＴ４０に対して、リセット処理終了確認通知を送信し、メインタスクＴ３０が最上位のループ処理に戻ったことを通知する。
【００３５】
リセット処理終了確認通知を受け取ったジョブコントロールタスクＴ４０は、リセット中フラグＲＳＦをリセットし、印刷や紙送り要求などのジョブの読み捨てを中止する。また、リセット処理解除要求を、インターフェース制御タスクＴ１０へ送信する。これにより、インターフェース制御タスクＴ１０は、リセット処理モードから、通常の印刷データを受信するモードに戻る。一方、ジョブコントロールタスクＴ４０は、メインタスクＴ３０へ、リセット処理終了確認通知に対する返信を行う。この返信がメインタスクＴ３０に戻ってきた場合、メインタスクＴ３０は、必要な設定状態を初期状態に戻す。これにより、プリンタ部のみのリセットが行われたことになる。
【００３６】
以上、マルチファンクションプリンタ１０がプリンタ部リセットコマンドを受信した場合の処理を概略的に説明したが、次に、上述した各タスク毎にその詳細な処理内容を説明する。
【００３７】
図３は、上述したインターフェース制御タスクＴ１０で行われるインターフェース制御処理を説明するフローチャートである。本実施形態においては、このインターフェース制御処理は、ＲＯＭ１４に格納されているインターフェース制御プログラムを、リアルタイムＯＳ上でＣＰＵ１６が実行することにより実現される。
【００３８】
図３に示すように、インターフェース制御タスクＴ１０は、まず、何からのメッセージを受信したかどうかを判断する（ステップＳ１０）。何らメッセージを受信していない場合（ステップＳ１０：Ｎｏ）には、このステップＳ１０の処理を繰り返して待機する。
【００３９】
何らかのメッセージを受信した場合（ステップＳ１０：Ｙｅｓ）には、そのメッセージが、ジョブコントロールタスクＴ４０から送信されたリセット処理移行要求であるかどうかを判断する（ステップＳ１１）。受信したメッセージがリセット処理移行要求である場合（ステップＳ１１：Ｙｅｓ）には、インターフェース制御タスクＴ１０は、入力バッファの全領域に０ｘ００を書き込む（ステップＳ１２）。
【００４０】
次に、インターフェース制御タスクＴ１０は、メインタスクＴ３０に、入力バッファに受信データを格納した旨を通知する（ステップＳ１３）。上述したように、この通知は、受信データ管理タスクを介して、メインタスクＴ３０に送信される。
【００４１】
次に、インターフェース制御タスクＴ１０は、リセット処理中フラグＷＳＦをセットする（ステップＳ１４）。このリセット処理中フラグＷＳＦは、インターフェース制御タスクＴ１０が、現在、プリンタ部がリセット処理モードにあるか、通常の印刷データを受信するモードにあるのかを、区別するためのフラグである。そして、インターフェース制御タスクＴ１０は、上述したステップＳ１０に戻る。
【００４２】
一方、上述したステップＳ１１で、受信したメッセージがリセット処理移行要求でないと判断した場合（ステップＳ１１：Ｎｏ）には、受信したメッセージが、メインタスクＴ３０からの印刷データの要求であるかどうかを判断する（ステップＳ１５）。上述したように、このメッセージは、メインタスクＴ３０から、受信データ管理タスクを介して、受信される。
【００４３】
受信したメッセージが印刷データの要求である場合（ステップＳ１５：Ｙｅｓ）には、インターフェース制御タスクＴ１０は、リセット処理中フラグＷＳＦをチェックして、現在、リセット処理中であるかどうかを判断する（ステップＳ１６）。リセット処理中でない場合（ステップＳ１６：Ｎｏ）には、メインタスクＴ３０が印刷データの受信待ちである旨をセットして（ステップＳ１７）、上述したステップＳ１０に戻る。
【００４４】
一方、ステップＳ１６で、現在、リセット処理中であると判断した場合（ステップＳ１６：Ｙｅｓ）には、入力バッファに０ｘ００を書き込むべく、ステップＳ１２からの処理を実行する。
【００４５】
これに対して、上述したステップＳ１５で、受信したメッセージが、メインタスクＴ３０からの印刷データの要求でないと判断した場合（ステップＳ１５：Ｎｏ）には、受信したメッセージが、ジョブコントロールタスクＴ４０からのリセット処理解除要求であるかどうかを判断する（ステップＳ１８）。受信したメッセージが、リセット処理解除要求である場合（ステップＳ１８：Ｙｅｓ）には、インターフェース制御タスクＴ１０は、入力バッファへの０ｘ００書き込みを停止する（ステップＳ１９）。続いて、リセット処理中フラグＷＳＦをリセットして（ステップＳ２０）、上述したステップＳ１０に戻る。
【００４６】
一方、上述したステップＳ１８で、受信したメッセージがリセット処理解除要求でないと判断した場合（ステップＳ１８：Ｎｏ）には、該当するメッセージについて必要な処理を実行する（ステップＳ２１）。例えば、上述したように、コンピュータからのプリンタ部リセットコマンドなどの制御系のコマンドを受信した場合には、これを制御コマンド解釈タスクＴ２０へ転送する。また、例えば、制御コマンド解釈タスクＴ２０からプリンタ部リセットコマンドに対するリプライの要求を受信した場合には、そのリプライをコンピュータへ転送する。そして、上述したステップＳ１０に戻る。
【００４７】
次に、図４に基づいて、制御コマンド解釈タスクＴ２０について説明する。図４は、上述した制御コマンド解釈タスクＴ２０で行われる制御コマンド解釈処理を説明するフローチャートである。本実施形態においては、この制御コマンド解釈処理は、ＲＯＭ１４に格納されている制御コマンド解釈プログラムを、リアルタイムＯＳ上でＣＰＵ１６が実行することにより実現される。
【００４８】
図４に示すように、制御コマンド解釈タスクＴ２０は、まず、何からのメッセージを受信したかどうかを判断する（ステップＳ３０）。何らメッセージを受信していない場合（ステップＳ３０：Ｎｏ）には、このステップＳ３０の処理を繰り返して待機する。
【００４９】
何らかのメッセージを受信した場合（ステップＳ３０：Ｙｅｓ）には、そのメッセージが、インターフェース制御タスクＴ１０を介して、コンピュータから送信されたプリンタ部リセットコマンドであるかどうかを判断する（ステップＳ３１）。受信したメッセージがプリンタ部リセットコマンドである場合（ステップＳ３１：Ｙｅｓ）には、コンピュータに対する応答データ列を作成し（ステップＳ３２）、これをインターフェース制御タスクＴ１０に送信して、リプライを依頼する（ステップＳ３３）。
【００５０】
次に、制御コマンド解釈タスクＴ２０は、ジョブコントロールタスクＴ４０へ、リセットコマンド受信をメッセージとして送信する（ステップＳ３４）。そして、上述したステップＳ３０に戻る。
【００５１】
一方、上述したステップＳ３１で、受信したメッセージがプリンタ部リセットコマンドでないと判断した場合（ステップＳ３１：Ｎｏ）には、該当するメッセージについて必要な解釈を行い、必要な処理を実行する（ステップＳ３５）。例えば、紙送り要求のメッセージである場合は、その解釈を行い、必要なメッセージをジョブコントロールタスクＴ４０等へ送信する。そして、上述したステップＳ３０の処理に戻る。
【００５２】
次に、図５及び図６に基づいて、メインタスクＴ３０について説明する。図５は、上述したメインタスクＴ３０で行われるデータ展開制御処理を説明するフローチャートであり、本実施形態におけるメインループ処理を示している。図６は、このデータ展開制御処理から派生する下位のループ処理であるグラフィックマネージャ処理を説明するフローチャートである。本実施形態におけるメインタスクＴ３０には、グラフィックマネージャ処理以外にも、数多くの下位のループ処理が存在するが、ここでは、グラフィックマネージャ処理を代表例として説明する。また、下位のループ処理から派生するさらに下位のループ処理も存在する。つまり、本実施形態においては、メインタスクＴ３０のループ処理は階層的に構成されている。
【００５３】
なお、図５のデータ展開制御処理はキャラクタ系の印刷データを処理するモードであり、図６のグラフィックマネージャ処理はグラフィック系の印刷データを処理するモードである。また、本実施形態においては、これらのデータ展開制御処理及びグラフィックマネージャ処理は、ＲＯＭ１４に格納されているデータ展開制御プログラム及びグラフィックマネージャプログラムを、リアルタイムＯＳ上でＣＰＵ１６が実行することにより実現される。
【００５４】
図５に示すように、メインタスクＴ３０は、まず、入力バッファにデータを受信したかどうかを判断する（ステップＳ４０）。データを受信していない場合（ステップＳ４０：Ｎｏ）には、このステップＳ４０の処理を繰り返して待機する。
【００５５】
入力バッファにデータを受信した場合（ステップＳ４０：Ｙｅｓ）には、メインタスクＴ３０は、入力バッファからデータを１バイト読み込む（ステップＳ４１）。次に、この読み込んだデータが、印刷モード移行要求であるかどうかを判断する（ステップＳ４２）。本実施形態に係るマルチファンクションプリンタ１０は、モードとして、キャラクタ系の印刷データを印刷するキャラクタモードと、グラフィック系の印刷データを印刷するグラフィックモードとを備えており、両者の間は印刷モード移行要求を受信することにより、切り替わるようになっている。
【００５６】
データが印刷モード移行要求でない場合（ステップＳ４２：Ｎｏ）には、取得したデータが０ｘ００であるかどうかを判断する（ステップＳ４３）。取得したデータが０ｘ００でない場合（ステップＳ４３：Ｎｏ）には、通常の印刷であると考えられるので、キャラクターモードの通常の処理を実行する（ステップＳ４４）。そして、上述したステップＳ４０の処理に戻る。
【００５７】
一方、取得したデータが０ｘ００である場合（ステップＳ４３：Ｙｅｓ）には、この０ｘ００が所定回数以上（例えば、１０２４回＝１ＫＢ）、連続したかどうかを判断する（ステップＳ４５）。ここで、所定回数以上、０ｘ００が連続したかどうかのチェックをするのは、キャラクタモードで１バイト毎にリセット中フラグＲＳＦの確認をすると、通常のキャラクタ印刷の際のスループットが低下してしまうので、これを回避するためである。換言すれば、キャラクタ印刷の場合、印刷データとして０ｘ００を受信することも少なからずあり得るからである。但し、多少のスループットの低下を許容して、このような判断をしないようにしてもよい。
【００５８】
したがって、０ｘ００が所定回数以上連続していない場合（ステップＳ４５：Ｎｏ）には、上述した通常のキャラクタモードの処理を行う（ステップＳ４４）。一方、０ｘ００が所定回数以上連続した場合（ステップＳ４５：Ｙｅｓ）には、リセット中フラグＲＳＦがセットされているかどうかを判断する（ステップＳ４６）。このリセット中フラグＲＳＦは、ジョブコントロールタスクＴ４０が管理するフラグであるので、このステップＳ４６の処理は、同一タスク内のフラグを確認する処理と比べて、処理時間が長くかかる。
【００５９】
リセット中フラグＲＳＦがセットされていない場合（ステップＳ４６：Ｎｏ）には、上述したステップＳ４０の処理に戻る。一方、リセット中フラグＲＳＦがセットされている場合（ステップＳ４６：Ｙｅｓ）には、ジョブコントロールタスクＴ４０に、リセット処理終了確認通知を送信する（ステップＳ４７）。なぜなら、本実施形態においては、このデータ展開制御処理が、最も上位のループ処理だからである。
【００６０】
次に、メインタスクＴ３０は、ジョブコントロールタスクＴ４０からのリセット処理終了確認通知に対する返信を待つ（ステップＳ４８）。返信があった場合には、このメインタスクＴ３０内の各種の設定状態を、初期状態に設定する（ステップＳ４９）。これにより、メインタスクＴ３０のリセットが完了し、上述したステップＳ４０の処理に戻ることになる。
【００６１】
次に、図６に示すグラフィックマネージャ処理について説明する。このグラフィックマネージャ処理は、図５に示すステップＳ５０のグラフィックモードに移行した場合のループである。したがって、このグラフィックマネージャ処理が終了すると、図５のステップＳ５１の処理に戻ることになる。
【００６２】
図６に示すように、メインタスクＴ３０のグラフィックマネージャ処理では、まず、入力バッファに受信データがあるかどうかを判断する（ステップＳ６０）。受信データがない場合（ステップＳ６０：Ｎｏ）には、このステップＳ６０の処理を繰り返して待機する。
【００６３】
受信データがある場合（ステップＳ６０：Ｙｅｓ）には、入力バッファから１バイトのデータを読み込む（ステップＳ６１）。次に、メインタスクＴ３０は、この取得したデータが、０ｘ００であるかどうかを判断する（ステップＳ６２）。取得したデータが、０ｘ００でない場合（ステップＳ６２：Ｎｏ）には、通常のグラフィックモードの処理を行う（ステップＳ６３）。そして、上述したステップＳ６０に戻る。
【００６４】
一方、ステップＳ６２で、取得したデータが０ｘ００である場合（ステップＳ６２：Ｙｅｓ）には、ジョブコントロールタスクＴ４０の管理するリセット中フラグＲＳＦが、セットされているかどうかを判断する（ステップＳ６４）。リセット中フラグＲＳＦがセットされていない場合（ステップＳ６４：Ｎｏ）には、上述したステップＳ６０に戻る。
【００６５】
一方、リセット中フラグＲＳＦがセットされている場合（ステップＳ６４：Ｙｅｓ）には、グラフィックマネージャ処理から、図５のデータ展開制御処理に戻る（ステップＳ６５）。
【００６６】
なお、このグラフィックマネージャ処理では、０ｘ００が所定回数以上連続したかどうかの判断はしていない。これは、グラフィックモードで印刷データとして０ｘ００を受信することは、極めて希であり、０ｘ００を検出するごとにリセット中フラグＲＳＦを確認しに行っても、特にスループットが低下するとは考えられないからである。但し、このような判断をするようにしてもよい。
【００６７】
また、本実施形態においては、データ展開制御処理（メインループ処理）の下位のループ処理は、グラフィックマネージャ処理以下にも、数多く存在するが、これらの下位のループ処理にも、ステップＳ６２及びステップＳ６４に相当する処理が、埋め込まれている。また、ループ処理のレベルがさらに深い階層構造になっている場合もある。この場合でも、各ループ処理にステップＳ６２及びステップＳ６４に相当する処理が埋め込まれている。但し、この場合、ステップＳ６５で戻るべきループ処理は、１つだけ上位のループ処理である。したがって、取得したデータが０ｘ００であり、且つ、リセット中フラグＲＳＦがセットされている場合には、各ループ処理は、リセット処理中であると認識して、順次、上位のループ処理に戻ってきて、最終的に、最も上位のループ処理である図５のデータ展開制御処理に辿り着くことになる。
【００６８】
次に、図７及び図８に基づいて、ジョブコントロールタスクＴ４０について説明する。図７は、上述したジョブコントロールタスクＴ４０で行われるジョブコントロール処理を説明するフローチャートであり、図８は、ジョブコントロール処理の下位のループ処理であるネゴシエーション処理を説明するフローチャートである。
【００６９】
本実施形態においては、これらのジョブコントロール処理及びネゴシエーション処理は、ＲＯＭ１４に格納されているジョブコントロール処理プログラム及びネゴシエーションプログラムを、リアルタイムＯＳ上でＣＰＵ１６が実行することにより実現される。
【００７０】
図７に示すように、ジョブコントロールタスクＴ４０は、まず、何からのメッセージを受信したかどうかを判断する（ステップＳ７０）。何らメッセージを受信していない場合（ステップＳ７０：Ｎｏ）には、このステップＳ７０の処理を繰り返して待機する。
【００７１】
何らかのメッセージを受信した場合（ステップＳ７０：Ｙｅｓ）には、リセット中フラグＲＳＦがセットされているかどうかを判断する（ステップＳ７１）。リセット中フラグＲＳＦがセットされていない場合（ステップＳ７１：Ｎｏ）には、受信したメッセージが、制御コマンド解釈タスクＴ２０から送信されたリセットコマンド受信のメッセージであるかどうかを判断する（ステップＳ７２）。
【００７２】
受信したメッセージがリセットコマンド受信のメッセージでない場合（ステップＳ７２：Ｎｏ）には、そのメッセージについて必要なジョブを実行し、そのコントロールを行う（ステップＳ７３）。そして、上述したステップＳ７０に戻る。
【００７３】
一方、上述したステップＳ７２で、受信したメッセージがリセットコマンド受信のメッセージである場合（ステップＳ７２：Ｙｅｓ）には、ジョブコントロールタスクＴ４０は、リセット中フラグＲＳＦをセットする（ステップＳ７４）。続いて、ジョブコントロールタスクＴ４０は、インターフェース制御タスクＴ１０へ、リセット処理移行要求を送信する（ステップＳ７５）。そして、上述したステップＳ７０に戻る。
【００７４】
一方、上述したステップＳ７１の処理で、リセット中フラグＲＳＦがセットされていると判断した場合（ステップＳ７１：Ｙｅｓ）には、受信したメッセージが、何らかの応答を必要としているメッセージであるかどうかを判断する（ステップＳ７６）。応答が必要なメッセージでない場合（ステップＳ７６：Ｎｏ）には、そのメッセージを読み捨てる（ステップＳ７７）。メッセージを読み捨てることにより、ジョブが読み捨てられたことになる。そして、上述したステップＳ７０の処理に戻る。
【００７５】
一方、上述したステップＳ７６で、受信したメッセージが応答の必要なメッセージである場合（ステップＳ７６：Ｙｅｓ）には、ジョブコントロールタスクＴ４０は、そのメッセージが、メインタスクＴ３０からのリセット処理終了確認通知であるかどうかを判断する（ステップＳ７８）。受信したメッセージが、リセット処理終了確認通知でない場合（ステップＳ７８：Ｎｏ）には、メインタスクＴ３０がまだ最上位のループ処理に戻ってきていないことになるので、とりあえず、受信したメッセージに対して必要な返事を送信しておく（ステップＳ７９）。これは、メインタスクＴ３０の下位のループ処理で、ジョブコントロールタスクＴ４０からの返信待ちになっているものがある可能性があるので、このループ処理を終了させて上位のループ処理に戻すために、必要な返事のみは返信する必要があるからである。但し、ジョブコントロールタスクＴ４０では、そのメッセージの内容は実行せずに、読み捨てる。そして、上述したステップＳ７０の処理に戻る。
【００７６】
一方、上述したステップＳ７８で、受信したメッセージが、メインタスクＴ３０からのリセット処理終了確認通知である場合（ステップＳ７８：Ｙｅｓ）には、メインタスクＴ３０が最上位のループに戻ってきたことになるので、リセット中フラグＲＳＦをリセットする（ステップＳ８０）。続いて、ネゴシエーション処理を行う（ステップＳ８１）。なお、このネゴシエーション処理の詳しい内容は後述する、
次に、ジョブコントロールタスクＴ４０は、インターフェース制御タスクＴ１０に、リセット処理解除要求を送信する（ステップＳ８２）。続いて、ジョブコントロールタスクＴ４０は、メインタスクＴ３０に、リセット処理終了確認通知の返事を送信する（ステップＳ８３）。そして、上述したステップＳ７０に戻る。
【００７７】
次に、図８に基づいて、上述した図７のステップＳ８１のネゴシエーション処理について詳しく説明する。
【００７８】
図８に示すように、まず、ネゴシエーション処理では、プリントエンジン２４が動作中であるかどうかを判断する（ステップＳ９０）。プリントエンジン２４が動作中である場合（ステップＳ９０：Ｙｅｓ）には、このステップＳ９０の処理を繰り返して、待機する。
【００７９】
プリントエンジン２４が動作中でない場合（ステップＳ９０：Ｎｏ）には、ジョブコントロールタスクＴ４０に残っているタスクが存在するかどうかを判断する（ステップＳ９１）。ジョブコントロールタスクＴ４０に残っているタスクがない場合（ステップＳ９１：Ｎｏ）には、このネゴシエーション処理を終了する。
【００８０】
一方、ジョブコントロールタスクＴ４０に残っているタスクが存在する場合（ステップＳ９１：Ｙｅｓ）には、そのジョブを捨てて（ステップＳ９２）、メモリも解放する（ステップＳ９３）。そして、このネゴシエーション処理を終了する。
【００８１】
以上のように、本実施形態に係るマルチファンクションプリンタ１０によれば、スキャナ部とプリンタ部とが並行して動作している場合でも、プリンタ部のみをリセットすることができるようにしたので、ユーザの利便性が向上する。すなわち、スキャナ部とプリンタ部とが並行して動作している場合に、プリンタ部をリセットしようとして、スキャナ部のスキャン動作までもが停止してしまう事態を回避することができる。
【００８２】
具体的には、プリンタ部リセットコマンドを受信した場合には、インターフェース制御タスクＴ１０が入力バッファにＮＵＬＬデータを印刷データとして強制的に書き込むようにし、ジョブコントロールタスクＴ４０がリセット処理中であることを示すリセット中フラグＲＳＦをセットすることとした。このため、入力バッファから印刷データを読み出して展開処理を行っているメインタスクＴ３０は、いずれその処理を終えることができる。すなわち、メインタスクＴ３０が階層的なループ処理で構成されている場合、ＮＵＬＬデータに基づいて順次処理を行い、リセット中フラグＲＳＦがセットされていることを検出すると、下位のループ処理から順次抜け出して上位のループ処理に移行するので、最終的には、最上位のメインループ処理に自律的に戻ってくることができる。
【００８３】
このため、複雑なループ処理で構成されている既存のメインタスクＴ３０の処理内容を大きく変更することなく、本実施形態に係るマルチファンクションプリンタ１０を実現することができる。
【００８４】
〔第２実施形態〕
本発明の第２実施形態は、上述した第１実施形態を変形し、メインタスクＴ３０により起動される下位のループ処理をタイマー設定して起動し、このタイマーに基づいて、下位のループ処理を起動してから一定時間経過した場合には、その下位のループ処理を途中終了して、メインタスクＴ３０のメイン処理に戻るようにしたものである。そしてこれにより、インターフェース処理タスクＴ１０がＮＵＬＬ書き込みを行わなくとも、マルチファンクションプリンタ１０のプリンタ部のみをリセットすることができるようにしたものである。より詳しくを、以下に説明する。
【００８５】
本実施形態に係るマルチファンクションプリンタ１０の内部構成は、上述した図１と同様である。但し、コンピュータからプリンタ部リセットコマンドを受信した場合の処理が異なる。
【００８６】
図９は、プリンタ部リセットコマンドを受信した場合のマルチファンクションプリンタ１０の処理を説明するタイミングチャートである。図２と比べると、図９にはエンジン制御タスクＴ５０が追加されている。但し、このエンジン制御タスクＴ５０は、上述した第１実施形態のマルチファンクションプリンタ１０でも備えているが、図２では省略しただけである。
【００８７】
図９に示すように、コンピュータから送信されたプリンタ部リセットコマンドは、インターフェース制御タスクＴ１０により受信される。インターフェース制御タスクＴ１０は、受信したコマンドが制御系のコマンドであるか、印刷データ等であるのかを判断し、この例では制御系のコマンドであるので、このプリンタ部リセットコマンドの解釈を要求すべく、これを制御コマンド解釈タスクＴ２０に送信する。
【００８８】
これを受信した制御コマンド解釈タスクＴ２０が、これを解釈することにより、受信したコマンドがプリンタ部リセットコマンドであることが判明する。このため、制御コマンド解釈タスクＴ２０は、インターフェース制御タスクＴ１０にリプライを依頼し、インターフェース制御タスクＴ１０はこれに基づいてリプライをコンピュータに返信する。また、制御コマンド解釈タスクＴ２０は、リセットコマンド受信メッセージを、ジョブコントロールタスクＴ４０に送信する。
【００８９】
リセットコマンド受信メッセージを受け取ったジョブコントロールタスクＴ４０は、リセット中フラグＲＳＦをセットするとともに、リセット処理実行要求を、メインタスクＴ３０へ送信する。そして、ジョブコントロールタスクＴ４０は、それ以降の印刷、紙送り要求などのジョブを、徹底的に読み捨てる。但し、応答が必要なメッセージについては、とりあえず必要な返信のみ行っておく。
【００９０】
このリセット処理実行要求を受け取ったメインタスクＴ３０は、データ展開処理のためにＲＡＭ１２に確保していたメモリ領域を解放する。そして、メインタスクＴ３０は、リセット処理終了通知をジョブコントロールタスクＴ４０に送信する。なお、本実施形態においては、メインタスクＴ３０から起動される下位のループ処理が実行されていた場合には、下位の処理はタイマーにより所定時間経過後にメインタスクＴ３０のメイン処理に戻るように設定されている。
【００９１】
リセット処理終了通知を受け取ったジョブコントロールタスクＴ４０は、プリントエンジン２４の機械的な状態を初期設定に戻すために、エンジン制御タスクＴ５０に機械的状態確認メッセージを送信する。この機械的状態確認メッセージを受信したエンジン制御タスクＴ５０は、プリントエンジン２４の機械的な状態を初期化して、初期状態に戻す。そして、エンジン制御タスクＴ５０は、ジョブコントロールタスクＴ４０に、機械的状態初期化終了メッセージを送信する。
【００９２】
この機械的状態確認メッセージを受信したジョブコントロールタスクＴ４０は、リセット中フラグＲＳＦをリセットし、リセット処理終了通知の返信を、メインタスクＴ３０に送信する。これを受けて、メインタスクＴ３０では、このメインタスクＴ３０内における必要な設定状態を初期状態に戻す。これにより、プリンタ部のみのリセットが行われたことになる。
【００９３】
また、リセット中フラグＲＳＦがセットされている間（つまり、図９の例では、リセット中フラグＲＳＦが「１」の間）は、インターフェース制御タスクＴ１０は、コンピュータから印刷データを受信した場合でも、その印刷データを送信したコンピュータに対して、データ受信不可のメッセージを返信する。つまり、リセット処理中には、印刷データを受け付けないようにする。
【００９４】
以上、本実施形態に係るマルチファンクションプリンタ１０がプリンタ部リセットコマンドを受信した場合の処理を概略的に説明したが、次に、上述した各タスク毎にその詳細な処理内容を説明する。
【００９５】
図１０は、上述したインターフェース制御タスクＴ１０で行われるインターフェース制御処理を説明するフローチャートである。本実施形態においても、このインターフェース制御処理は、ＲＯＭ１４に格納されているインターフェース制御プログラムを、リアルタイムＯＳ上でＣＰＵ１６が実行することにより実現される。
【００９６】
図１０に示すように、インターフェース制御タスクＴ１０は、まず、何からのメッセージを受信したかどうかを判断する（ステップＳ１１０）。何らメッセージを受信していない場合（ステップＳ１１０：Ｎｏ）には、このステップＳ１１０の処理を繰り返して待機する。
【００９７】
何らかのメッセージを受信した場合（ステップＳ１１０：Ｙｅｓ）には、現在、リセット処理中であるかどうかを判断する（ステップＳ１１１）。具体的には、リセット中フラグＲＳＦがセットされているかどうかに基づいて、現在リセット処理中であるかどうかを判断する。リセット処理中である場合（ステップＳ１１１：Ｙｅｓ）には、そのメッセージを処理することはできないので、そのメッセージを送信したコンピュータに、データ受信不可のメッセージを送信する（ステップＳ１１２）。そして、上述したステップＳ１１０に戻る。
【００９８】
一方、ステップＳ１１１において、リセット処理中でないと判断した場合（ステップＳ１１１：Ｎｏ）には、該当するメッセージについて必要な処理を実行する（ステップＳ１１３）。例えば、上述したように、コンピュータからのプリンタ部リセットコマンドなどの制御系のコマンドを受信した場合には、これを制御コマンド解釈タスクＴ２０へ転送する。また、例えば、制御コマンド解釈タスクＴ２０からプリンタ部リセットコマンドに対するリプライの要求を受信した場合には、そのリプライをコンピュータへ転送する。そして、上述したステップＳ１１０に戻る。
【００９９】
次に、制御コマンド解釈タスクＴ２０についてであるが、本実施形態に係る制御コマンド解釈タスクＴ２０の処理は、上述した第１実施形態における図４と同様の処理であるので、ここでは説明を省略する。
【０１００】
次に、図１１及び図１２に基づいて、メインタスクＴ３０について説明する。図１１は、上述したメインタスクＴ３０で行われるメインタスク処理を説明するフローチャートであり、本実施形態におけるメインループ処理を示している。図１２は、このメインタスク処理から派生する下位のループ処理であるデータ展開処理を説明するフローチャートである。本実施形態におけるメインタスクＴ３０には、このデータ展開処理以外にも、数多くの下位のループ処理が存在するが、ここでは、データ展開処理を代表例として説明する。また、下位のループ処理から派生するさらに下位のループ処理も存在する。つまり、本実施形態においては、メインタスクＴ３０のループ処理は階層的に構成されている。
【０１０１】
なお、本実施形態においても、これらのメインタスク処理及びデータ展開処理は、ＲＯＭ１４に格納されているメインタスクプログラム及びデータ展開プログラムを、リアルタイムＯＳ上でＣＰＵ１６が実行することにより実現される。
【０１０２】
図１１に示すように、メインタスクＴ３０は、まず、何らかのメッセージを受信したかどうかを判断する（ステップＳ１２０）。何らメッセージを受信していない場合（ステップＳ１２０：Ｎｏ）には、このステップＳ１２０の処理を繰り返して待機する。
【０１０３】
一方、何らかのメッセージを受信した場合（ステップＳ１２０：Ｙｅｓ）には、メインタスクＴ３０は、そのメッセージが、ジョブコントロールタスクＴ４０から送信されたリセット処理実行要求であるかどうかを判断する（ステップＳ１２１）。受信したメッセージがリセット処理実行要求でない場合（ステップＳ１２１：Ｎｏ）には、そのメッセージが印刷データに関するデータ展開処理要求であるかどうかを判断する（ステップＳ１２２）。
【０１０４】
受信したメッセージがデータ展開処理要求である場合（ステップＳ１２２：Ｙｅｓ）には、その印刷データに関して、データ展開処理を行う（ステップＳ１２３）。なお、このデータ展開処理は、メインの処理から起動される下位のループ処理の一例であるが、その詳細については、後に図１２を用いて詳述する。このデータ展開処理からこのメインタスク処理に戻ってきた場合には、上述したステップＳ１２０の処理に戻る。
【０１０５】
一方、ステップＳ１２２において、受信したメッセージがデータ展開処理要求でないと判断した場合（ステップＳ１２２：Ｎｏ）には、受信したメッセージが、コマンド解析処理要求であるかどうかを判断する（ステップＳ１２４）。受信したメッセージがコマンド解析処理要求である場合（ステップＳ１２４：Ｙｅｓ）には、そのコマンドに関して、コマンド解析処理を行う（ステップＳ１２５）。このコマンド解析処理の内容の説明は省略するが、このコマンド解析処理も、本実施形態におけるメインタスク処理から起動される下位の処理である。このコマンド解析処理からこのメインタスク処理に戻ってきた場合には、上述したステップＳ１２０の処理に戻る。
【０１０６】
これに対して、上述したステップＳ１２１において、受信したメッセージが、リセット処理実行要求であると判断した場合（ステップＳ１２１：Ｙｅｓ）には、メインタスクＴ３０は、このメインタスクＴ３０がデータ展開処理のためにＲＡＭ１２に確保したメモリ領域を解放して（ステップＳ１２６）、データ展開処理を途中終了する。続いて、リセット処理終了通知を、ジョブコントロールタスクＴ４０に送信する（ステップＳ１２７）。そして、上述したステップＳ１２０の処理に戻る。
【０１０７】
一方、上述したステップＳ１２４において、受信したメッセージが、コマンド解析処理要求でないと判断した場合（ステップＳ１２４：Ｎｏ）には、受信したメッセージが、ジョブコントロールタスクＴ４０から送信されたリセット処理終了通知の返信であるかどうかを判断する（ステップＳ１２８）。図９でも説明したように、ステップＳ１２７でリセット処理終了通知をジョブコントロールタスクＴ４０に送信すると、リセットするためのプリントエンジン２４の機械的準備が整った段階で、ジョブコントロールタスクＴ４０からメインタスクＴ３０にリセット処理終了通知の返信が送信される。
【０１０８】
受信したメッセージが、リセット処理終了通知の返信である場合（ステップＳ１２８：Ｙｅｓ）には、このメインタスクＴ３０内の各種の設定状態を、初期状態に設定する（ステップＳ１２９）。一方、受信したメッセージが、リセット処理終了通知の返信でない場合（ステップＳ１２８：Ｎｏ）には、そのメッセージに対応するメインの処理を実行する（ステップＳ１３０）。これらステップＳ１２９及びステップＳ１３０の後、上述したステップＳ１２０の処理に戻る。
【０１０９】
次に、図１２に基づいて、ステップＳ１２３のデータ展開処理について詳しく説明する。このデータ展開処理は、図１２に示すステップＳ１２３のデータ展開処理に移行した場合の下位の処理である。したがって、このデータ展開処理が終了すると、図１１のステップＳ１２０の処理に戻ることになる。
【０１１０】
図１２に示すように、データ展開処理においては、まず、タイマーのセットを行う（ステップＳ１４０）。すなわち、タイマーの値をゼロにセットする。次に、受信バッファが空であるかどうかを判断する（ステップＳ１４１）。受信バッファが空でない場合（ステップＳ１４１：Ｎｏ）、すなわち、受信バッファに印刷データが格納されている場合には、その印刷データの展開を行う（ステップＳ１４２）。
【０１１１】
そして、このデータ展開処理を開始してから所定時間経過したかどうかを判断する（ステップＳ１４３）。具体的には、ステップＳ１４０で起動したタイマーの値に基づいて、このデータ展開処理が開始されてからの時間を取得する。そして、この取得した時間が、所定の時間（例えば、１秒）よりも大きいかどうかを判断する。
【０１１２】
このデータ展開処理が開始されてから所定時間経過していない場合（ステップＳ１４３：Ｎｏ）には、このデータ展開処理が最後まで終了したかどうかを判断する（ステップＳ１４４）。最後まで終了していない場合（ステップＳ１４４：Ｎｏ）には、上述したステップＳ１４１の処理に戻る。一方、最後まで終了した場合（ステップＳ１４４：Ｙｅｓ）には、展開し終えた印刷ジョブデータについての印刷要求を、プリントエンジン２４で印刷すべく、ジョブコントロールタスクＴ４０に送信する（ステップＳ１４５）。そして、このデータ展開処理を終了する。
【０１１３】
上述したステップＳ１４１で受信バッファが空であると判断した場合（ステップＳ１４１：Ｙｅｓ）、又は、上述したステップＳ１４３でデータ展開処理を開始してから所定時間経過していると判断した場合（ステップＳ１４３：Ｙｅｓ）には、メインタスクＴ３０に、データ展開処理要求を送信し（ステップＳ１４６）、このデータ展開処理を終了する。すなわち、自分から自分に処理の起動要求を送信することにより、一旦、メインタスクＴ３０のメインの処理に戻った後にも、再度、このデータ展開処理が起動されるようにする。
【０１１４】
次に、図１３に基づいて、ジョブコントロールタスクＴ４０で行われるジョブコントロール処理について説明する。本実施形態においても、このジョブコントロール処理は、ＲＯＭ１４に格納されているジョブコントロール処理プログラムを、リアルタイムＯＳ上でＣＰＵ１６が実行することにより実現される。
【０１１５】
図１３に示すように、ジョブコントロールタスクＴ４０は、まず、何からのメッセージを受信したかどうかを判断する（ステップＳ１７０）。何らメッセージを受信していない場合（ステップＳ１７０：Ｎｏ）には、このステップＳ１７０の処理を繰り返して待機する。
【０１１６】
何らかのメッセージを受信した場合（ステップＳ１７０：Ｙｅｓ）には、リセット中フラグＲＳＦがセットされているかどうかを判断する（ステップＳ１７１）。リセット中フラグＲＳＦがセットされていない場合（ステップＳ１７１：Ｎｏ）には、受信したメッセージが、制御コマンド解釈タスクＴ２０から送信されたリセットコマンド受信のメッセージであるかどうかを判断する（ステップＳ１７２）。
【０１１７】
受信したメッセージがリセットコマンド受信のメッセージでない場合（ステップＳ１７２：Ｎｏ）には、そのメッセージについて必要なジョブを実行し、そのコントロールを行う（ステップＳ１７３）。そして、上述したステップＳ１７０に戻る。
【０１１８】
一方、上述したステップＳ１７２で、受信したメッセージがリセットコマンド受信のメッセージである場合（ステップＳ１７２：Ｙｅｓ）には、ジョブコントロールタスクＴ４０は、リセット中フラグＲＳＦをセットする（ステップＳ１７４）。続いて、ジョブコントロールタスクＴ４０は、メインタスクＴ３０へ、リセット処理実行要求を送信する（ステップＳ１７５）。そして、上述したステップＳ１７０に戻る。
【０１１９】
一方、上述したステップＳ１７１の処理で、リセット中フラグＲＳＦがセットされていると判断した場合（ステップＳ１７１：Ｙｅｓ）には、受信したメッセージが、何らかの応答を必要としているメッセージであるかどうかを判断する（ステップＳ１７６）。応答が必要なメッセージでない場合（ステップＳ１７６：Ｎｏ）には、そのメッセージを読み捨てる（ステップＳ１７７）。メッセージを読み捨てることにより、ジョブが読み捨てられたことになる。そして、上述したステップＳ１７０の処理に戻る。
【０１２０】
一方、上述したステップＳ１７６で、受信したメッセージが応答の必要なメッセージである場合（ステップＳ１７６：Ｙｅｓ）には、ジョブコントロールタスクＴ４０は、そのメッセージが、メインタスクＴ３０からのリセット処理終了通知であるかどうかを判断する（ステップＳ１７８）。受信したメッセージが、リセット処理終了通知でない場合（ステップＳ１７８：Ｎｏ）には、メインタスクＴ３０がまだ最上位のループ処理に戻ってきていないことになるので、とりあえず、受信したメッセージに対して必要な返事を送信しておく（ステップＳ１７９）。これは、メインタスクＴ３０の下位のループ処理で、ジョブコントロールタスクＴ４０からの返信待ちになっているものがある可能性があるので、このループ処理を進行させるために、必要な返事のみは返信する必要があるからである。但し、ジョブコントロールタスクＴ４０では、そのメッセージの内容は実行せずに、読み捨てる。そして、上述したステップＳ１７０の処理に戻る。
【０１２１】
一方、上述したステップＳ１７８で、受信したメッセージが、メインタスクＴ３０からのリセット処理終了通知である場合（ステップＳ１７８：Ｙｅｓ）には、メインタスクＴ３０が最上位のループに戻って、確保していたメモリ領域を解放したことになるので、ジョブコントロールタスクＴ４０は、エンジン制御タスクＴ５０に、機械的状態確認メッセージを送信する（ステップＳ１８０）。この機械的状態確認メッセージを受信したエンジン制御タスクＴ５０は、プリントエンジン２４の機械的な状態を初期状態にリセットした後、機械的状態初期化終了メッセージをジョブコントロールタスクＴ４０に送信する。
【０１２２】
このため、ジョブコントロールタスクＴ４０では、ステップＳ１８０で機械的状態確認メッセージを送信した後は、この機械的状態初期化終了メッセージを受信するまで待機する（ステップＳ１８１）。この機械的状態初期化終了メッセージを受信した場合（ステップＳ１８１：Ｙｅｓ）には、ジョブコントロールタスクＴ４０は、メインタスクＴ３０に、リセット処理終了通知の返事を送信する（ステップＳ１８２）。
【０１２３】
次に、ジョブコントロールタスクＴ４０は、これでプリンタ部のリセットが終了したので、リセット中フラグＲＳＦをリセットする（ステップＳ１８３）。具体的には、リセット中フラグＲＳＦを「０」にする。そして、上述したステップＳ１７０の処理に戻る。
【０１２４】
以上のように、本実施形態に係るマルチファンクションプリンタ１０によれば、スキャナ部とプリンタ部とが並行して動作している場合でも、プリンタ部のみをリセットすることができるようにしたので、ユーザの利便性が向上する。すなわち、スキャナ部とプリンタ部とが並行して動作している場合に、プリンタ部をリセットしようとして、スキャナ部のスキャン動作までもが停止してしまう事態を回避することができる。
【０１２５】
具体的には、プリンタ部リセットコマンドを受信した場合には、メインタスクＴ３０に、リセット処理実行要求を送信する。このリセット処理実行要求を受信したメインタスクＴ３０は、データ展開処理のために確保したメモリ領域を解放して、データ展開処理を途中終了する。また、このメインタスクＴ３０のメインの処理から下位のループ処理が起動されている場合でも、この下位のループ処理は、その処理の途中であっても、所定時間経過後にメインの処理に一旦戻ってくるように設定されている。このため、メインタスクＴ３０の処理が下位のループ処理を実行している場合でも、リセット処理実行要求をメインタスクＴ３０が受信した場合には、そのデータ展開処理を終了させることができる。
【０１２６】
なお、本発明は上記実施形態に限定されず種々に変形可能である。例えば、上述した第１実施形態における図５のデータ展開制御処理、及び、図６のグラフィックマネージャ処理では、ステップＳ４３及びステップＳ６２で入力バッファから読み込んだデータが０ｘ００であるかどうかの判断をしてから、リセット中フラグＲＳＦがセットされているかどうかを判断したが、これらステップＳ４３及びステップＳ６２の処理を省略して、直接、リセット中フラグＲＳＦがセットされているかどうかを判断するようにしてもよい。
【０１２７】
また、上述した第１及び第２実施形態における各種のタスクの処理区分は上述したものに限定されるものではなく、複数のタスクの処理をまとめて１つのタスクとして構成してもよく、また、１つのタスクの処理を複数のタスクに分割して構成してもよい。
【０１２８】
さらに、上述した第１実施形態におけるインターフェース制御タスクＴ１０では、リセット中フラグＲＳＦとは別に、プリンタ部がリセット中であることを示すリセット処理中フラグＷＳＦを設けることとしたが、このリセット処理中フラグＷＳＦを別途設けずにリセット中フラグＲＳＦを共用するようにしてもよい。
【０１２９】
また、上述した第２実施形態においては、メインタスクＴ３０は、ジョブコントロールタスクＴ４０を介して、プリンタエンジン２４を初期化するためのメッセージをエンジン制御タスクＴ５０に送信することとしたが、このメッセージを直接送信するようにしてもよい。すなわち、機械的状態確認メッセージをメインタスクＴ３０からエンジン制御タスクＴ５０に送信し、エンジン制御タスクＴ５０がプリントエンジン２４の機械的状態の初期化を行った後に、機械的状態初期化終了メッセージをエンジン制御タスクＴ５０からメインタスクＴ３０に送信するようにしてもよい。
【０１３０】
さらに、上述した第１実施形態及び第２実施形態においては、コンピュータからマルチファンクションプリンタ１０にプリンタ部リセットコマンドを送信することとしたが、マルチファンクションプリンタ１０におけるプリンタ部のリセットの仕方は、この態様に限られるものではない。例えば、マルチファンクションプリンタ１０の本体にリセットボタンを設け、ユーザがこのリセットボタンを操作したときに、プリンタ部リセットコマンドがマルチファンクションプリンタ１０で生成され、インターフェース制御タスクＴ１０に入力されるようにしてもよい。
【０１３１】
また、上述の実施形態で説明したインターフェース制御タスクＴ１０、制御コマンド解釈タスクＴ２０、メインタスクＴ３０、ジョブコントロールタスクＴ４０、及び、エンジン制御タスクＴ５０等の各タスク処理については、これら各処理を実行するためのプログラムをフロッピーディスク、ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）、ＲＯＭ、メモリカード等の記録媒体に記録して、記録媒体の形で頒布することが可能である。この場合、このプログラムが記録された記録媒体をマルチファンクションプリンタ１０に読み込ませ、実行させることにより、上述した実施形態を実現することができる。
【０１３２】
また、マルチファンクションプリンタ１０は、オペレーティングシステムや別のアプリケーションプログラム等の他のプログラムを備える場合がある。この場合、マルチファンクションプリンタ１０の備える他のプログラムを活用し、記録媒体にはそのマルチファンクションプリンタ１０が備えるプログラムの中から、上述した実施形態と同等の処理を実現するプログラムを呼び出すような命令を記録するようにしてもよい。
【０１３３】
さらに、このようなプログラムは、記録媒体の形ではなく、ネットワークを通じて搬送波として頒布することも可能である。ネットワーク上を搬送波の形で伝送されたプログラムは、マルチファンクションプリンタ１０に取り込まれて、このプログラムを実行することにより上述した実施形態を実現することができる。
【０１３４】
また、記録媒体にプログラムを記録する際や、ネットワーク上を搬送波として伝送される際に、プログラムの暗号化や圧縮化がなされている場合がある。この場合には、これら記録媒体や搬送波からプログラムを読み込んだマルチファンクションプリンタ１０は、そのプログラムの復号化や伸張化を行った上で、実行する必要がある。
【０１３５】
【発明の効果】
以上説明したように、本発明によれば、スキャナ部とプリンタ部とを有するマルチファンクションプリンタにおいて、スキャナ部が動作中であっても、プリンタ部だけをリセットすることができるようにしたので、ユーザの利便性が向上する。
【図面の簡単な説明】
【図１】本発明の一実施形態に係るマルチファンクションプリンタの内部構成を示すブロック図である。
【図２】第１実施形態に係るマルチファンクションプリンタがコンピュータからプリンタ部リセットコマンドを受信した場合の処理を概略的に説明するタイミングチャートを示す図である。
【図３】本実施形態に係るインターフェース制御処理（インターフェース制御タスク）の内容を説明するフローチャートである。
【図４】本実施形態に係る制御コマンド解釈処理（制御コマンド解釈タスク）の内容を説明するフローチャートである。
【図５】本実施形態に係るデータ展開制御処理（メインタスク）の内容を説明するフローチャートである。
【図６】本実施形態に係るグラフィックマネージャ処理（メインタスク）の内容を説明するフローチャートである。
【図７】本実施形態に係るジョブコントロール処理（ジョブコントロールタスク）の内容を説明するフローチャートである。
【図８】本実施形態に係るネゴシエーション処理の内容を説明するフローチャートである。
【図９】第２実施形態に係るマルチファンクションプリンタがコンピュータからプリンタ部リセットコマンドを受信した場合の処理を概略的に説明するタイミングチャートを示す図である。
【図１０】第２実施形態に係るインターフェース制御処理（インターフェース制御タスク）の内容を説明するフローチャートである。
【図１１】第２実施形態に係るメインタスク処理（メインタスク）の内容を説明するフローチャートである。
【図１２】第２実施形態に係るデータ展開処理（メインタスク）の内容を説明するフローチャートである。
【図１３】第２実施形態に係るジョブコントロール処理（ジョブコントロールタスク）の内容を説明するフローチャートである。
【符号の説明】
１０  マルチファンクションプリンタ
１２  ＲＡＭ
１４  ＲＯＭ
１６  ＣＰＵ
１８  スキャナＡＳＩＣ
２０  プリンタＡＳＩＣ
２２  スキャナ機構部
２４  プリントエンジン
２６  ＵＳＢポート
２８  ＵＳＢハブ
Ｔ１０  インターフェース制御タスク
Ｔ２０  制御コマンド解釈タスク
Ｔ３０  メインタスク
Ｔ４０  ジョブコントロールタスク
【図１】
0003758154.tif 000002
【図２】
0003758154.tif 000003
【図３】
0003758154.tif 000004
【図４】
0003758154.tif 000005
【図５】
0003758154.tif 000006
【図６】
0003758154.tif 000007
【図７】
0003758154.tif 000008
【図８】
0003758154.tif 000009
【図９】
0003758154.tif 000010
【図１０】
0003758154.tif 000011
【図１１】
0003758154.tif 000012
【図１２】
0003758154.tif 000013
【図１３】
0003758154.tif 000014