(57)【特許請求の範囲】
【請求項１】
複数のパケットを通信単位としたパケット通信信号を無線で受信する無線通信部と、
前記無線通信部が受信した前記パケット通信信号に含まれる複数のパケットのうち、いずれか一つ以上のパケットの受信に失敗した場合、受信に失敗したパケットの再送要求を行う再送要求部と、
少なくともパケット通信信号２単位分の記憶領域を有し、前記無線通信部が受信した第１のパケット通信信号に含まれる各パケットと、再送要求の後に前記無線通信部が、再送要求の対象である再送パケットを含めて受信した第２のパケット通信信号に含まれる各パケットと、を記憶するパケット記憶部と、
前記パケット記憶部に記憶された前記各パケットに対して、前記無線通信部が受信に失敗しなかった場合のパケットの受信順序を、制御部に対する転送順序として設定する設定部と、
前記転送順序に従って、前記パケット記憶部からパケットを前記複数読み出して、パケット通信信号として、前記制御部に転送する転送部と、
を備えることを特徴とする情報処理装置。 
【請求項２】
前記設定部は、さらに、前記無線通信部が前記再送パケットの受信に失敗した場合、受信に失敗した前記再送パケットの再送前に、受信に失敗した前記再送パケットと同一内容のパケットの、受信に失敗しなかった場合の受信順序を、当該再送パケットの代わりとなるダミーパケットの転送順序として設定し、
前記転送部は、さらに、前記転送順序に従って、前記ダミーパケットを前記制御部に転送すること、
を特徴とする請求項１に記載の情報処理装置。 
【請求項３】
前記再送要求部は、さらに、前記再送パケットの受信に失敗した場合に、受信に失敗した前記再送パケットの再送要求を行い、
前記転送部は、前記再送パケットの再送要求で前記無線通信部が受信した再々送パケットを、前記制御部に転送すること、
を特徴とする請求項２に記載の情報処理装置。 
【請求項４】
前記無線通信部と、前記再送要求部と、前記パケット記憶部と、前記設定部と、前記転送部と、が、前記制御部と別の制御を行うサブ制御部上に備えていること、
を特徴とする請求項１乃至３のいずれか一つに記載の情報処理装置。 
【請求項５】
前記パケット記憶部は、２回の通信単位分のパケットを格納可能であること、を特徴とする請求項１乃至４のいずれか一つに記載の情報処理装置。 
【請求項６】
前記設定部は、受信したパケットに含まれるヘッダ情報に基づいて、前記転送順序を設定すること、を特徴とする請求項１乃至５のいずれか一つに記載の情報処理装置。 
【請求項７】
無線通信部が、複数のパケットを通信単位としたパケット通信信号を無線で受信する無線受信ステップと、
再送要求部が、前記無線受信ステップが受信した前記パケット通信信号に含まれる複数のパケットのうち、いずれか一つ以上のパケットの受信に失敗した場合、受信に失敗したパケットの再送要求を行う再送要求ステップと、
前記無線受信ステップが受信した第１のパケット通信信号に含まれる各パケットと、再送要求の後に前記無線受信ステップが、再送要求の対象である再送パケットを含めて受信した第２のパケット通信信号に含まれる各パケットと、を、少なくともパケット通信信号２単位分の記憶領域を有するパケット記憶部に記憶するパケット記憶ステップと、
設定部が、前記パケット記憶部に記憶された前記各パケットに対して、前記無線受信ステップが受信に失敗しなかった場合のパケットの受信順序を、制御部に対する転送順序として設定する設定ステップと、
転送部が、前記転送順序に従って、前記パケット記憶部からパケットを前記複数読み出して、パケット通信信号として、前記制御部に転送する転送ステップと、
を有することを特徴とする情報処理方法。 
【請求項８】
前記設定ステップは、さらに、前記無線受信ステップが前記再送パケットの受信に失敗した場合、受信に失敗した前記再送パケットの再送前に、受信に失敗した前記再送パケットと同一内容のパケットの、受信に失敗しなかった場合の受信順序を、当該再送パケットの代わりとなるダミーパケットの転送順序として設定し、
前記転送ステップは、さらに、前記転送順序に従って、前記ダミーパケットを前記制御部に転送すること、
を特徴とする請求項７に記載の情報処理方法。 
【請求項９】
前記再送要求ステップは、さらに、前記再送パケットの受信に失敗した場合に、受信に失敗した前記再送パケットの再送要求を行い、
前記転送ステップは、前記再送パケットの再送要求で前記無線受信ステップが受信した再々送パケットを、前記制御部に転送すること、
を特徴とする請求項８に記載の情報処理方法。 
【請求項１０】
複数のパケットを通信単位としたパケット通信信号を無線で受信する無線受信ステップと、
前記無線通信部が受信した前記パケット通信信号に含まれる複数のパケットのうち、いずれか一つ以上のパケットの受信に失敗した場合、受信に失敗したパケットの再送要求を行う再送要求ステップと、
前記無線受信ステップが受信した第１のパケット通信信号に含まれる各パケットと、再送要求の後に前記無線受信ステップが、再送要求の対象である再送パケットを含めて受信した第２のパケット通信信号に含まれる各パケットと、を、少なくともパケット通信信号２単位分の記憶領域を有するパケット記憶部に記憶するパケット記憶ステップと、
前記パケット記憶部に記憶された前記各パケットに対して、前記無線受信ステップが受信に失敗しなかった場合のパケットの受信順序を、制御部に対する転送順序として設定する設定ステップと、
前記転送順序に従って、前記パケット記憶部からパケットを前記複数読み出して、パケット通信信号として、前記制御部に転送する転送ステップと、
をコンピュータに実行させるための情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のパケットを通信単位として、外部からデータを受信する情報処理装置、情報処理方法及び情報処理プログラムに関する。
【背景技術】
【０００２】
従来から情報処理装置において、外部機器等と無線で情報を交換する場合に、パケット通信が採用されている。パケット通信では、１回の通信で、例えばバースト長として決めた所定のパケット数をまとめて（以下、「通信単位」という）送ることが普通で、データの並びに従って通信単位の各パケットに所定の順番が付けられているが、何らかの原因で一部のパケットを受信し損なうと、パケットの再送処理が行われる。この場合、受信したパケットは順番どおりに通信コントローラの内蔵メモリに格納されないという問題が発生する。
【０００３】
このため、通信コントローラの内蔵メモリに格納されたままの順番でメインコントローラ側のメインメモリに転送すると、メインコントローラ側で順番を並び替える処理が必要になり、この入れ替え処理を行うメインＣＰＵの負担が大きくなる。
【０００４】
ところで、通信制御で処理負荷を軽減する技術としては、例えば、特許文献１に記載された技術があるが、このようなパケットの順番並び替えの問題に適用することはできない。
【０００５】
また、通信コントローラの内蔵メモリ内で順番がバラバラになったパケットの順番を変えてメインコントローラ側のメインメモリに順番どおりに転送するには、複数回の転送が必要になり転送効率が悪かった。また、この転送方法によると、複数回の転送毎に割り込み処理が発生する等、処理が煩雑になる問題も発生し、メインコントローラ側のメインＣＰＵへの負担も大きくなってしまう。
【０００６】
【特許文献１】特開２００７−７４４２９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上記したパケットの再送により起きる問題は、ＣＰＵの性能を上げることや、メモリの容量を大きくすることによって対処することが可能であるが、特に、この情報処理装置が複写機、ＭＦＰ（Multi-Function Peripherals：複合機）といった機器である場合に、ハードウェアの規模を拡大すると大型化しコストにも大きく影響するので望ましい解決方法であるとは限らない。
【０００８】
本発明は、パケット通信により受信したデータをメインシステムのメモリに格納する手段を有する情報処理装置における上記した従来技術の問題に鑑みてなされたものであり、その解決すべき課題は、再送分を含め受信したデータをメインシステムのメモリへ転送し、該メモリに適正な通信単位のデータとして格納する動作を、ハードウェアの規模の拡大をできるだけ抑え、メインシステムのＣＰＵへ過大な負担を掛けずに効率良く行えるようにすることにある。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、本発明にかかる情報処理装置は、複数のパケットを通信単位としたパケット通信信号を無線で受信する無線通信部と、前記無線通信部が受信した前記パケット通信信号に含まれる複数のパケットのうち、いずれか一つ以上のパケットの受信に失敗した場合、受信に失敗したパケットの再送要求を行う再送要求部と、少なくともパケット通信信号２単位分の記憶領域を有し、前記無線通信部が受信した第１のパケット通信信号に含まれる各パケットと、再送要求の後に前記無線通信部が、再送要求の対象である再送パケットを含めて受信した第２のパケット通信信号に含まれる各パケットと、を記憶するパケット記憶部と、前記パケット記憶部に記憶された前記各パケットに対して、前記無線通信部が受信に失敗しなかった場合のパケットの受信順序を、制御部に対する転送順序として設定する設定部と、前記転送順序に従って、前記パケット記憶部からパケットを前記複数読み出して、パケット通信信号として、前記制御部に転送する転送部と、を備えることを特徴とする。 
【００１０】
また、本発明にかかる情報処理方法は、無線通信部が、複数のパケットを通信単位としたパケット通信信号を無線で受信する無線受信ステップと、再送要求部が、前記無線受信ステップが受信した前記パケット通信信号に含まれる複数のパケットのうち、いずれか一つ以上のパケットの受信に失敗した場合、受信に失敗したパケットの再送要求を行う再送要求ステップと、前記無線受信ステップが受信した第１のパケット通信信号に含まれる各パケットと、再送要求の後に前記無線受信ステップが、再送要求の対象である再送パケットを含めて受信した第２のパケット通信信号に含まれる各パケットと、を、少なくともパケット通信信号２単位分の記憶領域を有するパケット記憶部に記憶するパケット記憶ステップと、設定部が、前記パケット記憶部に記憶された前記各パケットに対して、前記無線受信ステップが受信に失敗しなかった場合のパケットの受信順序を、制御部に対する転送順序として設定する設定ステップと、転送部が、前記転送順序に従って、前記パケット記憶部からパケットを前記複数読み出して、パケット通信信号として、前記制御部に転送する転送ステップと、を有することを特徴とする。 
【００１１】
また、本発明にかかる情報処理プログラムは、複数のパケットを通信単位としたパケット通信信号を無線で受信する無線受信ステップと、前記無線通信部が受信した前記パケット通信信号に含まれる複数のパケットのうち、いずれか一つ以上のパケットの受信に失敗した場合、受信に失敗したパケットの再送要求を行う再送要求ステップと、前記無線受信ステップが受信した第１のパケット通信信号に含まれる各パケットと、再送要求の後に前記無線受信ステップが、再送要求の対象である再送パケットを含めて受信した第２のパケット通信信号に含まれる各パケットと、を、少なくともパケット通信信号２単位分の記憶領域を有するパケット記憶部に記憶するパケット記憶ステップと、前記パケット記憶部に記憶された前記各パケットに対して、前記無線受信ステップが受信に失敗しなかった場合のパケットの受信順序を、制御部に対する転送順序として設定する設定ステップと、前記転送順序に従って、前記パケット記憶部からパケットを前記複数読み出して、パケット通信信号として、前記制御部に転送する転送ステップと、をコンピュータに実行させることを特徴とする。 
【発明の効果】
【００１２】
本発明によれば、制御部に対して、パケットを適切な転送順序で転送するため、転送毎に発生していた割り込み等の処理を軽減でき、制御部の処理負担を軽減できるという効果を奏する。
【発明を実施するための最良の形態】
【００１３】
以下、本発明の情報処理装置、情報処理方法及び情報処理プログラムに係る実施形態を図面に基づいて説明する。以下には、情報処理装置に係る実施形態としてＭＦＰを例示する。実施形態として示すＭＦＰは、スキャナ入力をもとにプロッタで印刷出力を行うコピー機能のほか、無線で外部機器とパケット通信を行い、外部機器より送信されてくる、例えば印刷コマンドデータを受信し、受信したデータをもとにプロッタで印刷出力を行うプリンタ機能を持つ。ただ、実施形態としては、例示するＭＦＰに限らず、無線で外部機器からパケット通信により入力されるデータを処理し、出力する情報処理装置であればどのような装置でも実施の対象となる。
【００１４】
図１は、本発明に係る情報処理装置の実施形態としてのＭＦＰのシステム構成を概略的に示すブロック図である。図１の例に示されたＭＦＰは、複写機能をベースにしているので、入力デバイスとして原稿画像を入力するスキャナ１３３と、出力デバイスとして印刷出力をするプロッタ１３５を持ち、これらをＡＳＩＣ（Application Specific Integrated Circuit：特定用途向け集積回路）で構成するエンジンコントローラ１３０により制御する。また、エンジンコントローラ１３０は、メインコントローラ１１０側とＰＣＩ（Peripheral Component Interconnect）−Ｅｘｐｒｅｓｓ等の汎用高速バスによって繋がっている。
【００１５】
メインシステム１００は、内部にメインＣＰＵ（Central Processing Unit）１２１を備える。そして、メインＣＰＵ１２１が、ＡＳＩＣで構成するメインコントローラ１１０及び後述のサブシステム２００を含めコントローラ全般の制御を行う。メインＣＰＵ１２１制御下の各デバイスは、メインＣＰＵ１２１と接続されたＭＣＨ（Memory Controller Hub）１１７とＰＣＩ−Ｅｘｐｒｅｓｓ（以下、ＰＣＩｅとも表す）等の汎用高速バスによって繋がっている。
【００１６】
メインコントローラ１１０は、Ｓ−ＡＴＡを介し、多量の画像データの蓄積やジョブ履歴等を記憶するローカルストレージ１１３と接続される。また、メインコントローラ１１０は、複数の信号線を同時に使いデータを転送するためのＩＥＥＥ１２８４等のレガシーＰＣＩを介し、オプション１１５の各デバイスと接続される。
【００１７】
また、ワークメモリとして処理の過程で画像データ、制御データ等を格納するＲＡＭ（Random Access Memory）やプログラム、制御データ等を格納するＲＯＭ（Read Only Memory）等のメモリよりなるメインメモリ１２３が、ＭＣＨ１１７を介してメインＣＰＵ１２１に接続されている。なお、後述する図４のメインＣＰＵ１２１の処理を実行するためのプログラムは、メインメモリ１２３のＲＯＭに保存される。プログラムをこのような記録媒体に記録しておくことで、メインＣＰＵ１２１は、実行時にこの記録媒体に記録したプログラムをＲＡＭに読み込み、プログラムを駆動することによって、図４のフローに示す処理を実行することができる。
【００１８】
この実施形態のシステムは、サブシステム２００を備える。そして、このサブシステム２００内には、無線通信用のシステムが構成されている。このサブシステム２００及びメインシステム１００は、ＩＣＨ（I/O  Controller  Hub）１２７を介してエンジン側の汎用高速バスとは別のＰＣＩ−Ｅｘｐｒｅｓｓ等の汎用高速バスで繋がっている。そして、ディスクストレージやＵＳＢ（Universal Serial Bus）及び後記で詳述する無線ＬＡＮ（Local  Area  Network）等を用いる周辺装置が、サブシステムの構成要素として接続される。
【００１９】
この実施形態のサブシステム２００は、無線通信部２３０と、サブコントローラ２１０及びサブシステム全体（ここではサブコントローラ２１０と無線通信部２３０）を制御するサブＣＰＵ２１１と、を有する。この無線通信部２３０は、ＲＦ（Radio  Frequency）部２３７やＰＨＹ（physical  layer）コントローラ２３５、及びＭＡＣ（Media  Access  Control）コントローラ２３３等を備える。
【００２０】
本実施の形態にかかる無線通信部２３０は、外部機から無線ＬＡＮを通じて、予め定められた通信単位のパケット（以下、パケット通信信号とも称す）を受信する。このパケット通信信号における１通信単位のパケット数は、バースト長として予め定められている。この実施形態ではバースト長を、８バーストとする。つまり、パケットの欠落等が生じない限り、無線通信部２３０は、一回のパケット通信信号の受信で、８パケット受信する。
【００２１】
なお、図１には示していないが、サブシステム２００には、メインシステム１００におけると同様に、プログラム、制御データ等を格納するＲＯＭ或いはＨＤＤ（いずれも図示せず）等の記録媒体がサブＣＰＵ２１１の制御下に接続されており、後述する図４のサブＣＰＵ２１１の処理を実行するためのプログラムがここに保存される。プログラムをこのような記録媒体に記録しておくことで、サブＣＰＵ２１１は実行時にこの記録媒体に記録したプログラムをＲＡＭ（図示せず）に読み込み、プログラムを駆動することによって、図４のフローに示す処理を実行することができる。
【００２２】
サブコントローラ２１０は、無線通信データを格納するための複数のメモリと、データ送受信用ＤＭＡＣ（Direct Memory Access Control）と、メインＣＰＵ１２１とサブＣＰＵ２１１の双方がアクセスできる情報共有ＲＡＭ（ＲＡＭ（３）２１４）と、メインＣＰＵ１２１、サブＣＰＵ２１１及び無線通信部２３０がそれぞれバスマスタとなるために各マスタを調停するバスアービタと、を有する。なお、サブコントローラ２１０内の構成は、後に図２を参照し詳述する。
【００２３】
このように、サブＣＰＵ２１１により制御されるサブコントローラ２１０を構成する主な理由は、無線通信のリアルタイム性を保つためで、いつ始まるか分からない無線通信の制御を行うために、アクセス時間が短くて済む無線通信部２３０の近くにサブＣＰＵ２１１を置くことにより、所期の動作を確保することができる。本実施形態の構成では、サブコントローラ２１０内のＤＭＡＣをメインＣＰＵ１２１が制御し、無線通信部２３０をサブＣＰＵ２１１が制御する、といった形で制御を分担している。
【００２４】
図２は、サブシステム２００のサブコントローラ２１０内のシステム構成を概略的に示すブロック図である。図２に示すように、サブシステム２００は、サブコントローラ２１０と、サブＣＰＵ２１１と、無線通信部２３０と、を備え、サブコントローラ２１０とサブＣＰＵ２１１との間、及びサブコントローラ２１０と無線通信部２３０との間が、汎用Ｂｕｓで接続されている。
【００２５】
サブコントローラ２１０は、ＲＡＭ（１）２１２と、ＲＡＭ（２）２１３と、ＲＡＭ（３）２１４と、ＴｘＤＭＡＣ２１５と、ＲｘＤＭＡＣ２１６と、アービタ（１）２１７と、アービタ（２）２１８と、アービタ（３）２１９と、バスマスタ２２０と、ＰＣＩ−Ｅｘｐｒｅｓｓインターフェース（以下、Ｉ／Ｆとも表す）２２１と、を備える。
【００２６】
図２に示すサブコントローラ２１０は、受信用のＤＭＡＣとしてＲｘＤＭＡＣ２１６と、送信用のＤＭＡＣとしてＴｘＤＭＡＣ２１５を内蔵する。これらのＤＭＡＣは、メインシステム１００とはＰＣＩ−Ｅｘｐｒｅｓｓ等の汎用高速バスで接続され、また、サブＣＰＵ２１１とはＡＭＢＡ（登録商標）等の汎用内部バスで接続されている。このため、ＰＣＩ−Ｅｘｐｒｅｓｓ  Ｉ／Ｆ２２１を用いて接続することができる。
【００２７】
また、本実施の形態にかかるシステムでは、メインＣＰＵ１２１、サブＣＰＵ２１１及び無線通信部２３０がバスマスタとなる。このため、各マスタのアクセス要求を調停するバスアービタ、即ちバスアービタ（１）２１７、バスアービタ（２）２１８及びバスアービタ（３）２１９が適切な箇所に接続されている。
【００２８】
また、サブコントローラ２１０内には、ＲＡＭ（１）２１２と、各パケットの制御情報を含むヘッダデータ（以下、「パケット情報」という）を格納するためのヘッダバッファと呼ばれるＲＡＭ（２）２１３が独立して備えられている。
【００２９】
ＲＡＭ（１）２１２はトグルバッファとし、各パケット内の有効データであるペイロードデータを格納するためのペイロードバッファとなる。具体的には、ＲＡＭ（１）２１２は、２通信単位分のペイロードデータの格納を可能とする記憶領域を備えている。なお、詳細については後述する。
【００３０】
ＲＡＭ（２）２１３は、ヘッダデータとして、受け取ったパケットサイズ、パケットナンバー及び正常に受信したか否かを示すフラグを保持する。このヘッダデータの格納は、無線通信部２３０により行われる。そして、サブＣＰＵ２１１が、当該ＲＡＭ（２）２１３を参照することで、受信に成功／失敗したパケットを確認できる。
【００３１】
さらに、サブコントローラ２１０は、メインＣＰＵ１２１及びサブＣＰＵ２１１の双方がアクセスできるように、後述するパケットデータのメインシステム１００とサブシステム２００間の転送制御に必要な共有情報を格納するためのＲＡＭ（３）２１４も備えられている。つまり、メインＣＰＵ１２１は、ＲＡＭ（３）２１４に格納された情報を参照することができる。ＲＡＭ（３）２１４には、メインＣＰＵ１２１と共有する情報である、パケット情報が書き込まれる。メインＣＰＵ１２１は、ＲＡＭ（３）２１４を参照し、パケット情報（パケットサイズ）等を判断できる。
【００３２】
図２のアービタ（１）２１７は、レジスタ２４１を備える。レジスタ２４１は、パケット転送順に、ＲＡＭ（１）２１２に格納された各パケットのアドレスと、パケットサイズと、最終パケットであるか否かを判別する最終パケットデータ判別フラグと、を保持する。これにより、ＲｘＤＭＡＣ２１６からパケットの転送要求があった場合に、アービタ（１）２１７が、当該レジスタ２４１を参照して、（無線通信部２３０が受信に失敗しなかった場合の）パケット本来の転送順序に従って、パケットの読み出しを行うことができる。そして、アービタ（１）２１７が、本来の転送順通りに読み出した（並び替えた）パケットを、ＲｘＤＭＡＣ２１６に受け渡す。そして、ＲｘＤＭＡＣ２１６が、並び替えたパケットを、メインシステム１００に転送制御する。
【００３３】
図３は、アービタ（１）２１７に内蔵されているレジスタ２４１の構成を概念的に示す図である。図３に示すように、レジスタ２４１は、メインシステム１００に転送する１通信単位分（８パケット）のパケット情報を格納することができる。レジスタ２４１が、８パケット分のパケット情報を格納できるのは、サブシステム２００側から、メインシステム１００側にパケットを転送する際に、一回に最大８パケットの転送を行うためである。
【００３４】
上述したように、アービタ（１）２１７のレジスタ２４１は、送りたい順番に１番目から８番目のパケットまでの情報を格納可能とする。情報の格納は、サブＣＰＵ２１１の設定部２５１により行われる。レジスタの最終パケットデータ判別フラグは、メインシステム１００側に転送する最後のパケットを表すフラグとする。これにより、最後に転送するパケットを認識できる。
【００３５】
図２に戻り、無線通信部２３０は、外部機から無線ＬＡＮを通じてパケット受信要求を受け取り、送信許可の手続きを経て外部から送られてくる通信単位毎（８パケット）のパケットを受信する。
【００３６】
１通信単位で受信した所定数（本実施の形態では８）のパケットは、各々無線通信部２３０内の図示しないデータチェック部でチェックサム等により、パケットデータの妥当性が判断される。データチェック部が、正常受信時にあるべきデータとの不一致が生じたと判断すると、そのパケットは無線通信部２３０内で破棄する。他方、無線通信部２３０は、正常に受信したパケットを、ＭＡＣ２３３を介してサブコントローラ２１０内のＲＡＭ（１）２１２へ順次格納する。同時に、無線通信部２３０は、該当するパケットのヘッダデータ（パケット情報）を、サブコントローラ２１０内のヘッダバッファとしてのＲＡＭ（２）２１３へ格納する。
【００３７】
そして、無線通信部２３０は、１通信単位の最後のパケット分の受信が終わり、正常に受信したパケットの格納が完了すると、パケット格納完了の割り込み要求を、サブＣＰＵ２１１に対して行う。
【００３８】
また、無線通信部２３０は、パケットを受信した時に各構成の制御を行う。例えば、無線通信部２３０がパケットを受信した場合、サブＣＰＵ２１１に対して割り込みを行う。また、無線通信部２３０は、受信したパケットのヘッダ情報等を、ＲＡＭ（２）２１３に書き込む。これにより、サブＣＰＵ２１１は、無線通信部２３０から割込を受け付けた時に、ＲＡＭ（２）２１３を参照することで、受信に失敗したパケット等を認識できる。
【００３９】
次に、サブＣＰＵ２１１について説明する。サブＣＰＵ２１１は、サブシステム２００側で実行されたプログラムとの協働により、設定部２５１と、再送要求部２５２との各機能部を実現する。
【００４０】
再送要求部２５２は、無線通信部２３０がパケット通信信号に含まれるパケットの受信に失敗した場合、受信に失敗したパケットの再送要求を、次のパケット通信信号に含めるように、無線通信部２３０に対して再送要求を行う。
【００４１】
設定部２５１は、ＲＡＭ（２）２１３に格納されたパケット情報を参照し、アービタ２１７（１）のレジスタ２４１に対して、転送するパケットの転送順に、パケットアドレス、パケットサイズ及び最終パケットデータ判別フラグを設定する。つまり、ＲＡＭ（２）２１３には、パケットのヘッダ情報や、受信に成功／失敗したパケットの情報が含まれているため、設定部２５１が、ＲＡＭ（２）２１３に格納された情報を参照することで、受信に成功／失敗したパケットを特定できる。そして、設定部２５１は、受信に成功したパケットのみを、転送するように設定できる。設定部２５１が、転送順にパケットの情報をレジスタ２４１に設定するので、アービタ（１）２１７がレジスタに設定された順にパケットの情報を読み出すことで、転送順に各パケットを読み出すことになる。
【００４２】
次に、再送要求部２５２が再送要求を行った場合に設定部２５１が行う設定について説明する。この場合、ＲＡＭ（１）２１２には、無線通信部２３０が再送要求の前に受信したパケット通信信号に含まれるパケットと、再送要求の後に無線通信部２３０が受信した、再送パケットを含むパケット通信信号に含まれるパケットと、が記憶される。この後、設定部２５１が、ＲＡＭ（１）２１２に記憶されたパケット毎に、無線通信部２３０が受信に失敗しなかった場合のパケットの受信順序（本来の受信順序）を、メインシステム１００に転送する順序として、レジスタ２４１に対して、各パケットの情報を設定する。これにより、無線通信部２３０が受信に失敗した場合でも、受信に失敗しなかった場合の転送順序に従ってパケットをメインシステム１００に転送できる。
【００４３】
さらに、再送要求を行ったにも係わらず、再送パケットの受信に失敗した場合は、当該パケットの代わりに、パケットサイズが同一のダミーパケットを転送することとする。この場合、設定部２５１は、さらに、受信に失敗した再送パケットの再送前に、受信に失敗した当該再送パケットと同一内容のパケットの、受信に失敗しなかった場合の受信順序を、当該再送パケットの代わりとなるダミーパケットの転送順序として設定する。なお、具体的な処理に付いては後述する。
【００４４】
ＲｘＤＭＡＣ２１６は、アービタ（１）２１７の起動ビットを参照し、転送可能と判断した場合に、アービタ（１）２１７にパケットの転送要求を行う。この場合、アービタ（１）２１７が、当該レジスタ２４１を参照して、設定部２５１により設定された転送順序に従って、パケットを読み出す。そして、アービタ（１）２１７は、本来の転送順に並び替えたパケットを、ＲｘＤＭＡＣ２１６に受け渡す。そして、ＲｘＤＭＡＣ２１６は、メインメモリに、受け渡された順に（つまりは、本来の転送順序に従って）パケットを転送する。
【００４５】
なお、本実施の形態では、サブシステム２００側でメインシステム１００側に転送する一通信単位のパケットが揃った段階で、サブＣＰＵ２１１が、メインシステム１００側に、転送可能という割込要求を行う。つまり、サブシステム２００の無線通信部２３０が取りこぼし無く正常に８パケット受信した場合、転送を行う１通信単位分のパケットがＲＡＭ（１）に格納されたものとして、サブＣＰＵ２１１が、メインシステム１００に対して、転送可能という割込要求を行う。これに対し、サブシステム２００の無線通信部２３０の受信でパケットの取りこぼし等が発生した場合、次のパケット受信で取りこぼし分のパケットを受信し、受信した２通信単位分のパケットがＲＡＭ（１）２１２に格納された段階で、サブＣＰＵ２１１が、メインシステム１００に対して、転送可能という割込要求を行う。なお、詳細な処理手順については後述する。
【００４６】
そして、転送可能という割込要求を受け付けた場合、メインＣＰＵ１２１が、ＲｘＤＭＡＣ２１６（受信ＤＭＡＣ）を起動し、ＲｘＤＭＡＣ２１６（受信ＤＭＡＣ）がアービタ（１）２１７に対して、パケットの転送要求を出し続ける。その後、アービタ（１）２１７は、レジスタ２４１を参照し、本来の順序に並び替えたパケットを、最終パケットデータ判別フラグがエンドになるまで転送し続ける。
【００４７】
図１及び図２に示したシステムは、無線通信部２３０によって無線ＬＡＮの機能を実現する。この実施形態における無線ＬＡＮは、ＵＷＢ（Ultra Wide Band）を用いることができ、パケット通信によってデータの送受信を行う。
【００４８】
パケット通信では、所定数のパケットをまとめて１通信単位として扱うので、受信する通信単位の各パケットには、データの並びに従って順番にパケットＮＯ．が付けられ、受信側では、受信したパケットをパケットＮＯ．の順番でメモリに格納することにより、正常なデータとして処理することができる。
【００４９】
しかしながら、従来は、通信単位の一部のパケットが正常に受信できなかった場合には、該当するパケットは後の通信単位で再送されてくるので、パケットの順番が狂ってしまい、再送されたパケットをそのままの順番でメモリに格納しても、正常なデータとして処理できなかった。
【００５０】
この問題を解消するには、メモリに格納するパケットの順番を並び替えることが必要であるが、このために採用した従来の方法は、上記［背景技術］で述べたように、処理が煩雑になりメインシステムのＣＰＵへの負担も大きくなる。
【００５１】
そこで、この実施の形態は、上記したサブコントローラ２１０を構成したことでメインＣＰＵ１２１の負荷を軽減することが可能となった。これにより所期の目的を達成する。次に、本実施の形態で、無線通信部２３０によって受信したパケットデータに対し、サブコントローラ２１０を介して行う転送動作によって、正常な順番に並び替えたパケットデータをメインシステム１００のメインメモリ１２３に格納するまでの処理手順について説明する。
【００５２】
「サブコントローラを介して行うパケットデータの転送動作」
本実施の形態にかかる転送動作は、無線通信部２３０によるパケットの受信時に、サブシステム２００とメインシステム１００が連動して行う動作で、各システムを制御するサブＣＰＵ２１１及びメインＣＰＵ１２１が当該動作を実行するためのプログラムを動作させることにより実施することができる。
【００５３】
図４は、受信したパケットデータをメインシステムのメモリへ格納する転送動作を実行する際の、処理フローを示す図である。図４の処理フローに従い以下にパケットデータの転送動作を説明する。図４に示す処理手順は、適切にパケットを受信した場合、パケットの取りこぼしが発生した場合、再送パケットの取りこぼしが発生した場合をも含む処理フローである。
【００５４】
図４の処理手順前に、無線通信部２３０によるパケットの受信処理が予め行われているものとする。そして、無線通信部２３０が、１通信単位の最後のパケット分の受信が終わり、受信したパケットの格納が完了し、パケット格納完了の割り込み要求を、サブＣＰＵ２１１に対して行われた状態から、図４の処理手順を開始されたものとする。また、ＲＡＭ（１）２１２にパケットを格納する際に取りこぼしが発生し、パケットの再送要求で次の一通信単位のパケットの受信でＲＡＭ（１）２１２の両面にパケットが格納された後、本来の転送順に従って１通信単位分のパケットを転送した後のＲＡＭ（１）２１２の一面を開放された状態から図４の処理手順を開始しても良い。さらに、再々送されたパケットを転送した後で、ＲＡＭ（１）２１２の両面にパケットが格納された状態から、図４の処理手順を開始しても良い。なお、パケットの再々送の具体的な手順は、図４の処理中に説明する。なお、ＲＡＭ（１）２１２の面については後述する。
【００５５】
そして、サブＣＰＵ２１１は、無線通信部２３０からパケット格納完了の割り込み要求を検出したか否か判断する（ステップＳ３０１）。検出していないと判断した場合（ステップＳ３０１：Ｎｏ）、検出するまで待機する。
【００５６】
一方、サブＣＰＵ２１１は、無線通信部２３０からパケット格納完了の割り込み要求を検出すると（ステップＳ３０１：Ｙｅｓ）、適宜割り込み処理を行う（ステップＳ３０２）。そして、ステップＳ３０２の割込処理で、サブＣＰＵ２１１に対する割り込みが行われた場合、サブＣＰＵ２１１は、割り込み種類を判別する。
【００５７】
ここで、通信単位ごとに行うパケット転送の１回目において、受信パケットの一部が正常に受信できなかった場合、無線通信部２３０は、当該割り込みを用いて、サブＣＰＵ２１１に対し、パケットの一部が正常に受信できなかった旨を、受信エラー割り込みとして通知する。
【００５８】
次に、サブＣＰＵ２１１は、次の処理ステップとして、無線通信部２３０からＲＡＭ（１）２１２に格納されたパケットのヘッダ情報（パケット情報）を、ＲＡＭ（２）２１３から読み出す（ステップＳ３０３）。読み出されるヘッダ情報は、先に無線通信部２３０が正常に受信したパケットに関する情報として格納されたパケット情報である。
【００５９】
また、サブＣＰＵ２１１は、ＲＡＭ（２）２１３から読み出したパケット情報を、共有情報としてＲＡＭ（３）２１４に書き込む（ステップＳ３０４）。これにより、メインＣＰＵ１２１、サブＣＰＵ２１１の双方がパケット情報にアクセスできる。
【００６０】
ここで、無線通信部２３０で正常に受信できなかったパケットが生じ、該当するパケットの再送処理が必要となった場合について説明する。図５は、無線通信部２３０で正常に受信できなかったパケットが生じた場合のＲＡＭ（１）２１２における格納状態を示す概念図である。
【００６１】
なお、図５に示す例は、ＲＡＭ（１）２１２に対して、再送パケットを含む２通信単位分のパケットが格納された構成を示したものである。図５では、説明を簡略化するために、トグルバッファであるＲＡＭ（１）２１２のメモリ領域の上半分をＡ面、下半分をＢ面と表現している。また、Ａ面、Ｂ面は、それぞれ１通信単位のパケット転送分、つまり８パケット分のデータを格納できるメモリ領域を確保しているものとする。
【００６２】
図５に示す例では、１回目のパケット転送でパケットＮｏ．１、２及び５が正常に受信できず（図５中にハッチングで示したパケット）、これらのパケットを取りこぼした場合を表している。
【００６３】
１回目のパケット転送で上記３つのパケットを取りこぼすと、無線通信部２３０は、ＲＡＭ（１）２１２のＡ面上に、Ｎｏ．０、３、４、６及び７の順に、正常に受信したパケットを格納する。
【００６４】
２回目のパケット転送で、サブＣＰＵ２１１の再送要求部２５２より再送要求のあったＮｏ．１、２及び５で示されるパケットがまず転送され、その後、正常に受信されたパケットに続くパケットであるＮｏ．８以降が新規分として転送されてくる。２回目のパケット転送分のパケットを全て正常に受信できたとすると、無線通信部２３０は、ＲＡＭ（１）２１２のＢ面上に、Ｎｏ．１、２、５及び８〜１２の順に格納する。
【００６５】
図５に示すケースでは、ＲＡＭ（１）２１２に格納されたパケットは、ＲＡＭ（１）２１２上でＮｏ．０、３、４、６、７、１、２、５及び８〜１２の順になっている。サブシステム２００側が、この格納順のままメインシステム１００側のメインメモリ１２３に転送し、格納しても、パケットの順番が狂ってしまっているので、メインシステム１００が正常なデータとして処理することができない。
【００６６】
この問題を解消するには、メモリに格納するパケットの順番を並び替えることが必要になる。従来では、次の２方法によっていた。
【００６７】
図６は、そのうち一つの方法である、従来例１のパケット並び替え手法を示した図である。図６に示す方法は、再送によって順番が狂ってしまっているＲＡＭ（１）２１２上のパケットを、格納順のまま、並び替えなしにＰＣＩ−Ｅｘｐｒｅｓｓバスを通してＤＭＡ転送でメインシステム１００のメインメモリ１２３に一旦格納する。この後、メインＣＰＵ１２１がメインメモリ１２３内のパケットの順番を入れ替える方法である。
【００６８】
しかしながら、この方法によると、メインＣＰＵ１２１の負荷が大きくなるという問題が生じる。
【００６９】
図７は、他の一つの方法である、従来例２のパケット並び替え手法を示した図である。図７に示す方法は、再送によって順番が狂ってしまっているＲＡＭ（１）２１２に格納されたパケットのうち、パケット番号が連続するパケットのみまとめて転送を行う方法である。同図に示す例では、「パケットＮｏ．０」「パケットＮｏ．３，４」「パケットＮｏ．６，７」「パケットＮｏ．１，２」「パケットＮｏ．５」「パケットＮｏ．８〜１２」それぞれをまとめた転送単位とし、ＰＣＩ−Ｅｘｐｒｅｓｓバスを通して、ＤＭＡ転送でメインシステム１００のメインメモリ１２３に転送している。この方法によると、まとめた転送単位の転送順を選ぶことでメインメモリ１２３では適正データ順になるので、メインＣＰＵ１２１の負荷を若干低減できるが、この場合も複数回の転送が必要となるため転送効率が悪く、さらに転送完了ごとに割り込みが発生するため、処理が煩雑になるという問題が生じてしまう。
【００７０】
図８は、本実施の形態にかかるパケットの並び替え手法を示した図である。図８に示した本実施形態では、サブコントローラ２１０の設定部２５１が、無線通信部２３０によって受信した各パケットデータに対する転送条件として、転送先であるメインシステム１００のメインメモリ１２３上で、本来の転送順序になるような条件を設定する。これにより、アービタ（１）２１７が当該順序に従って読み出したＲＡＭ（１）２１２上のパケットがメインメモリ１２３に転送される。これにより、メインメモリ１２３に格納されたときに正常な順番に並び替えられているように意図する転送動作を可能にしている。
【００７１】
次に、図８を参照し、サブコントローラ２１０（図２）の構成に即して、次にこの転送動作を具体的に説明する。
【００７２】
まず、図８の左のＲＡＭ（１）２１２に示すように、各パケットがＲＡＭ（１）２１２に順番どおりに格納されていないものとする。この場合、サブＣＰＵ２１１の設定部２５１が、データ転送元のアービタ（１）２１７におけるレジスタ２４１に対して、本来の転送順序に従って、パケットアドレス等を設定する。これによりアービタ（１）２１７は本来の転送順序に従って、各パケットの読み出しを行う。そして、アービタ（１）２１７は、受信ＤＭＡＣ（ＲｘＤＭＡＣ）２１６の転送要求に連動するので、上記各パケットを、ＤＭＡ転送でＰＣＩ−Ｅｘｐｒｅｓｓバスを通してメインシステム１００のメインメモリ１２３に格納する際には、順番どおりになるように（同図の中央及び右の状態）、転送動作を行わせることができる。
【００７３】
次に、図５に示すようにＲＡＭ（１）２１２に各パケットの情報が格納されている場合にＲＡＭ（１）のレジスタ２４１に書き込まれるパケット情報を、図３を用いて説明する。
【００７４】
ＲｘＤＭＡＣ２１６は、アービタ（１）２１２を介して、メインメモリ１２３に対して、Ｎｏ．０からＮｏ．７の順にパケットを送る例とする。なお、ＲＡＭ（１）２１２には、図５に示した状態で受信パケットが保持されている場合を例にする。この場合、設定部２５１は、以下に示す手順で、レジスタ２４１に情報を書き込む。
【００７５】
ＲｘＤＭＡＣ２１６が１番目にパケットＮｏ．０を転送するので、設定部２５１は、図３の１番目のパケット転送用アドレスレジスタＰａｃｋｅｔ［０］のＳｔａｒｔ Ａｄｒ［０］に、図５のＲＡＭ（１）２１２におけるＡ面上にあるＰａｃｋｅｔ_０の先頭アドレス（ＲＡＭ（１）のアドレス）を書き込み、１番目のパケット転送用データサイズレジスタであるＤａｔａ Ｓｉｚｅ［０］にＰａｃｋｅｔ_０の有効データであるパケットのデータサイズのみ（内部間転送ではヘッダ情報は不要のため）を書き込む。
【００７６】
ＲｘＤＭＡＣ２１６が２番目にパケットＮｏ．１を転送するので、設定部２５１は、上記１番目と同様に、図５のＲＡＭ（１）２１２におけるＢ面上にあるＰａｃｋｅｔ_１の先頭アドレスをＳｔａｒｔＡｄｒ［１］に、又Ｐａｃｋｅｔ_１のパケットのデータサイズをＤａｔａＳｉｚｅ［１］に書き込む。
【００７７】
以下、設定部２５１は、同様に８番目のレジスタまで転送するパケットの情報を書き込んでいく。
【００７８】
設定部２５１が、このようにして各レジスタに設定を行うことにより、アービタ（１）２１７は、レジスタ２４１からパケットＮｏ．順にパケット情報（転送元アドレス、データサイズ）を読み出し、読み出した転送元アドレスが指し示すＲＡＭ（１）２１２上の受信パケットを読み出す。
【００７９】
これにより、パケットＮｏ．順に受信パケットを読み出すことができる。本実施の形態にかかるサブシステム２００が、この構成を採ることで、受信パケットがＲＡＭ（１）２１２にパケットＮｏ．順に格納されていなくても、アービタ（１）２１７がパケットＮｏ．順に並び替えて、受信ＤＭＡＣ（ＲｘＤＭＡＣ）２１６へデータを渡すことができる。
【００８０】
図４の処理フローに戻り、無線通信部２３０によって受信パケットがＲＡＭ（１）２１２に保持されると共に、ヘッダ情報がＲＡＭ（３）２１４に保持されたステップＳ３０４の後の動作について説明する。受信パケットがＲＡＭ（１）２１２に保持されたステップＳ３０４の状態は、１回のパケット転送により正常に受信された場合と、再送されたパケットにより２回のパケッド転送分がある場合を含み、いずれの場合も、１通信単位のパケットがメインメモリ１２３へ転送可能となった状態である。
【００８１】
次に、サブＣＰＵ２１１は、ＲＡＭ（２）２１３を参照して、メインシステム１００に本来の順番に従って次に転送するためのパケットが全て、ＲＡＭ（１）２１２に格納されているか否か判定する（ステップＳ３０５）。次に転送するためのパケットとは、本来の転送順序に従った１通信単位分のパケット（８パケット）又は再々送されたパケットとする。なお、一単位分のパケット（８パケット）がある状態とは、ＲＡＭ（１）２１２で、受信時にパケットの取りこぼし無く片面で一通信単位のパケットが揃った場合、又はパケットの取りこぼしが発生し、パケットの再送が行われた結果、両面で一通信単位のパケットが揃った場合のそれぞれが含まれるものとする。
【００８２】
次に転送するための一通信単位のパケットが揃ったと判定された場合（ステップＳ３０５：Ｙｅｓ）には、ステップＳ３０６に処理が進む。まずは、次に転送するためのパケットが揃った場合について先に説明する。なお、取りこぼしが発生し、次に転送するためのパケットが揃わずに再送要求を行う場合については、後述する。
【００８３】
サブＣＰＵ２１１が８パケット揃ったと判定した場合（ステップＳ３０５：Ｙｅｓ）、サブＣＰＵ２１１は、メインＣＰＵ１２１に受信パケットデータを引き取ってもらうため、サブコントローラ２１０内の図示しない割り込みコントローラを用いて、メインＣＰＵ１２１へこの旨を通知するメッセージ割り込み要求を生成する（ステップＳ３０６）。生成された割込要求は、メインＣＰＵ１２１に送信される。これにより、メインＣＰＵ１２１による転送要求が開始される。
【００８４】
サブＣＰＵ２１１の設定部２５１は、ＲＡＭ（２）２１３を参照して、アービタ（１）２１７内蔵のレジスタ２４１の設定（上記図３に関する説明、参照）をパケット番号順に行う（ステップＳ３０７）。なお、ＲＡＭ（２）２１３には、事前に無線通信部２３０から受け取っているデータ制御情報、即ち、無線通信部２３０が正常に受信したパケットのデータをＲＡＭ（１）２１２に転送する際の制御情報が格納されているものとする。
【００８５】
設定部２５１が、アービタ（１）２１７内蔵のレジスタにそれぞれ転送元アドレス、データサイズ及び最終パケットデータ判別フラグを設定した後、サブＣＰＵ２１１はアービタ（１）２１７の図示しない転送開始トリガを立て、アービタ（１）２１７を起動する（ステップＳ３０８）。この後、メインＣＰＵ１２１による転送要求が、ＲｘＤＭＡＣ２１６に対して行われる。これにより、ＲｘＤＭＡＣ２１６が、アービタ(１)２１７を呼び出して、転送を行う。そこで、次にメインＣＰＵ１２１側の処理について説明する。
【００８６】
まず、メインＣＰＵ１２１は、ステップＳ３０６でサブＣＰＵ２１１が生成した割り込み要求を検出したか否か判定する（ステップＳ３５１）。検出していないと判定した場合（ステップＳ３５１：Ｎｏ）、検出するまで待機する。
【００８７】
メインＣＰＵ１２１は、割り込み要求を検出した場合（ステップＳ３５１：Ｙｅｓ）、そのメッセージに示される要求内容に従い割り込み処理を行う（ステップＳ３５２）。割込処理として、メインＣＰＵ１２１は、サブコントローラ２１０内のＲＡＭ（３）２１４に格納されているデータ制御情報を読み出す。ＲＡＭ（３）２１４には、ステップＳ３０４の処理で、受信パケットに関する制御情報が書き込まれているので、この情報が読み出される。
【００８８】
次に、メインＣＰＵ１２１は、読み出した制御情報に基づいて、受信ＤＭＡＣ（ＲｘＤＭＡＣ）２１６内蔵のレジスタに転送制御に必要な設定を行う（ステップＳ３５３）。この設定は、アービタ（１）２１７を介して、ＲＡＭ（１）２１２に保持された受信パケットをメインメモリ１２３に転送するためで、ＲＡＭ（３）２１４の制御情報から得られる、メインメモリ１２３に格納する各パケットのデータサイズ等を設定に用いる。
【００８９】
受信ＤＭＡＣ（ＲｘＤＭＡＣ）２１６内蔵のレジスタへの設定を完了した後、メインＣＰＵ１２１は受信ＤＭＡＣ（ＲｘＤＭＡＣ）２１６を起動させる（ステップＳ３５４）。
【００９０】
メインＣＰＵ１２１が受信ＤＭＡＣ（ＲｘＤＭＡＣ）２１６を起動させると、アービタ（１）２１７は、ステップＳ３０７でアービタ（１）２１７内蔵のレジスタ２４１に設定された順にパケットを受信ＤＭＡＣ（ＲｘＤＭＡＣ）２１６へ転送し、受信ＤＭＡＣ（ＲｘＤＭＡＣ）２１６は、送られてきた順にデータをメインメモリ１２３に格納する。
【００９１】
一方、サブＣＰＵ２１１側の処理では、先にアービタ（１）２１７の転送が完了するので、図示しない割り込みコントローラを用いてサブＣＰＵ２１１に対しアービタ（１）２１７の転送完了割り込みが発生する。サブＣＰＵ２１１は、発生した転送完了割り込みの検出を行う（ステップＳ３０９）。検出しなかった場合（ステップＳ３０９：Ｎｏ）、転送完了の割り込みを検出するまで行う。
【００９２】
サブＣＰＵ２１１は、転送完了割り込みを検出すると（ステップＳ３０９：Ｙｅｓ）、適宜、この割り込み処理を行う（ステップＳ３１０）。その後、サブＣＰＵ２１１は、メインＣＰＵ１２１からのメインメモリ１２３への受信パケットデータ格納完了（転送完了）割り込みの検出を行う（ステップＳ３１３）。受信パケットデータ格納完了（転送完了）割り込みを検出しなかった場合（ステップＳ３１３：Ｎｏ）、メインＣＰＵ１２１から当該割り込みが行われるまで待機する。
【００９３】
メインＣＰＵ１２１側に戻り、メインＣＰＵ１２１側では、メインメモリ１２３への受信パケットデータの格納が完了すると、受信ＤＭＡＣ（ＲｘＤＭＡＣ）２１６が転送完了割り込みを発生させる。そこで、メインＣＰＵ１２１が、当該割り込みを検出する（ステップＳ３５５）。なお、メインＣＰＵ１２１は、当該割り込みがない場合（ステップＳ３５５：Ｎｏ）、当該割り込みが行われるまで待機する。
【００９４】
メインＣＰＵ１２１は、この転送完了割り込みを検出すると（ステップＳ３５５：Ｙｅｓ）、適宜、この割り込み処理を行う（ステップＳ３５６）。
【００９５】
この割り込み処理を行った後、メインＣＰＵ１２１は、サブコントローラ２１０内のＲＡＭ（３）２１４へ受信ＤＭＡＣ（ＲｘＤＭＡＣ）２１６の転送が完了したことを示した情報を書き込み（ステップＳ３５７）、サブＣＰＵ２１１へ転送完了を通知するメッセージ割り込み要求を生成する（ステップＳ３５８）。
【００９６】
サブＣＰＵ２１１側に戻り、サブＣＰＵ２１１では、転送完了を通知するメッセージ割り込み要求を待っている状態で、メインＣＰＵ１２１から送られてきたこのメッセージ割り込み要求を検出する（ステップＳ３１３）。
【００９７】
サブＣＰＵ２１１は、このメッセージ割り込みを検出すると（ステップＳ３１３：Ｙｅｓ）、再々送パケットが必要か否か判定する（ステップＳ３１４）。再々送パケット要求し、再々送パケットが必要な場合（ステップＳ３１４：Ｙｅｓ）については後述する。再々送パケットが必要な場合とは、メインＣＰＵ１２１に対して、パケットを転送する際に、ダミー（無効）パケットを含めて転送を行った場合となる。つまり、ダミーパケットを転送したため、ダミーではない再々送パケットが必要となる。
【００９８】
サブＣＰＵ２１１が、再々送パケットが必要ではないと判定した場合（ステップＳ３１４：Ｎｏ）、適宜、このメッセージ割り込み処理を行い（ステップＳ３１６）、処理を終了する。
【００９９】
このように、受信ＤＭＡＣ（ＲｘＤＭＡＣ）２１６によって複数のパケットをメインメモリ１２３へ転送する際に、一連の転送が終わってから転送完了を通知するメッセージ割り込みを発行することで、不要な割り込み処理を減らし効率的に処理を行うことができる。
【０１００】
次に、サブＣＰＵ２１１は、ＲＡＭ（２）２１３を参照して、メインシステム１００に本来の順番に従って次に転送するためのパケットが、ＲＡＭ（１）２１２に格納されていないと判定した場合（ステップＳ３０５：Ｎｏ）について説明する。この場合、サブＣＰＵ２１１は、ＲＡＭ（１）２１２の片面が開放されているか否か判定する（ステップＳ３１１）。次に転送するためのパケットが揃っておらず、片面開放されている状況の例としては、無線通信部２３０が、最初の一通信単位を受信した際に、パケットの取りこぼしが生じている場合などがある。次に転送するためのパケットが揃っておらず、片面開放されていない（両面共にふさがっている）状況の例としては、無線通信部２３０が、一通信単位を受信した後、再送パケットを含む次の通信単位を受信したにもかかわらず、再送パケットの取りこぼしが生じている場合などがある。
【０１０１】
まずは、片面が開放されていると判定した場合（ステップＳ３１１：Ｙｅｓ）について説明する。この場合、サブＣＰＵ２１１の再送要求部２５２が、パケット送信元へ受信できなかったパケットの番号を指定して再送要求を発行する（ステップＳ３１２）。
【０１０２】
その後、ステップＳ３０１〜Ｓ３０４の処理に従い、パケットの転送完了の検出から、受信したパケットに関する情報の格納までの処理を行う。これにより、再送要求した後に、再送パケットを含む１通信単位分のパケットの受信処理が行われることになる。そして、ＲＡＭ（１）２１２には、２面分パケットが格納される。
【０１０３】
その後、サブＣＰＵ２１１が、ＲＡＭ（２）２１３を参照して、メインシステム１００に本来の順番に従って次に転送するためのパケットが、ＲＡＭ（１）２１２に格納されているか否か判定する。再送されたパケットを受信したことで、次に転送するためのパケットが揃ったと判定した場合（ステップＳ３０５：Ｙｅｓ）、上述したようにステップＳ３０６〜Ｓ３１０、Ｓ３１３、Ｓ３１４、Ｓ３１６の処理手順で、パケットをメインメモリ１２３に転送して、終了する。
【０１０４】
図９は、再送要求で、次に転送するためのパケットが揃った場合のＲＡＭ（１）２１２の構成を示した図である。図９に示すように、Ｐａｃｋｅｔ＿１、Ｐａｃｋｅｔ＿２、Ｐａｃｋｅｔ＿５を取りこぼした後、再送要求部２５２が行った再送要求によりＰａｃｋｅｔ＿１、Ｐａｃｋｅｔ＿２、Ｐａｃｋｅｔ＿５と、Ｐａｃｋｅｔ＿８以降のパケットが送られてきたので、サブシステム２００側でＰａｃｋｅｔ＿０〜Ｐａｃｋｅｔ＿７までメインメモリ１２３に転送できる。その後は、Ａ面が開放された後、無線通信部２３０は、再送要求部２５２による再送要求で、取りこぼされたＰａｃｋｅｔ１１の再送を含む１通信単位分のパケットを受信することになる。これにより、Ｐａｃｋｅｔ＿８〜Ｐａｃｋｅｔ＿１５までの８パケットを一括してメインメモリ１２３に転送できる。
【０１０５】
図４に戻り、サブＣＰＵ２１１が、再送されたパケットを受信したにもかかわらず、次に転送するためのパケットが揃っていないと判定した場合（ステップＳ３０５：Ｎｏ）、ＲＡＭ（１）２１２の一面が開放されているか否か判定する（ステップＳ３１１）。再送要求によりＲＡＭ（１）２１２の両面共に埋まったため、再送要求の後は、開放されていないと判定する（ステップＳ３１１：Ｎｏ）。この場合、ステップＳ３０７でダミー（無効）パケットを含むパケットの送信設定を行うこと以外は、上述した処理と同様に、ステップＳ３０６〜Ｓ３１０、Ｓ３１３の処理手順で処理を行う。
【０１０６】
このように、本実施の形態では、無線通信部２３０から取得した再送パケットの情報を元に取りこぼしが発生したパケットと同じデータサイズのデータをダミー(無効)パケットデータとして用意する。そして、取りこぼしたパケットの代わりとしてダミーパケットデータを間に挟む形でメインメモリ１２３へ、本来の順番に従った８パケット分を転送し、ＲＡＭ（１）２１２の一面を開放し、空き領域を作る。転送を行う際に、ダミーパケットデータを間に挟むことで擬似的に順番通りに８パケットを一括転送が可能となるため転送効率を落とすことが無くなる。
【０１０７】
このようにして、サブＣＰＵ２１１からのメッセージ割り込みを介して、各パケット情報がメインＣＰＵ１２１側に転送される。ただし、そのままではメインＣＰＵ１２１が全てのパケット格納が完了したと誤って判断してしまうので、転送前に転送するパケットの中にダミーパケットデータが含まれていることを通知する必要がある。そこでメインＣＰＵ１２１とサブＣＰＵ２１１とが転送情報を共有するＲＡＭ（３）２１４に取りこぼしのパケットが含まれていること、及び取りこぼしたパケットのＮｏ．をメッセージとして格納しておく。これにより、ダミーパケットがあることをメインＣＰＵ１２１への通知が可能となる。メインＣＰＵ１２１は格納されているメッセージを読み出すことで、メインメモリ１２３上のどこに、どのサイズ分のダミーデータが格納されているかを知ることが出来る。
【０１０８】
その後、再々送パケットが必要か否か判断する（ステップＳ３１４）。必要と判断した場合（ステップＳ３１４：Ｙｅｓ）、送信先に対して、パケットの再々送を要求する（ステップＳ３１５）。その後は、ステップＳ３０１から処理を行う。そして、再々送パケットを受信できた場合は、ステップＳ３０５で次に転送するためのパケットが揃ったものとして処理を進めることで、全ての処理が終了する。
【０１０９】
図１０は、再送要求した場合でもＰａｃｋｅｔ＿５を取りこぼした場合のＲＡＭ（１）２１２の構成を示した図である。図１０に示すように、Ｐａｃｋｅｔ＿１、Ｐａｃｋｅｔ＿２、Ｐａｃｋｅｔ＿５を取りこぼした後、再送要求部２５２が再送要求を行ったが、Ｐａｃｋｅｔ＿５を取りこぼし、Ｐａｃｋｅｔ＿１、Ｐａｃｋｅｔ＿２、及びＰａｃｋｅｔ＿８（Ｐａｋｅｔ＿１１取りこぼし）以降のパケットが送られてきたので、サブシステム２００側でＰａｃｋｅｔ＿５の代わりとなるダミーパケットを挟んでメインメモリ１２３に転送する。当該転送によりＲＡＭ（１）２１２のＡ面が開放された後、再送要求部２５２による再送要求で、無線通信部２３０が、取りこぼした再々送パケットＰａｃｋｅｔ＿５及び再送パケットＰａｃｋｅｔ１１を含む通信単位分を受信することになる。これにより、ＲｘＤＭＡＣ２１６が、メインメモリ１２３に再々送パケットＰａｋｅｔ＿５を転送した後、Ｐａｃｋｅｔ＿８〜Ｐａｃｋｅｔ＿１５までの８パケットを一括してメインメモリ１２３に転送できる。
【０１１０】
上述した処理の後、無線通信部２３０へＲＡＭ（１）２１２に格納していたパケットのメインメモリ１２３への転送が完了したことを通知する。無線通信部２３０は、この通知を受け取った後に、パケット送信元へ受信可能状態であることを通知する。
【０１１１】
以上でパケット受信の一連の処理は完了する。また、ＲＡＭ（１）２１２上に、次に転送するためのパケットが格納されている場合には、再度、ステップＳ３０１から処理を行う。次に転送するためのパケットがまだ格納されていない場合には、次のパケット転送が行われるまで待機状態となる。
【０１１２】
本実施の形態では、上記のように正常に受信できなかったパケットに対する再送要求の処理を、無線通信部２３０に近いサブコントローラ２１０がサブＣＰＵ２１１の制御下で行う。このため、メインシステム１００の処理として行う場合よりもシステム全体の処理の効率化を図ることができるとともに、メインＣＰＵ１２１の負荷を低減できる。
【０１１３】
再送要求を発行後、通信単位ごとに行うパケット転送の２回目の転送で、再送を要求したパケットを含む一通信単位のパケットが送信されてくるので、再送されたパケットに対して無線通信部２３０は再度受信処理を行い、正常に受信されたパケットをＲＡＭ（１）２１２へ格納する。これにより、１通信単位分をまとめて、メインシステム１００側に転送できる。
【０１１４】
「パケットデータの並行転送動作」
ところで、ＲＡＭ（１）２１２のメモリ領域として、基本的に１通信単位分のパケットデータを保持する領域があれば、上記したパケットの並び替えによる転送動作が可能となる。
【０１１５】
しかしながら、ＲＡＭ（１）２１２のメモリ領域を１通信単位分にすると、再送要求が発生した場合、１通信単位を再送分だけに使うことになり転送効率が低下する。そこで、上記で図５を参照して説明したように、再送される受信データの処理を考慮した場合、少なくとも２通信単位分のパケットを格納するＡ面、Ｂ面のメモリ領域を確保することが必要となる。
【０１１６】
このように、２通信単位分のメモリ領域を確保して転送動作を行う場合、以下の処理手順によって受信、転送動作を実施することにより、２通信単位分のメモリ領域を確保するだけで、毎回再送が発生した場合でも外部からの転送要求に応答し並行転送動作ができる。なお、以下の手順が有効に機能する前提として、ＲＡＭ（１）２１２からメインメモリ１２３へのパケット転送速度は、外部からのパケットを受信するときの通信速度以上であることが条件となる。
【０１１７】
並行転送動作の処理手順として、まず、外部からパケット通信データを受信してから、メインメモリ１２３へ受信したパケットデータを格納するまでの手順があるが、この手順は、上記した実施形態の処理手順（図４）と同じである。
【０１１８】
サブＣＰＵ２１１は、メインＣＰＵ１２１から転送完了割り込みを検出すると、無線通信部２３０に次のパケット通信データの受信が可能であることを通知する。この通知は、メインメモリ１２３へのパケットを格納し、転送が完了した時点で、少なくとも１通信単位分のメモリ領域（図５の例におけるＡ面に当たる領域）は開放されることになるので、サブＣＰＵ２１１はＲＡＭ（１）２１２の空き領域の情報を無線通信部２３０へ通知する。
【０１１９】
無線通信部２３０は、１通信単位分のメモリ領域が確保されていることを確認した上で、送信元に対して受信可能であることを通知する。
【０１２０】
以上の処理手順を実施することにより、ＲＡＭ（１）２１２に格納されたパケットをメインメモリ１２３へ転送している最中であっても、外部からの転送要求を待たせることはなくなる。
【０１２１】
「アービタ（１）内蔵レジスタの設定」
上記「サブコントローラを介して行うパケットデータの転送動作」で基本的な転送動作について説明したように、このシステムでは、サブコントローラ２１０に設けたアービタ（１）２１７内蔵のレジスタの設定によって、ＲＡＭ（１）２１２のメモリ領域に順番が狂って保持されたパケットを並び替えて、メインメモリ１２３に格納することができる。
【０１２２】
また、このパケットの転送制御では、アービタ（１）２１７内蔵のレジスタとしてバースト長（通信単位）、即ち、図３に示した例では８パケット分を備えており、このようにすることで、メインメモリ１２３への転送単位をバースト長（通信単位）として、ＲＡＭ（１）２１２に保持されたパケットのメインメモリ１２３への転送制御を行い、受信からデータを格納するまでのパケットの一連の処理を効率化している。
【０１２３】
ただ、アービタ（１）２１７内蔵のレジスタとして、転送単位をバースト長の８パケット分備える図３に記載した構成をとっても、メインメモリ１２３へ格納するパケットは、必ずしもレジスタ分を用意できるとは限らない。ＲＡＭ（１）２１２のメモリ領域に保持したパケットが、図５に示した状態となった場合、１回目の転送はレジスタ設定分の８パケット分のパケットの転送を行うが、続けて残りの転送を行う場合、メモリ領域（Ｂ）面におけるパケットＮｏ．８〜１２までの実質５パケット分の転送だけでよいのに、無効な３パケット分のデータも送る必要が出てくる。
【０１２４】
そこで、この実施形態では、アービタ（１）２１７内蔵のレジスタ２４１には、どのパケットが最後のパケットであるかを示す機能を付加するための最終パケットデータ判別フラグを追加した。当該フラグは、図３に示すようにレジスタの所定の場所をフラグデータの書き込み場所として設定し、ここにフラグデータを書き込むことで、最後のパケットであることが検出できるようにする。
【０１２５】
これにより、アービタ（１）２１７が、メインシステム１００側にパケットを転送する際に、フラグデータで検出される最終パケットまでを転送制御する。よって無効なパケットの転送がなされることを抑止できる。
【０１２６】
このフラグを用いることで、不要なパケットを転送する必要を無くし、つまり８パケット以下の１〜７パケットのサイズでも必要パケット数分までで転送を終了でき、パケットの連続転送ができる。また、この転送制御によって、メインＣＰＵ１２１の負荷を軽減することができる。
【０１２７】
ところで、サブコントローラ２１０に設けたアービタ（１）２１７内蔵のレジスタの設定は、上記「サブコントローラを介して行うパケットデータの転送動作」で図４の処理フロー（ステップＳ３０７）を参照して説明したように、サブＣＰＵ２１１が行う。この設定を行うために、サブＣＰＵ２１１は、無線通信部２３０が正常な受信パケットをＲＡＭ（１）２１２に転送する際の制御情報を無線通信部２３０から取得し管理する。無線通信部２３０から取得する制御情報は、パケット受信時に各パケットが正常に受信されたか否かのチェックを受け、正常に受信したパケットをＲＡＭ（１）２１２に転送する際の制御情報である。
【０１２８】
サブＣＰＵ２１１が取得する上記制御情報の中には、アービタ（１）２１７内蔵のレジスタの設定に用いるための各パケットのパケット番号（Ｎｏ．）、データサイズ及びＲＡＭ（１）２１２におけるアドレスが含まれる。また、上記レジスタの設定にあたって、サブＣＰＵ２１１は、管理している各パケットの制御情報におけるパケット番号をもとに、どのパケットに最終パケットデータ判別フラグを書き込むかを判断し、該当するパケットにフラグデータを設定する。
【０１２９】
上記のように、サブコントローラ２１０内のサプＣＰＵ２１１が、ＲＡＭ（１）２１２の正常に受信されたパケットの制御情報を無線通信部２３０から取得し、アービタ（１）２１７内蔵のレジスタの設定に用いることで、効率がよく且つ確実な転送が行える。
【０１３０】
次に、ＲＡＭ（１）２１２に格納されたパケットの転送について説明する。図１１は、従来どおりにＲＡＭ（１）２１２に格納されたパケットの転送手順を示した概念図である。図１１に示す例では、並び替えのみ本実施の形態の手法を用いて、Ｐａｃｋｅｔ＿５を取りこぼした場合の処理に、従来の処理手法を用いた例とする。この場合、サブシステム２００側は、Ｐａｃｋｅｔ＿５を挟んで、２回に分けてパケットを転送する。これによりＰａｃｋｅｔ５の空き領域が、メインメモリ１２３上に確保される。しかしながら、この手順では、２回に分けて転送するために転送効率が高くない。
【０１３１】
そこで、本実施の形態では、ダミーパケットを挟んで転送することにした。図１２は、ダミーパケット含めて転送した場合の例を示した図である。この場合、アービタ（１）２１７で並び替えた上、ダミーパケットを挟んで転送した後、並び替え等を行わずにメインメモリ１２３に格納される。その後、メインメモリ１２３は、Ｐａｃｋｅｔ５が転送されてきた後、ダミーパケットによるダミーデータを有効データに書き換えられる。これにより、効率的な転送を行うと共に、適切なデータをメインメモリ１２３に格納することができる。
【０１３２】
次に、ＲＡＭ（１）２１２におけるダミーパケットを転送した後の記憶領域の遷移について説明する。図１３は、ＲＡＭ（１）２１２における上述した記憶領域の遷移を示した図である。図１３左のＲＡＭ（１）２１２の記憶領域は、図１２のＲＡＭ（１）２１２の記憶領域を表している。そして、ＲＡＭ（１）２１２に格納された、ダミーパケットを含むＰａｃｋｅｔ＿０〜Ｐａｃｋｅｔ７までのパケットを転送した後、図１３中央のようにＲＡＭ（１）のＡ面を開放する。なお、Ｂ面のＰａｃｋｅｔ＿１〜Ｐａｃｋｅｔ＿２は、転送済みとなる。そして、再送要求部２５２による再送要求部によって、図１２で取りこぼしたＰａｃｋｅｔ＿５と、Ｐａｃｋｅｔ＿１４以降のパケットが、ＲＡＭ（１）２１２のＡ面に格納される。これによりＰａｃｋｅｔ＿５の再々送が行われる。
【０１３３】
図１４が、ＲＡＭ（１）２１２に格納されたパケットから、パケットの再々送を示した概念図である。図１４に示すようなＲＡＭ（１）２１２において、サブシステム２００側のＲｘＤＭＡＣ２１６が、再々送パケットであるＰａｃｋｅｔ＿５を転送した後、Ｐａｃｋｅｔ＿８から１通信単位分のパケットを転送する。転送されたパケットは、並び替え等が行われることなく、ＰＣＩｅバスを介し、メインメモリ１２３に格納される。これにより、再々送パケットを適切に格納することができる。
【０１３４】
以上で説明した本実施形態に係る受信パケットデータの転送方法の各工程を実行するための手順等を記録したプログラムは周知のコンピュータ読み取り可能な記録媒体例えばＣＤＲＯＭ等に記録しておくことができる。
【０１３５】
本実施の形態では、サブシステム２００でアービタ（１）２１７が設定部２５１による設定に従ってパケットを読み出すため、パケット並び替え等を行う必要がなくなるため、メインシステム側の負荷を軽減できる。また、取りこぼしが発生した際、パケットの再送が行われた場合でも、上述した制御を行うことで、メインシステム側の負荷を軽減できる。また、再送要求の後でもとりこぼした場合に、ダミーパケットを含む１通信単位分のパケットを転送することで、複数回に分けて転送する必要がなくなり、通信効率が向上する。
【図面の簡単な説明】
【０１３６】
【図１】本実施の形態に係る情報処理装置の例としてのＭＦＰのシステム構成を概略的に示すブロック図である。
【図２】図１におけるサブシステムのサブコントローラ内のシステム構成を概略的に示すブロック図である。
【図３】アービタ（１）に内蔵されているレジスタの構成を概念的に示す図である。
【図４】受信したパケットデータをメインシステムのメモリへ格納する転送動作を実行する際の処理フローを示す図である。
【図５】パケットの再送処理が生じた場合に、ＲＡＭ（１）のパケット格納状態を説明する図である。
【図６】従来例１のパケット並び替え手法を示した図である。
【図７】従来例２のパケット並び替え手法を示した図である。
【図８】本実施の形態にかかるパケットの並び替え手法を示した図である。
【図９】再送要求で、次に転送するためのパケットが揃った場合のＲＡＭ（１）２１２の構成を示した図である。
【図１０】再送要求した場合でもＰａｃｋｅｔ＿５を取りこぼした場合のＲＡＭ（１）の構成を示した図である。
【図１１】従来どおりにＲＡＭ（１）に格納されたパケットの転送手順を示した概念図である。
【図１２】ダミーパケット含めて転送した場合の例を示した図である。
【図１３】ＲＡＭ（１）におけるダミーパケットを転送した後の記憶領域の遷移を示した図である。
【図１４】ＲＡＭ（１）に格納されたパケットから、パケットの再々送を示した概念図である。
【符号の説明】
【０１３７】
１００  メインシステム
１１０  メインコントローラ
１２１  メインＣＰＵ
１２３  メインメモリ
２００  サブシステム
２１０  サブコントローラ
２１１  サブＣＰＵ
２１２  ＲＡＭ（１）（ペイロードバッファ）
２１３  ＲＡＭ（２）（ヘッダバッファ）
２１４  ＲＡＭ（３）
２１５  Ｔｘ（送信用）ＤＭＡＣ
２１６  Ｒｘ（受信用）ＤＭＡＣ
２１７  アービタ（１）
２３０  無線通信部
２４１  レジスタ
２５１  設定部
２５２  再送要求部
【図１】
0004554703.tif 000002
【図２】
0004554703.tif 000003
【図３】
0004554703.tif 000004
【図４】
0004554703.tif 000005
【図５】
0004554703.tif 000006
【図６】
0004554703.tif 000007
【図７】
0004554703.tif 000008
【図８】
0004554703.tif 000009
【図９】
0004554703.tif 000010
【図１０】
0004554703.tif 000011
【図１１】
0004554703.tif 000012
【図１２】
0004554703.tif 000013
【図１３】
0004554703.tif 000014
【図１４】
0004554703.tif 000015