以下に添付図面を参照して、この発明にかかる画像形成装置およびプログラム更新方法の好適な実施の形態を詳細に説明する。
(実施の形態1)
図1は、この発明の実施の形態1である画像形成装置(以下、「複合機」という)の構成を示すブロック図である。図1に示すように、複合機100は、白黒ラインプリンタ(B&W LP)101と、カラーラインプリンタ(Color LP)102と、スキャナ、ファクシミリなどのハードウェアリソース103などを有するとともに、プラットホーム120とアプリケーション130とから構成されるソフトウェア群110と、電源投入時に実行される複合機起動部140とを備えている。
複合機起動部140は、複合機100の電源投入時にまずはじめに実行され、プラットホーム120やアプリケーション130を起動モードに応じて実行するものである。ここで、起動モードには通常モードとROM更新モードがある。通常モードとは、複合機100でコピー、プリント、スキャナ、ファクシミリなど通常の複合サービスを行うために起動するモードであり、後述するSRAM208のリモートROM更新フラグがOFFに設定されている場合に起動される。
一方、ROM更新モードとは記憶部の一例としてのフラッシュメモリの更新を行うために複合機100を起動するモードであり、SRAM208のリモートROM更新フラグがONに設定されている場合に起動される。
プラットホーム120は、アプリケーション130からの処理要求を解釈してハードウェア資源の獲得要求を発生させるコントロールサービスと、一または複数のハードウェア資源の管理を行い、コントロールサービスからの獲得要求を調停するシステムリソースマネージャ(SRM)123と、汎用OS121とを有する。
コントロールサービスは、複数のサービスモジュールから形成され、SCS(システムコントロールサービス)122と、ECS(エンジンコントロールサービス)124と、MCS(メモリコントロールサービス)125と、OCS(オペレーションパネルコントロールサービス)126と、FCS(ファックスコントロールサービス)127と、NCS(ネットワークコントロールサービス)128とから構成される。なお、このプラットホーム120は、あらかじめ定義された関数により前記アプリケーション130から処理要求を受信可能とするアプリケーションプログラムインタフェース(API)を有する。
汎用OS121は、UNIX(登録商標)などの汎用オペレーティングシステムであり、プラットホーム120並びにアプリケーション130の各ソフトウェアをそれぞれプロセスとして並列実行する。
MCS125は、メモリの制御を行うプロセスとして起動される。このMCS125のプロセスは、画像メモリの取得および解放、ハードディスク装置(HDD)の利用、画像データの圧縮および伸張などのコピー、プリンタ、ファクシミリおよびスキャナなどの複合サービスを行う際に実行される通常モードスレッドと、複合機100がROM更新モードで起動された場合に、後述するリモートROM更新アプリによって更新データパケットから展開された更新データを格納する更新データ領域をSDRAM203に確保するROM更新モードスレッドとを有している。ここで、更新データパケットは、本発明における更新データ群を構成するものである。
OCS126のプロセスは、オペレータと本体制御間の情報伝達手段となる操作パネル(オペレーションパネル)の制御という複合サービスを行う際に起動される通常モードスレッドと、かかる操作パネルの制御を行わず単に起動されるだけのROM更新モードスレッドを有している。
FCS127のプロセスは、システムコントローラの各アプリ層からPSTN/ISDN網を利用したファクシミリ送受信、BKM(バックアップSRAM)で管理されている各種ファクシミリデータの登録/引用、ファクシミリ読みとり、ファクシミリ受信印刷、複合送受信を行うためのAPIを提供するという複合サービスを行う際に起動される通常モードスレッドと、かかる機能を実行せずに単に起動されるだけのROM更新モードスレッドを有している。
NCS128は、ネットワークI/Oを必要とするアプリケーションに対して共通に利用できるサービスを提供するためのプロセスであり、ネットワーク側から各プロトコルによって受信したデータを各アプリケーションに振り分けたり、アプリケーションからデータをネットワーク側に送信する際の仲介を行うという複合サービスを行う際に実行される通常モードスレッドを有している。また、NCS128の通常モードスレッドでは、さらにネットワークに接続された、例えば複合機開発元のホストコンピュータやアプリケーション開発元のサードベンダなどから、フラッシュメモリのROM更新要求パケットを受信する。NCS128のプロセスには、フラッシュメモリに組み込まれたプログラムの更新データを含む更新データパケットを複合機開発元のホストコンピュータやアプリケーション開発元のサードベンダからネットワーク経由で受信するROM更新モードスレッドも有している。
SRM123のプロセスは、SCS122とともにシステムの制御およびリソースの管理を行うものである。SRM123のプロセスは、スキャナ部やプリンタ部などのエンジン、メモリ、HDDファイル、ホストI/O(セントロI/F、ネットワークI/F、IEEE1394 I/F、RS232C I/Fなど)のハードウェア資源を利用する上位層からの要求にしたがって調停を行い、実行制御するという複合サービスを行う際に実行される通常モードスレッドと、かかるリソース管理を実行せずに単に起動されるだけのROM更新モードスレッドを有している。
具体的には、このSRM123の通常モードスレッドは、要求されたハードウェア資源が利用可能であるか(他の要求により利用されていないかどうか)を判断し、利用可能であれば要求されたハードウェア資源が利用可能である旨を上位層に伝える。また、SRM123は、上位層からの要求に対してハードウェア資源の利用スケジューリングを行い、要求内容(例えば、プリンタエンジンにより紙搬送と作像動作、メモリ確保、ファイル生成など)を直接実施している。
SCS122のプロセスは、アプリ管理、操作部制御、システム画面表示、LED表示、リソース管理、割り込みアプリ制御という複合サービスを行う際に実行される通常モードスレッドを有している。例えばSCS122の通常モードスレッドは、NCS128がネットワーク経由でROM更新要求パケットを受信したときに、SRAM208のリモートROM更新フラグをONに設定し、複合機100に対して再起動コマンドを発行する処理を行う。
SCS122のプロセスは、さらに複合機100がROM更新モードで起動された場合にのみ起動されるROM更新モードスレッドを通常モードスレッドとは別個に有している。このROM更新モードスレッドは、複合機100がROM更新モードで起動されたときに、SDRAM203に展開されたデータの中から、複合機100で動作するアプリケーション、コントロールサービスの構成に応じた更新データを選定する処理を行う。
ECS124のプロセスは、白黒ラインプリンタ(B&W LP)101、カラーラインプリンタ(Color LP)102、スキャナ、ファクシミリなどからなるハードウェアリソース103のエンジンの制御という複合サービスを行う際に実行される通常モードスレッドと、このようなエンジン制御を行わずに単に起動されるだけのROM更新モードスレッドを有している。
このように、ECS124、OCS126、FCS127、SRM123の各ROM更新モードスレッドはいずれも単に起動されるだけであるが、これは、ROM更新処理時に、複合機内部で動作するコントロールサービスの存在を示すために起動されるようになっている。一方、MCS125、SCS122、NCS128の各ROM更新モードスレッドも、それぞれROM更新に必要な処理を行うとともに、複合機内部で動作するコントロールサービスの存在を示すために起動されるようになっている。
アプリケーション130は、ページ記述言語(PDL)、PCLおよびポストスクリプト(PS)を有するプリンタ用のアプリケーションであるプリンタアプリ111と、コピー用アプリケーションであるコピーアプリ112と、ファクシミリ用アプリケーションであるファックスアプリ113と、スキャナ用アプリケーションであるスキャナアプリ114と、ネットワークファイル用アプリケーションであるネットファイルアプリ115と、工程検査用アプリケーションである工程検査アプリ116と、更新データをSDRAM203上に展開するリモートROM更新アプリ(以下、「RRUアプリ」という。)117とを有している。
これらの各アプリも、プラットホーム120と同様にそれぞれプロセスとして起動される。なお、RRUアプリ117のプロセスは、複合機100がROM更新モードで起動された場合に起動するようにしてもよい。ここで、アプリケーション130は、本発明におけるユーザサービスを構成するものである。
例えばRRUアプリ117は、NCS128がROM更新要求パケットを受信して複合機100がROM更新モードで再起動したときに、後述するプログラム起動部によって起動されるようにしてもよい。また、RRUアプリ117はプラットフォーム120と同様に、複合機100が通常モードで起動したときも起動されるようにしてもよい。
RRUアプリ117は、NCS128によりネットワーク経由で受信した更新データパケットを更新データに展開し、その更新データをMCS125のROM更新モードスレッドによって確保されたSDRAM203の更新データ領域に格納する。
図2は、図1に示した実施の形態1の複合機100のハードウェア構成図である。図2に示すように、この複合機100は、コントローラボード200と、オペレーションパネル210と、ファックスコントロールユニット(FCU)220と、USBデバイス230と、IEEE1394デバイス240と、ブルートゥースデバイス250と、エンジン部260から構成されている。
図2のコントローラボード200は、ASIC201、CPU202、SDRAM203、フラッシュメモリ204、HDD205、SRAM208およびネットワークインターフェースコントローラ209から構成されている。
オペレーションパネル210は、ASIC201に直接接続されている。FCU220、USBデバイス230、IEEE1394デバイス240,ブルートゥースデバイス250およびエンジン部260は、PCIバスを介してASIC201に接続されている。
ネットワークインターフェースコントローラ209は、ネットワーク271に接続されている他の機器とMACアドレスなどを用いて通信する。FCU220は電話網272に接続されている。また、USBデバイス230、IEEE1394デバイス240およびブルートゥースデバイス250は、他の端末273〜275に接続される。
SRAM208は、ROM更新要求パケットを受信したときにON状態に設定されるリモートROM更新フラグを格納する領域と、ROM更新要求パケットの受信後、更新データパケットをネットワーク271経由で受信したときに、受信した更新データパケットから展開される更新データを格納する更新データ領域とが確保される不揮発性メモリである。また、SRAM208には、ROM更新中に電源が切れた場合に、処理復帰のために更新中の各種情報が蓄積される。
SRAM208は、ROM更新中に電源が切れた場合に、処理復帰のために更新中の各種情報を蓄積するバッテリを用いた不揮発性メモリであり、本発明における不揮発性記憶手段を構成する。
フラッシュメモリ(以下、「フラッシュROM」という。)204には、上述の各アプリ、プラットホームを構成する各コントロールサービスやSRM123の各プログラムが格納されている。実施の形態1にかかる複合機100は、これらの各プログラムがあらかじめフラッシュROM204に組み込まれた状態で出荷され、ROM更新要求パケットの受信によって、フラッシュROM204のプログラムが更新されるという、リモートROM更新の処理が実行されるようになっている。
フラッシュROM204は、本発明における記憶部を構成するものである。なお、本発明における記憶部はフラッシュメモリ204に限るものでなく、SDRAM203、HDD205であってもよい。
図3は、NCS128がネットワーク経由で受信した更新データパケットを展開した後のデータ構造図である。ここで、更新データパケットの展開とは、更新データパケットから、宛先ネットワークアドレス、パケット長などのネットワーク情報を除去してROM更新に必要なデータを参照可能とすることである。
展開された更新データパケットは、図3に示すように、先頭のROMモニタ起動命令301と、ヘッダ部302と、データ部303とから構成される。ROMモニタ起動命令301は、複合機100の起動時に参照されて後述するROMモニタの起動を行うコマンドである。
ヘッダ部302は、更新するモジュールに対応するように、モジュールごとのヘッダブロックに分かれている。各ヘッダブロックには、次のヘッダブロックまでのオフセットである次ヘッダオフセットと、モジュールの更新データまでのオフセットである更新データオフセットと、更新データのサイズと、モジュールの識別情報であるモジュールIDと、そのモジュールのフラッシュROM204上での相対番地を示す更新先アドレスと、そのモジュールのサイズである更新先領域長とから構成される。
ここで、モジュールは、MCS125、ECS124、NCS128などのコントロールサービス単位のプログラム、プリンタアプリ111、コピーアプリ112などのアプリ単位のプログラム、プリンタエンジン101,102、スキャナエンジンなどのエンジン単位のプログラムで更新可能となっている。また、更新データとは、これらのモジュールに対する変更プログラムのバイナリデータを圧縮形式にしたものである。なお、この圧縮された更新データは、RRUアプリ117によって展開される際に伸張される。
ヘッダ部302に続いてデータ部303が記録されており、データ部303には更新データがモジュールごとに格納されている。各モジュールの更新データの先頭は、モジュールに対応するヘッダブロックの更新データオフセットにより参照できるようになっている。
図4は、実施の形態1の複合機100における複合機起動部140の構成を示すブロック図である。実施の形態1の複合機100における複合機起動部140は、図4に示すとおり、ROMモニタ410と、プログラム起動部420と、ROM更新モードスレッドを起動したSCS122と、ROM更新部430とから構成される。ROMモニタ410、プログラム起動部420、ROM更新部430はフラッシュROM204に記憶されている。
ここで、プログラム起動部420は本発明におけるプログラム起動手段を、SCS122は本発明の更新データ選定手段を、ROM更新部430は本発明における更新手段をそれぞれ構成する。
ROMモニタ410は、更新データパケットの先頭に記録されたROMモニタ起動命令を実行することにより起動され、ハードウェアの初期化、コントローラボードの診断、ソフトウェアの初期化、汎用OS121の起動などを行う。
プログラム起動部420は、汎用OS121から呼び出されるものであり、起動モード設定部421と、サービス層起動部422と、アプリ起動部423と、アプリ起動情報設定部424とから構成される。
起動モード設定部421は、SRAM208に保持されているリモートROM更新フラグのチェックを行って、通常モードまたはROM更新モードの起動モードの設定を行う。サービス層起動部422は、汎用OS121の起動情報を取得して、コントロールサービスを起動する。アプリ起動情報設定部424は、ROM更新モードの場合に実行され、各アプリの起動情報を取得して、取得したアプリ起動情報を環境変数に設定する。アプリ起動部423は、起動モードが通常モードである場合およびROM更新モードである場合に実行され、各アプリの起動情報を取得して各アプリを起動する。
SCS122のROM更新モードスレッドは、プログラム起動部420のサービス層起動部422によって他のコントロールサービスとともに起動される。SCS122のROM更新モードスレッドでは、複合機100で動作するコントロールサービスやアプリを判断して、ネットワーク271経由で受信した更新データから複合機100の構成に応じた更新データを選定する。また、SCS122のROM更新モードスレッドは、ROM更新部430を起動して、ROM更新部430に対して選定した更新データの情報とともにROM更新命令を発する。
ROM更新部430は、SCS122のROM更新モードスレッドにより起動され、SCS122からROM更新命令を受け取って、更新データでフラッシュROM204を更新するものである。ROM更新部430は、SCS122からのROM更新命令を解析するROM更新命令解読部431と、更新先アドレスと解析したROM更新命令に基づいてフラッシュROM204のプログラムを更新するROM更新処理部433と、ROM更新中の各種情報をSRAM208へ格納するSRAM処理部432と、ROM更新処理中のユーザへの進捗表示を制御する表示制御部434とから構成される。
次にこのように構成された複合機100におけるリモートROM更新処理について説明する。図5は、実施の形態1の複合機100におけるリモートROM更新の全体処理の流れを示すブロック図である。
図5(a)は、複合機100がROM更新要求を受信したときの動作を示し、図5(b)は複合機100がROM更新要求の受信後に再起動したときに、再起動の確認を行う動作を示し、図5(c)は更新データパケットを受信したときの動作を示す。
図5(a)において、複合機100が通常の複合サービスの動作を実行しているときは、各アプリ、各コントロールサービスがいずれも通常モードスレッドを実行している。
この状態で、ネットワーク経由で複合機開発元のホストコンピュータやアプリケーション開発元のサードベンダのホストコンピュータなどのリモートホストからROM更新要求パケットが送信されてくると、NCS128の通常モードスレッドはステップS501に進み、そのROM更新要求パケットを受信する。
ステップS502では、NCS128の通常モードスレッドが、受信したパケットの内容を判断して、ROM更新要求パケットであった場合には、ROM更新要求がある旨をプリンタアプリ111へ通知する。
ステップS503では、プリンタアプリ111が、NCS128からROM更新要求がある旨の通知を受信した場合に、SCS122の通常モードスレッドに対して複合機100の再起動リブート依頼通知を送信する。リブート依頼通知を受けたSCS122の通常モードスレッドは、SRAM208に格納されているリモートROM更新フラグをONに設定し、その後再起動コマンドを発行して複合機100を再起動する。
複合機100は再起動すると、フラッシュROM204のブートベクタに記録されたROMモニタ410を起動する。図6は、実施の形態1の複合機100において、ROMモニタ410で実行される処理の手順を示すフローチャートである。
ステップS601では、ROMモニタ410が、まずハードウェアの初期化を行う。ステップS602では、ROMモニタ410が、コントローラボード200の診断処理を実行する。ステップS603では、ROMモニタ410が、ソフトウェアの初期化処理を行う。ステップS604では、ROMモニタ410が、汎用OS121を起動する。
図7は、実施の形態1の複合機100において、プログラム起動部420で実行される処理の手順を示すフローチャートである。ステップS701では、プログラム起動部420が、起動モード設定部421によって、SRAM208に格納されているリモートROM更新フラグの状態をチェックする。
リモートROM更新フラグがONである場合には、起動モード設定部421はステップS702に進み、起動モードをROM更新モードに設定して以下の処理を行う。
ステップS703では、サービス層起動部422が、フラッシュROM204のファイルシステムをマウントする。ステップS704では、サービス層起動部422が、フラッシュROM204からSCS122,ECS124,MCS125などのコントロールサービスの起動情報を取得する。ステップS705では、サービス層起動部422が、ステップS704で取得した起動情報を環境変数に設定する。
そして、ステップS706では、サービス層起動部422が、SCS122、ECS124、MCS125などのコントロールサービスを汎用OS121上で起動する。このとき、各コントロールサービスはROM更新モードスレッドを起動する。従って、SCS122のプロセスではROM更新モードスレッドが起動される。
ステップS707では、サービス層起動部422が、SCS122のROM更新モードスレッドが起動したら、起動したコントロールサービスのコントロールサービス起動情報を環境変数に設定する。
ここで、コントロールサービス起動情報とは、起動したコントロールサービスのプロセスIDやモジュール名など、コントロールサービスのプログラムを識別するものであり、各コントロールサービスに固有の情報となっている。
ステップS708では、アプリ起動情報設定部424が、フラッシュROM204のファイルシステムをマウントする。ステップS709では、アプリ起動情報設定部424が、マウントしたファイルシステムを検索して、格納されているアプリのプログラムを抽出し、複合機100で起動されるアプリのアプリ起動情報を取得する。そして、ステップS710では、アプリ起動情報設定部424が、ステップS709で取得したアプリ起動情報を環境変数に設定する。
ここで、アプリ起動情報とは、複合機100で動作可能なアプリを識別するアプリ固有の情報であり、アプリのモジュールID、モジュール名などである。なお、ROM更新モードでは、コントロールサービスを起動し、アプリは起動しない。また、環境変数に設定されたコントロールサービス起動情報とアプリ起動情報は、SCS122へ受け渡される。このようにしてROM更新モードでのプログラム起動が行われる。そして、ステップS711では、アプリ起動部423が、RRUアプリ117を起動する。
なお、ステップS701で、リモートROM更新フラグがOFFである場合には、起動モード設定部421はステップS712に進み、起動モードを通常モードに設定して以下の通常起動の処理を行う。
ステップS713では、サービス層起動部422が、フラッシュROM204のファイルシステムをマウントする。ステップS714では、サービス層起動部422が、フラッシュROM204からSCS122,ECS124,MCS125などのコントロールサービスの起動情報を取得する。ステップS715では、サービス層起動部422が、SCS122、ECS124、MCS125などのコントロールサービスを汎用OS上で起動する。このとき、各コントロールサービスのプロセスでは、通常モードスレッドが起動される。
ステップS716では、アプリ起動部423が、フラッシュROM204のファイルシステムをマウントする。ステップS717では、アプリ起動部423が、マウントしたファイルシステムから複合機100で起動される上述のアプリ起動情報を取得する。ステップS718では、アプリ起動部423が、各アプリを起動する。なお、このときはRRUアプリ117は起動しない。
図5(b)において、ROM更新要求を行ったリモートホスト(複合機開発元のホストコンピュータやアプリケーション開発元のサードベンダのホストコンピュータなど)からROM更新可能状態確認パケットがネットワーク271経由で複合機100に対して送信されてくる。
ステップS504では、コントロールサービスおよびRRUアプリ117が複合機100で起動されているので、NCS128のROM更新モードスレッドがROM更新可能状態確認パケットを受信する。ステップS505では、NCS128のROM更新モードスレッドが、受信したROM更新可能状態確認パケットをRRUアプリ117へ受け渡す。
このとき、複合機100はROM更新モードで再起動されているため、ROM更新可能な状態となっている。ステップS506では、RRUアプリ117が、ROM更新可能状態確認パケットに対する応答メッセージとしてリモートROM更新可能のメッセージをNCS128へ送信する。ステップS507では、NCS128のROM更新モードスレッドが、リモートROM更新可能のメッセージをネットワーク271経由でROM更新可能状態確認パケットの送信元であるリモートホストへ送信する。
NCS122がROM更新可能状態確認パケットに対する応答をリモートホストへ送信すると、図5(c)に示すように、リモートホストから更新データパケットが送信されてくる。このため、ステップS508では、複合機100が、NCS128のROM更新モードスレッドで更新データパケットを受信する。ステップS509では、NCS128のROM更新モードスレッドが、受信した更新データパケットをRRUアプリ117へ受け渡す。
ステップS510では、RRUアプリ117が、更新データパケットを展開したデータに必要な領域を得るために、MCS125に対して、SDRAM203上に更新データ領域の確保を要求する。ステップS511では、確保要求を受けたMCS125のROM更新モードスレッドが、SDRAM203上に更新データ領域を確保して、その領域の先頭アドレスと確保した領域サイズとをRRUアプリ117に返す。
RRUアプリ117では、ネットワーク情報を除去し、また圧縮形式のデータを伸張した更新パケットデータを、MCS125のROM更新モードスレッドから通知された領域の先頭アドレスから展開する。これにより、SDRAM203の更新データ領域には前述した図3に示した構造のデータが格納される。
ステップS512では、RRUアプリ117が、更新データパケットを展開したSDRAM203上の領域の先頭アドレスを、SCS122へ通知する。これにより、SCS122のROM更新モードスレッドで更新データの選定処理が行われる。
図8および図9は、実施の形態1の複合機100において、SCS122のROM更新モードスレッドで実行される更新データの選定処理の手順を示すフローチャートである。
ステップS801では、SCS122のROM更新モードスレッドが、SRAM208にモジュールIDやフラッシュROM204の更新先アドレスなどの更新情報がすでに記憶されているか否かを確認する。
SRAM208に更新情報が記憶されていると判断した場合には、SCS122のROM更新モードスレッドはROM更新処理が中断された後の起動であると判断し、ステップS802に進む。ステップS802では、SCS122のROM更新モードスレッドが、SRAM208から更新情報を取得する。
ステップS802に続いてステップS803に進み、SCS122のROM更新モードスレッドは、フラッシュROM204の先頭のヘッダブロックを参照する。ステップS803に続いてステップS804に進み、SCS122のROM更新モードスレッドはヘッダブロックからモジュールIDを取得する。
ステップS804に続いてステップS805に進み、SCS122のROM更新モードスレッドはヘッダブロックから取得したモジュールIDがステップS802でSRAM208から取得した更新情報に相当するか否かを判断する。
ヘッダブロックから取得したモジュールIDが、SRAM208から取得した更新情報に該当する場合には、SCS122のROM更新モードスレッドはステップS806に進む。ステップS806では、SCS122のROM更新モードスレッドが、そのモジュールIDの更新データを選定し、さらにヘッダブロックから更新先アドレス、更新データオフセット、更新データサイズを取得する。
ステップS806に続いてステップS807に進み、SCS122のROM更新モードスレッドはモジュールID、更新先アドレス、更新データオフセット、更新データサイズを一組とした更新情報を「更新対象」の変数等に設定し、ステップS809に進む。
一方、ステップS805において、ヘッダブロックから取得したモジュールIDが、SRAM208から取得した更新情報に相当しない場合には、SCS122のROM更新モードスレッドは取得したモジュールIDの更新データを選定せず、ステップS809に進む。つまり、SCS122のROM更新モードスレッドはステップS806およびS807の処理は行わない。
ステップS809では、SCS122のROM更新モードスレッドが、次ヘッダブロックオフセットを参照することにより、次のヘッダブロックが存在するか否かを判断する。次のヘッダブロックが存在する場合には、SCS122のROM更新モードスレッドはステップS810に進み、次のヘッダブロックを参照する。そして、SCS122のROM更新モードスレッドはステップS804からステップS807,ステップS809およびステップS810の処理を繰り返し行う。
一方、次のヘッダブロックが存在しない場合には、SCS122のROM更新モードスレッドはステップS808に進む。つまり、すべてのヘッダブロックのモジュールIDについての更新データの選定が終了したら、SCS122のROM更新モードスレッドはROM更新部430を起動してROM更新命令を発行し、更新対象の変数を引き渡す。
一方、SRAM208に更新情報が存在しない場合には、ROM更新部430はステップS811に進み、SCS122のROM更新モードスレッドは、まずフラッシュROM204の最初のヘッダブロックを参照する。ステップS811に続いてステップS812に進み、SCS122のROM更新モードスレッドはヘッダブロックからモジュールIDを取得する。
ステップS812に続いてステップS813に進み、SCS122のROM更新モードスレッドはヘッダブロックから取得したモジュールIDが環境変数の中のコントロールサービスまたはアプリに相当するか否かを判断する。
ヘッダブロックから取得したモジュールIDが、環境変数の中のコントロールサービスまたはアプリに相当する場合には、SCS122のROM更新モードスレッドはステップS814に進む。
ステップS814では、SCS122のROM更新モードスレッドが、そのモジュールIDの更新データを選定し、さらにヘッダブロックから更新先アドレス、更新データオフセット、更新データサイズを取得する。
ステップS814に続いてステップS815に進み、SCS122のROM更新モードスレッドはモジュールID、更新先アドレス、更新データオフセット、更新データサイズを一組とした更新情報を「更新対象」の変数等に設定し、ステップS816に進む。
一方、ステップS813において、ヘッダブロックから取得したモジュールIDが、環境変数の中のコントロールサービスまたはアプリに相当しない場合には、SCS122のROM更新モードスレッドは取得したモジュールIDの更新データを選定せず、ステップS816に進む。つまり、SCS122のROM更新モードスレッドはステップS814およびS815の処理は行わない。
ステップS816では、SCS122のROM更新モードスレッドが、次ヘッダブロックオフセットを参照することにより、次のヘッダブロックが存在するか否かを判断する。次のヘッダブロックが存在する場合には、SCS122のROM更新モードスレッドはステップS817に進み、次のヘッダブロックを参照する。そして、SCS122のROM更新モードスレッドはステップS812からステップS817までの処理を繰り返し行う。
一方、次のヘッダブロックが存在しない場合には、SCS122のROM更新モードスレッドはステップS818に進む。つまり、すべてのヘッダブロックのモジュールIDについての更新データの選定が終了したら、SCS122のROM更新モードスレッドはROM更新部430を起動してROM更新命令を発行し、更新対象の変数を引き渡す。
これにより、リモートホストから提供される更新データの中から、複合機100内に存在するモジュールの更新データが選定されることになる。
図10は、実施の形態1の複合機100において、ROM更新部430で実行されるROM更新処理の手順を示すフローチャートである。
ステップS902では、ROM更新部430が、SCS122から受け渡された更新対象の変数から最初の組の更新情報(モジュールID、バージョン情報、更新先アドレス、更新データオフセットおよび更新データサイズ)をSRAM208に格納してステップS903に進む。ステップS902の処理により、更新処理がエラー発生によって中断した場合でも、次回の起動後に図5(b)のステップS504以降の処理を再実行することができる。
ステップS903では、ROM更新部430が、SDRAM203の先頭アドレスから更新データオフセットで示されるアドレスから更新データサイズ分のデータを更新データとして読み出し、この更新データでフラッシュROM204上の更新先アドレスから始まるモジュールを更新する。
ステップS903に続いてステップS904に進み、ROM更新部430はSDRAM203の更新データと、ステップS903で更新したフラッシュROM204上のモジュールのデータとを比較して同一か否かのチェックを行う。同一でない場合には、ROM変換部430はステップS905に進み、更新処理が失敗した旨のエラーを表示してステップS903に進む。ROM変換部430は、再度更新処理を行う。更新データと更新したモジュールのデータとが同一である場合には、ROM変換部430は更新処理が成功したと判断し、ステップS906に進む。
ステップS906では、ROM変換部430が、更新対象の変数に、次の更新情報の組が存在するか否かを判断する。存在する場合には、ROM変換部430はステップS902に進み、次の更新情報に対して、ステップS902からS905までの処理を行う。つまり、ROM変換部430はSCS122から引き渡されたすべての更新情報に対してステップS902からステップS906の処理を繰り返す。
次の更新情報の組が存在しない場合には、ROM変換部430はステップS907に進み、SRAM208をクリアしてROM更新処理を終了する。つまり、ROM変換部430はSCS122から引き渡されたすべての更新対象のモジュールの更新が終了したら、SRAM208をクリアしてROM更新処理を終了する。
このように実施の形態1の複合機100では、NCS128によってネットワーク271経由でROM更新要求パケット、ついで更新データパケットを受信し、ROM更新部430によって更新データでフラッシュROM204上のプログラムを更新しているので、フラッシュカードなどを用いずにROM更新をいつでも行うことができる。
また、実施の形態1の複合機100では、NCS128がROM更新要求を受信したときに、複合機100をROM更新モードで再起動して、プログラム起動部420で複合機100上で動作するすべてのコントロールサービスを起動し、SCS122のROM更新モードスレッドで起動されたコントロールサービスおよび起動可能なアプリを判断して構成に応じた更新データを選定し、選定された更新データでフラッシュROM204上のプログラムを更新しているので、複合機100上で動作するコントロールサービスやアプリケーションの構成に最適なROM更新を正確に行うことができる。
さらに、実施の形態1の複合機100では、SCS122、MCS125などのコントロールサービスのプロセスは、すべて複合サービスを行う通常モードスレッドとは別にROM更新処理に関するROM更新モードスレッドを有し、ROM更新の際にはROM更新モードスレッドのみを起動しているので、ROM更新処理中に、複合サービスの機能が実行されて更新処理が中断されることを防止して、ROM更新処理を迅速に行うことができる。
(実施の形態2)
実施の形態1の複合機100におけるROM更新処理は複合機100の機種ごとに更新データを用意したものではないため、ネットワーク上の複合機開発元のホストコンピュータやアプリケーション開発元のサードベンダのホストコンピュータなどが、契約相手ごとに複合機100の機種を把握しておき、機種ごとに個別の更新データパケットを契約相手の複合機100に送信する必要がある。
そこで、この実施の形態2の複合機100では、一つの更新データパケットで複数の機種のROM更新処理を行う。実施の形態2にかかる複合機100の機能的構成およびハードウェア構成は、図1および図2に示した実施の形態1の複合機100と同様であるので説明を省略する。
図11は、実施の形態2の複合機100で受信される更新データパケットを展開したデータの構造図である。更新データパケットは、実施の形態1と同様に、先頭のROMモニタ起動命令1001と、ヘッダ部1002と、データ部1003とから構成される。
実施の形態2における更新データパケットのデータ構造が実施の形態1におけるデータ構造と異なる点は、ヘッダ部1002において一つの更新データに対して複数の機種識別情報、複数の更新先アドレスおよび複数の更新先領域長がある点である。
すなわち、複数の機種の複合機100に共通するモジュールに対して、共通する更新データで更新を行う場合には、更新データパケットに、更新対象となるすべての複合機100の機種識別情報、その機種におけるフラッシュROM204上の更新先アドレスおよび更新先領域長をヘッダブロックに登録した構造となっている。
実施の形態2の複合機100における複合機起動部140は、実施の形態1と同様に、ROMモニタ410と、プログラム起動部420と、SCS122のROM更新モードスレッドと、ROM更新部430とから構成される。ROMモニタ410は本発明における機種情報取得手段を、プログラム起動部420は本発明におけるプログラム起動手段を、SCS122は本発明の更新データ選定手段を、ROM更新部430は本発明における更新手段をそれぞれ構成する。
実施の形態2の複合機100におけるプログラム起動部420とROM更新部430は、実施の形態1の複合機100の場合と同様の構成であるので説明を省略する。
ROMモニタ410は、実施の形態1におけるROMモニタと同様に、ハードウェアの初期化、コントローラボード200の診断、ソフトウェアの初期化、汎用OSの起動などを行う他、さらに複合機100の機種識別情報を取得する。
次にこのように構成された複合機100におけるROM更新処理について説明する。ROM更新の全体の処理手順は図5に示した実施の形態1の複合機100の場合と同様である。
図12は、実施の形態2の複合機100において、ROMモニタ410で実行される処理の手順を示すフローチャートである。ステップS1101では、ROMモニタ410が、実施の形態1と同様に、ハードウェアの初期化を行う。ステップS1101に続いてステップS1102に進み、ROMモニタ410はコントローラボードの診断処理を行う。ステップS1102に続いてステップS1103に進み、ROMモニタ410はソフトウェアの初期化処理を行う。
ステップS1103に続いてステップS1104に進み、ROMモニタ410は複合機100のフラッシュROM204に記録されている機種識別情報を取得する。機種識別情報とは、複合機の機種を特定するものであり、機種ごとに固有のデータとなっている。そして、ステップS1104に続いてステップS1105に進み、ROMモニタ410は汎用OS121を起動する。
この後、実施の形態2の複合機100では実施の形態1と同様に、プログラム起動部420によってコントロールサービスの起動を行い、起動されたSCS122のROM更新モードスレッドによって次の処理を行う。
図13は、実施の形態2の複合機において、SCS122のROM更新モードスレッドで実行される更新データ選定処理の手順を示すフローチャートである。ステップS1201では、SCS122のROM更新モードスレッドが、実施の形態1と同様に、SDRAM203の先頭のヘッダブロックを参照する。ステップS1201に続いてステップS1202に進み、SCS122のROM更新モードスレッドはヘッダブロックからモジュールIDを取得する。
ステップS1202に続いてステップS1203に進み、SCS122のROM更新モードスレッドは取得したモジュールIDが、プログラム起動部420から受け渡された環境変数のコントロールサービス起動情報およびアプリ起動情報にあるコントロールサービスまたはアプリのモジュールに該当するか否かをチェックする。
取得したモジュールIDが、複合機100内部で動作するコントロールサービスまたはアプリに該当する場合には、SCS122のROM更新モードスレッドはステップS1204に進み、さらにROMモニタ410で取得した複合機100の機種識別情報が現在のモジュールIDのあるヘッダブロック内に登録されている機種識別情報に存在するか否かをチェックする。
取得した機種識別情報がヘッダブロック内に存在する場合には、SCS122のROM更新モードスレッドはステップS1205に進み、そのヘッダブロックのモジュールIDの更新データを選定し、さらにヘッダブロックから更新先アドレス、更新データオフセット、更新データサイズを取得する。
そして、ステップS1205に続いてステップS1206に進み、SCS122のROM更新モードスレッドは、このモジュールID、更新先アドレス、更新データオフセット、更新データサイズを一組の更新情報として「更新対象」の変数等に設定する。
一方、SCS122のROM更新モードスレッドは、取得したモジュールIDが複合機100内部で動作するコントロールサービスまたはアプリに該当しない場合または取得した機種識別情報がヘッダブロック内に存在しない場合には、ステップS1207に進む。つまり、取得したモジュールIDが複合機100内部で動作するコントロールサービスまたはアプリに該当しない場合または取得した機種識別情報がヘッダブロック内に存在しない場合には、現在のモジュールIDに対応する更新データは選定せず、ステップS1204からステップS1206の処理は行わない。
ついで、ステップS1207では、実施の形態1と同様に、SCS122のROM更新モードスレッドが、次のヘッダブロックが有るか否かを判断する。次のヘッダブロックが存在する場合には、SCS122のROM更新モジュールはステップS1208に進み、次のヘッダブロックを参照する。そして、SCS122のROM更新モジュールはステップS1202からステップS1207までの処理を繰り返し行う。
一方、次のヘッダブロックが存在しない場合には、SCS122のROM更新モジュールはステップS1209に進む。つまり、すべてのヘッダブロックのモジュールIDについて、更新データの選定が終了したら、SCS122のROM更新モジュールはROM更新部430を起動してROM更新命令を発行し、更新対象の変数を引き渡す。
これにより、リモートホストから提供される更新データの中から、複合機100の機種に応じて複合機100内部に存在するモジュールの更新データのみが選定される。
このSCS122による更新データ選定処理の後、ROM更新部430によってROM更新処理が行われるが、このROM更新処理は、実施の形態1の複合機100の場合と同様であるので説明を省略する。
このように実施の形態2の複合機100では、SCS122のROM更新モードスレッドが、受信した更新データパケットに含まれるプログラムのモジュールIDと、コントロールサービスまたは各アプリの起動情報と、モジュールIDごとの機種識別情報と、ROMモニタ410で取得した機種情報とに基づいて、更新データを選定している。
したがって、実施の形態2の複合機100では、複合機100の機種により動作可能なコントロールサービスやアプリケーションの配置が異なっている場合でも、一つの更新データパケットを複数機種の複合機100のROM更新に使用することができ、機種の相違により不要なデータでROM更新を行ってしまうことが防止され、複合機100の構成に最適なROM更新を行える。
また、実施の形態2の複合機100では、更新データパケットを送信する複合機開発元アプリケーション開発元のサードベンダも、契約した複合機100ごとに個別の更新データパケットを送信する必要がなく、送信側にとってもROM更新作業が容易に行える。
なお、実施の形態1および2の複合機100では、NCS128がROM更新要求パケットを受信したときに、SCS122の通常モードスレッドが複合機100の再起動コマンドを発行して、複合機100を自動的に再起動しているが、SCS122によりROM更新フラグをONに設定した後、複合機100の電源OFFおよび電源再投入により作業者が手動で複合機100を再起動させるように構成してもよい。
(実施の形態3)
実施の形態1および2の複合機100は、ネットワーク271経由でROM更新要求パケットを受信したときに、複合機100をROM更新モードで再起動させてから、ROM更新処理を行うものである。
そこで、この実施の形態3の複合機100では、ROM更新要求パケットを受信したときに複合機100を再起動せずに、各コントロールサービスの通常モードスレッドを動的にROM更新モードスレッドに切り替えてROM更新処理を行う。
実施の形態3にかかる複合機100の機能的構成およびハードウェア構成は、図1および図2に示した実施の形態1の複合機100と同様であるので説明を省略する。また、更新データパケットを展開したデータの構造も、図3に示した実施の形態1の複合機100で受信される更新データパケットと同様であるので説明を省略する。
実施の形態3にかかる複合機100では、コピーアプリ112、ファックスアプリ113、プリンタアプリ111、スキャナアプリ114およびネットファイルアプリ115の各アプリケーション130は、実施の形態1および2の複合機100と同様の複合サービスを行うが、この複合サービスを行う際に実行される通常モードスレッドと、ROM更新処理時に単に起動されるだけで複合サービスに関する処理を停止したROM更新モードスレッドを有している。
また、実施の形態3の複合機100におけるRRUアプリ117は、NCS128がROM更新要求パケットを受信したときに、SCS122の通常モードスレッドによって起動されるようになっている。
また、実施の形態3の複合機100におけるSCS122の通常モードスレッドは、実施の形態1および2と異なり、NCS128がROM更新要求パケットを受信した場合でも、複合機100の再起動コマンドを発行およびSRAM208のROM更新フラグをONに設定する処理は行わない。その代わりに、SCS122の通常モードスレッドは、RRUアプリ117を起動し、さらにコピーアプリ112、ファックスアプリ113、プリンタアプリ111、スキャナアプリ114およびネットファイルアプリ115の各アプリケーション130および他のコントロールサービスに対して、通常モードスレッドを停止して、ROM更新モードスレッドのみの起動要求を行うようになっている。
次に、実施の形態3の複合機100によるROM更新処理について説明する。図14は、実施の形態3の複合機100におけるROM更新の全体の処理手順を示すフローチャートである。図14(a)は、複合機100がROM更新要求を受信したときの動作を示し、図14(b)は複合機100がROM更新要求の受信後にROM更新モードに移行した状態を示し、図14(c)は更新データパケットを受信したときの動作を示す。
図14(a)において、複合機100が通常の複合サービスの動作を実行しているときは、各アプリ、各コントロールサービスがいずれも通常モードスレッドを実行している。
この状態で、ネットワーク経由で複合機開発元のホストコンピュータやアプリケーション開発元のサードベンダのホストコンピュータなどのリモートホストからROM更新要求パケットが送信されてくると、NCS128の通常モードスレッドはステップS1301に進み、そのROM更新要求パケットを受信する。
ステップS1302では、NCS128の通常モードスレッドが、受信したパケットの内容を判断して、ROM更新要求パケットであった場合には、ROM更新要求がある旨をSCS122へ通知する。
ステップS1303では、SCS122が、ROM更新要求がある旨の通知を受信すると、現在動作中のすべてのアプリケーションに対して、通常モードスレッドの停止およびROM更新モードスレッドの起動要求を行う。ステップS1304では、SCS122が、ROM更新要求がある旨の通知を受信すると、現在動作中のすべてのコントロールサービスおよびSRM123に対して、通常モードスレッドの停止およびROM更新モードスレッドの起動要求を行う。さらに、SCS122の通常モードスレッドは、RRUアプリ117を起動し、またSCS122自身のROM更新モードスレッドを起動する。
通常モードスレッドの停止およびROM更新モードスレッドの起動要求を受け取ったすべてのアプリケーション、すべてのコントロールサービスおよびSRM123は、実行中のスレッドを通常モードスレッドからROM更新モードスレッドへ切り替える。これにより、複合機100は、複合サービスの機能が停止して通常モードからROM更新可能な状態であるROM更新モードへ移行する。
図14(b)に示すように、ROM更新要求を行ったリモートホスト(複合機開発元のホストコンピュータやアプリケーション開発元のサードベンダのホストコンピュータなど)からROM更新可能状態確認パケットがネットワーク経由で複合機100に対して送信されてくる。
ステップS1305では、NCS128のROM更新モードスレッドが、このROM更新可能状態確認パケットを受信する。ステップS1306では、NCS128のROM更新モードスレッドが、受信したROM更新可能状態確認パケットをRRUアプリ117へ受け渡す。
このとき、すでに複合機100はROM更新モードへ移行した状態となっているので、ROM更新可能な状態となっている。ステップS1307では、RRUアプリ117が、ROM更新可能状態確認パケットに対する応答メッセージとしてリモートROM更新可能のメッセージをNCS128へ送信する。ステップS1308では、NCS128のROM更新モードスレッドが、リモートROM更新可能のメッセージをネットワーク271経由でROM更新可能状態確認パケットの送信元であるリモートホストへ送信する。
NCS122がROM更新可能状態確認に対する応答をリモートホストへ送信すると、図14(c)に示すように、リモートホストから更新データパケットが送信されてくる。このため、ステップS1309では、複合機100が、NCS128のROM更新モードスレッドで更新データパケットを受信する。ステップS1310では、NCS128のROM更新モードスレッドが、受信した更新データパケットをRRUアプリ117へ受け渡す。
ステップS1311では、RRUアプリ117が、更新データパケットを展開したデータに必要な領域を得るために、MCS125に対して、SDRAM203上に更新データ領域の確保を要求する。ステップS1312では、確保要求を受けたMCS125のROM更新モードスレッドが、SDRAM203上に更新データ領域を確保して、その領域の先頭アドレスと確保した領域サイズとをRRUアプリ117に返す。
RRUアプリ117では、ネットワーク情報を除去し、また圧縮形式のデータを伸張した更新パケットデータを、MCS125のROM更新モードスレッドから通知された領域の先頭アドレスから展開する。これにより、SDRAM203の更新データ領域には前述した図3に示した構造のデータが格納される。
ステップS1313では、RRUアプリ117が、更新データパケットを展開したSDRAM203上の領域の先頭アドレスを、SCS122へ通知する。これにより、SCS122のROM更新モードスレッドで更新データの選定処理が行われる。
これ以降の、SCS122による更新データの選定処理およびROM更新部430によるフラッシュROM204上のプログラムの更新処理は、実施の形態1にかかる複合機100と同様であるので説明を省略する。
このように実施の形態3の複合機100では、NCS122がROM更新要求パケットを受信したときに、SCS122の指令によって、すべてのアプリケーション130、すべてのコントロールサービスおよびSRM123が通常モードスレッドを停止してROM更新モードスレッドを起動している。
したがって、実施の形態3の複合機100では、切り替え時間の速いスレッドの切り替えで複合サービスの機能を停止してROM更新モードへ移行することができ、複合機100を再起動させたり、切り替え時間の遅いプロセスの切り替えを行う場合に比べ、ROM更新要求があった場合に迅速に対応してROM更新を行うことができる。
なお、実施の形態3にかかる複合機100では、コントロールサービス、アプリケーションへのROM更新モードスレッドの起動要求をSCS122で行っているが、プログラム起動部420や他のプロセスで実現するように構成しても良い。
以上説明した実施の形態1〜3にかかる複合機100では、ネットワーク271経由でROM更新要求パケットを受信した後に、更新データパケットを受信することとしているが、ROM更新要求パケットが送信されずに、いきなり更新データパケットを受信するようにしてもよい。
いきなり更新データパケットを受信するようにした場合には、この更新データパケットをROM更新要求とみなし、更新データパケットをSRAM208の不揮発性メモリに格納した後、SCS122によって複合機100を再起動させることで、同様の処理を行うように構成してもよい。
さらにこの場合、RRUアプリ117は複合機100の再起動後に起動するのではなく、更新データパケットを受信したときに、SCS122などによってRRUアプリ117を起動するとともにMCS125のROM更新モードスレッドを起動し、更新データパケットをSDRAM203に展開してから、複合機100を再起動する構成としてもよい。
(実施の形態4)
実施の形態1〜3の複合機100は、ネットワーク271経由でROM更新要求パケットを受信したときに、RRUアプリ117を起動させてROM更新処理を行うものである。
そこで、この実施の形態4の複合機100では、RRUアプリ117を複合機100の起動時など予め起動させておき、ROM更新要求パケットを受信することなく、更新データパケットを受信したときに、各コントロールサービスの通常モードスレッドを動的にROM更新モードスレッドに切り替えてROM更新処理を行う。
実施の形態4にかかる複合機100の機能的構成およびハードウェア構成は、図1および図2に示した実施の形態1の複合機100と同様であるので説明を省略する。また、更新データパケットを展開したデータの構造も、図3に示した実施の形態1の複合機100で受信される更新データパケットと同様であるので説明を省略する。
実施の形態4にかかる複合機100では、コピーアプリ112、ファックスアプリ113、プリンタアプリ111、スキャナアプリ114およびネットファイルアプリ115の各アプリケーション130は、実施の形態1および2の複合機100と同様の複合サービスを行うが、この複合サービスを行う際に実行される通常モードスレッドと、ROM更新処理時に単に起動されるだけで複合サービスに関する処理を停止したROM更新モードスレッドを有している。
また、実施の形態3の複合機100におけるRRUアプリ117は、例えば複合機100の起動時に、SCS122の通常モードスレッドによって起動されるようになっている。
また、実施の形態4の複合機100におけるSCS122の通常モードスレッドは、実施の形態1および2と異なり、NCS128がROM更新要求パケットを受信せず、複合機100の再起動コマンドを発行およびSRAM208のROM更新フラグをONに設定する処理は行わない。
その代わりに、SCS122の通常モードスレッドは、コピーアプリ112、ファックスアプリ113、プリンタアプリ111、スキャナアプリ114およびネットファイルアプリ115の各アプリケーション130および他のコントロールサービスに対して、通常モードスレッドを停止して、ROM更新モードスレッドのみの起動要求を行うようになっている。
次に、実施の形態4の複合機100によるROM更新処理について説明する。図15は、実施の形態4の複合機100におけるROM更新の全体の処理手順を示すフローチャートである。図15(a)は、複合機100が更新データパケットを受信したときの動作を示し、図15(b)は複合機100が更新データパケットの受信後にROM更新モードに移行した状態を示す。
図15(a)において、複合機100が通常の複合サービスの動作を実行しているときは、各アプリ、各コントロールサービスがいずれも通常モードスレッドを実行している。
この状態で、ネットワーク271経由で複合機開発元のホストコンピュータやアプリケーション開発元のサードベンダのホストコンピュータなどのリモートホストから更新データパケットが送信されてくると、NCS128の通常モードスレッドはステップS1401に進み、その更新データパケットを受信する。
ステップS1402では、NCS128の通常モードスレッドが、受信したパケットの内容を判断して、更新データパケットであった場合には、その更新データパケットをRRUアプリ117へ送信する。
ステップS1403では、RRUアプリ117が、更新データパケットを受信すると、更新データパケットを受信した旨をSCS122に通知する。ステップS1404では、SCS122が、更新データパケットを受信した旨の通知を受信すると、現在動作中のすべてのアプリケーションに対して、通常モードスレッドの停止およびROM更新モードスレッドの起動要求を行う。
ステップS1405では、SCS122が、更新データパケットを受信した旨の通知を受信すると、現在動作中のすべてのコントロールサービスおよびSRM123に対して、通常モードスレッドの停止およびROM更新モードスレッドの起動要求を行う。さらに、SCS122の通常モードスレッドは、RRUアプリ117を起動し、また、SCS122は自身のROM更新モードスレッドを起動する。
通常モードスレッドの停止およびROM更新モードスレッドの起動要求を受け取ったすべてのアプリケーション、すべてのコントロールサービスおよびSRM123は、実行中のスレッドを通常モードスレッドからROM更新モードスレッドへ切り替える。これにより、複合機100は、複合サービスの機能が停止して通常モードからROM更新可能な状態であるROM更新モードへ移行する。
ROM更新可能な状態であるROM更新モードへ移行すると、図15(b)に示すように、ステップS1406で、RRUアプリ117が、更新データパケットを展開したデータに必要な領域を得るために、MCS125に対して、SDRAM203上に更新データ領域の確保を要求する。ステップS1407では、確保要求を受けたMCS125のROM更新モードスレッドが、SDRAM203上に更新データ領域を確保して、その領域の先頭アドレスと確保した領域サイズとをRRUアプリ117に返す。
RRUアプリ117では、ネットワーク情報を除去し、また圧縮形式のデータを伸張した更新パケットデータを、MCS125のROM更新モードスレッドから通知された領域の先頭アドレスから展開する。これにより、SDRAM203の更新データ領域には前述した図3に示した構造のデータが格納される。
ステップS1408では、RRUアプリ117が、更新データパケットを展開したSDRAM203上の領域の先頭アドレスを、SCS122へ通知する。これにより、SCS122のROM更新モードスレッドで更新データの選定処理が行われる。
これ以降の、SCS122による更新データの選定処理およびROM更新部430によるROM上のプログラムの更新処理は、実施の形態1にかかる複合機100と同様であるので説明を省略する。
このように実施の形態4の複合機100では、NCS122が更新データパケットを受信したときに、SCS122の指令によって、すべてのアプリケーション130、すべてのコントロールサービスおよびSRM123が通常モードスレッドを停止してROM更新モードスレッドを起動している。
したがって、実施の形態4の複合機100では、切り替え時間の速いスレッドの切り替えで複合サービスの機能を停止してROM更新モードへ移行することができ、複合機100を再起動させたり、切り替え時間の遅いプロセスの切り替えを行う場合に比べ、更新要求データパケットがあった場合に迅速に対応してROM更新を行うことができる。
なお、実施の形態4にかかる複合機100では、コントロールサービス、アプリケーションへのROM更新モードスレッドの起動要求をSCS122で行っているが、プログラム起動部420や他のプロセスで実現するように構成しても良い。
以上説明した実施の形態1〜4にかかる複合機100では、更新データの選定処理をSCS122のROM更新モードスレッドで行っているが、プログラム起動部420でSCS122とは別のプロセスを起動して、この起動した別のプロセスで更新データの選定処理を行うように構成してもよい。