(57)【要約】【課題】モジュールを記憶する記憶部の空き容量が、更新するソフトウエアの容量よりも小さい場合であっても、ソフトウエアの更新の信頼性を維持しつつ複数のモジュールからなるソフトウエアを更新することを目的とする。【解決手段】デバイス装置はソフトウエアの更新情報により更新するモジュールを依存される順に並べ、記憶部の空き容量を計算し、記憶部の空き容量が不足する場合には、空き容量が不足しないようにモジュールの更新順序を変更し、ソフトウエアを更新する。デバイス装置は、このとき、モジュールの大きさとメモリを空き容量を考慮し、モジュール間の依存関係が出来る限り維持されるようモジュールの更新順序を変更する。【選択図】図８
2007213189.tif 000002
【特許請求の範囲】
【請求項１】
サーバー装置に接続されたデバイス装置であって、
前記サーバー装置からソフトウエアの更新情報と前記ソフトウエアの複数の更新モジュールとを受信する受信手段と、
前記受信された複数の更新モジュールが記憶される記憶部と、
前記モジュール間の依存関係に基づいて各モジュールの更新の順序を決定する更新順序決定手段と、
前記決定された更新順序に従って、各モジュールの更新時における記憶部の空き容量を算出する空き容量算出手段と、
前記記憶部の空き容量算出の結果、前記各モジュールの更新時において記憶部の空き容量が不足する場合には、各モジュールの更新時において記憶部の空き容量が不足しないように各モジュールの更新の順序を変更する、更新順序変更手段と、
前記変更された更新順序に基づいてサーバー装置にモジュールを要求するモジュール要求手段と、
前記ソフトウエア更新順序に基づいて、前記モジュールを更新する更新手段とを備える、
デバイス装置。
【請求項２】
請求項１に記載のデバイス装置において、
前記ソフトウエア更新情報には、少なくともソフトウエアを構成するモジュール間の依存関係情報が含まれる、
デバイス装置。
【請求項３】
請求項１又は請求項２のいずれか一項に記載のデバイス装置において、
前記記憶部には、更新前のソフトウエアについてのモジュール間の依存関係情報が記憶されている、
デバイス装置。
【請求項４】
請求項１から請求項３のいずれか一項に記載のデバイス装置において、
前記更新順序変更手段は、更新順序を、前記記憶部に対して追加されるモジュール又は更新されるモジュールが各モジュール間の依存関係に基づいて依存される順に並び、次に、前記記憶部から削除されるモジュールが並ぶ順に変更する、
デバイス装置。
【請求項５】
請求項４に記載のデバイス装置において、
前記空き容量算出手段は、前記変更後の更新順序における前記記憶部の空き容量を算出し、前記変更後の更新順序では、前記記憶部の空き容量が不足する場合には、前記更新順序変更手段は、更新順序を、他のモジュールに依存される更新モジュール、他のモジュールに依存される追加モジュール、他のモジュールに依存されない更新モジュール、他のモジュールに依存されない追加モジュール、削除モジュールの順序に入れ替える、
デバイス装置。
【請求項６】
請求項５に記載のデバイス装置において、
前記空き容量算出手段は、前記変更後の更新順序における前記記憶部の空き容量を算出し、前記変更後の更新順序では、前記記憶部の空き容量が不足する場合には、前記更新順序変更手段は、更新順序を、各モジュール間の依存関係を維持しつつ、モジュールを更新する場合に前記記憶部の最大メモリ使用量が小さくなる様に入れ替える、
デバイス装置。
【請求項７】
請求項５に記載のデバイス装置において、
前記空き容量算出手段は、前記変更後の更新順序における前記記憶部の空き容量を算出し、前記変更後の更新順序では、前記記憶部の空き容量が不足する場合であって、同一のモジュールに依存するモジュールが２以上ある場合には、前記更新順序変更手段は、更新順序を、各モジュール間の依存関係を維持しつつ、前記同一のモジュールに依存するモジュールを更新する場合に前記記憶部の最大メモリ使用量が小さくなる様に入れ替える、
デバイス装置。
【請求項８】
請求項６又は請求項７のいずれか一項に記載のデバイス装置において、
前記空き容量算出手段は、前記変更後の更新順序における前記記憶部の空き容量を算出し、前記変更後の更新順序では、前記記憶部の空き容量が不足する場合には、前記更新順序変更手段は、更新順序を、削除モジュールが前記削除モジュールに依存する更新モジュールあるいは前記削除モジュールに依存される他の削除モジュールの次に並び、前記削除モジュールの次に追加モジュールが並ぶ順序に入れ替える、
デバイス装置。
【請求項９】
請求項８に記載のデバイス装置において、
前記空き容量算出手段は、前記変更後の更新順序における前記記憶部の空き容量を算出し、前記変更後の更新順序では、前記記憶部の空き容量が不足する場合には、前記更新順序変更手段は、更新順序を、更新モジュールについて削除する旧バージョンのモジュール、追加する新バージョンのモジュールの順序に分離して並べる、
デバイス装置。
【請求項１０】
デバイス装置におけるソフトウエアのモジュールを更新する方法であって、
サーバー装置からソフトウエアの更新情報を受信し、
前記ソフトウエアの更新情報に基づいて、依存関係が維持されるように更新モジュールを並べて更新順序を決定し、
前記決定した更新順序でモジュールを更新した場合に、更新モジュールを記憶する記憶部の空き容量が不足する場合には、前記記憶部の空き容量が不足しないようにモジュールの更新順序を変更し、
前記変更後の更新順序に従って、前記サーバー装置に対してモジュールを要求し、
前記サーバー装置からモジュール取得し、更新する、
ソフトウエアの更新方法。
【請求項１１】
デバイス装置におけるソフトウエアのモジュールを更新するためのコンピュータプログラムであって、
サーバー装置からソフトウエアの更新情報を受信し、
前記ソフトウエアの更新情報に基づいて、依存関係が維持されるように更新モジュールを並べて更新順序を決定し、
前記決定した更新順序でモジュールを更新した場合に、更新モジュールを記憶する記憶部の空き容量が不足する場合には、前記記憶部の空き容量が不足しないように前記更新順序によるモジュールの更新順序を変更し、
前記変更後の更新順序に従って、前記サーバー装置に対してモジュールを要求し、
前記サーバー装置からモジュール取得し、更新する機能を実現する、
コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバイス装置の複数のモジュールからなるソフトウエアを更新する技術に関する。
【背景技術】
【０００２】
従来、端末装置の複数のモジュールからなるソフトウエアを更新する場合には、端末装置は、更新するソフトウエアが記憶部の空き容量にすべてのモジュールを記憶できるか、記憶部の空き容量をチェックし、記憶できる場合には、モジュール間の依存関係によりモジュールの更新順序を決め、決めた順序に従ってモジュールを更新していた（特許文献１）。
【０００３】
【特許文献１】特開２００１−２５６０３２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上記従来技術では、端末装置は、複数のモジュールからなるソフトウエアの更新前に、更新するソフトウエアの全容量を端末装置の記憶部に記憶できるか否か、記憶部の空き容量をチェックし、記憶できない場合にはソフトウエアを更新できないとしていたため、記憶部の空き容量が不足する場合には、ソフトウエアの更新による端末装置の利便性を向上をはかることが難しかった。このことは端末装置に限らず、周辺装置、デバイス装置でも同様であり、例えば、プリンタのファームウエアを更新する場合のように記憶部の容量が小さい場合には、記憶部の空き容量も小さく、影響が顕著であった。
【０００５】
また、従来技術では、端末装置の利便性を向上させようとソフトウエアを更新する場合、端末装置は、記憶部の空き容量に余裕がある場合にしか更新を行わないため、モジュール間の依存関係のみに基づいてモジュールの更新順序を決め、前記更新順序に従ってモジュールを更新すれば更新可能であり、更新順序を変更することはなかった。一方、端末装置のソフトウエアを更新する場合に、更新するソフトウエアの容量が、ソフトウエアを記憶する記憶部の空き容量を超える場合には、端末装置は、記憶部の空き容量が、モジュールの容量よりも大きくなるように、モジュールの更新順序を決定して、更新を実行する必要がある。しかし、端末装置が、記憶部の空き容量と更新するモジュールの容量だけしか考慮せずに更新順序を決定すれば、更新途中に電源断が発生した場合には、モジュール間の依存関係が維持されない状態で更新が中断する恐れがある。その結果、端末装置が再起動できないという問題が発生する恐れがあり、ソフトウエアの更新の信頼性が維持できない。
【０００６】
本発明の目的は、上記従来技術の課題を解決し、モジュールを記憶する記憶部の空き容量が、更新するソフトウエアの容量よりも小さい場合であっても、ソフトウエアの更新の信頼性を維持しつつ複数のモジュールからなるソフトウエアを更新することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明に係るデバイス装置は、サーバー装置に接続されたデバイス装置であって、前記サーバー装置からソフトウエアの更新情報と前記ソフトウエアの複数の更新モジュールとを受信する受信手段と、前記受信された複数の更新モジュールが記憶される記憶部と、前記モジュール間の依存関係に基づいて各モジュールの更新の順序を決定する更新順序決定手段と、前記決定された更新順序に従って、各モジュールの更新時における記憶部の空き容量を算出する空き容量算出手段と、前記記憶部の空き容量算出の結果、前記各モジュールの更新時において記憶部の空き容量が不足する場合には、各モジュールの更新時において記憶部の空き容量が不足しないように各モジュールの更新の順序を変更する、更新順序変更手段と、前記変更された更新順序に基づいてサーバー装置にモジュールを要求するモジュール要求手段と、前記ソフトウエア更新順序に基づいて、前記モジュールを更新する更新手段とを備える。
【０００８】
本発明に係るデバイス装置によれば、ソフトウエアを更新する場合に、ソフトウエアを構成するモジュール間の依存関係に基づいてモジュールの更新順序を作成し、モジュールの更新順序を変更する場合は、記憶部の空き容量が不足しないようにモジュールの更新順序を変更するので、できる限りモジュール間の依存関係を維持しつつモジュールを更新することができる。
【０００９】
本発明に係るデバイス装置は、前記ソフトウエア更新情報には、少なくともソフトウエアを構成するモジュール間の依存関係情報が含まれる。ソフトウエアを構成するモジュールは、実行する場合に依存するモジュールを呼び出すため、どのモジュールを必要とするかというモジュール間の依存情報をモジュール内に有しているが、本発明によるデバイス装置によれば、デバイス装置は、サーバー装置から受信するソフトウエア更新情報に含まれるソフトウエアを構成するモジュール間の依存関係情報により、モジュール間の依存関係に基づいたモジュールの更新順序を容易に作成することができる。
【００１０】
本発明に係るデバイス装置において、前記記憶部には、更新前のソフトウエアについてのモジュール間の依存関係情報が記憶されている。本発明に係るデバイス装置によれば、前記サーバー装置から送られたソフトウエア更新情報と、前記記憶部に記憶されているモジュール間の依存関係情報を比較することにより削除のみするモジュールを容易に抽出することができるので、ソフトウエアの更新順序を容易に作成できる。
【００１１】
本発明に係るデバイス装置において、前記更新順序変更手段は、更新順序を、前記記憶部に対して追加されるモジュール又は更新されるモジュールが各モジュール間の依存関係に基づいて依存される順に並び、次に、前記記憶部から削除されるモジュールが並ぶ順に変更する。本発明に係るデバイス装置によれば、削除されるモジュールは最後に削除されるため、削除されるモジュールは、他のモジュールから依存されなくなってから削除されることになる。したがって、削除されるモジュールを削除することによるモジュール間の依存関係の欠落を防止してモジュールの更新ができる。
【００１２】
本発明に係るデバイス装置において、前記空き容量算出手段は、前記変更後の更新順序における記憶部の空き容量を算出し、前記変更後の更新順序では、前記記憶部の空き容量が不足する場合には、前記更新順序は、更新順序を、他のモジュールに依存される更新モジュール、他のモジュールに依存される追加モジュール、他のモジュールに依存されない更新モジュール、他のモジュールに依存されない追加モジュール、削除モジュールの順序に入れ替える。本発明に係るデバイス装置によれば、依存されるモジュールを他のモジュールよりも先に更新するため、モジュール間の依存関係を維持できる。また、モジュールを追加するよりもモジュールを更新した方が、旧モジュールを削除した後に追加するモジュールを追加することになるので、記憶部のメモリ使用量をより少なくでき、記憶部の空き容量がより少なくてもモジュール間の依存関係を維持してモジュールの更新ができる。
【００１３】
本発明に係るデバイス装置において、前記空き容量算出手段は、前記変更後の更新順序における記憶部の空き容量を算出し、前記変更後の更新順序では、前記記憶部の空き容量が不足する場合には、前記更新順序変更手段は、更新順序を、各モジュール間の依存関係を維持しつつ、モジュールを更新する場合に前記記憶部の最大メモリ使用量が小さくなる様に入れ替える。本発明に係るデバイス装置によれば、モジュール更新時の記憶部の最大メモリ使用量が小さくなるようにモジュールの更新順序を入れ替えることにより記憶部のメモリ使用量をより小さくできるため、記憶部の空き容量がより小さくてもモジュール間の依存関係を維持してモジュールの更新ができる。
【００１４】
本発明に係るデバイス装置において、前記空き容量算出手段は、前記変更後の更新順序における記憶部の空き容量を算出し、前記変更後の更新順序では、前記記憶部の空き容量が不足する場合であって、同一のモジュールに依存するモジュールが２以上ある場合には、前記更新順序変更手段は、更新順序を、各モジュール間の依存関係を維持しつつ、前記同一のモジュールに依存するモジュールを更新する場合に前記記憶部の最大メモリ使用量が小さくなる様に入れ替える。本発明に係るデバイス装置によれば、モジュール更新時の記憶部の最大メモリ使用量が小さくなるようにモジュールの更新順序を入れ替えることにより、記憶部のメモリ使用量をより小さくできるため、記憶部の空き容量がより小さくてもモジュール間の依存関係を維持してモジュールの更新ができる。
【００１５】
本発明に係るデバイス装置において、前記空き容量算出手段は、前記変更後の更新順序における記憶部の空き容量を算出し、前記変更後の更新順序では、前記記憶部の空き容量が不足する場合には、前記更新順序は、更新順序を、削除モジュールが、前記削除モジュールに依存する他の更新モジュールあるいは前記削除モジュールに依存する他の削除モジュールの次に並び、前記削除モジュールの次に追加モジュールが並ぶ順序に入れ替える。本発明に係るデバイス装置によれば、削除されるモジュールが、ほかのモジュールに依存されなくなれば、依存関係はなくなるので、削除モジュールをすぐに削除してもモジュール間の依存関係に影響を与えない。また、デバイス装置は、削除モジュールを削除することにより記憶部の空き容量を大きくでき、結果として、記憶部の空き容量がより小さくてもモジュール間の依存関係を維持してモジュールの更新ができる。
【００１６】
本発明に係るデバイス装置において、前記空き容量算出手段は、前記変更後の更新順序における記憶部の空き容量を算出し、前記変更後の更新順序では、前記記憶部の空き容量が不足する場合には、前記更新順序変更手段は、更新順序を、更新モジュールについて、削除する旧バージョンのモジュール、追加する新バージョンのモジュールの順序に分離して並べる。記憶部の空き容量が小さい場合には、デバイス装置は、常にモジュール間の依存関係を維持したままソフトウエアを更新することはできなくなるが、本発明に係るデバイス装置によれば、依存関係を維持できない期間をより短くしてモジュールの更新ができる。
【００１７】
本発明に係るソフトウエアの更新方法は、デバイス装置におけるソフトウエアのモジュールを更新する方法であって、前記サーバー装置からソフトウエアの更新情報を受信し、前記ソフトウエアの更新情報に基づいて、依存関係が維持されるように更新モジュールを並べて更新順序を決定し、前記決定した更新順序でモジュールを更新した場合に、更新モジュールを記憶する記憶部の空き容量が不足する場合には、前記記憶部の空き容量が不足しないように前記更新順序によるモジュールの更新順序を変更し、前記更新後の更新順序に従って、前記サーバー装置に対してモジュールを要求し、前記サーバー装置からモジュール取得し、更新する。
【００１８】
本発明によれば、デバイス装置は、ソフトウエアを更新する場合に、ソフトウエアを構成するモジュールの依存関係に基づいてモジュールの更新順序を作成し、モジュールの更新順序を変更する場合は、記憶部の空き容量が不足しないようにモジュールの更新順序を変更するので、できる限りモジュール間の依存関係を維持しつつモジュールを更新することができる。
【００１９】
なお、本発明は、上述したデバイス装置としての構成の他に種々の態様で実現可能であり、ソフトウエアの更新方法、これらのデバイス装置またはソフトウエアの更新方法を実現するコンピュータプログラム、及びそのプログラムを記憶した記憶媒体、そのプログラムを含み搬送波内に具現されたデータ信号など種々の態様で実現することが可能である。
【発明を実施するための最良の形態】
【００２０】
以下、本発明の実施の形態を本実施例に基づいて以下の順序で説明する。
Ａ．本実施例に係るプリンタ１０及びパーソナルコンピュータ（以下、「ＰＣ」という。）５０の構成
Ｂ．本実施例に係るプリンタ１０におけるファームウエアの更新順序
Ｃ．変形例
【００２１】
Ａ．：本実施例に係るプリンタ１０及びＰＣ５０の構成
図１を参照して、本発明の実施例に係るプリンタ１０の構成について説明する。図１は、本発明の実施例に係るプリンタ１０の構成を示す説明図である。プリンタ１０は、ＣＰＵ１１とフラッシュメモリ１２とＲＯＭ１３とＲＡＭ１４とネットワークインターフェース１５と印刷部１６とを備えている。
【００２２】
ＣＰＵ１１は、プリンタ１０の中枢であり、プリンタ１０全体の動作を制御するほか、受信した印刷データを印刷フォーマットに変換し、印刷部に送り印刷を行う。
【００２３】
フラッシュメモリ１２は、例えば、ＣＰＵ１１と印字部１６を制御するためのファームウエア及び印刷のためのアプリケーションを記憶する。ファームウエアあるいはアプリケーションは、１つのあるいは複数のモジュールから構成される。また、フラッシュメモリ１２は、ファームウエアやアプリケーションを構成するモジュールのモジュール情報を記憶する。モジュール情報には、例えば、モジュール名とモジュールサイズとモジュールのバージョンとモジュール間の依存関係とが含まれる。
【００２４】
ＲＯＭ１３は、例えば、印刷のためのフォントデータを記憶する。ＲＡＭ１４は、印刷データを一時的に記憶するバッファーメモリとして機能するほか、フラッシュメモリ１２から印刷のためのアプリケーションがコピーされ、ＲＡＭ１４上でアプリケーションが実行される。
【００２５】
ネットワークインターフェース１５は、プリンタ１０をネットワーク１７に接続する。プリンタ１０は、ネットワークインターフェース１５を介して、印刷データを受信するほか、ファームウエアあるいはアプリケーションの更新モジュールを受信する。
【００２６】
印刷部１６は、受信した印刷データを印刷するところであり、印字ヘッド１８と紙送り機構１９とを有する。
【００２７】
図２を参照して、本発明の実施例に係るＰＣ５０の構成について説明する。図２は、本発明の実施例に係るＰＣ５０の構成を示す説明図である。ＰＣ５０は、ＣＰＵ５１とＲＯＭ５２とＲＡＭ５３とハードディスク５４とＣＤ−ＲＯＭ装置５５と入力インターフェース５６と出力インターフェース５７とネットワークインターフェース５８とを備えている。
【００２８】
ＣＰＵ５１は、ＰＣ５０の中枢であり、ＰＣ５０全体の動作を制御するほか、各種演算を行い、演算結果をハードディスク５４に記憶したり、出力インターフェース５７を介してディスプレイ５９に表示したり、ネットワークインターフェース５８を介してほかのコンピュータ（図示せず）と通信を行う。
【００２９】
ＲＯＭ５２は、ＰＣ５０に接続されたハードディスク５４や入力インターフェース５６を介して接続されたキーボード６０などの周辺機器を制御するＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）を記憶し、通常、書き換え可能な不揮発性メモリであるフラッシュメモリが用いられる。ＲＡＭ５３は、書き換え可能な揮発性メモリであり、ＰＣ５０のオペレーティングシステム（以下、「ＯＳ」という。）やアプリケーションはハードディスク５４からＲＡＭ５３上にコピーされ、ＲＡＭ５３上で実行される。ＲＡＭ５３は、ＣＰＵ５１が演算した結果あるいは演算中のデータを一時記憶する。
【００３０】
ハードディスク５４は、ＯＳとアプリケーションとデータとを記憶する固体記憶装置である。プリンタ１０のファームウエアの更新モジュールは、ハードディスク５４上にデータとして記憶される。通常、プリンタ１０のファームウエアの更新モジュールは、プリンタメーカーのＷｅｂページ上に公開されているので、プリンタ１０の管理者は、Ｗｅｂページにアクセスして、プリンタ１０のファームウエアの更新モジュールをダウンロードし、ハードディスク５４に記憶する。ＣＤ−ＲＯＭ装置５５は、コンパクトディスク（以下、「ＣＤ」という。）を使ったコンピュータ用の読み出し専用記憶装置であり、ＣＤ−ＲＯＭの形で流通しているＯＳやアプリケーションやデータをＰＣ５０にインストールする場合に用いられる。プリンタ１０のファームウエアの更新モジュールは、プリンタメーカーのＷｅｂページ上に公開されるだけでなく、ＣＤ−ＲＯＭの形で提供される場合がある。
【００３１】
入力インターフェース５６は、例えば、キーボード６０とマウス６１などの入力装置とＰＣ５０の間を接続する。入力装置として、キーボード６０やマウス６１のほか、例えば、タブレット（図示せず）が使われることがある。プリンタ１０のファームウエアを更新する場合、管理者は、キーボード６０からＰＣ５０に対して、ファームウエアの更新命令を入力する。出力インターフェース５７は、ＰＣ５０とディスプレイ５９、プリンタ１０の出力装置とを接続し、ＣＰＵ５１の演算結果をディスプレイ５９、プリンタ１０に出力する。
【００３２】
ネットワークインターフェース５８は、ＰＣ５０とネットワーク１７とを接続し、ほかのＰＣやホストコンピュータとデータのやりとりを中継する。本実施例においては、プリンタ１０は、ネットワーク１７経由でＰＣ５０に接続されている。したがって、プリンタ１０のファームウエアの更新モジュールは、ＰＣ５０からネットワーク１７を経由してプリンタ１０に送られる。
【００３３】
Ｂ．本実施例に係るプリンタ１０のファームウエアの更新順序
Ｂ−１．プリンタ１０のファームウエアを更新するときのＰＣ５０の動作
図３を参照しながら、プリンタ１０のファームウエアを更新する場合のＰＣ５０の動作について説明する。図３は、プリンタ１０のファームウエアを更新する場合のＰＣ５０の動作のフローチャートを示した説明図である。プリンタ１０のファームウエアの更新プログラムは、通常、ネットワーク経由で配布される。管理者は、ＰＣ５０のハードディスク５４にファームウエアの更新プログラムを一旦保存し、キーボード６０から更新プログラムを起動して更新を実行する。管理者が更新プログラムを実行すると、ＰＣ５０からプリンタ１０に対して、モジュール情報が送付される（ステップＳ２００）。モジュール情報には、例えば、更新するファームウエアを構成するモジュールのモジュール名とモジュールサイズとバージョンとモジュール間の依存関係情報とが記載される。ＰＣ５０は、プリンタ１０からの応答を待つ（ステップＳ２０５）。
【００３４】
図４を参照して、ＰＣ５０からプリンタ１０に送られるモジュール情報について説明する。図４は、ＰＣ５０からプリンタ１０に送られるモジュール情報を示す説明図である。モジュール名は、ファームウエアを構成するモジュールの名前を示す。モジュールの種類は、モジュールがアプリ（アプリケーション）かライブラリか、どちらであるかを示す。アプリケーションは、それ自身実行が可能なプログラムであるが、ライブラリは、それ自身では実行できず、アプリケーションが実行されるときに付随して動作するプログラムである。モジュールサイズは、モジュールを記憶するのに必要なメモリ容量を示す。モジュールバージョンは、モジュールを改訂した回数を示す。一般に、数字が大きいほど新しいが、明確な規定はなく、数字の重ね方、表記の仕方などは作者の一存による。通常、新しいバージョンのモジュールは、古いバージョンのモジュールの上位互換で作られることが多い。
【００３５】
依存モジュール１は、そのモジュールを実行するために必要なモジュールを示す。本実施例では、モジュールＤを実行するためにはモジュールＣが必要であり、モジュールＣを実行するためにはモジュールＢが必要である。したがって、モジュールＤを実行するためには、モジュールＢ、モジュールＣが必要である。
【００３６】
依存モジュール２は、モジュールがどのモジュールから依存されているかを示すものであり、依存モジュール１の逆引きになる。本実施例では、モジュールＢは、モジュールＣに依存されている。ＣＰＵ１１は、依存モジュール１の項目があれば、どのモジュールがどのモジュールから依存されているかわかるため、依存モジュール２の項目はなくてもよいが、依存モジュール２の項目を備えることにより、依存モジュール２の項目を備えていない場合に比べて、削除するモジュールのモジュール名を容易に取得することができる。
【００３７】
図５を参照して、プリンタ１０のフラッシュメモリ１２に記憶されているモジュール情報について説明する。図５は、ファームウエアの更新前にプリンタ１０のフラッシュメモリ１２に記憶されているモジュール情報を示す説明図である。プリンタ１０のＣＰＵ１１は、プリンタ１０のフラッシュメモリ１２に記憶されているモジュール情報とＰＣ５０から送られてくるモジュール情報とを比較して、どのモジュールを更新するかを把握する。なお、項目の内容については、図４に示すモジュール情報と同じであるため、説明を省略する。
【００３８】
ＣＰＵ５１は、プリンタ１０からの応答を受信すると、応答の内容がファームウエアの更新が可能であるか判断し（ステップＳ２１０）、ファームウエアの更新不可の場合には、ＣＰＵ５１は、ＰＣ５０のディスプレイ５９にファームウエアの更新ができないことを表示する（ステップＳ２１５）。
【００３９】
ＣＰＵ５１は、プリンタ１０からの応答が、ファームウエアの更新可能である場合には、プリンタ１０からモジュール名を受信し（ステップＳ２２０）、該当するモジュールをハードディスク５４からプリンタ１０に送る（ステップＳ２２５）。ＣＰＵ５１は、プリンタ１０からファームウエアの更新完了の通知を受信するまで（ステップＳ２３０）、プリンタ１０からモジュール名を受信するごとに（ステップＳ２２０）、該当モジュールをハードディスク５４からプリンタ１０に繰り返して送る（ステップＳ２２５）。
【００４０】
ＣＰＵ５１は、プリンタ１０からファームウエアの更新完了の通知を受信した場合には（ステップＳ２３０）、ＰＣ５０のディスプレイ５９にファームウエアの更新が完了した旨を表示し（ステップＳ２３５）、ファームウエアの更新を完了する。
【００４１】
Ｂ−２．プリンタ１０のファームウエアを更新するときのプリンタ１０の動作
図６を参照しながら、プリンタ１０のファームウエアを更新する場合のプリンタ１０の動作について説明する。図６は、プリンタ１０のファームウエアを更新する場合のプリンタ１０の動作のフローチャートを示した説明図である。ＣＰＵ１１は、ＰＣ５０よりファームウエアを構成するモジュールのモジュール情報を受信する（ステップＳ３００）。モジュール情報には、上述したように、例えば、ファームウエアを構成するモジュールのモジュール名とモジュールサイズとバージョンとモジュール間の依存関係情報とが記載される。ＣＰＵ１１は、あらかじめフラッシュメモリ１２に記憶されているモジュール情報とＰＣ５０から受信したモジュール情報とフラッシュメモリ１２の空き容量とを比較して、ファームウエアの更新が可能か判断する（ステップＳ３０５）。例えば、ＣＰＵ１１は、フラッシュメモリ１２が、更新後のファームウエアを、記憶するための容量を備えているか判断する。
【００４２】
本実施例では、ファームウエアの更新前は、モジュールＡ、Ｂ、Ｃ、Ｄの４つのモジュールがあり、全部で４００ｋのメモリ容量が使用される。一方、ファームウエアの更新後はモジュールＢ、Ｃ、Ｄ、Ｅの４つのモジュールがあり、全部で４５０ｋのメモリ容量が使用される。ＣＰＵ１１は両者を比較することにより、ファームウエアの更新によりフラッシュメモリ１２の使用量が５０ｋ大きくなると算出する。次に、ＣＰＵ１１は、フラッシュメモリ１２の空き容量を算出する。ＣＰＵ１１は、フラッシュメモリ１２の空き容量が５０ｋ以上あれば、ファームウエアの更新が可能であると判断し、ファームウエアを更新するが、空き容量が５０ｋ未満である場合には、ファームウエアを更新できないと判断し、ファームウエアの更新ができない旨をＰＣ５０に通知する（ステップＳ３１０）。
【００４３】
ファームウエアの更新ができる場合には、ＣＰＵ１１は、ファームウエアの更新順序を作成し確定する（ステップＳ３１５）。具体的な更新順序の作成については後述する。
【００４４】
図７を参照して、確定したファームウエアの更新順序及びモジュールに対する命令について説明する。図７は、確定したファームウエアの更新順序及びモジュールに対する命令を記載したモジュール更新順序テーブルである。モジュール名は、更新されるモジュールの名前を示し、命令は、モジュールに対する命令を示す。命令が更新の場合は、新モジュールを追加した後に旧モジュールを削除する。命令が削除の場合は、当該モジュールを削除する。命令が追加の場合は、当該モジュールを追加する。順番は、命令を実行する順番を示し、順番が１の行の命令から順に実行される。したがって、確定したファームウエアの更新順序は、モジュールＤの更新、モジュールＢの削除（旧モジュール）、モジュールＢの追加（新モジュール）、モジュールＡの削除、モジュールＥの追加の順である。ＵｐｄａｔｅＮｕｍは変数であり、一番大きな順番の値が代入される。本実施例では変数ＵｐｄａｔｅＮｕｍには５が代入される。
【００４５】
ＣＰＵ１１は、変数ｉｎｄｅｘに１を代入し、変数ｌａｓｔに変数ＵｐｄａｔｅＮｕｍの値を代入する（ステップＳ３２０）。本実施例では変数ＵｐｄａｔｅＮｕｍの値は５である。ＣＰＵ１１は、変数ｉｎｄｅｘと変数ｌａｓｔの大きさを比較し（ステップＳ３２５）、変数ｉｎｄｅｘの値がｌａｓｔより大きくなった場合は、ファームウエアの更新完了をＰＣ５０に通知する（ステップＳ３３０）。
【００４６】
ＣＰＵ１１は、変数ｉｎｄｅｘの値が変数ｌａｓｔの値以下の場合は、変数ｉｎｄｅｘの値と同じ順番の命令を実行する。ＣＰＵ１１は、命令が削除か否かを判断する（ステップＳ３３５）。ＣＰＵ１１は、命令が削除の場合には、モジュール名に記載されたモジュールをフラッシュメモリ１２から削除し（ステップＳ３４０）、ステップＳ３６５に進む。ＣＰＵ１１は、命令が削除でなければ、命令が追加又は更新であるか否かを判断する（ステップＳ３４５）。ＣＰＵ１１は、命令が追加又は更新でない場合は、ステップＳ３６５に進む。ＣＰＵ１１は、命令が追加又は更新の場合は、ＰＣ５０に対して、モジュール名に記載されたモジュールを要求する（ステップＳ３５０）。ＣＰＵ１１は、ＰＣ５０からモジュールを受信し（ステップＳ３５５）、モジュールを追加あるいは更新する（ステップＳ３６０）。具体的には、ＣＰＵ１１は、命令が追加の場合には、受信したモジュールをフラッシュメモリ１２に記憶する。ＣＰＵ１１は、命令が更新の場合には、受信した新モジュールをフラッシュメモリ１２に記憶し、旧モジュールをフラッシュメモリ１２から削除する。
【００４７】
ＣＰＵ１１は、変数ｉｎｄｅｘに１を加え（ステップＳ３６５）、ステップＳ３２５に戻る。ＣＰＵ１１は、変数ｉｎｄｅｘの値が変数ｌａｓｔの値以下の場合には、同様にしてモジュールの削除、追加、更新を行う。ＣＰＵ１１は、変数ｉｎｄｅｘの値が変数ｌａｓｔの値より大きくなった場合は、上述したようにファームウエアの更新完了をＰＣ５０に通知する（ステップＳ３３０）。
【００４８】
図８を参照して、ＣＰＵ１１が更新順序を確定するサブルーチンの動作について説明する。図８は、ＣＰＵ１１がプリンタ１０のファームウエアの更新順序を確定するサブルーチンの動作のフローチャートを示した説明図である。ＣＰＵ１１は、フラッシュメモリ１２に記憶されているモジュール情報とＰＣ５０から送られたモジュール情報とをＲＡＭ１４に記憶し、両者を比較して、追加するモジュール（ステップＳ４００）、削除するモジュール（ステップＳ４０５）、更新するモジュール（ステップＳ４１０）を取得する。なお、ステップＳ４００、Ｓ４０５、Ｓ４１０はどの順序で行ってもよい。
【００４９】
ＣＰＵ１１は、ＲＡＭ１４上のテーブルに、更新モジュール、追加モジュールを依存される順に並べる（ステップＳ４２０）。このとき、ＣＰＵ１１は、モジュールを順に追加、更新する場合に、フラッシュメモリ１２の使用量が小さくなる順序にモジュールを並べる。ＣＰＵ１１が、先に更新モジュールを更新する場合には、フラッシュメモリ１２には旧更新モジュール、旧更新モジュール＋新更新モジュール、新更新モジュール、新更新モジュール＋追加モジュールの順序で記憶される。一方、ＣＰＵ１１が、先に追加モジュールを追加する場合には、フラッシュメモリ１２には旧更新モジュール、旧更新モジュール＋追加モジュール、旧更新モジュール＋新更新モジュール＋追加モジュール、新更新モジュール＋追加モジュールの順序で記憶される。すなわち、ＣＰＵ１１が、先に追加モジュールを追加する場合には、フラッシュメモリ１２に旧更新モジュールと新更新モジュールと追加モジュールとの３つのモジュールが一時的に記憶されるが、更新モジュールを先に更新する場合には３つのモジュールが一時的に記憶されることはない。したがって、ＣＰＵ１１は、モジュールの更新を先に行った方が、モジュールの追加を先に行うよりも、フラッシュメモリ１２の使用量を小さくできる。
【００５０】
ＣＰＵ１１は、次に削除するモジュールをテーブルの最後に追加する（ステップＳ４２０）。この順序を順序案１とする。順序案１の順序は、ＣＰＵ１１が、追加されるモジュール、更新されるモジュールを各モジュール間に依存関係に基づいて依存される順に並べ、次にフラッシュメモリ１２から削除されるモジュールを並べた順である。具体的には、ＣＰＵ１１が、他のモジュールに依存される更新モジュール、他のモジュールに依存される追加モジュール、他のモジュールに依存されない更新モジュール、他のモジュールに更新されない追加モジュール、削除モジュールの順序に入れ替えた順序である。
【００５１】
ＣＰＵ１１は、フラッシュメモリ１２の空き容量を計算し（ステップＳ４２５）、フラッシュメモリ１２の空き容量が不足しないか判断する（ステップＳ４３０）。
【００５２】
ＣＰＵ１１は、フラッシュメモリ１２の空き容量が不足しない場合にはモジュールの更新順序を確定する（ステップＳ４３５）。フラッシュメモリ１２の空き容量が不足する場合には、ＣＰＵ１１は、当該順序でファームウエアを更新することはできないため、各モジュール間の依存関係を維持しつつフラッシュメモリ１２の最大メモリ使用量が小さくなるように、モジュールの更新順序を入れ替える（ステップＳ４４０）。この順序を順序案２とする。なお、ＣＰＵ１１は、順序案２の順序の入れ替えについて、同一のモジュールを依存するモジュールが２以上ある場合に、前記２以上のモジュール間の順序を入れ替える場合にも用いることできる。
【００５３】
ＣＰＵ１１は、順序案２で各モジュールを更新する場合のフラッシュメモリ１２の空き容量を計算し（ステップＳ４４５）、フラッシュメモリ１２の空き容量が不足しないか判断する（ステップＳ４５０）。ＣＰＵ１１は、フラッシュメモリ１２の空き容量が不足しない場合には、モジュールの更新順序を確定するが（ステップＳ４３５）、不足する場合には、順序案２の順序でファームウエアを更新することはできないないため、ＣＰＵ１１は、削除モジュールを、削除モジュールに依存するする他の更新モジュールあるいは削除モジュールの次に並べ、削除モジュールの次に追加モジュールを並べる順序に入れ替える（ステップＳ４５５）。この順序を順序案３とする。
【００５４】
ＣＰＵ１１は、順序案３で各モジュールを更新した場合フラッシュメモリ１２の空き容量を計算し（ステップＳ４６０）、フラッシュメモリ１２の空き容量が不足しないか判断する（ステップＳ４６５）。ＣＰＵ１１は、フラッシュメモリ１２の空き容量が不足しない場合にはモジュールの更新順序を確定するが（ステップＳ４３５）、フラッシュメモリ１２の空き容量が不足する場合には（ステップＳ４６５）、順序案３の順序でファームウエアを更新することはできないため、更新するモジュールについて、旧モジュールを削除後に新モジュールを追加するように処理を分離する（ステップＳ４７０）。この順序を順序案４とする。
【００５５】
この順序案４では、旧モジュールを削除した後は新モジュールを追加するまで他のモジュールの実行ができない場合があるため、ＣＰＵ１１は、モジュール間の依存関係を維持したままファームウエアを更新することにはならないが、新モジュールを追加すれば、依存関係を復活できる。したがって、ＣＰＵ１１は、依存関係の欠落は生じるが、依存関係の欠落を最小に押さえてモジュールの更新を行うことができる。
【００５６】
ＣＰＵ１１は、順序案４の順序で各モジュールを更新フラッシュメモリ１２の空き容量を計算し（ステップＳ４７５）、フラッシュメモリ１２の空き容量が不足しないか判断する（ステップＳ４８０）。ＣＰＵ１１は、フラッシュメモリ１２の空き容量が不足しない場合にはモジュールの更新順序を確定するが（ステップＳ４３５）、フラッシュメモリ１２の空き容量が不足する場合には、順序案４の順序でファームウエアを更新することができないため、依存関係を考慮せずに、削除するモジュール及び更新モジュールの旧モジュールを削除してから、追加モジュール及び更新モジュールの新モジュールを追加する様に更新順序を入れ替える（ステップＳ４８５）この順序を順序案５とする。
【００５７】
なお、ステップＳ３０５の判断でファームウエアの更新が可能である場合、ＣＰＵ１１は、順序案５を採れば、モジュール間の依存関係は維持できないが、少なくともファームウエアの更新は可能である。
【００５８】
図９から図１２を参照して、ＣＰＵ１１がプリンタ１０のファームウエアを更新する場合の各モジュールの更新実行前、実行中、実行後のフラッシュメモリ１２の使用メモリ量、空き容量について説明する。図９は、ＣＰＵ１１が順序案１によりプリンタ１０のファームウエアを更新する場合の各モジュールの更新の実行前、実行中、実行後のフラッシュメモリ１２の使用メモリ量、空き容量を示す説明図である。図１０は、ＣＰＵ１１が順序案２によりプリンタ１０のファームウエアを更新する場合の各モジュールの更新の実行前、実行中、実行後のフラッシュメモリ１２の使用メモリ量、空き容量を示す説明図である。図１１は、ＣＰＵ１１が順序案３でプリンタ１０のファームウエアを更新する場合の各モジュールの更新の実行前、実行中、実行後のフラッシュメモリ１２の使用メモリ量、空き容量を示す説明図である。図１２は、ＣＰＵ１１が順序案４でプリンタ１０のファームウエアを更新する場合の各モジュールの更新の実行前、実行中、実行後のフラッシュメモリ１２の使用メモリ量、空き容量を示す説明図である。
【００５９】
順番の項目は、モジュールの更新を実行する順番を示す。更新内容は、モジュールとそれに対する命令とを示したものであり、例えば、モジュールＢ更新は、ＣＰＵ１１が、モジュールＢの旧モジュール（以下「旧モジュールＢ」という。）を残したままモジュールＢの新モジュール（以下「新モジュールＢ」という。）を追加し、その後に旧モジュールＢを削除することをいう。実行前とは、モジュールに対する命令実行前の状態をいい、実行中とは、命令が更新であるときに新モジュールを追加したが、未だ旧モジュールを削除していない状態をいい、実行後とは、モジュールに対する命令実行後の状態をいう。かっこ内はフラッシュメモリ１２の総容量を５００ｋとしたときの空き容量を示す。値がマイナスになる場合は、フラッシュメモリ１２の容量が不足する場合であり、ＣＰＵ１１は、ファームウエアの更新ができない。
【００６０】
本実施例では、モジュールＢはモジュールＣに依存され、モジュールＣはモジュールＤ、モジュールＥに依存されている。モジュールＣはファームウエアの更新前後でバージョンが同じなので更新されない。よって、ＣＰＵ１１は、モジュールＤ，モジュールＥをモジュールＢの後に並べる。ここで、モジュールＤは更新モジュールであり、モジュールＥは追加モジュールである。上述したとおり、更新モジュールを先に更新した方が、追加モジュールを先に追加するよりもフラッシュメモリ１２のメモリ使用量を小さくできるので、ＣＰＵ１１は、モジュールＢ、モジュールＤ、モジュールＥの順序にテーブルに並べる。削除するモジュールはモジュールＡのみなので、ＣＰＵ１１は、モジュールＢ、モジュールＤ、モジュールＥ、モジュールＡの順序でテーブルに並べる。この順序が順序案１の順序となる。
【００６１】
図９を用いて、ＣＰＵ１１が順序案１の順序で更新した場合のフラッシュメモリ１２のメモリ使用量について説明する。順序案１の場合、ＣＰＵ１１は、モジュールＢを更新する場合、新モジュールＢを追加してから旧モジュールＢを削除するが、新モジュールＢの大きさが１８０ｋのため、新モジュールＢを追加するとフラッシュメモリ１２の空き容量が８０ｋ不足する。したがって、ＣＰＵ１１は、順序案１の順序では更新できない。なお、本実施例ではフラッシュメモリ１２の総容量を５００ｋとしているが、例えば、フラッシュメモリ１２の総容量が５８０ｋ以上であれば、ＣＰＵ１１は、順序案１の順序でファームウエアの更新が可能である。
【００６２】
更新モジュールには、モジュールＢとモジュールＤがある。依存関係からみれば、モジュールＤを実行するためにはモジュールＢが必要である。ここで、ＣＰＵ１１がモジュールＢのみを更新したと仮定すると、旧モジュールＤが実行可能であり、一方、モジュールＤのみを更新したと仮定すると、新モジュールＤが実行可能である。したがって、ＣＰＵ１１は、モジュールＢとモジュールＤとでは、どちらのモジュールを先に更新し、先にモジュールを更新した状況で電源断が発生したとしても、新モジュールＤまたは旧モジュールＤのいずれかが実行可能である。したがって、ＣＰＵ１１は、モジュールＢとモジュールＤを更新する順序を入れ替えても、モジュール間の依存関係に問題は生じない。この順序が順序案２の順序となる。
【００６３】
図１０を用いて、ＣＰＵ１１が順序案２で更新した場合のフラッシュメモリ１２のメモリ使用量について説明する順序案２では、ＣＰＵ１１が最も多くフラッシュメモリ１２を使用する時は、順番２のモジュールＢの更新の実行中であり、５１０ｋの容量を使用する。一方、図９に示すように、順序案１では、ＣＰＵ１１が最も多くフラッシュメモリ１２を使用する時は、順番１のモジュールＢの更新の実行中であり、５８０ｋの容量を使用する。したがって、ＣＰＵ１１は、モジュールＤを先に更新する方が、フラッシュメモリ１２の最大メモリ使用量は７０ｋ小さい。
【００６４】
しかし、順序案２の順序では、ＣＰＵ１１がモジュールＢを更新するときにフラッシュメモリ１２が１０ｋ不足するため、ＣＰＵ１１は、順序案２の順序ではファームウエアの更新を実行できない。なお、フラッシュメモリ１２の総容量が、例えば、５５０ｋ以上であれば、ＣＰＵ１１は、順序案２の順序でファームウエアの更新ができる。
【００６５】
旧モジュールＢはモジュールＡに依存しているが、新モジュールＢはモジュールＡに依存していない。よって、モジュールＢが更新されれば、モジュールＡは不要となる。順序案１又は順序案２の順序は、モジュールＡが削除された後にモジュールＥが追加される順序であるが、ＣＰＵ１１は、これを入れ替えて、モジュールＥの追加前にモジュールＡの削除を実行しても、モジュール間の依存関係には支障がないため、モジュールＡを削除する順序とモジュールＥを追加する順序とを入れ替えることができる。この順序は順序案３の順序である。
【００６６】
なお、旧バージョンのモジュールＢはモジュールＡに依存しているので、ＣＰＵ１１が、先にモジュールＡを削除してからモジュールＢを更新するように順序を入れ替えると、依存関係によりモジュールＡを削除してから新バージョンのモジュールＢを追加するまでの間はモジュールＤの実行ができない。したがって、ＣＰＵ１１がモジュールＡを削除した状況で電源断が発生すると、ＣＰＵ１１は、モジュールＤの実行ができない。最悪の場合、モジュールＡが存在しないためプリンタ１０は起動しない場合もある。
【００６７】
図１１を用いて、ＣＰＵ１１が順序案３で更新した場合のフラッシュメモリ１２のメモリ使用量について説明する。本実施例の場合、ＣＰＵ１１は、順序案３の順序に入れ替えても、モジュールＢを更新するときにフラッシュメモリ１２の空き容量が１０ｋ不足するので、順序案３の順序ではファームウエアの更新ができない。なお、フラッシュメモリ１２の総容量が５１０ｋ以上であれば、ＣＰＵ１１は、順序案３の順序でファームウエアの更新が可能である。
【００６８】
ＣＰＵ１１は、モジュールＢの更新について、旧モジュールＢを削除した後で新モジュールＢを追加するように処理を分離する。この順序は順序案４の順序である。
【００６９】
図１２を用いて、ＣＰＵ１１が順序案４で更新した場合のフラッシュメモリ１２のメモリ使用量について説明する。本実施例では、フラッシュメモリ１２の総容量が５００ｋであるので、ＣＰＵ１１は、順序案４を採れば、フラッシュメモリ１２の空き容量が不足することはなく、ファームウエアの更新は可能である。
【００７０】
なお、本実施例では、上述したように、ＣＰＵ１１は、順序案５を採らなくても順序案４でファームウエアの更新が可能である。
【００７１】
以上のことから、フラッシュメモリ１２の総容量と更新順序の関係を考えれば、ＣＰＵ１１は、フラッシュメモリ１２の総容量が５８０ｋ以上であれば順序案１の順序で、５５０ｋ以上５８０ｋ未満であれば順序案２の順序で、５１０ｋ以上５５０ｋ未満であれば順序案３の順序で、４５０ｋ以上５１０ｋ未満であれば順序案４の順序で、モジュールの更新が可能である。また、順序案４では、モジュール間の依存関係は一時的に維持されないが、順序案１から順序案３までは、ファームウエアの更新中のモジュール間の依存関係は維持されている。
【００７２】
したがって、フラッシュメモリ１２の容量と更新するファームウエアの容量によるが、ＣＰＵ１１は、適当な順序案を選択すれば、モジュール間の依存関係を維持したままファームウエアを更新することができ、フラッシュメモリ１２の容量が非常に少ない場合でも、適当な順序案を選択すれば、モジュール間の依存関係は維持できなくなるが、ファームウエアを更新することができる。即ち、ＣＰＵ１１は、モジュール更新の信頼性を維持しつつ、ファームウエアを更新することができる。
【００７３】
図１３を参照して、ＰＣ５０とプリンタ１０間のデータのやりとりについて説明する。図１３は、ＰＣ５０とプリンタ１０の間のシーケンスを示した説明図である。ＰＣ５０は、プリンタ１０に更新するファームウエアのモジュール情報を送る（ＰＣ１０）。プリンタ１０は、ＰＣ５０から受信したファームウエアのモジュール情報とあらかじめフラッシュメモリ１２に記憶されているモジュール情報とからファームウエアの更新順序を作成する（ＰＲ１１）。
【００７４】
プリンタ１０は、作成したファームウエアの更新順序に従って、ＰＣ５０にモジュールＤの送付を依頼する（ＰＲ１２）。ＰＣ５０は、モジュールＤ送付依頼を受けるとプリンタ１０にモジュールＤを送付する（ＰＣ１３）。プリンタ１０は、ＰＣ５０からモジュールＤを受信し、モジュールＤを更新し、旧モジュールＢを削除する（ＰＲ１４）。
【００７５】
プリンタ１０は、ＰＣ５０にモジュールＢの新モジュールの送付を依頼する（ＰＲ１５）。ＰＣ５０は、モジュールＢの新モジュールの送付を依頼を受けると、プリンタ１０にモジュールＢを送付する（ＰＣ１６）。プリンタ１０は、フラッシュメモリ１２にモジュールＢを追加し）、フラッシュメモリ１２からモジュールＡを削除する（ＰＲ１７）。
【００７６】
プリンタ１０は、ＰＣ５０にモジュールＥの送付を依頼する（ＰＲ１８）。ＰＣ５０は、プリンタ１０からモジュールＥの送付依頼を受けると、プリンタ１０のモジュールＥを送付する（ＰＣ１９）。プリンタ１０は、モジュールＥを受信すると、フラッシュメモリ１２にモジュールＥを追加し（ＰＲ２０）、ＰＣ５０に対してファームウエアの更新完了報告を行い（ＰＲ２１）、ファームウエアの更新が完了する。
【００７７】
以上説明したように、本実施例に係るプリンタによれば、ＣＰＵ１１が、モジュールの更新順序を作成し、フラッシュメモリ１２の空き容量を計算し、空き容量が足りなくなる場合には、空き容量が足りなくならないように、モジュールの変更順序を変更するので、フラッシュメモリ１２にファームウエア更新後のモジュールを記憶できる容量があれば、ファームウエアの更新が可能である。
【００７８】
また、ファームウエアのモジュールの更新順序の変更は、ＣＰＵ１１が、フラッシュメモリ１２の空き容量をチェックしながら少しずつ順序を変更するので、適当な更新順序を選択すれば、モジュール更新の信頼性を維持しつつモジュールを更新順序を変更することができる。
【００７９】
ファームウエアの更新は、ＣＰＵ１１が、モジュール更新の信頼性を維持しつつモジュールを更新するので、ファームウエアの更新中にプリンタ１０に電源断が発生した場合であっても、プリンタ１０が再起動しなくなる危険性をより少なくすることができる。
【００８０】
Ｃ．変形例
上記説明では、順序を入れ替えるごとにフラッシュメモリ１２の空き容量を算出し、順序案１ではモジュールを更新できない場合に順序案２を採用し、順序案２でモジュールを更新できない場合には順序案３を採用し、順序案３でモジュールを更新できない場合には順序案４を採用するようにしているが、順序を決定する直前にフラッシュメモリ１２の空き容量を算出することは必要であるが、順序変更の途中ではフラッシュメモリ１２の空き容量を算出しなくてもよい。また順序案の入れ替えについて、順序案のどの入れ替えを優先的に採用するかは自由である。
【００８１】
以上、実施例に基づいて本発明の実施の形態について説明してきたが、上記した発明の実施の形態は、本発明の理解を容易にするためのものであり、本発明を限定するものではない。本発明は、その趣旨並びに特許請求の範囲を逸脱することなく、変更、改良され得るとともに、本発明にはその等価物が含まれることはもちろんである。
【図面の簡単な説明】
【００８２】
【図１】本発明の実施例に係るプリンタの構成を示す説明図
【図２】本発明の実施例に係るＰＣの構成を示す説明図である
【図３】プリンタのファームウエアを更新する場合のＰＣの動作のフローチャートを示した説明図
【図４】ＰＣからプリンタに送られるモジュール情報を示す説明図
【図５】ファームウエアの更新前にプリンタのフラッシュメモリに記憶されているモジュール情報を示す説明図
【図６】プリンタのファームウエアを更新する場合のプリンタの動作のフローチャートを示した説明図
【図７】確定したファームウエアの更新順序及びモジュールに対する命令を記載したモジュール更新順序テーブル
【図８】ＣＰＵがプリンタのファームウエアの更新順序を確定するサブルーチンの動作のフローチャートを示した説明図
【図９】ＣＰＵが順序案１によりプリンタのファームウエアを更新する場合の各モジュールの更新実行前、実行中、実行後のフラッシュメモリの使用メモリ量、空き容量を示す説明図
【図１０】ＣＰＵが順序案２によりプリンタのファームウエアを更新する場合の各モジュールの更新実行前、実行中、実行後のフラッシュメモリの使用メモリ量、空き容量を示す説明図
【図１１】ＣＰＵが順序案３によりプリンタのファームウエアを更新する場合の各モジュールの更新実行前、実行中、実行後のフラッシュメモリの使用メモリ量、空き容量を示す説明図
【図１２】ＣＰＵが順序案４によりプリンタのファームウエアを更新する場合の各モジュールの更新実行前、実行中、実行後のフラッシュメモリの使用メモリ量、空き容量を示す説明図
【図１３】ＰＣとプリンタの間のシーケンスを示した説明図
【符号の説明】
【００８３】
１０…プリンタ
１１…ＣＰＵ
１２…フラッシュメモリ
１３…ＲＯＭ
１４…ＲＡＭ
１５…ネットワークインターフェース
１６…印刷部
１７…ネットワーク
１８…印字ヘッド
１９…紙送り機構
５０…ＰＣ
５１…ＣＰＵ
５２…ＲＯＭ
５３…ＲＡＭ
５４…ハードディスク
５５…ＣＤ−ＲＯＭ装置
５６…入力インターフェース
５７…出力インターフェース
５８…ネットワークインターフェース
５９…ディスプレイ
６０…キーボード
６１…マウス
【図１】
2007213189.tif 000003
【図２】
2007213189.tif 000004
【図３】
2007213189.tif 000005
【図４】
2007213189.tif 000006
【図５】
2007213189.tif 000007
【図６】
2007213189.tif 000008
【図７】
2007213189.tif 000009
【図８】
2007213189.tif 000010
【図９】
2007213189.tif 000011
【図１０】
2007213189.tif 000012
【図１１】
2007213189.tif 000013
【図１２】
2007213189.tif 000014
【図１３】
2007213189.tif 000015