説明

通信装置

【課題】 処理部の消費電力を低減し得る技術を提供する。
【解決手段】 プリンタは、メインCPUとサブCPUとを備える。メインCPUは、消費電力が比較的に高い非スリープ状態と、消費電力が比較的に低いスリープ状態との間で状態が移行する。サブCPUは、メインCPUがスリープ状態である間に、ネットワークを介して受信されるパケットが、応答処理を実行すべきパケットであるのか否かを判断するパケット判断処理(S60)を実行する。サブCPUは、パケットが応答処理を実行すべきパケットであると判断される場合に、判断処理の後に、パケット妥当性確認処理(S64)を実行する。サブCPUは、パケットが妥当であると確認される場合に、パケットに対する応答処理を実行する(S70)。パケットが応答処理を実行すべきパケットでないと判断される場合に、サブCPUは、確認処理を実行せず、応答処理を実行しない。

【発明の詳細な説明】
【技術分野】
【0001】
本明細書では、ネットワークに接続される通信装置を開示する。
【背景技術】
【0002】
特許文献1に、メインCPUとサブCPUとを備える画像処理装置が開示されている。画像処理装置は、メインCPUへの電源の供給が行なわれる通常動作状態と、メインCPUへの電源の供給が停止される省電力状態と、の間で状態が移行する。画像処理装置が省電力状態である間に、ネットワークを介してパケットが受信されると、サブCPUは、当該パケットに含まれるIPバージョンを示す情報及びヘッダ長を示す情報を用いて、当該パケットを破棄すべきか否かを確認する。当該パケットを破棄すべきでないと確認された後に、サブCPUは、さらに、当該パケットが、画像処理装置が応答すべきパケットであるのか否かを判断する。ここで肯定的に判断される場合に、メインCPU又はサブCPUは、パケットに対する応答処理を実行する。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2006−259906号公報
【特許文献2】特開2003−283588号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
通信装置(特許文献1では画像処理装置)の消費電力をより低減させることが求められている。本明細書では、通信装置の消費電力をより低減し得る技術を提供する。
【課題を解決するための手段】
【0005】
本明細書によって開示される技術は、ネットワークに接続される通信装置である。この通信装置は、消費電力が比較的に高い第1の状態と、消費電力が比較的に低い第2の状態との間で状態が移行する処理部を備える。処理部は、ネットワークを介して受信されるパケットに対する応答処理を実行する。処理部は、判断部と確認部と第1応答実行部とを備える。判断部は、処理部が第2の状態である間に、ネットワークを介して受信される第1のパケットが、処理部が応答処理を実行すべきパケットであるのか否かを判断する第1の判断処理を実行する。確認部は、第1のパケットが、処理部が応答処理を実行すべきパケットであると判断される第1の場合に、第1の判断処理の後に、第1のパケットの妥当性を確認する第1の確認処理を実行する。第1応答実行部は、第1のパケットが妥当であると確認される場合に、第1のパケットに対する応答処理を実行する。第1のパケットが、処理部が応答処理を実行すべきパケットでないと判断される第2の場合に、確認部は、第1の確認処理を実行せず、第1応答実行部は、応答処理を実行しない。
【0006】
通常では、応答処理の前に、受信したパケットに対して応答すべきか否かを判断する処理が実行される際に、受信したパケットの妥当性を確認する処理も実行される。このため、通常の処理では、受信したパケットに対して応答すべきでないと判断される場合にも、確認の処理は実行される。しかしながら、この通信装置では、処理部が第2の状態である間に第1のパケットが受信されると、先に、第1の判断処理が実行され、その後に、第1の確認処理が実行される。そして、第1の判断処理において第1のパケットが応答すべきパケットでないと判断される場合には、第1の確認処理は実行されない。このため、処理部が第2の状態である間に、処理部の処理負荷を低減し得る。従って、通信装置の消費電力を低減し得る。
【0007】
判断部は、第1のパケットのうち、第1のレイヤで処理されるべき情報を用いて、第1の判断処理を実行してもよい。確認部は、第1の判断処理の後に、第1のパケットのうち、第1のレイヤよりも下位のレイヤである第2のレイヤで処理されるべき情報を用いて、第1の確認処理を実行してもよい。上記の通常の処理では、受信したパケットのうち、下位のレイヤで処理されるべき情報を用いて判断および確認を含む処理が実行された後に、上位のレイヤで処理されるべき情報を用いて判断および確認を含む処理が実行される。しかしながら、上記の通信装置では、下位のレイヤ(第2のレイヤ)で処理されるべき情報を用いて第1の確認処理が実行される前に、上位のレイヤ(第1のレイヤ)で処理されるべき情報を用いて第1の判断処理が実行される。このため、処理部が第2の状態である間において、第1のパケットが応答処理を実行すべきパケットでないと判断される場合に、下位のレイヤ(第2のレイヤ)で処理されるべき情報を用いた第1の確認処理を実行せずに済む。
【0008】
判断部は、第1のパケットのうち、IPヘッダに含まれる宛先IPアドレスと、UDPヘッダに含まれる宛先ポート番号と、を用いて、第1の判断処理を実行してもよい。確認部は、第1の判断処理の後に、第1のパケットのうち、IPヘッダに含まれる特定の情報を用いて、第1の確認処理を実行してもよい。なお、IPヘッダに含まれる特定の情報は、誤り検出のための情報と、データサイズに関する情報と、送信元IPアドレスと、のうちの少なくとも1つを含んでいてもよい。
【0009】
判断部は、さらに、第1のパケットのうち、アプリケーションデータに含まれる情報を用いて、第1の判断処理を実行してもよい。確認部は、さらに、第1の判断処理の後に、第1のパケットのうち、UDPヘッダに含まれる特定の情報を用いて、第1の確認処理を実行してもよい。なお、UDPヘッダに含まれる特定の情報は、誤り検出のための情報を含んでいてもよい。
【0010】
処理部は、さらに、パケット解析部と第2応答実行部とを備えていてもよい。パケット解析部は、処理部が第1の状態である間に、ネットワークを介して受信される第2のパケットが、処理部が応答処理を実行すべきパケットであるのか否かを判断する第2の判断処理を実行し、第2の判断処理を実行する際に、第2のパケットの妥当性を確認する第2の確認処理を実行してもよい。第2応答実行部は、第2のパケットが、処理部が応答処理を実行すべきパケットであると判断され、かつ、第2のパケットが妥当であると確認される場合に、第2のパケットに対する応答処理を実行してもよい。この構成によれば、処理部が第1の状態である間に受信される第2のパケットに対する処理を、上記の通常の処理と同様に適切に実行し得る。
【0011】
パケット解析部は、第2のパケットのうち、第3のレイヤで処理されるべき情報を用いて、第2の確認処理を実行し、その後に、第2のパケットのうち、第3のレイヤよりも上位のレイヤである第4のレイヤで処理されるべき情報を用いて、第2の確認処理を実行してもよい。
【0012】
処理部は、第1処理部と第2処理部とを備えていてもよい。第1処理部は、非スリープ状態とスリープ状態との間で状態が移行し、非スリープ状態である場合に、応答処理を実行してもよい。第1処理部は、処理部が第1の状態である場合には非スリープ状態であり、処理部が第2の状態である場合にはスリープ状態であってもよい。第2処理部は、判断部と確認部と第1応答実行部とを含んでもよい。第2処理部は、第1処理部がスリープ状態である場合に、応答処理を実行してもよい。判断部は、さらに、第1の場合に、第1処理部をスリープ状態から非スリープ状態に移行させるべきであるのか否かを判断してもよい。第1応答実行部は、第1処理部をスリープ状態から非スリープ状態に移行させるべきでないと判断される場合に、第1のパケットに対する応答処理を実行してもよい。第2処理部は、第1処理部をスリープ状態から非スリープ状態に移行させるべきであると判断される場合に、第1処理部をスリープ状態から非スリープ状態に移行させてもよい。第1処理部は、非スリープ状態に移行した後に、第1のパケットに対する応答処理を実行してもよい。この構成によれば、第1処理部を非スリープ状態に移行させるべきでないと判断される場合に、第1処理部をスリープ状態に維持した状態で、第2処理部は、第1のパケットに対する応答処理を実行することができる。第1処理部がスリープ状態に維持されるために、通信装置の消費電力を低減することができる。また、上記の通信装置では、第1処理部を非スリープ状態に移行させるべきであると判断される場合に、第1処理部が非スリープ状態に移行し、第1処理部が第1のパケットに対する応答処理を実行する。この構成によれば、第1のパケットに対する応答処理を適切に実行し得る。
【0013】
上記の通信装置は、処理部を含む集積回路と、集積回路内に設けられた第1のメモリと、集積回路外に設けられた第2のメモリと、を備えていてもよい。判断部は、第1のメモリに格納された第1のプログラムに従って、第1の判断処理を実行してもよい。確認部は、第2のメモリに格納された第2のプログラムに従って、第1の確認処理を実行してもよい。この構成によれば、第2のメモリが集積回路外に設けられている。この構成によれば、第1のメモリと第2のメモリとの両方が集積回路内に設けられている構成と比較して、集積回路内のメモリ(即ち第1のメモリ)の容量を小さくすることができる。また、上述したように、上記の通信装置では、第1の判断処理において、第1のパケットが、処理部が応答処理を実行すべきパケットでないと判断される場合に、第1の確認処理は実行されない。このため、処理部が、第1の確認処理を実行するための第2のプログラムを格納している集積回路外の第2のメモリにアクセスする頻度が少なくて済む。
【0014】
なお、上記の通信装置を実現するための制御方法、及び、コンピュータプログラムも新規で有用である。
【図面の簡単な説明】
【0015】
【図1】ネットワークシステムの構成を示す。
【図2】プリンタの状態移行の一例を示す。
【図3】プリンタの状態に対応する各部の状態の一例を示す。
【図4】プリンタが受信するパケットの一例を示す。
【図5】メインCPUが実行する処理のフローチャートを示す。
【図6】サブCPUが実行する処理のフローチャートを示す。
【図7】パケット判断処理のフローチャートを示す。
【図8】SNMPパケット処理のフローチャートを示す。
【図9】NetBIOS−NSパケット処理のフローチャートを示す。
【図10】パケット妥当性確認処理のフローチャートを示す。
【発明を実施するための形態】
【0016】
図面を参照して実施例を説明する。図1に示すように、ネットワークシステム2は、PC等の外部装置6と、プリンタ10と、を備える。外部装置6とプリンタ10は、LAN4を介して、相互に通信可能である。
【0017】
(プリンタの構成)
図1に示すように、プリンタ10は、ASIC(Application Specific Integrated Circuit)12と、フラッシュメモリ80と、SDRAM100と、ネットワークインターフェイス102と、エンジン制御回路110と、プリンタエンジン112と、パネル制御回路120と、表示パネル122と、を備える。
【0018】
ASIC12は、メインCPU20と、メイン用割込コントローラ26と、メイン用クロック回路28と、サブCPU30と、サブ用割込コントローラ38と、サブ用クロック回路40と、タイマ50と、タイマ用クロック回路52と、SRAM60と、SDRAM制御回路70と、MACコントローラ72と、を備える。各部20,26,30,38,50,60,70,72は、バス14に接続されている。
【0019】
メインCPU20は、フラッシュメモリ80に格納されている基本プログラム84に従って様々な処理を実行する。これにより、パケット解析部22と第2応答実行部24との機能が実現される。メイン用クロック回路28は、メインCPU20にクロック信号を供給する。メインCPU20にクロック信号が供給されている間は、メインCPU20は非スリープ状態である。メインCPU20にクロック信号が供給されていない間は、メインCPU20はスリープ状態である。メインCPU20のスリープ状態は、メインCPU20の非スリープ状態と比較して、消費電力が低い状態である。メイン用クロック回路28は、サブCPU30によって制御される。メイン用割込コントローラ26は、メインCPU20の外部(例えばサブCPU30、タイマ50、MACコントローラ72)から取得した割込要求信号を、メインCPU20に供給する。メインCPU20は、メイン用割込コントローラ26から割込要求信号を取得すると、割込要求信号に応じた処理を実行する。
【0020】
サブCPU30は、各メモリ60,80に格納されている各プログラム68,84,86に従って様々な処理を実行する。これにより、判断部32、確認部34、及び、第1応答実行部36の機能が実現される。サブ用クロック回路40は、サブCPU30にクロック信号を供給する。サブ用クロック回路40のクロック信号の周波数は、メイン用クロック回路28のクロック信号の周波数よりも低い。従って、メインCPU20を駆動するための消費電力と比べて、サブCPU30を駆動するための消費電力は低い。さらに、メインCPU20の処理速度は、サブCPU30の処理速度よりも高い。サブ用クロック回路40は、プリンタ10の電源がONにされるとサブCPU30にクロック信号を供給し、プリンタ10の電源がOFFにされるとクロック信号を停止する。即ち、サブCPU30は、プリンタ10の電源がONされている間、クロック信号が供給されている状態(非スリープ状態)で維持される。サブ用割込コントローラ38は、サブCPU30の外部(例えばメインCPU20、MACコントローラ72)から取得した割込要求信号を、サブCPU30に供給する。サブCPU30は、サブ用割込コントローラ38から割込要求信号を取得すると、割込要求信号に応じた処理を実行する。
【0021】
タイマ50は、タイマ用クロック回路52から供給されるクロック信号に同期して、予め設定された初期値からカウントダウンを実行する。タイマ用クロック回路52は、プリンタ10が後述する処理状態302から待機状態304(図2参照)に移行されると、タイマ50へのクロック信号の供給を開始する。タイマ50は、カウント値が「0」になると、メイン用割込コントローラ26にタイマ割込要求信号を供給する。この結果、メイン用割込コントローラ26はタイマ割込要求信号をメインCPU20に供給し、メインCPU20は、プリンタ10を、待機状態304からLスリープ状態306(図2参照)に移行させる。
【0022】
SRAM60は、各CPU20,30からアクセス可能である。サブCPU30は、メインCPU20がスリープ状態である間に、LAN4を介して受信されるパケットを、SRAM60に格納する。SRAM60は、OID(Object ID)テーブル62(後述する)を格納している。SRAM60は、さらに、サブCPU30がパケット判断処理(図7参照)を実行するための判断処理用プログラム68を格納する。判断処理用プログラム68は、圧縮された状態で、フラッシュメモリ80に格納されている。プリンタ10の電源がONされると、メインCPU20は、フラッシュメモリ80内の圧縮された判断処理用プログラム68を展開して、展開済みの判断処理用プログラム68をSRAM60に格納する。
【0023】
SDRAM制御回路70は、各CPU20,30の指示に従って、SDRAM100にアクセスする。また、SDRAM制御回路70は、サブCPU30の指示により、SDRAM100にクロック信号を供給又は停止して、消費電力が比較的に高い通常動作モードと、消費電力が比較的に低いセルフリフレッシュモードと、の間でSDRAM100の状態を移行させる。
【0024】
MACコントローラ72は、ネットワークインターフェイス102に接続されている。MACコントローラ72は、LAN4を介して、ネットワークインターフェイス102でパケットが受信されると、2個の割込コントローラ26,38のどちらかに、パケット割込要求信号を供給する。詳細には、メインCPU20が非スリープ状態である間に、パケットが受信されると、MACコントローラ72は、パケット割込要求信号を、メイン用割込コントローラ26に供給する。一方、メインCPU20がスリープ状態である間に、パケットが受信されると、MACコントローラ72は、パケット割込要求信号を、サブ用割込コントローラ38に供給する。
【0025】
フラッシュメモリ80は、ASIC12の外部に設けられている。フラッシュメモリ80は、各CPU20,30からアクセス可能である。なお、フラッシュメモリ80は、各CPU20,30からのアクセスがない状態では、アクセスされている状態と比較して、消費電力が低いモードに維持される。これにより、フラッシュメモリ80の省電力化が実現される。フラッシュメモリ80は、各CPU20,30によって実行される複数種類のプログラムを格納している。上記の複数種類のプログラムは、基本プログラム84と確認処理用プログラム86と判断処理用プログラム68とを含む。各プログラム84,86は、フラッシュメモリ80に格納された状態で、各CPU20,30によって利用される。ただし、上述したように、判断処理用プログラム68は、SRAM60に格納された状態で、サブCPU30によって利用される。なお、フラッシュメモリ80は、MIB(Management Information Base)データ格納領域90(後述する)を備える。
【0026】
SDRAM100は、メインCPU20からアクセス可能である。メインCPU20は、メインCPU20が非スリープ状態である間に、LAN4を介して受信されるパケットを、SDRAM100に格納する。SDRAM100は、SRAM60よりもメモリの総容量が大きい。このため、SDRAM100の消費電力は、SRAM60の消費電力と比べて高い。SDRAM100は、SDRAM制御回路70によって制御され、通常動作モードとセルフリフレッシュモードとの間で状態が移行する。SDRAM100には、メインCPU20が処理を実行する際に必要な情報が格納される。例えば、プリンタ10のIPアドレス、MACアドレス、ノード名等が格納される。SDRAM100には、さらに、複数個のOIDと複数個のオブジェクトデータとが対応付けて登録されるオブジェクトデータテーブル(後述する)が格納されている。オブジェクトデータは、プリンタ10の現在の状態を示す情報である。
【0027】
ここで、SRAM60に格納されているOIDテーブル62と、フラッシュメモリ80内のMIBデータ格納領域90と、SDRAM100に格納されているオブジェクトデータテーブルと、について詳しく説明する。メインCPU20は、プリンタ10の電源がONにされると、オブジェクトデータテーブル内の複数個のOIDのそれぞれについて、当該OIDに対応するオブジェクトデータを登録する。なお、複数個のOIDは、プリンタ10のベンダによって予め登録されている。例えば、プリンタ10のトナーの残量が所定量よりも少ない場合、メインCPU20は、OID「X.X.X」に対応付けて、「TONER LOW」を登録する。メインCPU20は、プリンタ10の状態が変更される(例えばトナーが交換される)と、オブジェクトデータテーブル内のオブジェクトデータを変更する。メインCPU20は、LAN4を介して受信されたパケットであって、プリンタ10のオブジェクトデータを要求する要求パケットに対する応答処理を実行する場合には、要求パケットで指定されたOIDに対応するオブジェクトデータを、SDRAM100内のオブジェクトデータテーブルから取得する。次いで、メインCPU20は、OIDと取得したオブジェクトデータとが対応付けられた応答パケットを、要求パケットの送信元のデバイス(例えば外部装置6)に送信する。
【0028】
SRAM60内のOIDテーブル62には、OID64とアドレス66とが対応付けて登録される。OID64は、プリンタ10のベンダによって予め登録されている。OID64は、オブジェクトデータテーブル内の複数個のOIDのうちの一部のOIDのみと一致する。即ち、SDRAM100内のオブジェクトデータテーブルには、OID64と一致しないOIDが含まれる。MIBデータ格納領域90には、複数個のオブジェクトデータ94が格納されている。各オブジェクトデータ94は、アドレス92によって特定される。メインCPU20は、非スリープ状態からスリープ状態に移行する際に、オブジェクトデータテーブルを参照して、各OID64に対応するアドレス66を登録する。具体的には、メインCPU20は、オブジェクトデータテーブルから、各OID64(例えばOID「Y.Y.Y」)と一致するOIDに対応するオブジェクトデータ(例えば「警告あり」または「警告なし」)を取得する。次いで、メインCPU20は、取得したオブジェクトデータ(例えば「警告あり」)と一致するオブジェクトデータのアドレス92(例えばアドレス「2222」)を、MIBデータ格納領域90から特定する。そして、メインCPU20は、特定したアドレス92を、OIDテーブル62のOID64(例えばOID「Y.Y.Y」)に対応するアドレス66として登録する。
【0029】
サブCPU30は、上記の要求パケットに対する応答処理を実行する場合に、要求パケットで指定されたOID(例えばOID「Y.Y.Y」)に対応するアドレス66(例えばアドレス「2222」)を、OIDテーブル62から取得する。次いで、サブCPU30は、MIBデータ格納領域90内から、取得したアドレス66によって特定されるオブジェクトデータ94(例えば「警告あり」)を取得する。サブCPU30は、OIDと取得したオブジェクトデータとが対応付けられた応答パケットを、要求パケットの送信元のデバイス(例えば外部装置6)に送信する。
【0030】
ネットワークインターフェイス102は、LAN4に接続されている。ネットワークインターフェイス102は、LAN4を介して受信したパケットを、MACコントローラ72に供給する。エンジン制御回路110は、メインCPU20からの指示に従って、インクジェット方式、レーザ方式等のプリンタエンジン112を制御する。パネル制御回路120は、メインCPU20からの指示に従って、表示パネル122を制御する。表示パネル122は、LCDである。パネル制御回路120は、表示パネル122のバックライトをON状態とOFF状態との間で移行させる。各制御回路110,120には、図示省略されたクロック回路からクロック信号が供給される。各制御回路110,120にクロック信号が供給されている間、各制御回路110,120は動作状態である。各制御回路110,120へのクロック信号の供給が停止されると、各制御回路110,120は停止状態となる。これにより、各制御回路110,120の消費電力を低減させることができる。各制御回路110,120のためのクロック回路は、メインCPU20によって制御される。
【0031】
(プリンタの状態移行)
図2に示すように、プリンタ10は、処理状態302と待機状態304とLスリープ状態306とDスリープ状態308との間で状態が移行する。図3は、プリンタ10が各状態302〜308である場合に、2個のCPU20,30、2個のRAM60,100、表示パネル122、及び、2個の制御回路110,120の状態を表わす。プリンタ10の電源がONされると、プリンタ10は、待機状態304となる。図3に示すように、待機状態304では、2個のCPU20,30には、クロックが供給される。即ち、待機状態304では、2個のCPU20,30は、非スリープ状態である。また、待機状態304では、2個のRAM60,100は通常動作モードであり、表示パネル122はON状態であり、2個の制御回路110,120にはクロックが供給されている。
【0032】
プリンタ10が待機状態304であり、かつ、通常の処理を実行すべき場合に、プリンタ10は、処理状態302に移行する。なお、上記の通常の処理は、印刷指示パケットに応じて実行される印刷処理、ユーザによって表示パネル122の操作が為された場合に実行される表示処理等を含む。図3に示すように、処理状態302の場合の各部20,30等の状態は、待機状態304の場合と同様である。処理状態302と待機状態304との相違点は、メインCPU20が上記の通常の処理を実行しているか否かである。メインCPU20が上記の通常の処理を終了すると、プリンタ10は、待機状態304に移行する。
【0033】
プリンタ10が待機状態304に移行すると、タイマ50は、初期値からカウントダウンを実行する。タイマ50のカウント値が「0」になると、タイマ50は、メイン用割込コントローラ26を介して、メインCPU20にタイマ割込要求信号を供給する。この結果、メインCPU20は、表示パネル122のバックライトをOFF状態にするように、パネル制御回路120に指示する。また、メインCPU20は、エンジン制御回路110とパネル制御回路120へのクロック信号を停止することを、2個の制御回路110,120のためのクロック回路に指示する。これにより、プリンタ10は、Lスリープ状態306に移行する。Lスリープ状態306では、2個のCPU20,30は非スリープ状態であり、2個のRAM60,100は通常動作モードであり、表示パネル122のバックライトはOFF状態であり、2個の制御回路110,120は停止状態である。これにより、2個の制御回路110,120及び表示パネル122で消費される電力を低減させることができる。Lスリープ状態306において、メインCPU20が上記の通常の処理(印刷処理、表示処理等)を実行すべき場合には、プリンタ10は、処理状態302に移行する。この際に、メインCPU20は、タイマ50のカウント値を初期値に戻すための指示をタイマ50に供給する。これにより、処理状態302を終えて待機状態304に再び移行すると、タイマ50は、初期値からカウントダウンを再び実行する。
【0034】
プリンタ10は、メインCPU20が図5の処理を実行することによって、Lスリープ状態306からDスリープ状態308に移行する。Dスリープ状態308では、メインCPU20はスリープ状態であり、サブCPU30は非スリープ状態であり、SRAM60は通常動作モードであり、SDRAM100はセルフリフレッシュモードであり、表示パネル122のバックライトはOFF状態であり、2個の制御回路110,120は停止状態である。Dスリープ状態308において、メインCPU20が上記の通常の処理(印刷処理、表示処理等)を実行すべき場合には、プリンタ10は、Lスリープ状態306を経て処理状態302に移行する。また、Dスリープ状態308の間に受信されるパケットに対する応答処理をメインCPU20が実行すべき場合には、プリンタ10は、Lスリープ状態306に移行する。
【0035】
(プリンタが受信するパケットの構成)
次いで、プリンタ10がLAN4を介して受信するパケットの一例の構成を説明する。ここで説明する一例のパケット200は、図4に示すように、NetBIOS−NS(Network Basic Input-Output System - Name Service)と、SNMP(Simple Network Management Protocol)と、のいずれかのパケットである。パケット200は、イーサネット(登録商標)ヘッダ210と、IPv4ヘッダ220と、UDP(User Datagram Protocol)ヘッダ230と、アプリケーションデータ240と、を含む。イーサネット(登録商標)ヘッダ210内の各情報(例えばタイプ/フレーム長212等)は、TCP/IPモデルの最下位のレイヤであるネットワークインターフェイス層で処理されるべき情報である。IPv4ヘッダ220内の各情報(例えばバージョン221、ヘッダ長222等)は、ネットワークインターフェイス層よりも1段階上位のレイヤであるインターネット層で処理されるべき情報である。UDPヘッダ230内の各情報(例えば宛先ポート232、チェックサム234等)は、インターネット層よりも1段階上位のレイヤであるトランスポート層で処理されるべき情報である。アプリケーションデータ240内の各情報は、トランスポート層よりも1段階上位のレイヤであるアプリケーション層で処理されるべき情報である。なお、アプリケーション層は、TCP/IPモデルの最上位のレイヤである。
【0036】
パケット200がNetBIOS−NSのパケットである場合と、パケット200がSNMPのパケットである場合とでは、アプリケーションデータ240内の情報の内容が異なる。例えば、パケット200がNetBIOS−NSのパケットである場合には、アプリケーションデータ240は、QDCOUNT241、ANCOUNT242等を含む。パケット200がSNMPのパケットである場合には、アプリケーションデータ240は、SNMPバージョン251、コミュニティ名252等を含む。
【0037】
(メインCPUが実行する処理)
次いで、メインCPU20が実行する処理の内容について説明する。メインCPU20は、プリンタ10の電源がONにされると、フラッシュメモリ80内の基本プログラム84に従って、図5の処理を実行する。プリンタ10の電源がONされた時点では、プリンタ10は待機状態304である。即ち、プリンタ10の電源がONされると、タイマ用クロック回路52は、タイマ50にクロック信号を供給する。
【0038】
メインCPU20は、パケットを受信することを監視している(S12)。具体的には、メインCPU20は、MACコントローラ72から、メイン用割込コントローラ26を介して、パケット割込要求信号が供給されることを監視している。ここでYESの場合にS14に進み、NOの場合にS17に進む。なお、S12でYESの場合、メインCPU20は、S12で受信したパケットを、SDRAM100に格納する。
【0039】
S12で受信したパケットが図4のパケット200である場合を例にして、S14の処理について説明する。パケット解析部22は、最初に、最も下位のレイヤであるネットワークインターフェイス層で処理されるべきイーサネット(登録商標)ヘッダ210を用いて、インターネット層で処理されるべきヘッダのプロトコルを特定する。次いで、パケット解析部22は、インターネット層で処理されるべきIPv4ヘッダ220を用いて、IPv4ヘッダ判断処理とIPv4ヘッダ妥当性確認処理とを含む処理を実行する。IPv4ヘッダ判断処理は、IPv4ヘッダ220に含まれる宛先IPアドレス228を用いて、パケット200が、プリンタ10が処理すべきパケットであるのか否かを判断する処理を含む。例えば、宛先IPアドレス228が、プリンタ10のIPアドレス、ブロードキャストアドレス、及び、マルチキャストアドレスの3種類のIPアドレスのうちのいずれかである場合には、パケット解析部22は、パケット200が、プリンタ10が処理すべきパケットであると判断する。宛先IPアドレス228が、上記の3種類のIPアドレスのいずれでもない場合(例えば、宛先IPアドレス228が、他のデバイスのIPアドレスである場合)には、パケット解析部22は、プリンタ10が応答処理を実行すべきパケットでないと判断する。IPv4ヘッダ妥当性確認処理は、ヘッダ長222、データグラム長223、及び、ヘッダチェックサム226を用いて、パケット200が妥当である(正常である)のか否かを確認する処理を含む。
【0040】
IPv4ヘッダ判断処理で、パケット200がプリンタ10が処理すべきパケットであると判断され、かつ、IPv4ヘッダ妥当性確認処理で、パケット200が妥当であると確認された場合に、パケット解析部22は、トランスポート層で処理されるべきUDPヘッダ230を用いて、UDPヘッダ判断処理とUDPヘッダ妥当性確認処理とを含む処理を実行する。UDPヘッダ判断処理は、UDPヘッダ230に含まれる宛先ポート232を用いて、パケット200が、プリンタ10が処理すべきパケットであるのか否かを判断する処理を含む。例えば、宛先ポート232が、所定のポート番号の範囲内の番号でない場合には、パケット200が、プリンタ10が処理すべきパケットでないと判断される。UDPヘッダ妥当性確認処理は、チェックサム234を用いて、パケット200が妥当であるのか否かを確認する処理を含む。
【0041】
UDPヘッダ判断処理で、パケット200がプリンタ10が処理すべきパケットであると判断され、かつ、UDPヘッダ妥当性確認処理で、パケット200が妥当であると確認された場合に、パケット解析部22は、アプリケーション層で処理されるべきアプリケーションデータ240を用いて、パケット200に対する応答処理を実行する。なお、パケット200が、NetBIOS−NSのパケットである場合には、パケット解析部22は、QUESTION_NAME246を用いて、パケット200が妥当であるのか否かを確認する処理を実行する。
【0042】
上記の説明から明らかなように、パケット解析部22は、メインCPU20が非スリープ状態である間にLAN4を介して受信されたパケット200のうち、下位のレイヤ(即ちインターネット層)で処理されるべき情報(即ちIPv4ヘッダ220)を用いて、パケット200がプリンタ10が処理すべきパケットであるか否かの判断処理とパケット200が妥当であるのか否かの確認処理とを含む処理を実行し、その後に、上位のレイヤ(即ちトランスポート層)で処理されるべき情報(即ちUDPヘッダ230)を用いて、判断処理と確認処理とを含む処理を実行する。
【0043】
次いで、メインCPU20は、S12で受信したパケットが、プリンタ10が応答処理を実行すべきパケットであると判断され、かつ、S12で受信したパケットが、妥当なパケットであると確認されたのか否かを判断する(S15)。ここでNOの場合、メインCPU20は、S12で受信したパケットを破棄して、S17に進む。一方、S15でYESの場合、第2応答実行部24は、S12で受信したパケットに対する応答処理を実行する(S16)。例えば、S12で受信したパケットがオブジェクトデータの要求パケットである場合、メインCPU20は、SDRAM100に格納されているオブジェクトデータのうち、パケットに含まれるOIDに対応付けて登録されているオブジェクトデータを含む応答パケットを、S12で受信したパケットの送信元のデバイスに送信する。
【0044】
S17では、メインCPU20は、プリンタ10の待機状態304が所定時間継続したのか否かを判断する。具体的には、メインCPU20は、タイマ50から、メイン用割込コントローラ26を介して、タイマ割込要求信号が供給されたのか否かを判断する。ここでYESの場合にS18に進み、NOの場合にS12に戻る。S18では、メインCPU20は、表示パネル122のバックライトをOFFにするように、パネル制御回路120に指示する。次いで、メインCPU20は、エンジン制御回路110とパネル制御回路120とに供給されるクロック信号を停止する(S20)。これにより、プリンタ10は、Lスリープ状態306になる。
【0045】
次いで、メインCPU20は、プリンタ10がLスリープ状態306であるのか否かを判断する(S21)。具体的には、メインCPU20は、タイマ50のカウント値が「0」である場合に、プリンタ10がLスリープ状態306であると判断し、タイマ50のカウント値が「0」以外の値である場合に、プリンタ10がLスリープ状態306でないと判断する。S21でNOの場合には、メインCPU20は、S22でプリンタ10を処理状態302に移行させて(即ち、表示パネル122のバックライトの電源をONにし、各制御回路110,120にクロックを供給する)、S12に戻る。
【0046】
S21でYESの場合には、メインCPU20は、プリンタ10からパケットが送信されている状態であるのか否かを判断する(S23)。例えば、メインCPU20が外部装置6等からのパケットに対する応答を返信している途中の場合には、S23でYESと判断され、S30に進む。一方において、S23でNOの場合、メインCPU20は、未処理パケットがSDRAM100に格納されているか否かを判断する(S24)。S24でYESの場合には、メインCPU20は、未処理パケットに対する処理を実行し(S26)、S21に戻る。S26の処理は、上記のS14〜S16の処理を含む。なお、S26で処理されるパケットは、メインCPU20が非スリープ状態である間に受信されて、SDRAM100に格納されたパケットと、メインCPU20がスリープ状態である間に受信されて、SRAM60に格納された特定のパケットと、を含む。なお、この特定のパケットは、後述の図6のS72の処理によって、SRAM60からSDRAM100に移動される。また、特定のパケットが、プリンタ10が処理状態302で処理すべきパケット(例えば印刷指示パケット)である場合には、メインCPU20は、タイマ50のカウント値を初期値に戻す。この結果、S21でNOと判断され、プリンタ10は、処理状態302に移行する。
【0047】
S24でNOの場合には、メインCPU20は、プリンタ10に接続中のデバイス(例えば外部装置6)があるのか否かを判断する(S28)。例えば、プリンタ10がWebサーバ機能を有しており、外部装置6がプリンタ10のWebサーバにTCP接続中である場合に、S28でYESと判断される。S23又はS28でYESの場合には、MACコントローラ72はパケット送信やTCP接続のための処理を実行中であるが、メインCPU20はパケット送信やTCP接続のための処理を実行していないため、メインCPU20は、WAIT命令を実行する(S30)。WAIT命令が実行されると、メインCPU20は、割込要求信号が供給されるまで待機する実行停止状態となる。これにより、メインCPU20の消費電力を低減させることができる。メインCPU20は、S30において割込要求信号が供給されると、S21に戻る。なお、メインCPU20は、パケット送信の終了時や、TCP接続の終了時に、MACコントローラ72から割込要求信号を受け取る。
【0048】
S32では、メインCPU20は、LAN4を介して受信されるパケットを格納するためのRAMを、SDRAM100からSRAM60に切り替える。S32では、さらに、メインCPU20は、サブCPU30がメインCPU20に代理して応答処理を実行するために必要な情報(例えばプリンタ10のIPアドレス、MACアドレス、ノード名等)を、SRAM60に格納する。続いて、メインCPU20は、サブCPU30以外からの割込要求をマスク(禁止)する(S34)。次いで、メインCPU20は、サブCPU30に処理を開始させるための開始割込要求信号を、サブ用割込コントローラ38を介して、サブCPU30に供給する(S36)。
【0049】
さらに、メインCPU20は、上記したように、SDRAM100に格納されているMIBオブジェクトデータテーブルに従って、SRAM60のOIDテーブル62のアドレス66を更新する。次いで、メインCPU20は、WAIT命令を実行する(S38)。WAIT命令が実行されると、メインCPU20は、割込要求信号が供給されるまで待機する実行停止状態となる。メインCPU20は、S38においてサブCPU30から割込要求信号が供給される(後述の図6のS76参照)と、S40に進む。S40では、メインCPU20は、SRAM60に格納されている上記の特定のパケット(即ちDスリープ状態308中に受信された未処理パケット)を、SDRAM100に移動させる。次いで、メインCPU20は、S34で実行したマスクを解除して(S42)、S21に戻る。
【0050】
(サブCPUが実行する処理)
続いて、サブCPU30が実行する処理の内容を説明する。図6の処理は、プリンタ10の電源がONにされると開始される。サブCPU30は、フラッシュメモリ80に格納されている各プログラム84,86、及び、SRAM60に格納されている判断処理プログラム68に従って、以下の処理を実行する。詳しくは、サブCPU30は、基本プログラム84に従って、S52〜S56、S66〜S76の処理を実行する。サブCPU30は、判断処理用プログラム68に従ってS58〜S62の処理を実行し、確認処理用プログラム86に従ってS64の処理を実行する。
【0051】
プリンタ10の電源がONされると、サブCPU30は、WAIT命令を実行して、割込要求信号が供給されるまで待機する(S52)。上述したように、メインCPU20は、図5のS36で、サブCPU30に開始割込要求信号を供給する。この場合、S52でYESと判断される。S52でYESの場合、サブCPU30は、メイン用クロック回路28(図1参照)にクロック供給の停止を指示する(S54)。この結果、メインCPU20は、非スリープ状態からスリープ状態に移行する。続いて、サブCPU30は、SDRAM100を通常動作モードからセルフリフレッシュモードに移行させる(S56)。この結果、プリンタ10は、Dスリープ状態308となる。なお、SDRAM100がセルフリフレッシュモードである間は、プリンタ10が受信したパケットをSDRAM100に格納することができない。次いで、サブCPU30は、パケットを受信することを監視する(S58)。具体的には、サブCPU30は、MACコントローラ72から、サブ用割込コントローラ38を介して、パケット割込要求信号が供給されることを監視する。
【0052】
MACコントローラ72からパケット割込要求信号が供給されると、サブCPU30は、受信したパケットをSRAM60に格納する。次いで、判断部32は、SRAM60に格納された判断処理用プログラム68に従って、パケット判断処理(図7〜9)を実行する(S60)。次いで、サブCPU30は、SRAM60に格納されている動作指定変数が「0」であるのか否かを判断する(S62)。詳しくは後述するが、S60のパケット判断処理において、S58で受信したパケットが、プリンタ10が応答処理を実行すべきパケットでないと判断される場合には、S60で動作指定変数が「0」になる。なお、動作指定変数は、S58で受信したパケットが、応答処理を実行すべきでないパケット(破棄すべきパケット)であるのか否かを示す変数である。また、S58で受信したパケットが、応答処理を実行すべきパケット(破棄すべきでないパケット)である場合、動作指定変数は、サブCPU30が処理すべきであるのか、メインCPU20が処理すべきであるのかを示す変数である。S62でYESの場合には、サブCPU30は、S58で受信したパケットを破棄して、S58に戻る。S62でNOの場合には、確認部34は、フラッシュメモリ80に格納された確認用処理プログラム86に従って、パケット妥当性確認処理(図10)を実行する(S64)。次いで、サブCPU30は、SRAM60に格納されている動作指定変数が「0」であるのか否かを判断する(S66)。詳しくは後述するが、S64の妥当性確認処理において、S58で受信したパケットが妥当(正常)でないと確認される場合には、S64で動作指定変数が「0」になる。S66でYESの場合には、サブCPU30は、S58で受信したパケットを破棄して、S58に戻る。
【0053】
S66でNOの場合には、サブCPU30は、SRAM60に格納されている動作指定変数が「3」であるのか否かを判断する(S68)。詳しくは後述するが、動作指定変数が「3」である場合とは、S60のパケット判断処理において、S58で受信したパケットが、メインCPU20が応答処理を実行すべきパケットであると判断された場合である。S68でNOの場合には、サブCPU30の第1応答実行部36は、動作指定変数の値に応じて、S58で受信したパケットに対する応答処理を実行する(S70)。
【0054】
S72では、サブCPU30は、SDRAM100のモード移行処理を実行する。モード移行処理は、SDRAM100をセルフリフレッシュモードから通常動作モードに移行させる移行処理と、LAN4を介して受信されるパケットを格納するRAMをSRAM60からSDRAM100に切り替える切替処理と、を含む。次いで、サブCPU30は、メイン用クロック回路26(図1参照)に、メインCPU20にクロック供給を開始するよう指示する(S74)。この結果、メインCPU20にクロックが供給され、メインCPU20がスリープ状態から非スリープ状態に移行する。サブCPU30は、メイン用割込コントローラ26を介して、メインCPU20に開始割込要求信号を供給する(S76)。この結果、図5のS38のWAIT命令が解除され、メインCPU20は、S40の処理を開始する。
【0055】
(サブCPUが実行するパケット判断処理)
次いで、図6のS60のパケット判断処理について説明する。図7に示すように、判断部32は、SRAM60に格納されている動作指定変数を「0」にし、パケット解析結果フラグ(即ちIPv4フラグ及びUDPフラグ)をOFFにする(S82)。なお、IPv4フラグは、インターネット層で処理されるべきヘッダがIPv4ヘッダであるのか否かを示すフラグである。UDPフラグは、トランスポート層で処理されるべきヘッダがUDPヘッダであるのか否かを示すフラグである。次いで、判断部32は、イーサネット(登録商標)ヘッダ210(図4)内のタイプ/フレーム長212に含まれるEthernet(登録商標) Typeが「0x0800」であるのか否かを判断する(S84)。Ethernet(登録商標) Typeが「0x0800」である場合とは、インターネット層で処理されるべきヘッダが、IPv4ヘッダであることを示す。ここでYESの場合にS88に進み、NOの場合にS86に進む。S86では、判断部32は、インターネット層で処理されるべきヘッダの種類に応じたパケット判断処理を実行して、パケット判断処理を終了する。例えば、Ethernet(登録商標) Typeが「0x0806」である場合には、S86において、判断部32は、インターネット層で処理されるべきヘッダが、ARP(Address Resolution Protocol)ヘッダである場合のパケット判断処理を実行する。
【0056】
S88では、判断部32は、IPv4ヘッダ220内の宛先IPアドレス228が、プリンタ10が処理すべきパケットのIPアドレスであるのか否かを判断する。具体的には、判断部32は、宛先IPアドレス228が、上記の3種類のIPアドレスのいずれかである場合には、プリンタ10が応答処理を実行すべきパケットであると判断し、上記の3種類のIPアドレスに該当しない場合に、プリンタ10が応答処理を実行すべきパケットでないと判断する。ここでYESの場合にS90に進み、NOの場合にパケット判断処理を終了する。S90では、判断部32は、IPv4ヘッダ220内のフラグメントオフセット224と、フラグ229と、を用いて、フラグメント化されたパケットであるのか否かを判断する。具体的には、判断部32は、フラグメントオフセット224及びフラグ229の値が「0」であるのか否かを判断し、フラグメントオフセット224及びフラグ229のいずれかの値が「0」以外の場合にフラグメント化されたパケットである(S90でYES)と判断する。ここでYESの場合にS92に進み、NOの場合にS94に進む。S92では、判断部32は、動作指定変数を、Dスリープ状態302を解除することを示す「3」に変更して、パケット判断処理を終了する。フラグメント化されたパケットの応答処理は複雑であるため、メインCPU20が応答処理を実行することが好ましいからである。
【0057】
S94では、判断部32は、IPv4フラグをONにする。次いで、判断部32は、IPv4ヘッダ220内のプロトコル番号225の値が「17」であるのか否かを判断する(S96)。プロトコル番号225の値が「17」である場合とはトランスポート層で処理されるべきヘッダが、UDPヘッダであることを示す。ここでYESの場合にS100に進み、NOの場合にS98に進む。S98では、判断部32は、トランスポート層で処理されるべきヘッダの種類に応じたパケット判断処理を実行して、パケット判断処理を終了する。例えば、プロトコル番号が「6」の場合には、S98において、判断部32は、トランスポート層で処理されるべきヘッダが、TCPヘッダである場合のパケット判断処理を実行する。
【0058】
S100では、判断部32は、UDPフラグをONにする。次いで、判断部32は、UDPヘッダ230内の宛先ポート232の値が「161」であるのか否かを判断する(S102)。宛先ポート232の値が「161」である場合とは、アプリケーション層で処理されるべきアプリケーションデータ240が、SNMPのデータであることを示す。ここでYESの場合にS103に進み、NOの場合にS104に進む。S103では、判断部32は、SNMPパケット処理を実行する。S104では、UDPヘッダ230内の宛先ポート232の値が「137」であるのか否かを判断する。宛先ポート232の値が「137」である場合とは、アプリケーションデータ240が、NetBIOS−NSのデータであることを示す。ここでYESの場合にS108に進み、NOの場合にS106に進む。S106では、判断部32は、アプリケーションデータ240の種類に応じたパケット判断処理を実行して、パケット判断処理を終了する。例えば、宛先ポート232の値が「138」の場合には、S106において、判断部32は、アプリケーションデータ240が、NetBIOS Datagram Serviceである場合のパケット判断処理を実行する。なお、S106において、判断部32は、宛先ポート232の値が、プリンタ10がサポートしていないポート番号である場合には、図6のS58で受信したパケットがプリンタ10で処理すべきパケットでないと判断して、パケット判断処理を終了する。
【0059】
S108では、判断部32は、アプリケーションデータ240内のQUESTION_NAME246がプリンタ10宛のホスト名であるのか否かを判断する。ここでYESの場合、判断部32は、NetBIOS−NSパケット処理を実行する(S110)。一方、ここでNOの場合に、判断部32は、図6のS58で受信したパケットがプリンタ10で処理すべきパケットでないと判断して、パケット判断処理を終了する。なお、S88、S106又はS108において、図6のS58で受信したパケットがプリンタ10で処理すべきパケットでないと判断された場合、動作指定変数は「0」である。この場合、図6のS62でYESと判断され、S64のパケット妥当性処理確認処理は実行されない。
【0060】
(SNMPパケット処理)
次いで、図7のS103で実行されるSNMPパケット処理について説明する。図8に示すように、判断部32は、アプリケーションデータ240内のSNMPバージョン251(図4参照)の値が「0」(即ちSNMPv1)であるのか否かを判断する(S112)。ここでYESの場合にS114に進み、NOの場合にS122に進む。S114では、判断部32は、コミュニティ名252(図4参照)がプリンタ10のコミュニティ名と一致するのか否かを判断する。ここでYESの場合にS116に進み、NOの場合にSNMPパケット処理を終了する。コミュニティ名252がプリンタ10のコミュニティ名と一致しない場合には、プリンタ10は、図6のS58で受信したパケットに対する応答処理を実行すべきでないからである。S116では、判断部32は、PDUタイプ254(図4参照)は、GETリクエスト(GetRequest)であるのか否かを判断する。ここでYESの場合にS118に進み、NOの場合にS122に進む。
【0061】
S118では、判断部32は、オブジェクトデータ256(図4参照)に含まれる第1〜第N(Nは1以上の整数)のOIDを取得する。次いで、判断部32は、プリンタ10がDスリープ状態308を維持した状態(即ちメインCPU20をスリープ状態に維持した状態)で、図6のS58で受信したパケットに対する応答処理を実行することが可能であるのか否かを判断する(S120)。具体的には、判断部32は、S118で取得した1個以上のOIDのそれぞれについて、当該OIDと一致するOID64がOIDテーブル62に登録されているのか否かを判断する。判断部32は、S118で取得した1個以上のOIDの全てが、OIDテーブル62に登録されている場合に、S120でYESと判断する。一方、判断部32は、S118で取得した1個以上のOIDのうちの少なくとも1個のOIDと一致するOIDが、OIDテーブル62に登録されていない場合に、S120でNOと判断する。この場合、サブCPU30は、図6のS58で受信したパケットに対する応答処理を実行することができないからである。S120でYESの場合にS124に進み、NOの場合にS122に進む。
【0062】
S122では、判断部32は、動作指定変数を「3」(Dスリープ状態の解除を示す)に変更して、SNMPパケット処理を終了する。即ち、S112、S116及びS120でNOの場合には、判断部32は、メインCPU20が、図6のS58で受信したパケットに対応する応答処理を実行すべきであると判断する。この結果、図6のS64、S66の処理を経て、メインCPU20は、スリープ状態から非スリープ状態(図6のS100参照)に移行される。S124では、判断部32は、動作指定変数を「1」(SMNP GET応答を示す)に変更して、SNMPパケット処理を終了する。動作指定変数が「1」である場合には、図6のS70では、第1応答実行部36は、GetRequestパケットに対する応答処理として、まず、S118で取得されたOIDに対応するアドレスを、OIDテーブル62から取得する。次いで、第1応答実行部36は、取得されたアドレスに対応するオブジェクトデータを、フラッシュメモリ80に格納されているMIBデータ格納領域90から取得する。続いて、第1応答実行部36は、OIDと取得したオブジェクトデータとが対応付けられた応答パケットを、GetRequestパケットの送信元に向けて、送信する。
【0063】
(NetBIOS−NSパケット処理)
次いで、図7のS110のNetBIOS−NSパケット処理ついて説明する。図9に示すように、判断部32は、図6のS58で受信したパケットのアプリケーションデータ240内のQDCOUNT241(図4参照)の値が「1」であるのか否かを判断する(S132)。なお、QDCOUNT241の値が「1」以外のパケットは、当該パケットに対する応答処理を必要としないパケットである。ここでYESの場合にS134に進み、NOの場合に処理を終了する。
【0064】
S134では、判断部32は、ANCOUNT242、NSCOUNT243及びARCOUNT245(図4参照)の値が全て「0」であるのか否かを判断する。なお、各情報242、243、245のうちの少なくとも1個の値が「0」以外のパケットは、当該パケットに対する応答処理を必要としないパケットである。ここでYESの場合にS136に進み、NOの場合に処理を終了する。S136では、判断部32は、図6のS58で受信したパケットのアプリケーションデータ240内のQUESTION_CLASS248の値がIN(0x0001)であるのか否かを判断する。なお、QUESTION CLASS248の値がIN(0x0001)以外のパケットは、当該パケットに対する応答処理を必要としないパケットである。ここでYESの場合にS138に進み、NOの場合に処理を終了する。S138では、判断部32は、図6のS58で受信したパケットのアプリケーションデータ240内のオペレーション249(OPCODE、NM_FLAGS及びRCODE)が名前問合せ要求を示す値であるのか否かを判断する。ここでYESの場合にS146に進み、NOの場合にS140に進む。
【0065】
S140では、判断部32は、オペレーション249が、プリンタ10のステータス要求を示す値であるのか否かを判断する。なお、オペレーション249が、名前問合せ要求を示す値及びステータス要求を示す値以外のパケットは、応答処理を必要としないパケットである。ここでYESの場合にS142に進み、NOの場合に処理を終了する。S142では、判断部32は、図6のS58で受信したパケットのアプリケーションデータ240内のQUESTION_TYPE247の値がNBSTAT(0x0021)であるのか否かを判断する。なお、QUESTION_TYPE247の値がNBSTAT(0x0021)以外のパケットは、応答処理を必要としないパケットである。ここでYESの場合にS144に進み、NOの場合に処理を終了する。S144では、判断部32は、動作指定変数を「3」(Dスリープ状態の解除を示す)に変更して、処理を終了する。
【0066】
S146では、QUESTION_TYPE247の値がNB(0x0020)であるのか否かを判断する。なお、QUESTION_TYPE247の値がNB(0x0020)以外のパケットは、応答処理を必要としないパケットである。ここでYESの場合にS148に進み、NOの場合に処理を終了する。S148では、判断部32は、動作指定変数を「2」(NetBIOS名前問合せを示す)に変更して、処理を終了する。動作指定変数が「2」である場合には、図6のS70において、第1応答実行部36は、QUESTION_TYPE247がNB(0x0020)のパケットに対する応答処理を実行する。
【0067】
NetBIOS−NSパケット処理において、動作指定変数が変更されずに「0」の状態で処理が終了した場合、即ち、S132〜136、S140、S142、S146でNOと判断された場合、図6のS66でYESと判断され、サブCPU30及びメインCPU20は、応答処理を実行しない。
【0068】
(パケット妥当性確認処理)
次いで、図6のS64のパケット妥当性確認処理について説明する。図10に示すように、確認部34(図1参照)は、SRAM60に格納されているIPv4フラグがONであるのか否かを確認する(S202)。ここでYESの場合にS206に進み、NOの場合にS204に進む。S204では、確認部34は、イーサネット(登録商標)ヘッダ210のタイプ/フレーム長212のEthernet(登録商標) TypeがIPv4以外の場合のパケット妥当性確認処理を実行する。
【0069】
S206では、確認部34は、インターネット層で処理されるべきIPv4ヘッダ220内のIPバージョン221(図4参照)の値が「4」(IPv4を示す値)であるのか否かを確認する。即ち、確認部34は、IPv4フラグがONになっている(即ち図7のS84で、Ethernet(登録商標) TypeがIPv4を示すと判断された)にも関わらず、IPバージョン221の値がIPv4を示す値でないパケットであるのか否かを確認する。IPv4フラグがONであり、IPバージョン221の値がIPv4を示す値でない場合には、パケット内で整合性が取れておらず、正常なパケットでないからである。ここでYESの場合にS208に進み、NOの場合にS228に進む。
【0070】
S208では、確認部34は、ヘッダ長222(図4参照)が20バイト以上であるのか否かを確認する。ヘッダ長222は、IPv4ヘッダ200のヘッダ長を示す。IPv4ヘッダ200に必須の情報が含まれている場合には、ヘッダ長222は20バイト以上になる。即ち、ヘッダ長222が20バイト未満である場合、IPv4ヘッダ200に必須の情報が含まれておらず、正常なパケットでない。ここでYESの場合にS210に進み、NOの場合にS228に進む。S210では、確認部34は、データグラム長223(図4参照)がヘッダ長222よりも大きいか否かを確認する。データグラム長223は、各ヘッダ220、230と、アプリケーションデータ240と、の合計のサイズを示す。正常なパケットであれば、データグラム長223は、IPv4ヘッダ200のヘッダ長よりも長い。ここでYESの場合にS212に進み、NOの場合にS228に進む。
【0071】
S212では、確認部34は、図6のS58で受信したパケットのサイズがデータグラム長223よりも長いのか否かを判断する。サブCPU30は、パケットを受信した際に、パケットのサイズを測定し、SRAM60に格納しておく。パケットのサイズは、イーサネット(登録商標)ヘッダ210からアプリケーションデータ240までの合計のサイズである。正常なパケットであれば、パケットのサイズは、データグラム長223よりも長い。ここでYESの場合にS214に進み、NOの場合にS228に進む。
【0072】
S214では、確認部34は、送信元IPアドレス227(図4参照)が妥当であるのか否かを確認する。具体的には、確認部34は、送信元IPアドレス227が、クラスD(IPアドレスが最上位の4ビットが「1110」)のIPアドレス、クラスE(IPアドレスが最上位の4ビットが「1111」)のIPアドレスである場合には、S214でNOと判断する。また、確認部34は、送信元IPアドレス227が、デバイス内の通信に用いられるIPアドレス(いわゆるループバックアドレス)である場合、ブロードキャストアドレスである場合にも、S214でNOと判断する。これらのIPアドレスは、他のデバイスと通信するために用いられるIPアドレスではないからである。確認部34は、さらに、送信元IPアドレス227が、無視すべきIPアドレスとして、プリンタ10に予め設定されているIPアドレスである場合にも、S214でNOと判断する。上記した以外のIPアドレスの場合にS214でYESと判断する。ここでYESの場合にS216に進み、NOの場合にS228に進む。
【0073】
S216では、確認部34は、IPv4ヘッダ220のチェックサムを用いてIPv4ヘッダの整合性を確認する。例えば、確認部34は、予め決められた数式を用いて、IPv4ヘッダ220のチェックサムを算出する。確認部34は、算出されたチェックサムと、IPv4ヘッダ220内のヘッダチェックサム226とが一致するのか否かを確認する(S218)。一致しない場合、図6のS58で受信したパケットは正常でないことを意味する。ここでYESの場合にS220に進み、NOの場合にS228に進む。
【0074】
S220では、確認部34は、SRAM60内のUDPフラグがONであるのか否かを確認する。ここでYESの場合(即ちトランスポート層で処理されるべきヘッダがUDPヘッダ230である場合)にS224に進み、NOの場合にS222に進む。S222では、確認部34は、IPv4ヘッダ220内のプロトコル番号225がUDP以外の場合のパケット妥当性確認処理を実行する。
【0075】
S224では、確認部34は、UDPヘッダ230のチェックサムを用いてUDPヘッダおよびアプリケーションデータを含むデータの整合性を確認する。例えば、確認部34は、予め決められた数式を用いて、UDPヘッダ230及びアプリケーションデータ240を含む部分のチェックサムを算出する。次に、確認部34は、算出されたチェックサムと、UDPヘッダ230内のチェックサム234と、が一致するのか否かを確認する(S226)一致しない場合、図6のS58で受信したパケットは正常でないことを意味する。ここでYESの場合にパケット妥当性確認処理を終了し、NOの場合にS228に進む。S228では、確認部34は、動作指定変数を「0」に変更して、処理を終了する。この結果、図6のS66でNOと判断され、サブCPU30及びメインCPU20は、図6のS58で受信したパケットに対する応答処理を実行しない。
【0076】
上記の実施例では、図6のS58で受信したパケットがSNMPのパケットである場合、図6のS60のパケット判断処理(図7)では、IPv4ヘッダ220内の宛先IPアドレス228、UDPヘッダ230内の宛先ポート232等が利用される。そして、その後の図6のS64のパケット妥当性確認処理(図10)では、IPヘッダ220内のヘッダチェックサム226、UDPヘッダ230内のチェックサム234等が利用される。即ち、上記の実施例では、上位のレイヤ(トランスポート層)で処理されるべきUDPヘッダ230内の宛先ポート232を用いてパケット判断処理が実行された後に、下位のレイヤ(インターネット層)で処理されるべきIPヘッダ220内のヘッダチェックサム226を用いてパケット妥当性確認処理が実行されている。
【0077】
また、図6のS58で受信したパケットがNETBIOS−NSのパケットである場合、図6のS60のパケット判断処理(図7)では、IPv4ヘッダ220内の宛先IPアドレス228、UDPヘッダ230内の宛先ポート234、アプリケーションデータ240内のQUESTION_NAME246等が利用される。そして、その後の図6のS64のパケット妥当性確認処理(図10)では、IPヘッダ220内のヘッダチェックサム226、UDPヘッダ230内のチェックサム234等が利用される。即ち、上記の実施例では、上位のレイヤ(アプリケーション層)で処理されるべきアプリケーションデータ240内のQUESTION_NAME246を用いて判断処理が実行された後に、下位のレイヤ(インターネット層、トランスポート層)で処理されるべきIPヘッダ220内のヘッダチェックサム226、UDPヘッダ230内のチェックサム234を用いてパケット妥当性確認処理が実行されている。さらに、上記の実施例では、上位のレイヤ(トランスポート層)で処理されるべきUDPヘッダ230内の宛先ポート232を用いてパケット判断処理が実行された後に、下位のレイヤ(インターネット層)で処理されるべきIPヘッダ220内のヘッダチェックサム226を用いてパケット妥当性確認処理が実行されている。
【0078】
実施例のプリンタ10について詳しく説明した。通常では、パケットが受信されると、応答処理すべきパケットであるのか否かの判断処理が実行される際に、パケットが妥当であるのか否かの確認処理も実行される(図5のS14参照)。このため、パケット判断処理において、プリンタ10が応答処理を実行すべきでないと判断される場合にも、パケット妥当性確認処理は、実行される。これに対して、プリンタ10では、サブCPU30は、メインCPU20がスリープ状態である間にパケットを受信すると(図6のS58参照)、パケット判断処理(図7参照)を実行する。そして、プリンタ10が応答処理すべきパケットであると判断される場合(図6のS62でNO)に、パケット妥当性確認処理(図10参照)を実行する。このため、パケット判断処理において、プリンタ10が応答処理すべきパケットでないと判断される場合(図6のS62でYES)に、サブCPU30は、パケット妥当性確認処理を実行しなくて済む。この結果、パケット判断処理のみが実行される場合の本実施例の処理負荷は、通常の処理手順で判断処理と確認処理とが実行される場合の処理負荷よりも、低くなる。このため、メインCPU20がスリープ状態である場合のプリンタ10の消費電力を低減することができる。
【0079】
サブCPU30は、メインCPU20がスリープ状態である間にパケットを受信すると(図6のS58参照)、IPv4ヘッダ220内の宛先IPアドレス228、UDPヘッダ230内の宛先ポート232、アプリケーションデータ240内のQUESTION_NAME246等を利用して、図6のS60のパケット判断処理(図7参照)を実行する。パケット判断処理において、プリンタ10が応答処理すべきでないと判断される場合(図6のS62でYES)に、IPヘッダ220内のヘッダチェックサム226、UDPヘッダ230内のチェックサム234等を利用したパケット妥当性確認処理(図6のS64、図10参照)を実行しない。このため、サブCP30は、上位のレイヤ(トランスポート層)で処理されるべきUDPヘッダ230内の宛先ポート232を用いたパケット判断処理において、応答処理すべきパケットでないと判断される場合に、下位のレイヤ(インターネット層)で処理されるべきIPヘッダ220内のヘッダチェックサム226を用いてパケット妥当性確認処理を実行せずに済む。
【0080】
仮に、サブCPU30が、下位のレイヤで処理されるべきヘッダ(情報)から順に、パケットが応答処理すべきパケットであるのか否かの判断処理と、パケットが妥当であるのか否かの確認処理と、を実行する構成を採用すると、アプリケーションデータ240内のQUESTION_NAME246がプリンタ10宛のホスト名でない場合に、サブCPU30は、IPv4ヘッダ220とUDPヘッダ230とを利用した判断処理と確認処理とを実行した後でなければ、応答処理を実行すべきパケットでないことを判断することができない。これに対して、プリンタ10では、パケット妥当性確認処理をしなくて済む。これにより、サブCPU30の処理負荷を低減することができる。この結果、プリンタ10の消費電力が低減することができる。
【0081】
また、通常、パケット妥当性確認処理(図10参照)において、妥当でないと確認されるパケットはあまりない。そのため、仮に、パケット妥当性確認処理を先に実行し、パケット判断処理を後に実行する構成を採用すると、応答処理を実行する必要がないとパケット判断処理で判断されるパケットについても、パケット妥当性確認処理が実行される。この場合、サブCPU30の処理負荷が高くなり、この結果、プリンタの消費電力が増大する。これに対し、本実施例では、パケット判断処理を先に実行し、パケット妥当性確認処理を後に実行する構成を採用しているために、応答処理を実行する必要がないとパケット判断処理で判断されるパケットについて、パケット妥当性確認処理が実行されない。この場合、サブCPU30の処理負荷が低くなり、この結果、プリンタ10の消費電力が低減することができる。
【0082】
サブCPU30は、パケット判断処理(図7参照)、SNMPパケット処理(図8参照)及びNetBIOS−NSパケット処理(図9参照)において、メインCPU20をスリープ状態から非スリープ状態に移行させるべきであるのか否かを判断する(図7のS90、図8のS112、S120、図9のS142参照)。この構成によれば、サブCPU30が応答処理すべきパケットである場合には、サブCPU30がパケットに対する応答処理を実行することによって、メインCPU20をスリープ状態に維持することができる。これにより、プリンタ10の消費電力を低減するができる。一方、メインCPU20が応答処理すべきパケットである場合には、メインCPU20をスリープ状態から非スリープ状態に移行して、メインCPU20にパケットに対する応答処理を実行させる。これにより、パケットに対する応答処理を適切に実行することができる。
【0083】
サブCPU30がパケット判断処理(図7参照)を実行するための判断処理用プログラム68は、SRAM60に格納された状態で、サブCPU30に利用される。これに対して、サブCPU30がパケット妥当性処理(図10参照)を実行するための確認処理用プログラム86は、フラッシュメモリ80に格納された状態で、サブCPU30に利用される。この構成によれば、ASIC12内のSRAM60の容量を小さくすることができる。また、サブCPU30がASIC12外のフラッシュメモリ80にアクセスする頻度を抑えることができる。
【0084】
また、SRAM60には、OIDテーブル62が格納されているが、オブジェクトデータ自体は格納されていない。この構成では、オブジェクトデータをSRAM60に格納する構成と比較して、SRAM60の容量を小さくすることができる。
【0085】
なお、上記のプリンタ10が「通信装置」の一例である。また、メインCPU20が「第1処理部」の一例であり、サブCPU30が「第2処理部」の一例である。メインCPU20とサブCPU30とがともに非スリープ状態である状態が「第1の状態」の一例であり、メインCPU20がスリープ状態であり、サブCPU30が非スリープ状態である状態が「第2の状態」の一例である。図7の処理が「第1の判断処理」の一例であり、図10の処理が「第1の確認処理」の一例である。
【0086】
SRAM60が「第1のメモリ」の一例であり、フラッシュメモリ80が「第2のメモリ」の一例である。判断処理用プログラム68が「第1のプログラム」の一例であり、確認処理用プログラム86が「第2のプログラム」の一例である。
【0087】
(変形例)
(1)上記の実施例では、プリンタ10は、メインCPU20とサブCPU30とを備えるが、これに代えて、プリンタ10は、メインCPU20のみを備えていてもよい。この場合、メインCPU20に供給されるクロック信号の周波数が低い状態と高い状態とに移行してもよい。クロック信号の周波数が高い状態では、メインCPU20の消費電力が比較的に高く、クロック信号の周波数が低い状態では、メインCPU20の消費電力が比較的に低い。プリンタ10が各状態302〜306である場合には、メインCPU20に供給されるクロック信号の周波数が高い状態であり、プリンタ10がDスリープ状態308である場合には、メインCPU20に供給されるクロック信号の周波数が低い状態であってもよい。この場合、メインCPU20が、上記の実施例のサブCPU30に代わって、サブCPU30が実行する処理(図6〜10の処理)を実行してもよい。この変形例では、メインCPU20が「処理部」の一例であり、メインCPU20に供給されるクロック信号の周波数が高い状態が「第1の状態」の一例であり、メインCPU20に供給されるクロック信号の周波数が低い状態が「第2の状態」の一例である。
【0088】
(2)上記の実施例では、基本プログラム84と確認処理用プログラム86は、フラッシュメモリ80に、各CPU20,30が利用可能な状態で格納されている。しかしながら、各プログラム84,86は、フラッシュメモリ80に、圧縮された状態で格納されていてもよい。この場合、メインCPU20又はサブCPU30が、プリンタ10の電源ON時又はプログラムの起動時に、各プログラム84,86を展開し、SDRAM100又はSRAM60に格納してもよい。
【0089】
(3)上記の実施例では、アプリケーションデータ240内のQUESTION_TYPE247の値がNBSTAT(0x0021)である(図9のS142でYES)場合に、動作指定変数を、Dスリープ状態解除を示す「3」に変更する。即ち、QUESTION_TYPE247の値がNBSTAT(0x0021)である場合には、図6のS58で受信したパケットに対する応答処理を、メインCPU20が実行する。これに代えて、QUESTION_TYPE247の値がNBSTAT(0x0021)である場合、サブCPU30が、図6のS58で受信したパケットに対する応答処理を実行してもよい。
【0090】
(4)本実施例では、プリンタ10について説明したが、本明細書の技術は、例えば、サーバ、スキャナ、多機能機等の通信装置に利用することができる。
【符号の説明】
【0091】
10:プリンタ、12:ASIC、20:メインCPU、22:パケット解析部、24:第2応答実行部、30:サブCPU、32:判断部、34:確認部、36:第2応答実行部、60:SRAM、68:判断処理用プログラム、80:フラッシュメモリ、84:基本プログラム、86:確認処理用プログラム、100:SDRAM、200:パケット

