以下に、本発明を実施するための形態について、図面を参照しながら詳しく説明する。なお、同一の構成要素には同一の参照番号を付して、説明を省略する。また、初めに本実施例に必要となる構成ブロックについて説明し、次に、処理の詳細について説明する。
[第1の実施例]
図1は、情報処理装置100の構成を示すブロック図である。
図1において、制御部200は、情報処理装置100全体を制御するための構成である。制御部200は、情報処理装置100を制御するための構成として、以下に示すものを含む。
CPU210は、FlashROM211に記憶された制御部200用のプログラム(第1プログラム)をRAM212に読出して実行する。
ハードディスクドライブ(HDD)213は、ネットワークI/F218を介してPC226から受信した印刷データを記憶する。なお、CPU210により実行されるプログラムには、後述するプリント用アプリケーションプログラムが含まれる。そして、このプリント用アプリケーションプログラムにより、HDD213に記憶された印刷データがプリンタ部220によるプリントが可能な画像データに変換される。そして、HDD213には、プリンタ部220によるプリントが可能な画像データも記憶される。また、CPU210により実行されるプログラムには、後述するスキャン用アプリケーションプログラムが含まれる。そして、このスキャン用アプリケーションプログラムにより、スキャナ部221により画像データが読み取られるとともに、読み取られた画像データがHDD213に転送される。そして、HDD213には、読み取られた画像データが記憶される。SRAM227は、情報処理装置100が起動する際に、後述するメインパーティションとサブパーティションのいずれのプログラムで起動をするべきかを示す情報が記憶される。なお、メインパーティションにより起動するべきことを示す情報が記憶される場合は、後述する通常起動モードとサブパーティションのプログラムをアップデートするためのアップデートモードのいずれで起動するべきかを示す情報が更に記憶される。
操作部I/F214は、操作部219を介して情報処理装置100の操作者により入力される指示をCPU210に伝達するためのI/Fである。また、操作部I/F214は、操作部219に表示される内容を切替えるためのCPU210から受信して操作部219に伝達する。
プリンタI/F215は、制御部200とプリンタ部220及びフィニッシャ部222を接続するためのインターフェースである。ここで、プリンタ部220は、プリンタI/F215を介してHDD213から転送される画像データに基づいてシート上にプリントを行う。なお、プリンタ部220(プリント手段)は、CPU220aとFlashROM220bを有する。CPU220aは、FlashROM220bに記憶されたプログラム(第2プログラム)を実行することにより、プリント処理に伴う各種の動作をプリンタ部220に実行させる。
また、フィニッシャ部222は、プリンタ部220によりプリントが行われたシートに対して各種のフィニッシング処理を行うものである。フィニッシング処理とは、例えば、シートに対するステイプル処理、シートへのパンチ処理(穿孔処理)等である。なお、フィニッシャ部222は、CPU222aとFlashROM222bを有する。CPU222aは、FlashROM222bに記憶されたプログラム(第2プログラム)を実行することにより、フィニッシング処理に伴う各種の動作をフィニッシャ部222に実行させる。
スキャナI/F216は、制御部200とスキャナ部221を接続するためのインターフェースである。ここで、スキャナ部220(画像データを入力する入力手段)は、原稿上の画像をCCD(ChargeCoupledDevice)等により構成されるラインセンサを用いて画像データとして読み取るものである。そして、スキャナ部220は、読み取った画像データをスキャナI/F216を介してHDD213へ転送する。HDD213へ転送され、記憶された画像データは、前述したプリント部220によりプリントすることが可能であり、スキャナ部221により読み取った画像データをプリント部220によりプリントすることにより、複写(コピー)処理が可能となる。なお、スキャナ部221は、CPU221aとFlashROM221bを有する。CPU221aは、FlashROM221bに記憶されたプログラム(第2プログラム)を実行することにより、スキャン処理に伴う各種の動作をスキャナ部221に実行させる。
USB−HostI/F217は、制御部200とUSB−FAX部223を接続するためのインターフェースである。ここで、USB−FAX部223は、USB−HostI/F213を介してHDD213から転送される画像データに基づいてFAX回線115を介したFAX送信を行う。また、USB−FAX部223は、FAX回線115を介して受信するデータに基づいて画像データを生成し、USB−HostI/F213を介してHDD213に画像データを転送する。なお、HDD213に記憶された画像データは前述したようにプリンタ部220によりシートへプリントされる。なお、USB−FAX部223は、CPU223aとFlashROM223bを有する。CPU223aは、FlashROM223bに記憶されたプログラム(第2プログラム)を実行することにより、FAX通信処理に伴う各種の動作をUSB−FAX部223に実行させる。
ネットワークI/F218は、制御部200をLAN110に接続し、LAN110上のPC226やサーバ装置225との通信を行う。なお、サーバ装置225は、後述する各種のプログラム(情報処理装置100により実行されるもの)をアップデート(更新)するための更新情報が記憶されており、情報処理装置100からの要求に応じて、更新情報を情報処理装置100へ送信する。
次に、制御部200のCPU210(第1制御手段)により実行されるプログラムの構成について図2を用いて説明する。
なお、図2に示されるプログラムは、図1のFlashROM211に記憶されているものとする。
FlashROM211に記憶されるプログラムは、FlashROM211上の2つのパーティションに分けて格納されている。1つはメインパーティション401であり、もう1つはサブパーティション402である。情報処理装置100に通常の動作をさせる際には、メインパーティションに格納されたオペレーティングシステムプログラム(以下、OS)をCPU210に実行させる。その一方で、情報処理装置100の通常の動作をさせるためのプログラム(後述するメインモジュール410)を更新する際には、サブパーティションに格納されたOSをCPU210に実行させる。
メインパーティション401には、OS411、メインモジュール410及びアップデートモジュール420の3つのプログラムモジュールが含まれている。OS411は、情報処理装置100を制御するためのOSであり、プリンタ部220、スキャナ部221、フィニッシャ部222、USB−FAX部223を含む情報処理装置100の各部の動作を制御するためのドライバプログラムを含むものである。
また、サブパーティション402には、OS431及びアップデートモジュール430の2つのプログラムモジュールが含まれている。OS431は、情報処理装置100を制御するためのOSであり、プリンタ部220、スキャナ部221、フィニッシャ部222、USB−FAX部223を含む情報処理装置100の各部の動作を制御するためのドライバプログラムを含むものである。なお、OS431は、前述したOS411と同様のものである。
メインパーティション401に、OS411以外に2つのモジュールが格納されているのは、各モジュールを情報処理装置100の起動モードに応じて選択的に実行するためである。具体的には、情報処理装置100に通常の動作をさせるための通常起動モードにおいて、CPU210はOS411を実行するとともに、メインモジュール410に含まれる各プログラムを実行する。そして、この通常起動モードにおいて、CPU210は、アップデートモジュール420に含まれるプログラムを実行しない。また、サブパーティション402に格納されたプログラムを更新するアップデートモードにおいて、CPU210はOS411を実行するとともに、アップデートモジュール420に含まれるプログラムを実行する。そして、このアップデートモードにおいて、CPU210は、メインモジュール410に含まれる各プログラムを実行しない。
ここで、メインパーティション401のメインモジュール410に含まれる各プログラムモジュールについて説明する。なお、各プログラムモジュールは、OS411が起動した後に、OS411により実行されるアプリケーションプログラムである。
メインモジュール410に含まれる操作部アプリケーションプログラム412は、操作部219を介して情報処理装置100の操作者により入力される指示をCPU210に伝達し、伝達された指示に応じた処理を実行するためのプログラムである。また、スキャンアプリケーションプログラム413は、前述したスキャナ部221によるスキャン処理を制御するためのプログラムである。また、プリントアプリケーションプログラム414は、前述したプリンタ部220によるプリント処理を制御するためのプログラムである。ネットワークアプリケーションプログラム415は、LAN110上のPC226やサーバ装置225との通信を行うためのプログラムである。アップデート準備プログラム416は、通常起動モードで動作中の情報処理装置100が、プログラムのアップデートを実行するための準備動作を実行するためのプログラムである。
アップデートモジュール420に含まれるサブパーティションアップデート421は、サブパーティション402に含まれるアップデートモジュール430及びOS431をアップデートするためのプログラムである。
次に、サブパーティション402のアップデートモジュール430に含まれる各プログラムモジュールについて説明する。なお、各プログラムモジュールは、OS411が起動した後に、OS411により実行されるアプリケーションプログラムである。
メインパーティションアップデートプログラム432は、メインパーティション401に含まれるメインモジュール410、アップデートモジュール420及びOS411をアップデートするためのプログラム(第1更新プログラム)である。処理部アップデートプログラム433(第2更新プログラム)は、FlashROM220bに含まれるプリント処理を実行するためのプログラム、FlashROM221bに含まれるスキャン処理を実行するためのプログラムを更新するためのプログラムである。また、処理部アップデートプログラム433は、FlashROM222bに含まれるフィニッシング処理を実行するためのプログラムである。また、処理部アップデートプログラム433は、FlashROM223bに含まれるFAX通信処理を実行するためのプログラムを更新するためのプログラムでもある。
次に、第1の実施例におけるプログラムの更新処理について図3〜図6を用いて説明する。
図6は、情報処理装置100がオフ状態からオン状態へ切替えられたことに応じて開始される処理を示すフローチャートである。
図3は、メインパーティション401のプログラムを通常起動モードにて実行した場合の処理を示すフローチャートである。
図4は、サブパーティション402のプログラムを実行した場合の処理を示すフローチャートである。
図5は、メインパーティション401のプログラムをアップデートモードにて実行した場合の処理を示すフローチャートである。
なお、図3〜5の各ステップにおける処理は、制御部200のCPU210がFlashROM211に記憶されたプログラムを実行することにより行われる。
まず、図6を用いて、情報処理装置100の起動モードを決定し、決定された起動モードにて起動する処理について説明する。
なお、図6の処理は、情報処理装置100がオフ状態からオン状態へ切替えられたことに応じて開始される。オフ状態とは、情報処理装置100の各部に電源からの電力が供給されない状態をいう。そして、オフ状態からオン状態に切替えられる場合とは、メインスイッチ(不図示)をオンした場合や、後述するように情報処理装置100が再起動された場合をいう。
また、図6の処理は、制御部200のFlashROM211に記憶されたブートプログラムをRAM212に読み出して、それをCPU210が実行することにより行われる処理である。
図6のステップS601で、CPU210は、SRAM227にサブパーティションにより起動されるべきことを示す情報が記憶されているかどうかを判定する。そして、CPU210は、YESと判定した場合はステップS603へ処理を進め、NOと判定した場合はステップS602へ処理を進める。
ステップS603で、CPU210は、サブパーティションのプログラムを起動させることにより、メインパーティションのプログラムの更新処理を行う。このステップS603の処理は、図4を用いて説明する。
ステップS602で、CPU210は、SRAM227にメインパーティションにより起動されるべきことを示す情報が記憶されており、かつ、アップデートモードが指定されているかどうかを判定する。そして、CPU210は、YESと判定した場合はステップS604へ処理を進め、NOと判定した場合はステップS605へ処理を進める。なお、ステップS602でNOと判定される場合、SRAM227には、メインパーティションにより起動されるべきことを示す情報が記憶されており、更に通常起動モードで記憶されるべきであることを示す情報が記憶されている。
ステップS604で、CPU210は、メインパーティションのプログラムをアップデートモードで起動させることにより、サブパーティションのプログラムの更新処理を行う。このステップS604の処理は、図5を用いて説明する。
ステップS605で、CPU210は、メインパーティションのプログラムを通常起動モードで起動させる。このステップS605の処理は、図3を用いて説明する。
なお、ステップS603、S604及びS605の処理を実行した後は、情報処理装置100を自動的に再起動させるために、情報処理装置100の電源をオフ状態に切替えた後にオン状態に切替えられる。このようにすることで、再び図6の処理が開始され、SRAM227に記憶された情報に応じた適切なモードにて情報処理装置100が起動する。
また、SRAM227に記憶される情報については、後述する図3のフローチャートの説明中に示す。
次に、図3を用いて、メインパーティション401のプログラムを通常起動モードにて実行した場合の処理を説明する。図3の各処理は、前述した図6のステップS605に対応するものである。
ステップS301で、CPU210は、情報処理装置100を通常起動モードにて起動させる。具体的には、CPU210がOS411を起動させ、起動したOS411によりメインモジュール410に含まれる各プログラムモジュールを実行する。
ステップS302で、CPU210は、情報処理装置100のプログラムを更新するための更新処理の実行指示がなされたかどうかを判定し、なされたと判定された場合はステップS303へ処理を進める。ここで、更新処理の実行指示とは、例えば、情報処理装置100の操作者が操作部219を介してなされる指示を言う。また、一定期間(例えば、2週間)毎にプログラムを定期的に更新するようにスケジュールを予め設定しておき、定期的に更新処理の実行指示が自動的になされるようにしても良い。
ステップS303で、CPU210は、OS411を介してアップデート準備プログラム416を実行することにより、FlashROM211、FlashROM220b〜223bに記憶された各プログラムのうち、更新候補となるプログラムを特定する。例えば、各プログラムを指定するための表示画面を操作部219に表示させ、操作部219を介して操作者により指示されたプログラムを更新候補として特定する。なお、操作者による指示に基づくことなく、更新候補となり得る全てのプログラムを更新候補として特定しても良い。
ステップS304で、CPU210は、アップデート準備プログラム416を実行し、情報処理装置100を特定するための機種ID情報とバージョン情報の取得要求をサーバ装置に送信する。そして、情報処理装置100は、サーバ装置225により管理されるバージョン情報を取得する。ここでバージョン情報とは、前述したメインモジュール410に含まれる各プログラムモジュールのバージョンを示す情報である。なお、サーバ装置225は、情報処理装置100から機種IDとバージョン情報の取得要求を受信した場合、機種IDに対応するバージョン情報を特定し、特定したバージョン情報を情報処理装置100へ送信する。
ステップS305で、CPU210は、アップデート準備プログラム416を実行し、情報処理装置100のバージョン情報を取得する。ここで、情報処理装置100のバージョン情報とは、FlashROM211、FlashROM220b〜223bに記憶された各プログラムのバージョンを示す情報をいう。
ステップS306で、CPU210は、アップデート準備プログラム416を実行し、更新対象のプログラムを特定する。具体的には、ステップS303で特定された更新候補となるプログラムの中から、サーバ装置225と情報処理装置100とでバージョン情報が異なるものを特定する。これにより、情報処理装置100よりもバージョンの新しいプログラムがサーバ装置225からダウンロードすることが可能であることがわかる。
ステップS307で、CPU210は、ステップS305で特定された更新対象のプログラム(更新情報)をサーバ装置225から取得する。具体的に、情報処理装置100は、ステップS306で特定された更新対象のプログラムを示すプログラム特定情報をサーバ装置225へ送信する。サーバ装置225は、情報処理装置100からプログラム特定情報を受信した場合、プログラム特定情報に対応するプログラムを情報処理装置100へ送信する。なお、サーバ装置225から受信した更新対象のプログラムは、FlashROM211のメインパーティション401に記憶させるものとする。
ステップS308で、CPU210は、ステップS306にて特定された更新対象のプログラムに、メインパーティション401のプログラムが含まれるかどうかを判定し、含まれる場合はステップS309へ処理を進め、含まれない場合はステップS310へ処理を進める。
ステップS309で、CPU210は、メインパーティションにより起動されるべきことを示す情報と更にアップデートモードで記憶されるべきであることを示す情報をSRAM227に記憶させる。
ステップS310で、CPU210は、ステップS306にて特定された更新対象のプログラムに、処理部のプログラム(FlashROM220b〜223bに記憶された各プログラム)が含まれるかどうかを判定する。そして、含まれると判定した場合はステップS309へ処理を進め、含まれないと判定した場合はステップS311へ処理を進める。
ステップS311で、CPU210は、ステップS306にて特定された更新対象のプログラムに、サブパーティション402のプログラムが含まれるかどうかを判定し、含まれる場合はステップS312へ処理を進め、含まれない場合は処理を終了させる。
ステップS312で、CPU210は、サブパーティションにより起動されるべきことを示す情報をSRAM227に記憶させる。
次に、図4を用いて、サブパーティション402のプログラムを実行した場合の処理(情報処理装置100のプログラムを更新する処理)を説明する。図4の各処理は、前述した図6のステップS603に対応するものである。
ステップS401で、CPU210は、SRAM227にサブパーティションのプログラムを起動させることを示すフラグが記憶されていることを確認し、サブパーティションのプログラムを起動させる。
ステップS402で、CPU210は、メインパーティション401に記憶されたプログラム(退避情報)を退避させる退避処理を実行する。具体的には、メインパーティション401に記憶された全てのプログラムをサブパーティション402へ複写することで退避させる。なお、サブパーティション402に十分な空き容量が無い場合には、HDD213に退避させるようにしてもよい。このような退避処理を実行させるのは、メインパーティション401のプログラムの更新処理が完了しなかった場合に、更新前の状態に復元できるようにするためである。
ステップS403で、CPU210は、メインパーティションアップデートプログラム432を実行することにより、メインパーティション401の各プログラムの更新処理を実行する。
ステップS404で、CPU210は、メインパーティション401の各プログラムの更新処理が成功したかどうかを判定し、成功したと判定した場合はステップS405へ処理を進める。一方、更新処理が成功(完了)しなかったと判定した場合は、ステップS408へ処理を進める。なお、更新処理が成功(完了)しなかったと判定する場合は、例えば、更新処理を開始してからの経過時間が一定時間を経過しても更新処理が終了しない場合である。
ステップS405で、CPU210は、処理部アップデートプログラム433を実行する。そして、CPU210は、各処理部(プリンタ部220、スキャナ部221、USB−FAX部223、フィニッシャ部222)に記憶されたプログラム(退避情報)を退避させる退避処理を実行する。具体的には、各処理部に記憶された全てのプログラムをサブパーティション402へ複写することで退避させる。なお、サブパーティション402に十分な空き容量が無い場合には、HDD213に退避させるようにしてもよい。
ステップS406で、CPU210は、処理部アップデートプログラム433を実行することにより、各処理部(プリンタ部220、スキャナ部221、USB−FAX部223、フィニッシャ部222)が実行するプログラムの更新処理を実行する。
ステップS407で、CPU210は、各処理部のプログラムの更新処理が成功したかどうかを判定し、成功したと判定した場合はステップS407へ処理を進める。一方、更新処理が成功しなかった場合は、ステップS409へ処理を進める。なお、更新処理が成功しない状態となる場合は、例えば、更新処理を開始してからの経過時間が一定時間を経過しても更新処理が終了しない場合である。また、第1の実施例では、処理部として、プリンタ部220、スキャナ部221、USB−FAX部223、フィニッシャ部222が存在するが、いずれか処理部の更新処理が完了しない場合に、ステップS407の判定をNOとする。
ステップS408で、CPU210は、メインパーティションのプログラムの更新処理が成功したので、次回の起動でメインパーティションのプログラムの更新処理が行われないようにするために、サブパーティションのプログラムを起動させることを指定するフラグをOFFとする情報をSRAM227へ記憶させる。
ステップS409で、CPU210は、各処理部のプログラム(複数のサブプログラム)をサブパーティション402へステップS405で退避済みのプログラムで復元する。具体的には、サブパーティション402へ退避済みのプログラムを各処理部のFlashROM(220b〜223b)へ複写することで復元する。このように復元するのは、ステップS407でプログラム(第2プログラム)の更新処理が成功(完了)しなかったと判定されたからである。
ステップS410で、CPU210は、メインパーティション401のプログラムをサブパーティション402へステップS402で退避済みのプログラムで復元する。具体的には、サブパーティション402へ退避済みのプログラムをメインパーティション401へ複写することで復元する。このように復元するのは、ステップS404又はステップS407でプログラムの更新処理が成功(完了)しなかったと判定されたからである。
なお、メインパーティション401のプログラムの復元は、ステップS404にてメインパーティション401のプログラムの更新処理が成功したと判定された場合であってもステップS407でNOと判定された場合に実行される。ステップS407でNOと判定されるのは、各処理部のプログラムの更新処理が成功(完了)しなかった場合である。このように、メインパーティション401のプログラムの更新処理が成功した場合であっても、メインパーティション401のプログラムを更新前のプログラムに復元しているのは、次の理由による。それは、メインパーティション401のプログラムと各処理部のプログラムのバージョンの組み合わせを適切なものとするためである。例えば、メインパーティション401のプログラムがバージョンアップされる一方で、各処理部のプログラムがバージョンアップされない場合、メインパーティション401のプログラムと各処理部のプログラムのバージョンの組み合わせが適切なものとならない。この場合、制御部200と各処理部のデータの受け渡しや、制御部200から各処理部への指示とその応答が適切になされないこととなる。従って、このようなバージョンの組み合わせの不適合が発生しないように、メインパーティション401のプログラムの更新処理が成功した場合であっても、メインパーティション401のプログラムを更新前のプログラムに復元する。
次に、図5を用いて、メインパーティション401のサブパーティションアップデートプログラムを実行した場合の処理を説明する。図5の各処理は、前述した図6のステップS604に対応するものである。
ステップS501で、CPU210は、SRAM227にメインパーティションのプログラムを起動させ、かつアップデートモードで起動させることを指定するフラグが記憶されていることを確認し、情報処理装置100をアップデートモードにて起動させる。具体的には、CPU210がOS411を起動させ、起動したOS411によりサブパーティションアップデートプログラム421を起動させる。
ステップS502で、CPU210は、サブパーティション402に記憶されたプログラムを退避させる退避処理を実行する。具体的には、サブパーティション402に記憶された全てのプログラムをメインパーティション401へ複写することで退避させる。なお、メインパーティション401に十分な空き容量が無い場合には、HDD213に退避させるようにしてもよい。このような退避処理を実行させるのは、サブパーティション402のプログラムの更新処理が完了しなかった場合に、更新前の状態に復元できるようにするためである。
ステップS503で、CPU210は、サブパーティションアップデートプログラム421を実行することにより、サブパーティション402の各プログラムの更新処理を実行する。
ステップS504で、CPU210は、サブパーティション402の各プログラムの更新処理が成功したかどうかを判定し、成功したと判定した場合はステップS505へ処理を進める。一方、更新処理が成功(完了)しなかった場合は、ステップS506へ処理を進める。なお、更新処理が成功(完了)しなかった場合は、例えば、更新処理を開始してからの経過時間が一定時間を経過しても更新処理が終了しない場合である。
ステップS505で、CPU210は、サブパーティションのプログラムの更新処理が成功したので、次回の起動でサブパーティションのプログラムの更新処理が行われないようにするために、メインパーティションのプログラムをアップデートモードで起動させることを指定するフラグをOFFとする情報をSRAM227へ記憶させる。
ステップS506で、CPU210は、ステップS504でプログラムの更新処理が成功しなかったので、各処理部のプログラムをメインパーティション401へステップS502で退避済みのプログラムで復元する。具体的には、メインパーティション401へ退避済みのプログラムをサブパーティション402へ複写することで復元する。
以上説明したように、第1の実施例によれば、情報処理装置が実行する複数のプログラムの更新にあたって、いずれかのプログラムの更新処理が完了しない場合であっても、他のプログラムの実行が出来ない状態とならないようにする情報処理装置及びその制御方法を提供することができる。より具体的には、複数のプログラムをメインパーティションとサブパーティションに分けておき、一方のパーティションのプログラムにより他方のパーティションのプログラムを更新するようにする。これにより、一方のプログラムの更新処理が完了しなかった場合であっても、他方のプログラムの実行が出来ない状態となるのを防止することができる。
更に、複数のプログラムのうち、いずれを更新対象とするかを特定し、更新対象として特定されたプログラムを更新するための処理のみを」実行するようにする。これにより、更新対象となっていないプログラムを更新するために情報処理装置100を再起動させる処理を無駄に実行しないようにすることができる。
[他の実施例]
以上の説明においては、更新情報は、ネットワークI/F218を介してサーバ装置225から受信するものとして説明したが、他の態様であってもよい。例えば、USB−HostI/F217を介してUSBメモリ(外部メモリ)が接続されるようにし、USBメモリに記憶された更新情報をUSB−HostI/F217を介して受信するような態様であっても良い。
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。この場合、そのプログラム、及び該プログラムを記憶した記憶媒体は本発明を構成することになる。