以下、本発明の一実施形態を図面に基づいて説明する。図1は、本実施形態による印刷システムの構成例を示す図である。図1に示す印刷システムは、本発明によるファームウェアの更新システムを含んでいる。
図1に示すように、本実施形態の印刷システムは、ホストコンピュータ100とプリンタ200と端末400とを備えて構成されている。ホストコンピュータ100とプリンタ200との間は、USBケーブル300により接続されている。また、ホストコンピュータ100と端末400は、LAN500により接続されている。なお、端末400およびLAN500は、必須の構成要素ではない。
ホストコンピュータ100は、内蔵する記憶媒体(例えば、ハードディスク等)にアプリケーションプログラム11、プリンタドライバ12およびファームウェア更新用プログラム13を記憶している。アプリケーションプログラム11は、印刷機能を備えたプログラムであり、その種類は問わない。プリンタドライバ12は、プリンタ200を制御するデバイスドライバであり、アプリケーションプログラム11から印刷データを受け取って、プリンタ200に送信する。
ファームウェア更新用プログラム13は、ホストコンピュータ100からプリンタ200にファームウェアを送信して、プリンタ200のファームウェアを更新する処理を実行するためのプログラムである。このファームウェア更新用プログラム13は、ホストコンピュータ100にあらかじめ記憶しておいてもよいし、ファームウェアの更新を実行する際に、図示しないサーバ装置からインターネットを介してダウンロードするようにしてもよい。この場合、更新対象とする新しいファームウェアと共にファームウェア更新用プログラム13をダウンロードすることが可能である。
図1に示す印刷システムにおいて、印刷の実行は、ホストコンピュータ100のアプリケーションプログラム11において生成した印刷データをプリンタ200に送信して行うことも可能であるし、端末400において生成した印刷データをホストコンピュータ100経由でプリンタ200に送信して行うことも可能である。後者の場合、端末400にもアプリケーションプログラム11およびプリンタドライバ12がインストールされている。
また、ファームウェアの更新は、ホストコンピュータ100から指示して行うことも可能であるし、端末400からホストコンピュータ100に指示を出力して行うことも可能である。後者の場合、端末400にもファームウェア更新用プログラム13がインストールされている。
USBケーブル300は、ホストコンピュータ100とプリンタ200との間でデータ通信を行うための伝送路である。USBでは、ホストコンピュータ100とプリンタ200とを接続する1本のケーブルを使って、仮想的な伝送路(パイプ)を複数設定してデータを多重に伝送することが可能である。また、USBでは、パイプを用いて、コントロール転送、バルク転送、インタラプト転送、アイソクロナス転送などの各種転送モードによるデータ通信が可能である。
本実施形態では、ホストコンピュータ100とプリンタ200との間の伝送路として、コントロール転送を行う際に用いるコントロールパイプ(第1の伝送路に相当)と、バルク転送を行う際に用いるバルクアウトパイプ(第2の伝送路に相当)とを用いる。コントロールパイプは、プリンタ200の状態によらず、プリンタ200の制御を行うためのコマンドを送信することが可能な伝送路である。バルクアウトパイプは、印刷データやファームウェアなど大容量のデータを高速に送信可能な伝送路である。
プリンタ200は、内蔵する記憶媒体(例えば、フラッシュメモリやROM等)にファームウェア21およびファームウェア更新用プログラム22を記憶している。ファームウェア21は、プリンタ200が備える印刷用のハードウェアを直接制御するためのプログラムである。ファームウェア更新用プログラム22は、ホストコンピュータ100のファームウェア更新用プログラム13と協働して、フラッシュメモリ等に記憶されたファームウェア21の更新を行う。
図2は、上述したアプリケーションプログラム11、プリンタドライバ12およびファームウェア更新用プログラム13により実現されるホストコンピュータ100の機能構成例を示すブロック図である。図2に示すように、ホストコンピュータ100は、その機能構成として、指示取得部101、更新コマンド送信部102、状態取得コマンド送信部103、状態情報受信部104、状態判定部105、ファームウェア送信部106、印刷データ生成部107および印刷データ送信部108を備えている。また、ホストコンピュータ100は、ファームウェア記憶部110を備えている。
指示取得部101は、例えばホストコンピュータ100にインストールされたOSにより実現される。また、上記各機能ブロック102〜106は、ホストコンピュータ100にインストールされたファームウェア更新用プログラム13により実現される。さらに、印刷データ生成部107および印刷データ送信部108は、ホストコンピュータ100にインストールされたアプリケーションプログラム11およびプリンタドライバ12によりそれぞれ実現される。
印刷データ生成部107は、アプリケーションプログラム11に対するユーザの操作に応じて、印刷データを生成する。印刷データ送信部108は、アプリケーションプログラム11に対するユーザの印刷指示の操作に応じて、アプリケーションプログラム11からプリンタドライバ12に印刷データを受け渡し、USBケーブル300のバルクアウトパイプ302を介して当該印刷データをプリンタ200に送信する。ここで説明した処理は、ホストコンピュータ100において印刷データを生成してプリンタ200に送信する場合の処理である。
なお、端末400において生成した印刷データに基づいてプリンタ200にて印刷を実行する場合、印刷データ送信部108は、端末400からLAN500を介して印刷データを受信し、当該受信した印刷データをプリンタ200に送信する。なお、印刷データ送信部108とは別に、端末400からの印刷データをプリンタ200に転送する印刷データ転送部を設けてもよい。
指示取得部101は、ファームウェアの更新指示を取得する。例えば、指示取得部101は、ホストコンピュータ100においてファームウェアの更新操作が行われた場合は、その更新操作によって発生される更新指示の情報を取得する。また、端末400においての更新操作が行われた場合、指示取得部101は、端末400での更新操作によって発生される更新指示の情報を、LAN500を介して端末400から取得する。
更新コマンド送信部102は、指示取得部101がファームウェアの更新指示を取得したとき、USBケーブル300のコントロールパイプ301を介して、ファームウェア強制更新コマンドをプリンタ200に送信する。上述したように、コントロールパイプ301は、プリンタ200の状態によらずコマンドを送信することが可能な伝送路である。したがって、例えばプリンタ200がオフライン状態でファームウェアの更新ができない状態であっても、ファームウェア強制更新コマンドをプリンタ200に送信することは可能である。
状態取得コマンド送信部103は、更新コマンド送信部102によってファームウェア強制更新コマンドをプリンタ200に送信した後、プリンタ200の状態を表す状態情報の取得を要求する状態取得コマンドを、コントロールパイプ301を介してプリンタ200に送信する。さらに、状態取得コマンド送信部103は、後述するようにファームウェア送信部106によってファームウェアのプリンタ200への送信を開始した後、ファームウェアの更新完了を確認するための更新完了確認コマンドを、コントロールパイプ301を介してプリンタ200に送信する。
状態情報受信部104は、状態取得コマンド送信部103がプリンタ200に対して状態取得コマンドを送信したことの応答として、プリンタ200からコントロールパイプ301を介して返信されてくる状態情報を受信する。また、状態情報受信部104は、状態取得コマンド送信部103がプリンタ200に対して更新確認コマンドを送信したことの応答として、プリンタ200からコントロールパイプ301を介して返信されてくる状態情報も受信する。
状態判定部105は、状態情報受信部104により受信された状態情報に基づいて、プリンタ200の状態を判定する。状態取得コマンドの送信時に判定するプリンタ200の状態は、第1に、プリンタ200がオンライン状態であるかオフライン状態であるかという点である。第2に、プリンタ200が印刷データを受信して印刷を実行中の状態であるか否かという点である。一方、更新確認コマンドの送信時に判定するプリンタ200の状態は、プリンタ200にてファームウェアの更新処理が完了しているか、それともファームウェアの更新に失敗してリライト待機状態であるかという点である。
ファームウェア送信部106は、更新コマンド送信部102によりコントロールパイプ301を介してファームウェア強制更新コマンドをプリンタ200に送信した後、バルクアウトパイプ302を介してファームウェアをプリンタ200に送信する。このとき送信するファームウェアは、ファームウェア記憶部110にあらかじめ記憶されたものである。あるいは、上述したように、図示しないサーバ装置からファームウェア更新用プログラム13と共にダウンロードしたものであってもよい。
ファームウェア送信部106は、具体的には、状態取得コマンド送信部103による状態取得コマンドの送信に対応してプリンタ200から返信された状態情報に基づいて、状態判定部105による判定によってプリンタ200がオンライン状態であることを確認した後に、バルクアウトパイプ302を介してファームウェアをプリンタ200に送信する。
プリンタ200がオンライン状態であることを示す状態情報が返信されてくるケースとしては、次の2つがある。1つは、更新コマンド送信部102がファームウェア強制更新コマンドをプリンタ200に送信したときに、もともとプリンタ200がオンライン状態であった場合である。もう1つは、更新コマンド送信部102がファームウェア強制更新コマンドをプリンタ200に送信したとき、プリンタ200はオフライン状態であったものの、後述するように強制的にオンライン状態に切り替えられた場合である。
ファームウェア送信部106は、状態判定部105による判定の結果、プリンタ200がオンライン状態であって、かつ、印刷の実行中でもないことを確認した場合、ファームウェアを直ちにプリンタ200に送信する。一方、プリンタ200がオンライン状態であっても、プリンタ200が印刷データを受信して印刷を実行中であることを確認した場合は、所定のタイムアウト(例えば、3秒)を待ってから、ファームウェアをプリンタ200に送信する。後述するように、プリンタ200において印刷データを受け捨てる時間を待つためである。
また、状態判定部105による判定の結果、プリンタ200がファームウェアの更新に失敗してリライト待機状態であることを確認した場合、更新コマンド送信部102によりコントロールパイプ301を介してファームウェア強制更新コマンドをプリンタ200に再送信する。このように、本実施形態では、一度はプリンタ200がオンライン状態となってファームウェア送信部106がファームウェアを送信したにもかかわらず、何らかの問題によりファームウェアの更新に失敗した場合でも、プリンタ200のハードウェアリセットをすることなく、ファームウェア強制更新コマンドの送信から再開することが可能である。
図3は、図1に示したファームウェア21およびファームウェア更新用プログラム22により実現されるプリンタ200の機能構成例を示すブロック図である。図3に示すように、プリンタ200は、その機能構成として、更新コマンド受信部201、状態取得コマンド受信部202、状態検出部203、状態情報返信部204、状態切替部205、ファームウェア更新部206、印刷データ受け捨て部207、印刷データ受信部208および印刷処理部209を備えている。また、プリンタ200は、フラッシュメモリ210を備えている。
ここで、印刷データ受信部208および印刷処理部209は、フラッシュメモリ210に記憶されたファームウェア21により実現される。また、上記各機能ブロック201〜207は、ファームウェア更新用プログラム22により実現される。
印刷データ受信部208は、ホストコンピュータ100の印刷データ送信部108によりバルクアウトパイプ302を介して送信された印刷データを受信する。印刷処理部209は、印刷データ受信部208により受信された印刷データに基づいて、印刷を実行する。
更新コマンド受信部201は、ホストコンピュータ100の更新コマンド送信部102によりコントロールパイプ301を介して送信されたファームウェア強制更新コマンドを受信する。状態取得コマンド受信部202は、ホストコンピュータ100の状態取得コマンド送信部103によりコントロールパイプ301を介して送信された状態取得コマンドおよび更新完了確認コマンドを受信する。
状態検出部203は、更新コマンド受信部201がファームウェア強制更新コマンドを受信したとき、プリンタ200の状態を検出する。上述したように、ファームウェア強制更新コマンドの受信時に検出するプリンタ200の状態は、第1に、プリンタ200がオンライン状態であるかオフライン状態であるかという点である。第2は、プリンタ200が印刷データを受信して印刷を実行中の状態であるか否かという点である。
また、状態検出部203は、状態取得コマンド受信部202が更新完了確認コマンドを受信したときも、プリンタ200の状態を検出する。この更新完了確認コマンドの受信時に検出するプリンタ200の状態は、ファームウェアの更新処理が完了しているか、それともファームウェアの更新に失敗してリライト待機状態であるかという点である。
ここで、プリンタ200には、オンライン状態であるかオフライン状態であるかを示すフラグ情報が設定されている。状態検出部203は、このフラグ情報を参照することにより、オンライン状態であるかオフライン状態であるかを検出することが可能である。なお、プリンタ200がオフライン状態となる場合とは、例えば、プリンタ200に用紙がセットされていない場合、プリンタ200のカバーが開いている場合などである。これらの状態が図示しないセンサによって検出されると、フラグはオフライン状態に設定される。
同様に、プリンタ200がファームウェアの更新に失敗してリライト待機状態になると、そのことを示すフラグがファームウェア更新部206により設定される。状態検出部203は、このフラグ情報を参照することにより、プリンタ200がリライト待機状態であるか否かを検出することが可能である。これに対して、プリンタ200が印刷データを受信して印刷を実行中の状態であるか否かは、印刷データ受信部208の動作を監視することによって検出することが可能である。
状態情報返信部204は、状態取得コマンド受信部202がホストコンピュータ100から状態取得コマンドを受信した場合、ファームウェア強制更新コマンドの受信に応じて状態検出部203により検出されたプリンタ200の状態(オンライン状態か否か、印刷を実行中か否か)を表す状態情報を、コントロールパイプ301を介してホストコンピュータ100に返信する。
また、状態情報返信部204は、状態取得コマンド受信部202がホストコンピュータ100から更新完了確認コマンドを受信した場合、その受信に応じて状態検出部203により検出されたファームウェアの更新完了状態(更新処理が完了しているか、ファームウェアの更新に失敗してリライト待機状態であるか)を表す状態情報を、コントロールパイプ301を介してホストコンピュータ100に返信する。
状態切替部205は、更新コマンド受信部201によりファームウェア強制更新コマンドが受信されたとき、状態検出部203より検出されたプリンタ200の状態がオフライン状態であった場合、プリンタ200をオンライン状態に強制的に切り替える。すなわち、プリンタ200に用紙がセットされていない状態であっても、プリンタ200のカバーが開いている状態であっても、上述したフラグをオンライン状態に強制的に切り替える。
ファームウェア更新部206は、プリンタ200がオンライン状態のときにバルクアウトパイプ302を介して送信されてくるファームウェアを受信して、フラッシュメモリ210に更新して記憶させる。ここで、プリンタ200がオンライン状態(もともとオンライン状態であることが状態検出部203により検出された場合、または、状態切替部205によってオンライン状態に強制的に切り替えられた場合の何れか)であって、かつ、印刷の実行中でないことが状態検出部203により検出された場合は、ホストコンピュータ100からファームウェアが直ちに送られてくるので、これを受信してフラッシュメモリ210に更新して記憶させる。
印刷データ受け捨て部207は、更新コマンド受信部201がファームウェア強制更新コマンドを受信したとき、プリンタ200がバルクアウトパイプ302を介して印刷データを受信して印刷を実行中であることが状態検出部203により検出された場合に、印刷処理部209にて実行中の印刷処理を強制的に終了させた上で、印刷データ受信部208にて受信中の印刷データを受け捨てる処理を行う。この受け捨て処理は、所定のタイムアウト(例えば、3秒)をもって終了する。
ファームウェア更新部206は、プリンタ200がオンライン状態であって、かつ、印刷を実行中であることが状態検出部203により検出された場合は、印刷データ受け捨て部207による印刷データの受け捨て処理の後(つまり、タイムアウトの後)に、バルクアウトパイプ302を介して送信されてくるファームウェアを受信して、フラッシュメモリ210に更新して記憶させる。
図4は、上記のように構成した本実施形態によるファームウェアの更新システムの動作例を示すフローチャートである。図4に示すフローチャートは、指示取得部101がプリンタ200のファームウェア21を更新するための指示を取得したときに開始する。
まず、ホストコンピュータ100の更新コマンド送信部102は、指示取得部101がファームウェア21の更新指示を取得したとき、USBケーブル300のコントロールパイプ301を介して、ファームウェア強制更新コマンドをプリンタ200に送信する(ステップS11)。プリンタ200では、更新コマンド受信部201にてファームウェア強制更新コマンドを受信すると、状態検出部203がプリンタ200の状態を検出する(ステップS21)。
次に、状態切替部205は、状態検出部203より検出されたプリンタ200の状態がオフライン状態であるか否かを判定し(ステップS22)、オフライン状態であった場合、プリンタ200をオンライン状態に強制的に切り替える(ステップS23)。なお、状態検出部203より検出されたプリンタ200の状態がオンライン状態であった場合は、状態の切り替えは行わない。
一方、ホストコンピュータ100では、更新コマンド送信部102によりファームウェア強制更新コマンドを送信した後、状態取得コマンド送信部103が状態取得コマンドをUSBケーブル300のコントロールパイプ301を介してプリンタ200に送信する(ステップS12)。
プリンタ200では、状態取得コマンド受信部202にて状態取得コマンドを受信すると、状態情報返信部204が、状態検出部203により検出されたプリンタ200の状態を表す状態情報を、コントロールパイプ301を介してホストコンピュータ100に返信する(ステップS24)。ここで返信する状態情報は、プリンタ200がオンライン状態であるか否か、プリンタ200が印刷を実行中であるか否かを示すものである。
ホストコンピュータ100では、状態情報受信部104にて状態情報を受信すると、状態判定部105が、その受信した状態情報に基づいて、プリンタ200がオンライン状態であるか否かを判定する(ステップS13)。ここで、オンライン状態ではない、すなわち、プリンタ200がオフライン状態であると判定された場合、処理はステップS12に戻る。一方、プリンタ200がオンライン状態であると判定された場合、状態判定部105は、上記状態情報に基づいて、プリンタ200が印刷を実行中か否かをさらに判定する(ステップS14)。
ここで、プリンタ200が印刷を実行中であると状態判定部105にて判定された場合、ファームウェア送信部106は、所定のタイムアウト(例えば、3秒)を待ってから(ステップS15)、バルクアウトパイプ302を介してファームウェアをプリンタ200に送信する(ステップS16)。一方、プリンタ200が印刷を実行中でないと状態判定部105にて判定された場合、ファームウェア送信部106は、所定のタイムアウトを待つことなく、ファームウェアをプリンタ200に直ちに送信する(ステップS16)。
プリンタ200では、ステップS24にて状態情報返信部204がホストコンピュータ100に状態情報を返信した後、印刷データ受け捨て部207は、印刷データを受信して印刷を実行中であることが状態検出部203により検出されたか否かを判定する(ステップS25)。ここで、印刷を実行中であることが状態検出部203により検出されたと判定した場合、印刷データ受け捨て部207は、印刷処理部209で実行中の印刷処理を強制的に終了させた上で(ステップS26)、印刷データ受信部208にて受信中の印刷データを受け捨てる(ステップS27)。この受け捨て処理は、開始から所定のタイムアウト(例えば、3秒)を経過した時点をもって終了する(ステップS28)。
受け捨て処理のタイムアウトが経過すると、ホストコンピュータ100からバルクアウトパイプ302を介してファームウェアが送信されてくる。ファームウェア更新部206は、ホストコンピュータ100から送信されてくるファームウェアを受信して(ステップS29)、フラッシュメモリ210に更新して記憶させる(ステップS30)。
なお、上記ステップS25において、印刷を実行中ではないことが状態検出部203により検出されたと判定した場合は、ホストコンピュータ100からバルクアウトパイプ302を介してファームウェアが直ちに送信されてくる。この場合は、ステップS26〜S28の処理は行わない。そして、ファームウェア更新部206は、ホストコンピュータ100から送信されてくるファームウェアを受信して(ステップS29)、フラッシュメモリ210に更新して記憶させる(ステップS30)。
ホストコンピュータ100では、ステップS16にてファームウェア送信部106によりファームウェアをプリンタ200に送信した後、状態取得コマンド送信部103が、コントロールパイプ301を介して更新完了確認コマンドをプリンタ200に送信する(ステップS17)。
プリンタ200では、状態取得コマンド受信部202にてこの更新完了確認コマンドを受信すると、状態検出部203が、ファームウェアの更新処理の状態を検出する(ステップS31)。そして、状態情報返信部204は、状態検出部203による検出結果に基づいて、ファームウェアの更新処理が完了しているか、ファームウェアの更新に失敗してリライト待機状態であるかを表す状態情報を生成し、ホストコンピュータ100に返信する(ステップS32)。
ホストコンピュータ100では、状態情報受信部104にて状態情報を受信すると、状態判定部105が、その受信した状態情報に基づいて、ファームウェアの更新処理が完了しているか否かを判定する(ステップS18)。ここで、ファームウェアの更新処理が完了していない、すなわち、リライト待機状態であると判定された場合、処理はステップS11に戻り、ファームウェア強制更新コマンドの送信を再開する。一方、ファームウェアの更新処理が完了していると判定された場合、図4に示すフローチャートの処理は終了する。
以上詳しく説明したように、本実施形態では、ホストコンピュータ100においてファームウェアの更新指示を取得したとき、プリンタ200の状態によらずコマンドを送信可能なコントロールパイプ301(第1の伝送路)を介してファームウェア強制更新コマンドをプリンタ200に送信する。そして、このファームウェア強制更新コマンドを受けたプリンタ200がオフライン状態にあるときは、プリンタ200をオンライン状態に切り替える。その後、大容量のデータを高速に送信可能なバルクアウトパイプ302(第2の伝送路)を介してファームウェアをプリンタ200に送信して更新するようにしている。
このように構成した本実施形態によれば、プリンタ200がオフライン状態のときであっても、ホストコンピュータ100からコントロールパイプ301を介してプリンタ200に送信されるファームウェア強制更新コマンドによって、プリンタ200がオンライン状態に強制的に切り替えられ、ファームウェアの更新が可能な状態とされる。その上で、ホストコンピュータ100からバルクアウトパイプ302を介してプリンタ200にファームウェアが送信され、ファームウェアの更新が行われる。これにより、プリンタ200がオンライン状態か否かによらず、ファームウェアの更新を行うことができる。
例えば、LAN500上にある端末400においてファームウェアの更新操作をすることにより、その操作に基づき発生された更新指示に従ってホストコンピュータ100からプリンタ200にファームウェアをダウンロードして更新する場合、プリンタ200から離れた場所に端末400があると、プリンタ200に用紙がセットされているか否か、プリンタ200のカバーが開いているか否かなどの状態を確認できないまま、端末400にてファームウェアの更新操作を行うことになる。
この場合において、プリンタ200に用紙がセットされていなかったり、プリンタ200のカバーが開いていたりして、プリンタ200がオフライン状態になっていたとしても、オンライン状態に強制的に切り替えてファームウェアの更新を行うことができる。これにより、ファームウェアを更新しようとするユーザは、プリンタ200の設置場所まで移動して用紙をセットしたり、カバーを閉じたりする作業をする必要がなく、ファームウェアの更新作業性を向上させることができる。
また、本実施形態では、ファームウェア強制更新コマンドの送信はコントロールパイプ301で行いつつ、ファームウェアの送信はバルクアウトパイプ302を用いて行うようにしている。ファームウェアの送信についてもコントロールパイプ301を用いて行うことも可能であるが、送信に時間がかかる。本実施形態のようにバルクアウトパイプ302を用いてファームウェアの送信を行うことにより、ファームウェアの更新を短時間で終了させることができる。
また、本実施形態では、プリンタ200がホストコンピュータ100からファームウェア強制更新コマンドを受信したとき、バルクアウトパイプ302を介して印刷データを受信して印刷を実行中である場合、印刷処理を強制的に停止して印刷データを受け捨てるようにし、その受け捨て処理の後に、ファームウェアをプリンタ200に送信して更新するようにしている。
このように構成した本実施形態によれば、プリンタ200がファームウェア強制更新コマンドを受信したときに、プリンタ200がバルクアウトパイプ302を介して印刷データを受信して印刷を実行中であっても、当該印刷データが受け捨てられて、ファームウェアの更新が可能な状態とされる。その上で、ホストコンピュータ100からバルクアウトパイプ302を介してプリンタ200にファームウェアが送信され、ファームウェアの更新が行われる。これにより、プリンタ200において印刷を実行中か否かによらず、ファームウェアの更新を行うことができる。
例えば、図1では端末400を1つのみ図示しているが、複数の端末400がLAN500に接続され、当該複数の端末400で1つのプリンタ200を共用する場合、ファームウェアの更新操作を行っている端末400では、他の端末400からの指示によりプリンタ200において印刷を実行中か否かを確認することができない。本実施形態によれば、もし、他の端末400からホストコンピュータ100を介してプリンタ200に印刷データが送信されて印刷を実行中の状態であっても、その印刷処理を停止してファームウェアの更新処理を優先して実行することができる。
なお、上記実施形態では、プリンタ200が更新コマンド受信部201にてファームウェア強制更新コマンドを受信したときに、状態検出部203によりオンライン状態であることが検出された場合、状態切替部205において特に状態の切り替えを行うことがない例について説明したが、本発明はこれに限定されない。例えば、状態検出部203よりオンライン状態であると判定された場合で、かつ、ホストコンピュータ100からのデータ送信が中断中の状態であると判定された場合、コマンドパーサのリセットを行った後、オンライン状態に切り替えるようにしてもよい。
図5は、この場合におけるプリンタ200の機能構成例を示すブロック図である。この図5において、図3に示した符号と同一の符号を付したものは同一の機能を有するものであるので、ここでは重複する説明を省略する。図5に示す例では、図3に示した状態切替部205に代えて、状態切替部205’を備えている。状態切替部205’は、プリンタ200がオンライン状態で、かつ、ホストコンピュータ100からのデータ送信が中断中の状態であることが状態検出部203により検出された場合に、コマンドパーサのリセットを行った後、プリンタ200をオンライン状態に切り替える。
例えば、プリンタ200がオンライン状態であっても、ホストコンピュータ100に何らかの障害が発生してファームウェアが送信されてこない場合、ホストコンピュータ100にハードウェアリセットをかけて、再度コマンドを送信する必要が生じる。ここで、プリンタ200がホストコンピュータ100からコマンドを受信している際にデータ送信が中断された可能性もある。この場合でも、コマンドパーサのリセットを行うことにより、再送されるコマンドをプリンタ200が正しく理解して実行することができる。
また、上記実施形態では、プリンタ200が印刷を実行中のときに、印刷処理を強制的に終了させた上で、ホストコンピュータ100から受信中の印刷データを受け捨てる例について説明したが、印刷データの受け捨て処理を行うケースはこれに限定されない。例えば、ホストコンピュータ100からプリンタ200に印刷データを送信し、プリンタ200において印刷処理を実行していたものの、エラー発生(用紙無しなど)により印刷が中断してプリンタ200がオフライン状態となった場合において、このような状態下でファームウェアの更新を行う際にも、印刷データの受け捨て処理を実行する。
図6は、このようなケースにおけるファームウェアの更新システムの動作例を示すフローチャートである。なお、図6に示すフローチャートは、ホストコンピュータ100からプリンタ200に印刷データを送信してプリンタ200で印刷処理を実行している際にエラーが発生し、プリンタ200がオフライン状態となったことを示す状態情報(ビジー信号)をホストコンピュータ100がプリンタ200から受信したときに開始する。
まず、ホストコンピュータ100の更新コマンド送信部102は、プリンタ200がオフライン状態となったことを示す状態情報(ビジー信号)をプリンタ200から受信したとき、USBケーブル300のコントロールパイプ301を介して、ファームウェア強制更新コマンドをプリンタ200に送信する(ステップS41)。プリンタ200では、更新コマンド受信部201にてファームウェア強制更新コマンドを受信すると、状態切替部205がプリンタ200をオンライン状態に強制的に切り替える(ステップS51)。そして、印刷データ受け捨て部207により、印刷データ受け捨てモードを設定する(ステップS52)。
一方、ホストコンピュータ100では、更新コマンド送信部102によりファームウェア強制更新コマンドを送信した後、状態取得コマンド送信部103が状態取得コマンドをUSBケーブル300のコントロールパイプ301を介してプリンタ200に送信する(ステップS42)。
プリンタ200では、状態取得コマンド受信部202にて状態取得コマンドを受信すると、状態情報返信部204が、状態検出部203により検出されたプリンタ200の状態を表す状態情報を、コントロールパイプ301を介してホストコンピュータ100に返信する(ステップS53)。ここで返信する状態情報は、プリンタ200がオンライン状態であるか否かを示すものである。
ホストコンピュータ100では、状態情報受信部104にて状態情報を受信すると、状態判定部105が、その受信した状態情報に基づいて、プリンタ200がオンライン状態であるか否かを判定する(ステップS43)。ここで、オンライン状態ではない、すなわち、プリンタ200がオフライン状態であると判定された場合、処理はステップS42に戻る。一方、プリンタ200がオンライン状態であると判定された場合、印刷データ送信部108は、プリンタ200におけるエラーの発生により中断していた印刷データの送信を再開する(ステップS44)。
プリンタ200では、ステップS53にて状態情報返信部204がホストコンピュータ100に状態情報を返信した後、印刷データ受け捨て部207は、ホストコンピュータ100から送信され印刷データ受信部208にて受信された印刷データを受け捨てる(ステップS54)。この受け捨て処理は、開始から所定のタイムアウト(例えば、3秒)を経過した時点をもって終了する(ステップS55)。
ホストコンピュータ100では、ステップS44にて印刷データ送信部108が印刷データの送信を再開した後、印刷データの送信が完了したか否かを判定する(ステップS45)。印刷データの送信が完了したと印刷データ送信部108にて判定すると、状態取得コマンド送信部103は、状態取得コマンドをコントロールパイプ301を介してプリンタ200に送信する(ステップS46)。
プリンタ200では、この状態取得コマンドを状態取得コマンド受信部202にて受信したとき、印刷データ受け捨て処理のタイムアウトがまだ経過していない場合、状態情報返信部204は、プリンタ200がファームウェア更新の準備中であることを示す状態情報をホストコンピュータ100に返信する(ステップS56)。一方、印刷データ受け捨て処理のタイムアウトが経過している場合、状態情報返信部204は、ファームウェアの更新準備が完了したことを示す状態情報をホストコンピュータ100に返信する(ステップS57)。そして、印刷データ受け捨て部207により、印刷データ受け捨てモードの設定を解除する(ステップS58)。
ホストコンピュータ100では、状態情報受信部104にて状態情報を受信すると、状態判定部105が、その受信した状態情報に基づいて、プリンタ200にてファームウェア更新の準備が完了しているか否かを判定する(ステップS47)。ここで、プリンタ200にてファームウェア更新の準備が完了していないと判定された場合、処理はステップS46に戻る。一方、プリンタ200にてファームウェア更新の準備が完了していると判定された場合、ファームウェア送信部106は、バルクアウトパイプ302を介してファームウェアをプリンタ200に送信する(ステップS48)。
プリンタ200では、ステップS58にて印刷データ受け捨て部207が印刷データ受け捨てモードの設定を解除すると、ホストコンピュータ100からバルクアウトパイプ302を介してファームウェアが送信されてくる。ファームウェア更新部206は、ホストコンピュータ100から送信されてくるファームウェアを受信して(ステップS59)、フラッシュメモリ210に更新して記憶させる(ステップS60)。
ホストコンピュータ100では、ステップS48にてファームウェア送信部106によりファームウェアをプリンタ200に送信した後、状態取得コマンド送信部103が、コントロールパイプ301を介して更新完了確認コマンドをプリンタ200に送信する(ステップS49)。
プリンタ200では、状態取得コマンド受信部202にてこの更新完了確認コマンドを受信すると、状態検出部203が、ファームウェアの更新処理の状態を検出する(ステップS61)。そして、状態情報返信部204は、状態検出部203による検出結果に基づいて、ファームウェアの更新処理が完了しているか、ファームウェアの更新に失敗してリライト待機状態であるかを表す状態情報を生成し、ホストコンピュータ100に返信する(ステップS62)。
ホストコンピュータ100では、状態情報受信部104にて状態情報を受信すると、状態判定部105が、その受信した状態情報に基づいて、ファームウェアの更新処理が完了しているか否かを判定する(ステップS50)。ここで、ファームウェアの更新処理が完了していない、すなわち、リライト待機状態であると判定された場合、処理はステップS41に戻り、ファームウェア強制更新コマンドの送信を再開する。一方、ファームウェアの更新処理が完了していると判定された場合、図6に示すフローチャートの処理は終了する。
また、上記実施形態では、ホストコンピュータ100とプリンタ200との間をUSBケーブル300で接続し、第1の伝送路としてコントロールパイプ301を、第2の伝送路としてバルクアウトパイプ302を使用する例について説明したが、本発明はこれに限定されない。例えば、ホストコンピュータ100とプリンタ200との間を有線または無線のLANにより接続してもよいし、ブルートゥースにより接続してもよい。LANにより接続する場合、2つのポートを用いて2つの伝送路を設定し、一方を第1の伝送路、他方を第2の伝送路として使用することが可能である。また、ブルートゥースにより接続する場合、ブルートゥースの拡張仕様であるBLE(Bluetooth Low Energy)を第1の伝送路、通常仕様のブルートゥースを第2の伝送路として使用することが可能である。
また、上記実施形態では、指示取得部101がファームウェアの更新指示を取得したときに、ホストコンピュータ100からプリンタ200に対してファームウェア強制更新コマンドを送信するとともに、状態取得コマンドを送信してプリンタ200の状態を確認しているが、この状態の確認に加えて、プリンタ200の機種、モデル、バージョンなどを問い合わせ、その問い合わせに対する回答の結果に応じてファームウェアの更新を制御するようにしてもよい。
例えば、更新対象として指定したファームウェアが、プリンタ200の機種やモデルに対応するものである場合に限り、ファームウェアの更新を許可するように制御することが可能である。また、更新対象として指定したファームウェアのバージョンが、プリンタ200にインストールされているファームウェアのバージョンよりも新しい場合に限り、ファームウェアの更新を許可するように制御することが可能である。
また、上記実施形態において、プリンタ200をオフライン状態からオンライン状態に強制的に切り替えた場合、ファームウェアの更新が完了した後に、プリンタ200をオンライン状態からオフライン状態に戻すようにしてもよい。もともとプリンタ200がオフライン状態であったということは、用紙がセットされていないとか、カバーが開いているといった理由で印刷ができない状態になっている可能性が高い。そこで、ファームウェアの更新が完了した後は、プリンタ200をオフライン状態に戻すのが好ましい。
その他、上記実施形態は、何れも本発明を実施するにあたっての具体化の一例を示したものに過ぎず、これによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその要旨、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。