【特許請求の範囲】
【請求項1】
ネットワークに接続される通信装置であって、
消費電力が比較的に高い第1の状態と、消費電力が比較的に低い第2の状態と、の間で状態が移行する処理部であって、前記ネットワークを介して受信されるパケットに対する応答処理を実行する前記処理部を備え、
前記処理部は、
前記処理部が前記第2の状態である間に、前記ネットワークを介して受信される第1のパケットが、前記処理部が前記応答処理を実行すべきパケットであるのか否かを判断する第1の判断処理を実行する判断部と、
前記第1のパケットが、前記処理部が前記応答処理を実行すべきパケットであると判断される第1の場合に、前記第1の判断処理の後に、前記第1のパケットの妥当性を確認する第1の確認処理を実行する確認部と、
前記第1のパケットが妥当であると確認される場合に、前記第1のパケットに対する前記応答処理を実行する第1応答実行部と、を備え、
前記第1のパケットが、前記処理部が前記応答処理を実行すべきパケットでないと判断される第2の場合に、前記確認部は、前記第1の確認処理を実行せず、前記第1応答実行部は、前記応答処理を実行しない、通信装置。
【請求項2】
前記判断部は、前記第1のパケットのうち、第1のレイヤで処理されるべき情報を用いて、前記第1の判断処理を実行し、
前記確認部は、前記第1の判断処理の後に、前記第1のパケットのうち、前記第1のレイヤよりも下位のレイヤである第2のレイヤで処理されるべき情報を用いて、前記第1の確認処理を実行する、請求項1に記載の通信装置。
【請求項3】
前記判断部は、前記第1のパケットのうち、IPヘッダに含まれる宛先IPアドレスと、UDPヘッダに含まれる宛先ポート番号と、を用いて、前記第1の判断処理を実行し、
前記確認部は、前記第1の判断処理の後に、前記第1のパケットのうち、IPヘッダに含まれる特定の情報を用いて、前記第1の確認処理を実行する、請求項1又は2に記載の通信装置。
【請求項4】
前記IPヘッダに含まれる前記特定の情報は、誤り検出のための情報と、データサイズに関する情報と、送信元IPアドレスと、のうちの少なくとも1つを含む、請求項3に記載の通信装置。
【請求項5】
前記判断部は、さらに、前記第1のパケットのうち、アプリケーションデータに含まれる情報を用いて、前記第1の判断処理を実行し、
前記確認部は、さらに、前記第1の判断処理の後に、前記第1のパケットのうち、UDPヘッダに含まれる特定の情報を用いて、前記第1の確認処理を実行する、請求項3又は4に記載の通信装置。
【請求項6】
前記UDPヘッダに含まれる前記特定の情報は、誤り検出のための情報を含む、請求項5に記載の通信装置。
【請求項7】
前記処理部は、さらに、
前記処理部が前記第1の状態である間に、前記ネットワークを介して受信される第2のパケットが、前記処理部が前記応答処理を実行すべきパケットであるのか否かを判断する第2の判断処理を実行し、前記第2の判断処理を実行する際に、前記第2のパケットの妥当性を確認する第2の確認処理を実行するパケット解析部と、
前記第2のパケットが、前記処理部が前記応答処理を実行すべきパケットであると判断され、かつ、前記第2のパケットが妥当であると確認される場合に、前記第2のパケットに対する前記応答処理を実行する第2応答実行部と、を備える、請求項1から6のいずれか一項に記載の通信装置。
【請求項8】
前記パケット解析部は、前記第2のパケットのうち、第3のレイヤで処理されるべき情報を用いて、前記第2の確認処理を実行し、その後に、前記第2のパケットのうち、前記第3のレイヤよりも上位のレイヤである第4のレイヤで処理されるべき情報を用いて、前記第2の確認処理を実行する、請求項7に記載の通信装置。
【請求項9】
前記処理部は、
非スリープ状態とスリープ状態との間で状態が移行し、前記非スリープ状態である場合に、前記応答処理を実行する第1処理部であって、前記処理部が前記第1の状態である場合には前記非スリープ状態であり、前記処理部が前記第2の状態である場合には前記スリープ状態である前記第1処理部と、
前記判断部と前記確認部と前記第1応答実行部とを含む第2処理部であって、前記第1処理部が前記スリープ状態である場合に、前記応答処理を実行する第2処理部と、
を備え、
前記判断部は、さらに、前記第1の場合に、前記第1処理部を前記スリープ状態から前記非スリープ状態に移行させるべきであるのか否かを判断し、
前記第1応答実行部は、前記第1処理部を前記スリープ状態から前記非スリープ状態に移行させるべきでないと判断される場合に、前記第1のパケットに対する前記応答処理を実行し、
前記第2処理部は、前記第1処理部を前記スリープ状態から前記非スリープ状態に移行させるべきであると判断される場合に、前記第1処理部を前記スリープ状態から前記非スリープ状態に移行させ、
前記第1処理部は、前記非スリープ状態に移行した後に、前記第1のパケットに対する前記応答処理を実行する、請求項1から8のいずれか一項に記載の通信装置。
【請求項10】
前記処理部を含む集積回路と、
前記集積回路内に設けられた第1のメモリと、
前記集積回路外に設けられた第2のメモリと、を備え、
前記判断部は、前記第1のメモリに格納された第1のプログラムに従って、前記第1の判断処理を実行し、
前記確認部は、前記第2のメモリに格納された第2のプログラムに従って、前記第1の確認処理を実行する、請求項1から9のいずれか一項に記載の通信装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2011−205580(P2011−205580A)
【公開日】平成23年10月13日(2011.10.13)
【国際特許分類】
【出願番号】特願2010−73421(P2010−73421)
【出願日】平成22年3月26日(2010.3.26)
【出願人】(000005267)ブラザー工業株式会社 (13,856)
【Fターム(参考)】