(57)【特許請求の範囲】
【請求項１】
自身のプロセッサ、及び、外部のプロセッサよりアクセス可能な共有メモリを介して、前記自身のプロセッサにて動作する自己タスクと、外部のプロセッサにて動作する外部タスクとの間で、複数の論理チャネルを用いてデータ通信を行う通信装置であって、
前記外部タスクの動作により前記外部のプロセッサから前記共有メモリに書き込まれたデータを各論理チャネル毎に格納するための受信バッファと、
前記外部のプロセッサからチャネルＩＤに関する情報を含むデータが前記共有メモリに書き込まれると、このデータを前記共有メモリから読み出し、当該データ内の前記チャネルＩＤに関する情報に基づき、当該データを、対応する論理チャネルの前記受信バッファに書き込むデータ取込手段と、
前記データ取込手段が前記受信バッファに前記データを書き込むと、この受信バッファに対応する論理チャネルを使用する自己タスクに、この受信バッファに格納された前記データを受け渡すデータ受渡手段と、
前記自己タスクにより生成された送信用データとチャネルＩＤに関する情報とを含むデータを、前記共有メモリに書き込むデータ送出手段と、
前記複数の論理チャネルの夫々について、前記受信バッファに格納可能な当該論理チャネルのデータ容量に関する自己容量情報を、前記外部のプロセッサに通知する受信容量通知手段と、
前記外部タスクが前記共有メモリより取り込み可能な前記論理チャネル毎のデータ容量に関する外部容量情報を、前記外部のプロセッサから取得し、この外部容量情報に基づき、前記データ送出手段を制御して、前記外部タスクがデータを前記共有メモリより取り込み可能な範囲内で、前記データ送出手段に前記データを前記共有メモリに書き込ませる通信制御手段と、
を備えたことを特徴とする通信装置。
【請求項２】
前記受信容量通知手段は、前記データ送出手段に前記自己容量情報を前記共有メモリに書き込ませることにより、前記自己容量情報を、前記共有メモリを介して前記外部のプロセッサに通知し、
前記通信制御手段は、前記外部のプロセッサから前記共有メモリに書き込まれた前記外部容量情報を、前記データ受渡手段を介して取得することにより、前記外部容量情報を、前記外部のプロセッサから前記共有メモリを介して取得すること
を特徴とする請求項１記載の通信装置。
【請求項３】
前記受信容量通知手段は、
前記外部タスクとの間で通信を開始する際に、当該通信で用いる論理チャネルに対応する前記受信バッファに格納可能な初期データ容量を、前記外部のプロセッサに通知する初期容量通知手段と、
前記論理チャネル毎に、当該論理チャネルに対応する前記受信バッファに格納されたデータを前記データ受渡手段が前記自己タスクに受け渡すことにより新たに受信バッファに格納可能となった追加データ容量を、所定の契機で前記外部のプロセッサに通知する追加容量通知手段と、
を備え、
前記自己容量情報として、前記論理チャネル毎に、前記初期データ容量と、前記追加データ容量とを、前記外部のプロセッサに通知する構成にされていることを特徴とする請求項１又は請求項２に記載の通信装置。
【請求項４】
前記外部タスクとの間で行われる前記論理チャネル毎のデータ通信は、パケットにより構成される前記チャネルＩＤに関する情報を含むデータを、前記共有メモリに書き込む動作、及び、前記外部のプロセッサによって前記共有メモリに書き込まれた前記パケットを取り込む動作を通じて行われ、
前記初期容量通知手段は、前記初期データ容量として、前記通信で用いる論理チャネルに対応する前記受信バッファに格納可能な最大パケット数と、そのパケット長とを、前記外部のプロセッサに通知し、
前記追加容量通知手段は、前記追加データ容量として、前記論理チャネル毎に、当該論理チャネルに対応する前記受信バッファに格納されたパケットを前記データ受渡手段が自己タスクに受け渡すことにより新たに受信バッファに格納可能となったパケット数を、前記外部のプロセッサに通知することを特徴とする請求項３に記載の通信装置。
【請求項５】
前記外部タスクとの間で行われる前記論理チャネル毎のデータ通信は、パケットにより構成される前記チャネルＩＤに関する情報を含むデータを、前記共有メモリに書き込む動作、及び、前記外部タスクによって前記共有メモリに書き込まれた前記パケットを取り込む動作を通じて行われ、
前記複数の論理チャネルは、
前記外部タスクと前記自己タスクとの間の通信制御に必要な処理の実行を指令するコマンドを含むパケットを送受信するための第一チャネル、
前記コマンドを除くデータであって、前記外部タスクと前記自己タスクとの間で、単一パケットにて構成可能なデータを送受信するための第二チャネル、及び、
前記コマンドを除くデータであって、前記外部タスクと前記自己タスクとの間で、複数パケットにて構成されるデータを送受信するための第三チャネル
のいずれかのチャネルタイプに区分されており、
更に、当該装置において、
前記第三チャネルに区分されている論理チャネルの前記受信バッファは、複数パケットを格納可能に構成され、
前記通信制御手段は、前記データ送出手段に、前記第三チャネルに区分されている論理チャネルの前記チャネルＩＤに関する情報を含むパケットを、前記共有メモリに書き込ませる場合に、当該論理チャネルについての前記外部容量情報を前記外部のプロセッサから取得して、この外部容量情報に基づき、前記データ送出手段を制御することを特徴とする請求項１〜請求項４のいずれかに記載の通信装置。
【請求項６】
前記第一チャネルに区分されている論理チャネルの前記チャネルＩＤに関する情報を含むパケットが、前記受信バッファに書き込まれた場合には、前記データ受渡手段によって、当該パケットに含まれるコマンドに従った処理を実行し、前記第二チャネル及び第三チャネルのいずれかに区分されている論理チャネルの前記チャネルＩＤに関する情報を含むパケットが、前記受信バッファに書き込まれた場合には、前記データ受渡手段によって、当該論理チャネルを使用する自己タスクにパケットを受け渡すことで、この自己タスクに、当該パケットに対応した処理を実行させることを特徴とする請求項５記載の通信装置。
【請求項７】
前記通信制御手段は、前記データ送出手段に、前記第三チャネルに区分されている論理チャネルの前記チャネルＩＤに関する情報を含むパケットを、前記共有メモリに書き込ませる場合、当該論理チャネルにおいて前記外部タスクが前記共有メモリより取り込み可能なパケット数と、そのパケット長とを、前記外部容量情報として、取得すると共に、前記データ送出手段を制御して、前記データ送出手段に、このパケット数及びパケット長の範囲内で前記パケットを前記共有メモリに書き込ませることを特徴とする請求項５又は請求項６に記載の通信装置。
【請求項８】
プロセッサを備える第一及び第二の処理実行装置、並びに、当該第一及び第二の処理実行装置よりアクセス可能で前記第一の処理実行装置と前記第二の処理実行装置との間に介在する共有メモリを備え、前記共有メモリを介して、前記第一の処理実行装置のプロセッサにて動作するタスクと、前記第二の処理実行装置のプロセッサにて動作するタスクとの間で、複数の論理チャネルを用いてデータ通信を行う通信システムであって、
前記第一の処理実行装置は、
前記第二の処理実行装置から前記共有メモリに書き込まれたデータを前記論理チャネル毎に格納するための受信バッファと、
前記第二の処理実行装置からチャネルＩＤに関する情報を含むデータが前記共有メモリに書き込まれると、このデータを前記共有メモリから読み出し、当該データ内の前記チャネルＩＤに関する情報に基づき、当該データを、対応する論理チャネルの前記受信バッファに書き込むデータ取込手段と、
前記データ取込手段が前記受信バッファに前記データを書き込むと、自装置のプロセッサにて動作するタスクであって、その受信バッファに対応する論理チャネルを使用するタスクに、前記受信バッファに格納された前記データを受け渡すデータ受渡手段と、
前記複数の論理チャネルの夫々について、前記受信バッファに格納可能な当該論理チャネルのデータ容量に関する受信容量情報を、前記第二の処理実行装置に通知する受信容量通知手段と、
を備え、
前記第二の処理実行装置は、
自装置の前記プロセッサにて動作するタスク、により生成された送信用データとチャネルＩＤに関する情報とを含むデータを、前記共有メモリに書き込むデータ送出手段と、
前記第一の処理実行装置から前記受信容量情報を取得し、この受信容量情報に基づき、前記データ送出手段を制御して、前記第一の処理実行装置がデータを前記共有メモリより取り込み可能な範囲内で、前記データ送出手段に前記データを前記共有メモリに書き込ませる通信制御手段と、
を備えたことを特徴とする通信システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、共有メモリを介して、自身のプロセッサにて動作する自己タスクと、外部のプロセッサにて動作する外部タスクとの間で、複数の論理チャネルを用いてデータ通信を行う通信装置に関する。
【０００２】
【従来の技術】
従来より、通信装置としては、パーソナルコンピュータや多機能ファクシミリ等に組み込まれるＬＡＮ（ローカルエリアネットワーク）カードが知られている。
【０００３】
この種のＬＡＮカードは、自身内蔵のＣＰＵと、上記多機能ファクシミリ本体等に内蔵されたＣＰＵと、からアクセス可能な共有メモリを備えており、ＬＡＮから受信した通信データを共有メモリに書き込んだり、上記多機能ファクシミリ本体等から共有メモリに書き込まれた通信データを読み出してＬＡＮ上に送出する構成にされている。
【０００４】
一方、多機能ファクシミリ本体は、内蔵のＣＰＵにて、ＬＡＮカード側から共有メモリに書き込まれた通信データを読み込んで、本体側の内蔵メモリに書き込んだり、内蔵メモリから取り出した通信データを共有メモリに書き込む構成にされている。
【０００５】
また、従来の通信装置は、上記共有メモリを介して多重通信可能とするために、複数同時動作可能な論理チャネルを用いて、通信制御を行っている。
【０００６】
【発明が解決しようとする課題】
しかしながら、上記従来の通信装置では個々の論理チャネルの制御方法を、その論理チャネルを使用するアプリケーションで指定しなければならない事が問題となっていた。
【０００７】
つまり、共有メモリを使用した通信方法では、装置全体として送信側が共有メモリに書き込む通信データのバイト数と、受信側が共有メモリから読み出す通信データのバイト数との調整が上手く行えていない場合に、共有メモリ上に通信データが滞留してしまい、以後のデータの送受信が滞ってしまうといった問題が発生するが、従来では、複数の論理チャネルが同時動作する場合に、夫々の論理チャネルを対応するアプリケーションで個別に制御しなければならないため、このような問題を解決するようにアプリケーションでの通信制御方法を取り決めるのが非常に難しかった。
【０００８】
本発明は、こうした問題に鑑みなされたものであり、外部のプロセッサとの間で、共有メモリ内にデータが長時間滞留しないようにして通信を行うことが容易に可能な通信装置を提供することを目的とする。
【０００９】
【課題を解決するための手段】
かかる目的を達成するためになされた請求項１に記載の発明は、自身のプロセッサ、及び、外部のプロセッサよりアクセス可能な共有メモリを介して、自身のプロセッサにて動作する自己タスクと、外部のプロセッサにて動作する外部タスクとの間で、複数の論理チャネルを用いてデータ通信を行う通信装置であって、外部タスクの動作により外部のプロセッサから共有メモリに書き込まれたデータを各論理チャネル毎に格納するための受信バッファを備える。
【００１０】
また、この通信装置は、データ取込手段及びデータ受渡手段を備えており、外部のプロセッサからチャネルＩＤに関する情報を含むデータが共有メモリに書き込まれると、データ取込手段にて、その書き込まれたデータを共有メモリから読み出して、当該データ内のチャネルＩＤに関する情報に基づき、当該データを、対応する論理チャネルの受信バッファに書き込み、データ取込手段による上記データの書き込みが完了すると、データ受渡手段にて、その受信バッファに対応する論理チャネルを使用する自己タスクに、受信バッファに格納されたデータを受け渡す構成にされている。
【００１１】
この他、通信装置は、受信容量通知手段を備えており、当該受信容量通知手段にて、複数の論理チャネルの夫々について、受信バッファに格納可能な当該論理チャネルのデータ容量に関する自己容量情報を、外部のプロセッサに通知する構成にされている。
更に、この通信装置は、データ送出手段及び通信制御手段を備えており、通信制御手段にて、外部タスクが共有メモリより取り込み可能な論理チャネル毎のデータ容量に関する外部容量情報を、外部のプロセッサから取得し、この外部容量情報に基づき、データ送出手段を制御して、外部タスクがデータを共有メモリより取り込み可能な範囲内で、データ送出手段に、自己タスクにより生成された送信用データとチャネルＩＤに関する情報とを含むデータを、共有メモリに書き込ませる構成にされている。
【００１２】
この通信装置によれば、通信制御手段によって、論理チャネル毎に、データ送出手段による共有メモリ上へのデータ書き込みを、受信側の外部タスクがデータを共有メモリより取り込み可能な範囲内に制限することができるため、複数の論理チャネルが同時動作している状態で、各論理チャネルでのデータ書き込み量を適切に管理することができる。
【００１３】
したがって、少なくとも当該通信装置側からのデータ書き込みにより、共有メモリに長時間データが格納されたままの状態になるのを防止することができて、複数の論理チャネルを用いて、外部のプロセッサとの間で効率よく通信を行うことができる。また、通信制御手段が、このような通信制御を統括して行うために、アプリケーション実行時にプロセッサが実行するタスクで個々の論理チャネルの通信制御方法を指定しなくてもよく、アプリケーション側のメモリデバイスアクセス用のインターフェースを単純化することができる。
【００１４】
また、本発明によれば、外部のプロセッサを備えた外部装置を、本発明の通信装置と同様の手順で、共有メモリへのデータ書き込み、及び、共有メモリからのデータ取り込みを行う構成とすることで（即ち、外部装置を、本発明の通信装置と同様の構成にすることで）、当該通信装置側からのデータ書き込みにより共有メモリに長時間データが格納されたままになるのを防止できるだけでなく、外部のプロセッサが共有メモリにデータを書き込むことにより、共有メモリにデータが長時間滞留するのを防止することができる。この結果、本発明によれば、外部タスクと自己タスクとの間で、効率よく双方向通信を行うことができる。
【００１５】
尚、受信容量通知手段は、データ送出手段に自己容量情報を共有メモリに書き込ませることにより、自己容量情報を、共有メモリを介して外部のプロセッサに通知し、通信制御手段は、外部のプロセッサから共有メモリに書き込まれた外部容量情報を、データ受渡手段を介して取得することにより、外部容量情報を、外部のプロセッサから共有メモリを介して取得する構成にすることができる（請求項２）。
【００１６】
この他、受信容量通知手段は、請求項３に記載のように構成されているのが好ましい。
請求項３に記載の通信装置の受信容量通知手段は、初期容量通知手段と、追加容量通知手段と、を備えており、自己タスクが外部タスクとの間で通信を開始する際に、初期容量通知手段にて、当該通信で用いる論理チャネルに対応する受信バッファに格納可能な初期データ容量を、外部のプロセッサに通知し、以後、追加容量通知手段にて、当該論理チャネルに対応する受信バッファに格納されたデータをデータ受渡手段が自己タスクに受け渡すことにより新たに受信バッファに格納可能となった追加データ容量を、所定の契機で外部のプロセッサに通知する構成にされている。
【００１７】
この通信装置においては、自己容量情報として、初期データ容量を外部のプロセッサに通知した後に、所定期間毎に追加データ容量を外部のプロセッサに通知することができるため、自己容量情報の通知動作量を十分に抑制することができる。この結果、本発明の通信装置（請求項３）によれば、ハードウェア資源を有効に活用して、円滑に外部タスクと自己タスクとの間で双方向通信を行うことができる。
【００１８】
また、外部タスクとの間で行われる論理チャネル毎のデータ通信が、パケットにより構成されるチャネルＩＤに関する情報を含むデータを共有メモリに書き込む動作、及び、外部のプロセッサによって共有メモリに書き込まれたパケットを取り込む動作を通じて行われる場合、初期容量通知手段及び追加容量通知手段は、次のように構成されるとよい。
即ち、初期容量通知手段は、請求項４記載のように、初期データ容量として、通信で用いる論理チャネルに対応する受信バッファに格納可能な最大パケット数と、そのパケット長とを、外部のプロセッサに通知し、追加容量通知手段は、追加データ容量として、当該論理チャネルに対応する受信バッファに格納されたパケットをデータ受渡手段が自己タスクに受け渡すことにより新たに受信バッファに格納可能となったパケット数を、外部のプロセッサに通知する構成にされるとよい。
【００１９】
このようにすれば、外部のプロセッサに、パケット単位で共有メモリへのパケットの書き込み量を制御させることができるので、外部のプロセッサの通信制御にかかる構成を簡素化することができる。
【００２０】
また、上記通信装置においては、受信容量通知手段が、データ取込手段が共有メモリより受信バッファに格納したパケット数と、当該装置の受信バッファに格納可能な（取り込み可能な）パケット数とに基づき、所定の契機で、追加容量通知手段にて追加データ容量を通知するように構成されているのが良い。このようにすれば、追加データ容量を効率よく外部のプロセッサに通知することができて便利である。
【００２１】
この他、上記通信装置（請求項１〜請求項４）においては、請求項５に記載のように、論理チャネルの夫々を、第一チャネル、第二チャネル、第三チャネルのいずれかのチャネルタイプに区分して、通信制御手段による夫々の論理チャネルの通信制御方法を変更するのが好ましい。
【００２２】
請求項５に記載の通信装置においては、外部タスクと自己タスクとの間の通信制御に必要な処理の実行を指令するコマンドを含むパケットを送受信するための論理チャネルを、第一チャネルに区分し、上記コマンドを除くデータであって、外部タスクと自己タスクとの間で、単一パケットにて構成可能なデータを送受信するための論理チャネルを、第二チャネルに区分している。
【００２３】
また、上記コマンドを除くデータであって、外部タスクと自己タスクとの間で、複数パケットにて構成される送信用データを送受信するための論理チャネルを、第三チャネルに区分し、更に、第三チャネルに区分した論理チャネルの受信バッファを、複数パケットを格納可能な構成にしている。
この他、通信制御手段は、データ送出手段に、第三チャネルに区分されている論理チャネルのチャネルＩＤに関する情報を含むパケットを、共有メモリに書き込ませる場合に、当該論理チャネルについての外部容量情報を外部のプロセッサから取得し、この外部容量情報に基づき、データ送出手段を制御する構成にされている。
【００２４】
つまり、この通信装置においては、外部のプロセッサから外部容量情報を取得してこれに基づき通信制御手段にて通信制御を行う方法を、複数パケットの送信用データを共有メモリを介して送受信するための第三チャネルに限って適用することにより、外部容量情報の取得動作を必要不可欠な分だけに抑制している。したがって、この通信装置によれば、外部容量情報を、共有メモリを介して授受する場合等において、共有メモリ上の限られたメモリ資源を有効に活用して、円滑に外部タスクとの間で通信を行うことができる。
【００２５】
尚、ここで更に、この第一チャネル又は第二チャネルに属する各論理チャネル毎の受信バッファを、唯一のパケットを格納する構成にすれば、明示的にフロー制御しなくても、パケットを受信した順に、そのパケットを自己タスクに受け渡すことができるので、例えば、第一チャネルを使用する上記コマンドについては、送信元から送信されてきた順に、これを処理することができる。
【００２６】
この他、請求項５に記載の通信装置は、請求項６のように、第一チャネルに区分されている論理チャネルのチャネルＩＤに関する情報を含むパケットが、受信バッファに書き込まれた場合には、データ受渡手段によって、当該パケットに含まれるコマンドに従った処理を実行し、第二チャネル及び第三チャネルのいずれかに区分されている論理チャネルのチャネルＩＤに関する情報を含むパケットが、受信バッファに書き込まれた場合には、データ受渡手段によって、当該論理チャネルを使用する自己タスクにパケットを受け渡すことで、この自己タスクに、当該パケットに対応した処理を実行させる構成にされるとよい。
【００２７】
この通信装置によれば、上記コマンドを迅速に実行することができる結果、通信制御を円滑に行うことができる。
【００２８】
また、請求項７に記載の通信装置は、通信制御手段が、データ送出手段に、第三チャネルに区分されている論理チャネルのチャネルＩＤに関する情報を含むパケットを、共有メモリに書き込ませる場合に、当該論理チャネルにおいて外部タスクが共有メモリより取り込み可能なパケット数と、そのパケット長とを、外部容量情報として取得すると共に、データ送出手段を制御して、データ送出手段に、そのパケット数及びパケット長の範囲内でパケットを共有メモリに書き込ませる構成にされたものである。
【００２９】
このような構成の通信装置においては、パケット単位でデータ送出手段の共有メモリへのパケットの書き込み量を制御するように通信制御手段を構成すればよいので、通信制御手段の通信制御にかかる構成を簡素化することができて、通信制御手段をＣＰＵによる自己タスクとして動作させる場合においては、通信制御のためのＣＰＵの処理負荷を抑制することができる。つまり、本発明の通信装置によれば、効率よくデータ送出手段の制御を行うことができる。
【００３０】
また、請求項８記載の発明は、プロセッサを備える第一及び第二の処理実行装置、並びに、当該第一及び第二の処理実行装置よりアクセス可能で第一の処理実行装置と第二の処理実行装置との間に介在する共有メモリを備え、共有メモリを介して、第一の処理実行装置のプロセッサにて動作するタスクと、第二の処理実行装置のプロセッサにて動作するタスクとの間で、複数の論理チャネルを用いてデータ通信を行う通信システムであって、第一の処理実行装置及び第二の処理実行装置が次のように構成されたものである。
即ち、第一の処理実行装置は、第二の処理実行装置から共有メモリに書き込まれたデータを論理チャネル毎に格納するための受信バッファと、第二の処理実行装置からチャネルＩＤに関する情報を含むデータが共有メモリに書き込まれると、このデータを共有メモリから読み出し、当該データ内のチャネルＩＤに関する情報に基づき、当該データを、対応する論理チャネルの受信バッファに書き込むデータ取込手段と、データ取込手段が受信バッファにデータを書き込むと、自装置のプロセッサにて動作するタスクであって、その受信バッファに対応する論理チャネルを使用するタスクに、受信バッファに格納されたデータを受け渡すデータ受渡手段と、複数の論理チャネルの夫々について、受信バッファに格納可能な当該論理チャネルのデータ容量に関する受信容量情報を、第二の処理実行装置に通知する受信容量通知手段と、を備える。
【００３１】
また、第二の処理実行装置は、自装置のプロセッサにて動作するタスク、により生成された送信用データとチャネルＩＤに関する情報とを含むデータを、共有メモリに書き込むデータ送出手段と、第一の処理実行装置から受信容量情報を取得し、この受信容量情報に基づき、データ送出手段を制御して、第一の処理実行装置がデータを共有メモリより取り込み可能な範囲内で、データ送出手段にデータを共有メモリに書き込ませる通信制御手段と、を備える。この通信システムによれば、請求項１と同様の理由により、各論理チャネルでのデータ書き込み量を適切に管理することができ、第一及び第二の処理実行装置間で、複数の論理チャネルを用いて効率よく通信を行うことができる。
【００３２】
【発明の実施の形態】
図１は、本発明が適用されたファクシミリ１０の構成を表すブロック図である。
図１に示すように、本実施例のファクシミリ１０は、主に、読取部１１と、印刷部１３と、ユーザインターフェース（Ｉ／Ｆ）１５と、電話回線接続部１７と、ＬＡＮインターフェース（Ｉ／Ｆ）１９と、ＵＳＢインターフェース（Ｉ／Ｆ）２１と、制御部２３と、から構成されており、読取部１１やＬＡＮＩ／Ｆ１９を介して取得した画像データを公衆電話回線網を通じて外部のファクシミリに送信する本来のファックス機能の他に、紙面上の画像を複製印刷するコピー機能、ＬＡＮ（ローカルエリアネットワーク）を介してパソコン等の外部装置から送信されてきた画像データを紙に印刷するプリンタ機能等を備えている。
【００３３】
詳述すると、読取部１１は、紙面上に印刷された文字、図形等からなる画像を、光を照射することにより読み取って、電気的な信号に変換するものであり、所謂スキャナとして機能する。また特に、この読取部１１は、連続的に複数の紙から画像を読み取るための紙送り機構を備えている。この読取部１１は、例えば利用者が本実施例のファクシミリ１０のファックス機能を使用する際やコピー機能を使用する際に動作し、動作することにより読み取った画像データを、制御部２３に送信する。
【００３４】
続いて、印刷部１３は、給紙、排紙機構を備え、読取部１１から取得した画像データ、電話回線接続部１７を介して外部のファクシミリから送信されてきた画像データ、ＬＡＮＩ／Ｆ１９を介して外部のパソコン等から送信されてきた印刷用データなどに基づき、画像や文章などを紙面に印刷するためのものである。特に、本実施例における印刷部１３は、写真印刷等ができるように構成されており、更には、画像等を連続的に紙面印刷するための紙送り機構を備えている。
【００３５】
ユーザＩ／Ｆ１５は、液晶ディスプレイ等からなる表示部１５ａと、キースイッチなどからなる操作部１５ｂと、から構成されており、例えば、利用者の外部操作に対応する指令を、操作部１５ｂより制御部２３へ入力したり、制御部２３から送信されてきたメッセージ等を、表示部１５ａに表示する。
【００３６】
続いて、電話回線接続部１７は、当該ファクシミリ１０を公衆電話回線網に接続するためのものである。つまり例えば、電話回線接続部１７は、制御部２３からの入力信号に基づき、当該ファクシミリ１０を、ファックス送付先となる外部のファクシミリに公衆電話回線網を介して接続して、読取部１１で紙面から読み取った画像データを外部のファクシミリに送信する。
【００３７】
また、ＬＡＮＩ／Ｆ１９は、当該ファクシミリ１０をＬＡＮに接続するためのものであり、ＬＡＮを介して外部のパソコン等と双方向通信を行うことができるようにされている。例えば、ＬＡＮＩ／Ｆ１９は、ＴＣＰ／ＩＰやＩＰＸ／ＳＰＸ等の通信方式にて、外部装置（パソコン等）から画像データ等を取得し、これを制御部２３に入力したり、制御部２３からの指令に基づき、当該ファクシミリ１０の動作状態などを外部装置（パソコン等）に通知する。
【００３８】
この他、ＵＳＢ（Universal Serial Bus）Ｉ／Ｆ２１は、利用者の外部操作により自身にパソコンなどの外部装置を接続して、その外部装置との間で通信を行うことにより、パソコンと当該ファクシミリとの間でデータ通信を行うためのものである。このＵＳＢＩ／Ｆ２１は、基本的に、ＬＡＮＩ／Ｆ１９と同様の目的で使用されるものであるが、特にＬＡＮに接続できないパソコン等を当該ファクシミリ１０に接続する場合に利用される。
【００３９】
そして、制御部２３は、当該ファクシミリ１０内の各部を統括制御するためのものであり、ＣＰＵ２５や、ＣＰＵ２５からアクセス可能でプログラム等を格納するＲＯＭ２７（例えば、フラッシュメモリ）、プログラム動作に必要な各種データを格納するための作業領域等として機能するＤＲＡＭ２９、などを備えている。
【００４０】
ここで、この制御部２３及び上記ＬＡＮＩ／Ｆ１９の詳細構成について図２を用いて説明する。尚、図２は、制御部２３及び上記ＬＡＮＩ／Ｆ１９の詳細構成を表すブロック図である。また、図３は、共有メモリとしてのデュアルポートＳＲＡＭ４０（Dual-Port SRAM）のデュアルポートメモリ領域及びＳＲＡＭセマフォ領域の構成を表す説明図である。
【００４１】
ＬＡＮＩ／Ｆ１９は、主に、ＣＰＵ３１と、ＣＰＵ３１にて動作するプログラムなどを記憶するためのＲＯＭ３３と、補助記憶用のＥＥＰＲＯＭ３５と、ＣＰＵにて動作するプログラムが作業領域などの目的で使用するＤＲＡＭ３７と、ＬＡＮＩ／Ｆを外部のＬＡＮに接続してメディアアクセス制御（ＭＡＣ）等を行うためのネットワーク制御用デバイス３９と、制御部２３とＬＡＮＩ／Ｆ１９の間で通信を行う際にデータを中継するためのデュアルポートＳＲＡＭ４０（以下、単に「ＳＲＡＭ」と表現する。）と、を備えており、ＣＰＵ３１に上述した全てのデバイス３３〜４０が接続された構成にされている。
【００４２】
ＳＲＡＭ４０は、２つの入出力制御機構を持つメモリデバイスで、制御部２３側のＣＰＵ２５に繋がるバスと、ＬＡＮI／Ｆ１９側のＣＰＵ３１に繋がるバスとに接続されている。即ち、ＳＲＡＭ４０は、制御部２３のＣＰＵ２５及びＬＡＮＩ／Ｆ１９のＣＰＵ３１からアクセス可能に構成されている。
【００４３】
また、このＳＲＡＭ４０は、図３に示すように、デュアルポートメモリとして機能するデュアルポートメモリ領域と、制御部２３のＣＰＵ２５及びＬＡＮＩ／Ｆ１９のＣＰＵ３１からのアクセスに対して排他制御を行うためのＳＲＡＭセマフォ領域と、から構成されている。尚、図３は、デュアルポートＳＲＡＭ４０の構成を表す説明図である。
【００４４】
デュアルポートメモリ領域は、ブロック・データ・バッファと、Ｕｒｇｅｎｔコマンド領域と、Ｒ／Ｗセマフォ領域と、第一割込要求設定領域と、第二割込要求設定領域と、その他の予約領域（図示せず）と、から構成されている。
ブロック・データ・バッファは、制御部２３とＬＡＮＩ／Ｆ１９との間で通信を行う際に、送信側（制御部２３若しくはＬＡＮＩ／Ｆ１９）から送信されてきた送信用データを含むパケットを一時格納して、受信側（ＬＡＮＩ／Ｆ１９若しくは制御部２３）に受け渡すためのデータバッファ領域である。本実施例では、１ブロック当たり５１２バイトで区画された１５ブロック分の領域が確保されている。尚、このブロック・データ・バッファは、送信されてきた個々のパケットを、１つのブロック又は複数のブロックにまたがって格納する（詳しくは後述）。
【００４５】
続いて、Ｕｒｇｅｎｔコマンド領域は、ＬＡＮＩ／Ｆ１９側からファクシミリ１０本体へ電源リセット要求などの特殊なコマンドを入力するための領域である。このＵｒｇｅｎｔコマンド領域は、通常のデータ通信の際には使用されないようになっており、ＬＡＮＩ／Ｆ１９からコマンドを書き込むための領域と、制御部２３側からコマンドを書き込むための領域とに、区分されている。
【００４６】
Ｒ／Ｗセマフォ領域は、上記１５ブロックに区画されたブロック・データ・バッファの各ブロックへのアクセスを排他制御し、更には、各ブロックにおいて、データが書き込まれた順序で、読み出しを行うためのものであり、ブロック・データ・バッファの１５個のブロックに対応して、Ｒ／Ｗセマフォを１５個備えている。
【００４７】
各Ｒ／Ｗセマフォは、対応ブロックの書き込み側を識別するための書き込み側識別情報を格納する２ビットの書き込み側識別領域と、対応ブロックのデータ書き込み若しくは読み出し状態を示す状態識別情報を格納するための１４ビットの状態識別領域と、送信側（ＬＡＮＩ／Ｆ１９又は制御部２３）が電源オン後の最初の書き込みをゼロとして以後ブロック・データ・バッファにデータの書き込みを行う度にカウント（１ずつ加算）した番号を、ブロックデータの書き込み順を表すシーケンシャル番号として格納するための１６ビット（２バイト）のシーケンシャル番号領域と、から構成されている。
【００４８】
尚、上記書き込み側識別領域には、書き込み側識別情報として、対応ブロックが空き状態（即ち、対応ブロックにデータが格納されていない状態）であることを示す”空き”情報、対応ブロックに格納されているデータが制御部２３側（換言すると、ファクシミリ本体側）から書き込まれたデータであることを示す”本体側書き込み”情報、対応ブロックに格納されているデータがＬＡＮＩ／Ｆ１９側から書き込まれたデータであることを示す”ＬＡＮ側書き込み”情報、のいずれかの情報が格納されている。
【００４９】
また、上記状態識別領域には、状態識別情報として、対応ブロックが空き状態であることを示す”空き”情報、対応ブロックにデータを書き込み途中であることを示す”書き込み中”情報、データの書き込みが完了し読み出し待ち状態であることを示す”書き込み完了”情報、対応ブロックからデータを読み出し中であることを示す”読み出し中”情報、のいずれかの情報が格納されている。
【００５０】
この他、第一割込要求設定領域は、ＬＡＮＩ／Ｆ１９から制御部２３側（本体側）への割込要求信号を格納するための領域である。つまり例えば、ＬＡＮＩ／Ｆ１９がこの第一割込要求設定領域へ所定のデータを書き込むことにより割込要求信号をセットすると、制御部２３は、この領域内のデータを読み出すことにより割込要求に応答して、割込要求信号をクリアする。また、第二割込要求設定領域は、制御部２３からＬＡＮＩ／Ｆ１９側への割込要求信号を格納するための領域である。
【００５１】
また、ＳＲＡＭセマフォ領域は、ＳＲＡＭ４０へのアクセスに対して排他制御を行うためのセマフォ機能を実現するために確保されている領域であり、Ｒ／Ｗセマフォ領域用のＳＲＡＭセマフォと、Ｕｒｇｅｎｔコマンド領域用のＳＲＡＭセマフォと、第一割込要求設定領域用のＳＲＡＭセマフォと、第二割込要求設定領域用のＳＲＡＭセマフォと、その他の予約領域（図示せず）と、から構成されている。
【００５２】
各ＳＲＡＭセマフォは、片方（制御部２３又はＬＡＮＩ／Ｆ１９）からＳＲＡＭセマフォ取得時の値（以下、「取得値」とする。）が書き込まれると、他方にに、ＳＲＡＭセマフォ解放時の値（以下、「解放値」とする。）を返すように構成されており、ＳＲＡＭセマフォ取得値を書き込んだ側から解放値を入力しない限り、他方からはＳＲＡＭセマフォ取得値を書き込めない（即ち、ＳＲＡＭセマフォを取得できない）ようになっている。
【００５３】
詳述すると、Ｒ／Ｗセマフォ領域用ＳＲＡＭセマフォは、Ｒ／Ｗセマフォ領域へのアクセスを排他制御するためのセマフォであり、本実施例のファクシミリ１０においては、後述するＳＲＡＭＩ／Ｆ部により、制御部２３及びＬＡＮＩ／Ｆ１９の内、このＳＲＡＭセマフォを取得した側のみが、Ｒ／Ｗセマフォ領域にアクセスすることができるようにされている。
【００５４】
また、Ｕｒｇｅｎｔコマンド領域用ＳＲＡＭセマフォは、制御部２３及びＬＡＮＩ／Ｆ１９からのＵｒｇｅｎｔコマンド領域へのアクセスを排他制御するためのセマフォである。
この他、第一割込要求設定領域用ＳＲＡＭセマフォは、第一割込要求設定領域へのアクセスを排他制御するためのセマフォ、第二割込要求設定領域用ＳＲＡＭセマフォは、第二割込要求設定領域へのアクセスを排他制御するためのセマフォである。
【００５５】
続いて、図４は、制御部２３のＣＰＵ２５で動作する各タスクと、ＬＡＮＩ／Ｆ１９のＣＰＵ３１にて動作する各タスクとの間のデータ通信方法（データ受渡方法）を表した機能図である。
制御部２３では、ＲＯＭ２７内にアプリケーション群やプロトコル部に対応する各種プログラム、ＳＲＡＭＩ／Ｆ部に対応する各種プログラムが格納されており、ＣＰＵ２５は、これらを読み出すことにより各種タスクを実行している。同様に、ＬＡＮＩ／Ｆ１９のＣＰＵ３１は、ＲＯＭ３３内に格納されているアプリケーション群、プロトコル部に相当する各種プログラム、ＳＲＡＭＩ／Ｆ部に対応する各種プログラム、を読み出して、各種タスクを実行している。
【００５６】
ここで、ＳＲＡＭＩ／Ｆ部は、制御部２３のＣＰＵ２５にて動作するタスクとＬＡＮＩ／Ｆ１９のＣＰＵ３１にて動作するタスクとの間で通信を行う際に、ＣＰＵ２５，３１がＳＲＡＭ４０にアクセスして送信用データを含むパケットを書き込んだり、読み出したりするための各ＣＰＵ２５，３１にて動作するプログラム群である（詳細は後述）。
【００５７】
また、プロトコル部は、ＳＲＡＭＩ／Ｆ部に対応するプログラムを呼び出して、それらのプログラムで、パケットをＳＲＡＭ４０上に書き込んだり、読み出したりする際の手順を記述したプログラム群（換言すると、制御部２３とＬＡＮＩ／Ｆ１９との間の通信を制御するための通信制御用のプログラム群）である。
【００５８】
つまり例えば、ＣＰＵ２５，３１は、プロトコル部に対応する各種プログラムを実行することにより、アプリケーション群がＤＲＡＭ２９，３７上に書き込んだ送信用データを取得すると共に、所定の手順でＳＲＡＭＩ／Ｆ部に対応するデータ書き込み用プログラム（後述するＳＲＡＭＩ／Ｆデータ書き込み処理）を実行して、ＳＲＡＭ４０へデータ（パケット）を書き込む。また一方で、定期的にＳＲＡＭＩ／Ｆ部のデータ読み込み用プログラム（後述するＳＲＡＭＩ／Ｆデータ読み出し処理）を実行して、送信側からＳＲＡＭ４０上に書き込まれたデータ（パケット）を読み出し、これをＤＲＡＭ２９，３７上に確保された受信パケット格納用のバッファ（即ち、受信バッファ）に書き込むと共に、受信バッファに一時格納した受信パケットをアプリケーション群に受け渡す（詳細は後述）。
【００５９】
この他、制御部２３が実行するアプリケーションとしては、ファクシミリ１０がファックス機能、プリンタ機能、スキャナ機能、コピー機能などを果たすためのプログラムが挙げられる。
また、ＬＡＮＩ／Ｆ１９が実行するアプリケーションとしては、図４に示すように、ＰＯＰメール受信プログラム、ＳＭＴＰメール受信プログラム、ＳＭＴＰメール送信プログラム、ＨＴＴＰデーモン、印刷プロトコル群、本体側ＭＩＢアクセス関数、ＬＡＮ側ＭＩＢアクセス関数、ＥＥＰＲＯＭアクセスプログラム、プリンタステータス通知プログラム等が挙げられる。
【００６０】
詳述すると、ＰＯＰメール受信プログラムは、ファクシミリ１０がインターネット上のメールサーバから電子メールの受信を行うためのプログラムである。本実施例では、メールサーバからのメール受信をＰＯＰ３により行うようにされており、例えば、ファクシミリ１０は、このプログラムで受信したメールを制御部２３にて実行するアプリケーションにより処理して印刷部１３で印刷する。この他、ファクシミリ１０は、制御部２３側で受信メールに添付されている画像データ等を抽出して、これを電話回線接続部１７を介して外部のファクシミリに送信する。
【００６１】
また、ＳＭＴＰメール受信プログラムは、ファクシミリ１０がメールサーバとして機能するためのプログラムである。本実施例では、ＳＭＴＰに基づいて動作するようにされている。
この他、ＳＭＴＰメール送信プログラムは、ファクシミリ１０がインターネット上のメールサーバへ電子メールを送信するためのプログラムである。例えば、ファクシミリ１０は、このプログラムを用いて、読取部１１から読み込んだ画像データを電子メールに添付して外部に送信する。この他、ファクシミリ１０は、公衆電話回線に接続された外部のファクシミリから送信されてきた画像データを、電子メールに添付して、これを外部に送信する。
【００６２】
また、ＨＴＴＰデーモンは、ファクシミリ１０をＷＥＢサーバとして機能させるためのプログラムである。例えば、ＬＡＮＩ／Ｆ１９は、ＨＴＴＰデーモンにより、ＷＥＢ画面上に表示するためのデータを制御部２３から取得して、これをＨＴＴＰ形式のデータでＬＡＮ上若しくはインターネット上に送出する。
【００６３】
そして、印刷プロトコル群は、外部装置がＬＡＮ経由、インターネット経由で当該ファクシミリ１０を遠隔操作して印刷機能を利用するための各種印刷プロトコルである。
この他、本体側ＭＩＢアクセス関数は、ＳＮＭＰに基づいて管理する制御部２３側の管理情報ベース（ＭＩＢ）にデータを書き込んだり、読み出したりすることにより、ファクシミリ本体側の設定情報をＬＡＮＩ／Ｆ１９側から管理するための関数である。また、ＬＡＮ側ＭＩＢアクセス関数は、ファクシミリ本体としての制御部２３側からＬＡＮＩ／Ｆ１９のＭＩＢ内に格納されている設定情報を管理するための関数である。
【００６４】
また、ＥＥＰＲＯＭアクセスプログラムは、ファクシミリ本体の制御部２３からＬＡＮＩ／Ｆ１９に実装されたＥＥＰＲＯＭ３５にアクセスするためのプログラムである。
この他、プリンタステータス通知プログラムは、ファクシミリ１０の動作状態（トナーや印刷用紙の消耗状態、印刷ジョブの処理状態等）を制御部２３側から取得し、これに基づいて動作状態示した電子メールを作成して、これを当該ファクシミリの管理者の電子メールアドレス宛に送信するためのプログラムである。
【００６５】
ところで、以上に説明したアプリケーションはＬＡＮＩ／Ｆ１９のＣＰＵ３１上で同時動作可能な構成にされており、これに対応して、ＬＡＮＩ／Ｆ１９は制御部２３との間で、多重データ通信を行うことが可能な構成にされている。
つまり、本実施例のファクシミリ１０では、複数の論理チャネルを用いて多重データ通信を行うことが可能な構成にされており、ＣＰＵ２５，３１は、上記プロトコル部に対応するプログラムを実行することによって、上記各アプリケーションとの間で送受信すべき送信用データと、送信用データがどの論理チャネルに対応するデータであるかどうかを識別するためのチャネルＩＤと、を含むパケットを生成し、これを、ＳＲＡＭ４０を介して受信側のプロトコル部に受け渡す構成にされている。
【００６６】
また、本実施例のファクシミリ１０においては、複数の論理チャネルを用いてもＳＲＡＭ４０上でパケットが滞ることなくデータ通信を行うことができるように、ＬＡＮＩ／Ｆ１９及び制御部２３のＲＯＭ２７，３３内に、各論理チャネルでの動作条件を記述するチャネル・プロパティ・テーブルを格納している。尚、図５（ａ）はチャネル・プロパティ・テーブルを表す説明図である。
【００６７】
図５（ａ）に示すように、本実施例のファクシミリ１０では、論理チャネルとして、制御部２３側のプロトコル部、ＳＲＡＭＩ／Ｆ部に対応するプログラムにより動作するタスクと、ＬＡＮＩ／Ｆ１９側のプロトコル部、ＳＲＡＭＩ／Ｆ部に対応するプログラムにより動作するタスクとの間で必要なデータを送受信するためのシステムコマンドチャネルと、上記ＰＯＰメール受信プログラムで使用されるＰＯＰメール受信用チャネルと、上記ＳＭＴＰメール受信プログラムで使用されるＳＭＴＰメール受信用チャネルと、上記ＳＭＴＰメール送信プログラムで使用されるＳＭＴＰメール送信用チャネルと、上記ＨＴＴＰデーモンで使用されるＨＴＴＰ送受信用チャネルと、上記印刷プロトコル群で使用されるＰＤＬデータ送受信用チャネルと、上記本体側ＭＩＢアクセス関数を呼び出すプログラムで使用される本体側ＭＩＢアクセス用チャネルと、上記ＬＡＮ側ＭＩＢアクセス関数を呼び出すプログラムで使用されるＬＡＮ側ＭＩＢアクセス用チャネルと、上記ＥＥＰＲＯＭアクセスプログラムで使用されるＥＥＰＲＯＭアクセス用チャネルと、上記プリンタステータス通知プログラムで使用されるプリンタステータス通知用チャネルと、が設定されている。
【００６８】
各論理チャネル毎に設定されている動作条件に関する情報としては、チャネルタイプ（ CH#Type）、サーバ／クライアント情報（ Svr/Cli）、クレジットタイプ（ Cred#Type）、チャネルＩＤ（ CH#ID）、パケット当たり最大データ長（MAX#DLEN）、最大クレジット数（MAX#Cred）、限界クレジット数（Limit#Cred）、がある。
【００６９】
以下、これらについて詳しく説明することにするが、この説明では、ＬＡＮＩ／Ｆ１９側のチャネル・プロパティ・テーブルについて重点的に説明することにする。尚、制御部２３側のチャネル・プロパティ・テーブルもＬＡＮＩ／Ｆ１９側のチャネル・プロパティ・テーブルと同様の構成にされている。
【００７０】
チャネルタイプは、論理チャネルの種別を表す情報であり、本実施例における各論理チャネルは、システムコマンドチャネル（SYSTEM）、データチャネル（DATA）、コマンドチャネル（COMMAND）のいずれかに区分されている。
システムコマンドチャネルは、通信制御に必要な各処理を動作させるための各種システムコマンドを単一パケットに格納して制御部２３とＬＡＮＩ／Ｆ１９との間で送受信するためのチャネルであり、データチャネルは、複数パケットに分割して格納しなければならない送信用データを制御部２３とＬＡＮＩ／Ｆ１９との間で送受信するためのチャネルである。また、コマンドチャネルは、受信側（制御部２３若しくはＬＡＮＩ／Ｆ１９）を遠隔操作するためのコマンド（但し、システムコマンドを除く）を単一パケット内に格納して送受信するためのチャネルである。
【００７１】
サーバ／クライアント情報は、ＬＡＮＩ／Ｆ１９側（制御部２３側のチャネル・プロパティ・テーブルでは、制御部２３側）が論理チャネルの使用開始を制御部２３側へ要求する（即ち、後述するチャネルオープン要求用のオープンパケットを送信する）クライアントとして機能する論理チャネルであるか、それとも、ＬＡＮＩ／Ｆ１９側が制御部２３側からの論理チャネルの使用開始の要求に応答してチャネル使用開始を許可する（即ち、後述するオープンパケット応答用のオープンリプライパケットを送信する）サーバとして機能する論理チャネルであるかを、識別するための情報である。尚、このサーバ／クライアント情報は、データチャネルに区分された論理チャネルにのみに有効であり、その他のチャネルタイプには、無効な情報であることを示す値（ＮＡ：Not Applicable）が付与されている。
【００７２】
つまり、本実施例におけるデータチャネルは、オープンパケットと、これに応答するオープンリプライパケットが、制御部２３及びＬＡＮＩ／Ｆ１９間で送受信されることにより、使用可能な状態（オープン状態）になり、クローズパケットが送受信されると、使用不可能な状態（クローズ状態）になるように構成されており、ＬＡＮＩ／Ｆ１９は、論理チャネルがデータチャネルである場合にこのサーバ／クライアント情報を参照し、アプリケーションから論理チャネルの使用要求があった場合に、オープンパケットを制御部２３側へ送信するか、オープンパケットを受信するまで待機するか、の動作を選択して、いずれかの方法で論理チャネルをオープン状態にする。
【００７３】
クレジットタイプは、送信側（ＬＡＮＩ／Ｆ１９）が受信側（制御部２３）で許容できない量のパケットをＳＲＡＭ４０上に書き込まないようにするために、プロトコル部にてクレジット数をカウントしデータ送信量の制御を行うかどうかを示す情報である。ここで、クレジット数とは、送信側で受信側の受信可能パケット数を把握するためのパラメータであり、当該ファクシミリ１０においては、受信側がこのチャネル・プロパティ・テーブルの後述する最大クレジット数をチャネルオープン時に送信側に発行することにより、送信側の送信パケット数を制限し、送信側がクレジット数以上のパケットをＳＲＡＭ４０に書き込まないようにしている。
【００７４】
ところで、本実施例におけるシステムコマンドチャネル、コマンドチャネルでのデータ送受信では、コマンドが単一パケットに格納されるためデータの繋がりを持つパケットが連続的に送受信されることがなく、データの送受信に関してクレジット数を用いたフロー制御を行う必要がないため、クレジットタイプには無効な値（ＮＡ）が付与されている。一方、データチャネルでは、扱うデータの性質上、一時的に複数のパケットが送受信されるため、クレジット数に基づきフロー制御を行う必要があり、クレジットタイプには有効な値（ＳＴＲＥＡＭ）が付与されている。
【００７５】
この他、チャネルＩＤは、各論理チャネルを識別するためのＩＤ番号であり、パケット当たり最大データ長は、ＬＡＮＩ／Ｆ１９側が、受信バッファに取り込み可能なパケット当たりのデータ長の最大サイズ（バイト数）を示す情報である。尚、このデータ長の最大サイズは、図５（ｂ）に示すデータ構成のパケットにおいて、パケットのヘッダ部分の情報を含まないとしたときのデータ長を示す。図５（ｂ）は、ブロック・データ・バッファに格納された際のパケットのデータ構成を表す説明図である。
【００７６】
本実施例においては、プロトコル部によりパケットを生成しＳＲＡＭＩ／Ｆ部にてそのパケットをＳＲＡＭ４０内に書き込んでいるが、このプロトコル部で生成されるパケットには、２バイトのパケット長に関する情報を格納するための領域と、チャネルＩＤに関する情報を格納するための領域と、チャネルがシステムコマンドチャネルである場合にシステムコマンドの種別コードを格納するための１バイトの領域が確保されており、パケットのヘッダ部分には、これら４バイトの情報が格納され、そのヘッダ部分より後部には、アプリケーションより指定された送信用データが格納されている。
【００７７】
例えば、パケットあたり最大データ長が５０４バイトの論理チャネルにおいては、プロトコル部により最大でパケット長が５０８バイトのパケットが生成可能にされている。また、パケットあたり最大データ長が１０１２バイトの論理チャネルにおいては、プロトコル部により最大でパケット長が１０１６バイトのパケットが生成可能にされている。尚、１０１６バイトのパケットの場合には、ＳＲＡＭ４０内のブロックデータバッファで区画された５１２バイト（内、パケット格納可能な領域は５０８バイト）のブロックにパケット全体を格納することができないので、ＳＲＡＭＩ／Ｆ部により、ヘッダ部分を含む５０８バイトのパケット前半部分と、５０８バイトのパケット後半部分と、が各ブロックに（２つのブロックにまたがって）格納される構成にされている。
【００７８】
また、最大クレジット数は、論理チャネルに対応した受信バッファがチャネルオープン時に格納可能なパケット数を示す情報であり、当該ファクシミリ１０においては、チャネルオープン時に、制御部２３及びＬＡＮＩ／Ｆ１９双方で、互いのチャネル・プロパティ・テーブルの最大クレジット数の情報を交換し合う構成にされている。尚、本実施例ではデータチャネルにのみ、最大クレジット数として、有効な値が付与されている。
【００７９】
この他、限界クレジット数は、クレジット数の付加情報を格納したクレジットパケットを相手側（制御部２３）に送信するタイミングを調整するための値である。本実施例においては、送信側が、受信側から取得した最大クレジット数に関する情報に基づき、最大クレジット数の範囲内で、パケットを送信するため、受信側から新たなクレジット数を追加しないと、送信側はパケットの送信（ＳＲＡＭ４０内へのパケット書き込み）を一時停止してしまうことになる。したがって、本実施例では、受信側が、送信側から受信したパケット数に基づき、送信側の残りクレジット数を把握して、残りクレジット数と、受信バッファに格納されているパケット数との合計が、限界クレジット数以下となると、クレジットパケットを相手側（制御部２３）へ送出する構成になっている。
【００８０】
また、本実施例においては、ＤＲＡＭ２９，３７内に、論理チャネルの動作状態や論理チャネル使用時にプロトコル部等が必要とするデータを記憶するためのチャネルステート情報域（図示せず）が各論理チャネル毎に確保されている。
尚、以下に説明するＳＲＡＭＩ／Ｆ部及びプロトコル部に対応するプログラムによりＣＰＵが実行する各処理は、このチャネルステート情報域の各情報を参照にして動作し、また必要に応じて論理チャネルの状態を書き込むように構成されている。
【００８１】
以下、上記ＳＲＡＭＩ／Ｆ部に対応するプログラムを実行することによりＣＰＵ３１が行う各処理の手順について説明する。尚、以下では、ＬＡＮＩ／Ｆ１９のＣＰＵ３１が実行する処理についてのみ説明することにするが、本実施例のファクシミリ１０においては、制御部２３のＣＰＵ２５も同様の処理を実行する構成にされている。
【００８２】
図６は、ＣＰＵ３１がＳＲＡＭ４０のブロック・データ・バッファに格納されたパケットを読み出すために実行するＳＲＡＭＩ／Ｆデータ読み出し処理を表すフローチャートである。また、図７は、このＳＲＡＭＩ／Ｆデータ読み出し処理実行中に呼び出される読み出しブロック検索処理を表すフローチャートである。
【００８３】
処理を実行すると、まずＣＰＵ３１は、Ｓ１１０にてＲ／Ｗセマフォ領域用ＳＲＡＭセマフォを取得する。つまり、ＣＰＵ３１は、Ｒ／Ｗセマフォ領域用ＳＲＡＭセマフォに取得値を書き込み、書き込みが完了した時点でセマフォを取得したと判断し、続くＳ１２０にて、図７に示す読み出しブロック検索処理を実行する。
【００８４】
この読み出しブロック検索処理を実行するとまず、ＣＰＵ３１は、Ｓ１２１にて前回の当該処理でデータを読み出したブロック・データ・バッファのブロック番号を表す読み出しブロック番号に１加算した値を、データが書き込まれているか否かを検索するブロック・データ・バッファのブロック番号を表す検索ブロック番号に設定する（但し、値が１５になる場合は、検索ブロック番号を０（ゼロ）に設定する）。
【００８５】
続いてＣＰＵ３１は、Ｓ１２２にて検索ブロック番号に対応するブロックのＲ／Ｗセマフォ内の書き込み側識別情報及び状態識別情報を読み出し、この読み出した情報に基づきＳ１２３にて、検索ブロックの書き込み側が本体側（制御部２３側）でそのブロックへのデータの書き込みが完了しているか否かを判断する。そして、ブロックへのデータの書き込みが完了しており書き込み側が本体側であると判断すると、Ｓ１２４にて、Ｒ／Ｗセマフォ内に書き込まれているシーケンシャル番号を読み出し、Ｓ１２５にて、前回のＳＲＡＭＩ／Ｆデータ読み出し処理実行時にＤＲＡＭ３７内に格納した読み出し用シーケンシャル番号と、Ｒ／Ｗセマフォ内に書き込まれているシーケンシャル番号が一致するか否か判断する。
【００８６】
そして、シーケンシャル番号が一致していると判断すると、ＣＰＵ３１は、Ｓ１２６にて、この検索ブロック番号を読み出しブロック番号に設定して、その読み出しブロック番号をＤＲＡＭ３７内に記憶し当該処理を終了する。
一方、シーケンシャル番号が異なると判断すると、ＣＰＵ３１は、Ｓ１２７にて、検索ブロック番号が、当該処理で検索を開始したブロック番号より１少ない値である前回の処理で記憶した読み出しブロック番号に一致するか否か判断して、一致しなければ、Ｓ１２８にて検索ブロック番号を１加算して更新し処理をＳ１２２に戻す。一方、Ｓ１２７で一致していると判断すると（即ち、全ブロックの検索が完了したと判断すると）、Ｓ１２９にてデータが格納された読み出しブロックがないことを呼び元のタスクに通知して、処理をＳ１４０に移行する。
【００８７】
Ｓ１４０において、ＣＰＵ３１は、読み出しブロック検索処理の結果に基づき、読み出しブロックがあったか否か判断する。つまり、Ｓ１２６の処理を経て読み出しブロック検索処理が終了したか否か判断し、Ｓ１２６の処理を経て処理が終了していなければ、Ｓ１５０にて、Ｒ／Ｗセマフォ領域用ＳＲＡＭセマフォに解放値を書き込むことにより、Ｒ／Ｗセマフォ領域用ＳＲＡＭセマフォを解放し、Ｓ１５５にて、読み込みデータバイト数をゼロとして、当該処理を終了する。
【００８８】
一方、Ｓ１２６の処理を経て処理が終了したと判断すると、ＣＰＵ３１は、Ｓ１６０にて、読み出しブロック番号に対応するＲ／Ｗセマフォの状態識別に、”読み出し中”であることを示す値を書き込み、この後にＳ１７０にて、Ｒ／Ｗセマフォ領域用ＳＲＡＭセマフォを解放する。
【００８９】
そして、Ｓ１８０にて、読み出しブロック番号に対応するブロックに格納されているブロックデータ（パケット全体若しくはパケットの一部）を読み出し、これを当該処理の呼び元から指定されたＤＲＡＭ３７内の受信データ用一時格納バッファに書き込む。
【００９０】
この後、Ｓ１９０にて、再びＲ／Ｗセマフォ領域用ＳＲＡＭセマフォを取得して、Ｓ２００にて、読み出したブロックに対応するＲ／Ｗセマフォの書き込み側識別情報、状態識別情報として、”空き”を示す値を書き込む。
そして、Ｓ２１０にてＲ／Ｗセマフォ領域用ＳＲＡＭセマフォを解放して、Ｓ２２０にて、読み出し用シーケンシャル番号を１加算してこれをＤＲＡＭ３７内に記憶し、更に、Ｓ２３０にて、読み出したデータのバイト数（読み出しデータバイト数）を呼び元のタスクに通知して当該処理を終了する。
【００９１】
続いて、図８は、ＣＰＵ３１がＳＲＡＭ４０のブロック・データ・バッファにパケットを書き込むために実行するＳＲＡＭＩ／Ｆデータ書き込み処理を表すフローチャートである。また、図９は、このＳＲＡＭＩ／Ｆデータ書き込み処理実行中に呼び出される空きブロック検索処理を表すフローチャートである。
【００９２】
処理を実行するとまず、ＣＰＵ３１は、Ｓ３１０にて、Ｒ／Ｗセマフォ領域用ＳＲＡＭセマフォを取得し、Ｓ３２０にて、図９に示す空きブロック検索処理を実行する。
空きブロック検索処理を実行すると、ＣＰＵ３１は、Ｓ３２１にて、Ｒ／Ｗセマフォ領域の１５ブロックのＲ／Ｗセマフォに格納されている書き込み側識別情報及び状態識別情報を参照することにより、ＬＡＮＩ／Ｆ１９側の書き込み（即ち、書き込み側識別が”ＬＡＮ側書き込み”）で、データが残っているブロック（即ち、状態識別が、”書き込み完了”又は”読み出し中”であるブロック）の数を求める。
【００９３】
そして、この結果に基づき、データが残っているブロックが全体（全ブロック）の８割未満か否か判断し（Ｓ３２３）、８割以上であると判断すると、ＣＰＵ３１は、Ｓ３２４にて、呼び元のタスクに空きブロックなしとの通知を行った後に、当該処理を終了する。一方、Ｓ３２３にて、８割未満であると判断すると、ＣＰＵ３１は、続く、Ｓ３２５で、Ｒ／Ｗセマフォ領域の１５ブロックのＲ／Ｗセマフォに格納されている書き込み側識別情報及び状態識別情報を順に参照することにより、参照途中で見つかった最初の空きブロックの番号を、空きブロック番号として当該処理の呼び元のタスクに通知し、この後に処理をＳ３４０に移行する。
【００９４】
また、このＳ３４０において、ＣＰＵ３１は、空きブロック検索処理の実行結果に基づき、空きブロックがあったか否か判断し、なかったと判断した場合には、Ｓ３５０にて、Ｒ／Ｗセマフォ領域用ＳＲＡＭセマフォを解放すると共に、Ｓ３５５にて呼び元のタスクに書き込み失敗を通知し、この後に当該処理を終了する。
【００９５】
一方、空きブロックがあったと判断すると、ＣＰＵ３１は、続くＳ３６０にて、空きブロックに対応するＲ／Ｗセマフォに、書き込み側識別情報として”ＬＡＮ側書き込み”を示す値を書き込み、状態識別情報として、”書き込み中”であることを示す値を書き込み、シーケンシャル番号として、前回までの当該処理により自身が保持している書き込み用シーケンシャル番号を書き込んだ後に、Ｒ／Ｗセマフォ領域用ＳＲＡＭセマフォを解放する（Ｓ３７０）。
【００９６】
また、Ｓ３８０にて、ブロックデータバッファの空きブロックに、現在のシーケンシャル番号と、ブロックに書き込むデータのバイト数と、呼び元から指定されたデータ（パケット全体若しくはパケットの一部）と、を書き込む。
この後、Ｓ３９０にて、再びＲ／Ｗセマフォ領域用ＳＲＡＭセマフォを取得し、Ｓ４００にて、上記データを書き込んだブロックに対応するＲ／Ｗセマフォの状態識別に、”書き込み完了”を示す値を書き込み、Ｓ４１０にて、Ｒ／Ｗセマフォ領域用ＳＲＡＭセマフォを解放する。
【００９７】
そして、Ｓ４２０にて、本体側（制御部２３側）への割込要求処理を実行する。この割込要求処理を実行すると、ＣＰＵ３１は、第一割込要求設定領域用ＳＲＡＭセマフォを取得して、第一割込要求設定領域に割込要求信号を書き込み、この後に第一割込要求設定領域用ＳＲＡＭセマフォを解放して、その割込要求処理を終了する。またこの後に、ＣＰＵ３１は、Ｓ４３０にて、書き込み用シーケンシャル番号を１加算して更新する。
【００９８】
次に、上記ＳＲＡＭＩ／Ｆデータ読み出し処理、ＳＲＡＭＩ／Ｆデータ書き込み処理を所定の手順で読み出して、ＳＲＡＭ４０とＤＲＡＭ３７との間のデータ転送を行うプロトコル部に対応する各処理について説明する。
まず、図１０は、ＣＰＵ３１が実行するプロトコル部ポーリングタスク処理を表すフローチャートである。
【００９９】
この処理は、ＳＲＡＭ４０からのデータ読み出し手順を規定する処理であり、ＣＰＵ３１は、上記割込要求処理に対応する制御部２３側の処理により、制御部２３がＳＲＡＭ４０内のブロック・データ・バッファにブロックデータを書き込んだことを意味する割込要求を行ってきたと判断するか、自身のインターバルタイマにより定期的なポーリング処理要求があったと判断した場合に、当該処理を実行する。
【０１００】
ＣＰＵ３１は、プロトコル部ポーリングタスク処理を実行すると、Ｓ５００にて図１１に示す受信データポーリング処理を実行し、Ｓ８００にて送信待ちのタスクに、処理再開の通知を行う。尚、図１１はＣＰＵ３１にて実行される受信データポーリング処理を表すフローチャートである。
【０１０１】
図１１に示す受信データポーリング処理を実行すると、ＣＰＵ３１は、まずＳ５１０にて、ＳＲＡＭＩ／Ｆデータ読み出し処理を実行することにより、ＳＲＡＭ４０のブロック・データ・バッファの指定ブロックからブロックデータを読み出し、そのブロックデータをＤＲＡＭ３７内の受信データ用一時格納バッファに書き込む。続いて、ＣＰＵ３１は、Ｓ５２０にて、ＳＲＡＭＩ／Ｆデータ読み出し処理において読み出したデータのバイト数（読み出しデータバイト数）がゼロであったか否かを判断し、ゼロであったと判断すると当該処理を終了する。
【０１０２】
一方、ゼロではないと判断すると（Ｓ５２０でＮｏ）、ＣＰＵ３１は、読み出したブロックデータのパケットの先頭側に記載されているチャネルＩＤに関する情報に基づき、データを格納すべき論理チャネルの受信バッファの格納位置を割り出す（Ｓ５３０）。また、読み出したブロックデータ（パケット）の先頭側に記載されているパケット長に関する情報に基づき、そのパケット長を残りバイト数として設定する（Ｓ５４０）。
【０１０３】
そして、Ｓ５５０にて、受信データ用一時格納バッファに記憶されているブロック毎のデータ（ブロックデータ）を、割り出した受信バッファの格納位置に記憶する。また、この際、残りバイト数から、受信バッファに取り込んだブロックデータのバイト数を差し引いた値を新たな残りバイト数として記憶し、更に、次に読み出すブロックデータの格納位置を表すメモリアドレスを取得する。
【０１０４】
この後、ＣＰＵ３１は、Ｓ５６０にて、更新した残りバイト数がゼロであるか否か判断し、ゼロでなければ（Ｓ５６０でＮｏ）、再びＳＲＡＭＩ／Ｆデータ読み出し処理により１ブロック分のデータ（ブロックデータ）を読み出す（Ｓ５７０）。また、Ｓ５８０にて、読み出しデータバイト数がゼロであるか否か判断し、ゼロであれば（即ち、ＳＲＡＭＩ／Ｆデータ読み出し処理による読み出しが成功していなければ）、処理をＳ５７０に戻して、ブロックデータが読み出せるまで上記処理を繰り返す。
【０１０５】
そして、Ｓ５８０で読み出しデータバイト数がゼロでないと判断すると（即ち、ＳＲＡＭＩ／Ｆデータ読み出し処理による読み出しが成功していれば）、ＣＰＵ３１は、処理をＳ５５０に戻して、読み出した１ブロック分のデータを前回受信バッファに格納したブロックデータに並べて格納し、残りバイト数と次にブロックデータを格納するメモリアドレスを更新する。
【０１０６】
またＳ５６０において残りバイト数がゼロであると判断すると（Ｓ５６０でＹｅｓ）、ＣＰＵ３１は、続くＳ５９０において、パケットのチャネルＩＤに関する情報に基づき、チャネル・プロパティ・テーブルから、チャネルに対応するチャネルタイプを取得する。そして、Ｓ６００にてチャネルタイプがＳＹＳＴＥＭであるか否か判断し、チャネルタイプがＳＹＳＴＥＭであれば、Ｓ６１０にて図１２に示すシステムコマンド処理を実行し、この後に、処理をＳ５１０に戻して、ＳＲＡＭＩ／Ｆデータ読み出し処理を実行し、上述の処理をＳＲＡＭ４０において、読み出すデータがなくなるまで実行する。
【０１０７】
一方、Ｓ６００にてチャネルタイプがＳＹＳＴＥＭでないと判断すると、ＣＰＵ３１は、Ｓ６２０にて、チャネルタイプがＣＯＭＭＡＮＤであるか否か判断する。そして、チャネルタイプがＣＯＭＭＡＮＤであると判断すると、Ｓ６３０にて、該当チャネルに受信データ有りとの通知を当該チャネルを使用するタスクに対して行った後に、処理をＳ５１０に戻して、ＳＲＡＭＩ／Ｆデータ読み出し処理を実行する。
【０１０８】
また、ＣＰＵ３１は、Ｓ６２０にてチャネルタイプがＣＯＭＭＡＮＤでもないと判断すると（即ち、チャネルタイプがＤＡＴＡであると判断すると）、Ｓ６４０にて受信バッファに格納したパケットをバッファ管理上有効なデータとして登録する。
【０１０９】
そして、Ｓ６５０にてチャネルステート情報域に格納されている制御部２３側（本体側）残りクレジット数を１減らすようにして更新し、更に、Ｓ６６０にて受信データ待ちをしているタスクに受信データ有りの通知を行い、この後に、処理をＳ５１０に戻して、ＳＲＡＭＩ／Ｆデータ読み出し処理を実行する。
【０１１０】
次に、上記システムコマンド処理、及び、プロトコル部受信データ読み出し処理について説明する。
図１２は、ＣＰＵ３１が実行するシステムコマンド処理を表すフローチャートである。この処理を実行すると、ＣＰＵ３１は、まずＳ７１０にて受信したパケットがオープンパケットであるか否か判断する。そして、オープンパケットであると判断すると、Ｓ７１１にてオープンパケット内に格納されているパケット当たりの最大データ長と、最大クレジット数とに関する情報を、該当するチャネルのチャネルステート情報域に格納して、チャネルステート情報域の情報をチャネルオープン時の状態に初期化する。そして、Ｓ７１３にてチャネルステート情報域にチャネルの状態を表す情報として、チャネルオープン待ち状態を示す情報を格納する。また、当該チャネルのオープンパケットの受信待ちをしているタスクがある場合に、そのタスクに処理続行を通知し（Ｓ７１５）、この後に当該処理を終了する。
【０１１１】
一方、ＣＰＵ３１は、Ｓ７１０にて受信パケットがオープンパケットではないと判断すると、続くＳ７２０にて、受信パケットがオープンリプライパケットか否か判断する。そして、受信パケットがオープンリプライパケットであると判断すると、続くＳ７２１にて、オープンリプライパケットに格納されているパケット当たり最大データ長と最大クレジット数とに関する情報を、該当するチャネルのチャネルステート情報域に格納して、チャネルステート情報域をチャネルオープン時の状態に初期化する。また、Ｓ７２３にて、当該チャネルのオープンリプライパケットの受信待ちをしているタスクがある場合に処理続行を通知し、この後に当該処理を終了する。
【０１１２】
この他、Ｓ７２０にて受信パケットがオープンリプライパケットではないと判断すると、ＣＰＵ３１は、続くＳ７３０にて受信パケットがクローズパケットであるか否か判断し、そうであるならば、Ｓ７３１にて、チャネルステート情報域にチャネルの状態を表す情報として、チャネルがクローズ状態であることを示す情報を格納し、当該処理を終了する。
【０１１３】
また、Ｓ７３０にて受信パケットがクローズパケットではないと判断すると、ＣＰＵ３１は、続くＳ７４０にて受信パケットがクレジットパケットであるか否か判断し、受信パケットがクレジットパケットであるならば、Ｓ７４１にて、クレジットパケットに格納されている付加クレジット数に関する情報に基づき、該当チャネルのチャネルステート情報域に格納されているクレジット数に付加クレジット数を加算する。また、Ｓ７４３にて、該当チャネルのクレジット付加の通知待ちをしているタスクに、クレジット付加の通知を行うことにより、そのタスクに処理続行を通知し、この後に当該処理を終了する。一方、ＣＰＵ３１は、受信パケットがクレジットパケットでもないと判断すると（Ｓ７４０でＮｏ）、そのまま当該処理を終了する。
【０１１４】
次に、図１３は、プロトコル部受信データ読み出し処理を表すフローチャートである。ＣＰＵ３１は、論理チャネルを使用するアプリケーションからの指令に基づきこの処理を実行すると、まずＳ８１０にて、指定のチャネルＩＤに対応する受信バッファにパケットデータがあるか否か判断する。そして、受信したパケットデータがあると判断すると、続くＳ８２０にて、アプリケーションから指定された最大読み出しバイト数と、パケットデータのバイト数との内、バイト数の小さい方を読み出しバイト数に設定する。そして、Ｓ８３０にて、受信バッファから読み出しバイト数分のデータを読み出して、これをアプリケーションが指定した読み出し先のバッファへ格納する。
【０１１５】
この後、ＣＰＵ３１は、Ｓ８４０にて、チャネルステート情報域に格納された受信バッファの格納パケット数に関する情報を更新し、Ｓ８５０にて、受信バッファの格納パケット数と、本体側残りクレジット数（Ｓ６５０を参照）の合計がクレジットパケット送信の閾値（限界クレジット数）に達しているか否か判断し、閾値に達していれば（即ち、上記合計が閾値以下であれば）、当該チャネルのクレジット付加を依頼するためのクレジットパケットを制御部２３側に送信し（Ｓ８６０）、当該処理を終了する。尚、合計が閾値に達していなければそのまま当該処理を終了する。
【０１１６】
一方、ＣＰＵ３１は、Ｓ８１０で、受信データがないと判断すると、Ｓ８７０にて、アプリケーション側がブロッキングモードを指定しているか否か判断し、指定していなければ、そのまま当該処理を終了する。
ここで、ブロッキングモードとは、アプリケーション側が指定した処理をプロトコル部がうまく実行できなかった場合に、処理を再度実行するかどうかを切り替えるためのものであり、ブロッキングモードが指定されていると、ＣＰＵ３１は、再度処理を実行する
つまり、ＣＰＵ３１は、Ｓ８７０にてブロッキングモードが指定されていると判断すると、Ｓ８８０にて、データの受信通知（上記Ｓ６６０にて行われる通知）があるまで待機し、受信通知を受けると、再び処理をＳ８１０に戻して上記処理を繰り返す。
【０１１７】
以上、プロトコル部のデータ読み出しに関する各種処理について説明したが次に、データ書き込みに関する各種処理について説明する。
図１４（ａ）は、チャネルタイプがＤＡＴＡである論理チャネル（データチャネル）を使用可能とするためのチャネルオープン処理を表すフローチャートである。
【０１１８】
アプリケーションからの指令を受け、この処理を実行すると、ＣＰＵ３１は、まずＳ９１０にて、チャネル・プロパティ・テーブルのサーバ／クライアント情報を参照して、指定チャネルがサーバに区分されているか否か判断する。そして、サーバでないと判断すると（Ｓ９１０でＮｏ）、Ｓ９２０にてチャネル・プロパティ・テーブルを参照して、指定チャネルのパケット当たり最大データ長と、最大クレジット数を含んだオープンパケットを作成し、Ｓ９２５にて、後述する送信パケット書き込み処理（図１６参照）を実行して、生成したオープンパケットをＳＲＡＭ４０内に書き込む。
【０１１９】
この後、ＣＰＵ３１は、制御部２３側から送信されてくるオープンリプライパケットの受信通知（Ｓ７２３による通知）があるまで待機し（Ｓ９３０）、オープンリプライパケットの受信通知を取得すると、指定チャネルのチャネルステート情報域内に、チャネルがオープン状態であることを示す情報を格納し（Ｓ９４０）、当該処理を終了する。
【０１２０】
一方、Ｓ９１０にて、指定チャネルがサーバに区分されていると判断すると、ＣＰＵ３１は、Ｓ９５０にて、チャネルステート情報域にてチャネル状態に関する情報をチェックし、既に、ＬＡＮＩ／Ｆ１９が、制御部２３からオープンパケットを受信し、オープン待ち状態になっているかどうかを判断する（Ｓ７１３参照）。ここで、オープン待ち状態ではないと判断すると、ＣＰＵ３１は、オープンパケットを受信するまで待機し（Ｓ９６０）、チャネルオープンを受信したことを知らせる通知（Ｓ７１５の通知）を受けると、処理をＳ９７０に移行する。また、Ｓ９５０にて、既に、オープン待ち状態であると判断すると、Ｓ９６０の処理をスキップして、Ｓ９７０の処理を実行する。
【０１２１】
そして、ＣＰＵ３１は、Ｓ９７０において、チャネル・プロパティ・テーブルを参照して指定チャネルのパケット当たり最大データ長と、最大クレジット数に関する情報を含んだオープンリプライパケットを作成し、Ｓ９７５にて送信パケット書き込み処理を実行することにより、作成したパケットをＳＲＡＭ４０内に書き込む。
【０１２２】
この後、ＣＰＵ３１は、Ｓ９８０にて、指定チャネルのチャネルステート情報域にチャネル状態がオープン状態であることを示す情報を格納し、当該処理を終了する。
次に、図１４（ｂ）は、上記チャネルオープン処理によりオープン状態となった論理チャネル（データチャネル）を使用不可の状態、即ちクローズ状態にするためにＣＰＵ３１が実行するチャネルクローズ処理を表したフローチャートである。
【０１２３】
アプリケーションからの指令により処理を実行すると、ＣＰＵ３１は、まずＳ１０１０にて、チャネルステート情報域を参照し、指定チャネルがクローズ状態であるかどうかを判断する。そして既にクローズ状態であると判断すると、当該処理を終了する。一方、チャネルがクローズ状態でないと判断すると、ＣＰＵ３１は、続くＳ１０２０にて、指定チャネルをクローズ状態にするように制御部２３側に通知するためのクローズパケットを生成する。
【０１２４】
この後、ＣＰＵ３１は、Ｓ１０３０にて、送信パケット書き込み処理を実行することにより、生成したパケットをＳＲＡＭ４０上に書き込むと共に、Ｓ１０４０にて自己のチャネルステート情報域内にチャネルの状態がクローズ状態であることを示す情報を格納して、当該処理を終了する。
【０１２５】
次に、データチャネルに区分される論理チャネルがオープン状態である時に実行されるプロトコル部送信データ書き込み処理について説明する。尚、図１５は、このプロトコル部送信データ書き込み処理を表すフローチャートである。
アプリケーションからの指令により処理を実行すると、ＣＰＵ３１は、Ｓ１１１０にて、アプリケーションから指定された書き込みバイト数（送信用データのバイト数）を残り書き込みバイト数として一時記憶し、更に、アプリケーションから指定された送信用データのメモリアドレスを一時記憶する。また、Ｓ１１２０にてアプリケーションから指定されたチャネルＩＤに対応する論理チャネルのパケット当たり最大データ長を、チャネルステート情報域から読み出して一時記憶する。
【０１２６】
この後、ＣＰＵ３１は、Ｓ１１３０にて、残り書き込みバイト数がゼロであるかどうか判断し、ゼロでなければ、続く、Ｓ１１４０にて残り書き込みバイト数と、対応するチャネルＩＤのパケット当たり最大データ長とを比較し、小さいバイト数の方を、１つのパケットに格納する送信用データのバイト数とし、Ｓ１１５０にて送信パケット書き込み処理を実行する。
【０１２７】
そして、Ｓ１１６０にてパケットが書き込めたかどうか判断し、書き込めていれば、Ｓ１１７０にて、残り書き込みバイト数からＳ１１５０にて書き込みが完了した送信用データのバイト数を引いた値を新たな残り書き込みバイト数とし、更に記憶したメモリアドレスを、次に書き込むべき送信用データのメモリアドレスに更新した後に、処理をＳ１１３０に戻す。一方、Ｓ１１６０にてパケットが書き込めていないと判断すると、ＣＰＵ３１は、続くＳ１１８０にてアプリケーションからブロッキングモードが指定されているかどうか判断し、指定されていれば、処理をＳ１１３０に戻してパケットの書き込みを再度行う。また、ブロッキングモードが指定されていなければ、Ｓ１１８５にて、書き込み完了バイト数として、アプリケーションから指定された書き込みバイト数から残り書き込みバイト数を引いた値を、アプリケーションに通知して、当該処理を終了する。
【０１２８】
また、上記のようにしてＳ１１３０に処理を戻すと、ＣＰＵ３１は、再び上記処理を繰り返し実行し、Ｓ１１３０にて残り書き込みバイト数がゼロとなった時点で、処理をＳ１１３５に移行し、書き込み完了バイト数をアプリケーションに通知して、当該処理を終了する。
【０１２９】
次に、上記送信パケット書き込み処理について説明する。尚、図１６は、ＣＰＵ３１が実行する送信パケット書き込み処理を表すフローチャートである。
処理を実行するとＣＰＵ３１は、まずＳ１２１０にて、パケット書き込み用セマフォを取得する。尚、このセマフォは、１パケットが複数ブロックに渡りＳＲＡＭ４０に書き込まれる際に、他の処理部からのパケットの書き込みによりＳＲＡＭ４０内におけるパケットの連続性が失われるのを防ぐためのものである。つまり、本実施例においては、送信パケット書き込み処理が複数のアプリケーションから同時に呼び出されない構成にされている。
【０１３０】
このセマフォを取得すると、ＣＰＵ３１は、続くＳ１２２０にて、チャネルステート情報域内に記憶されているＬＡＮ側（ＬＡＮＩ／Ｆ１９側）の残りクレジット数がゼロであるか否か判断する。尚、データチャネル以外の論理チャネルでは、クレジット数がＮＡとなっているが、当該処理では、これらの論理チャネルに関して、クレジット数を常に１に設定するように構成されている。
【０１３１】
ここで、ＬＡＮ側残りクレジット数がゼロであると判断すると、ＣＰＵ３１は、続くＳ１２３０で、アプリケーションからブロッキングモードが指定されているか否か判断し、ブロッキングモードが指定されていなければ、Ｓ１２１０にて取得したセマフォを解放すると共に（Ｓ１２３５）、当該処理を読み出したタスクに書き込み済みバイト数がゼロであることを通知して（Ｓ１２３７）、当該処理を終了する。
【０１３２】
一方、Ｓ１２３０にてブロッキングモードが指定されていると判断すると、ＣＰＵ３１は、続くＳ１２４０にて、クレジット付加の通知（Ｓ７４３による通知）があるまで待機し、通知を受けると、処理をＳ１２２０に戻す。
また、Ｓ１２２０にて残りクレジットがゼロではないと判断すると、ＣＰＵ３１は、続くＳ１２５０にて、当該処理の呼び元が指定した送信用データ格納位置を表すメモリアドレスを取得し、更に、呼び元が指定した１つのパケットに格納する送信用データのバイト数を、残りバイト数として、一時記憶する。
【０１３３】
そして、Ｓ１２６０にて残りバイト数が５０４以下であるかどうかを判断する。ここで、この判断を行う理由としては、ブロックデータバッファの各ブロックが格納可能なパケットの最大バイト数は５０８バイトであるが、パケットの先頭部分には、図５（ｂ）で示したように、２バイトのパケット長に関する情報を格納する領域と、１バイトのチャネルＩＤに関する情報を格納する領域と、１バイトの種別コードを格納するための領域と、が確保されているため、アプリケーションから取得した送信用データの最大格納バイト数が５０４バイトに制約されるためである。
【０１３４】
したがって、ＣＰＵ３１は、Ｓ１２６０にて残りバイト数が５０４バイトより大きいと判断すると、Ｓ１２７０にて、今回の書き込みバイト数を５０４バイトに設定し、Ｓ１２６０にて残りバイト数が５０４バイト以下であると判断すると、Ｓ１２８０にて、今回の書き込みバイト数をその残りバイト数に設定する。
【０１３５】
そして、Ｓ１２９０において、ＣＰＵ３１は、Ｓ１２７０若しくはＳ１２８０で設定された書き込みバイト数の送信用データを読みだして、その読み出したデータと、パケット長に関する情報と、チャネルＩＤに関する情報と、システムコマンドの種別コード（システムコマンドチャネルを使用するパケットのみ）と、を格納したブロックデータ（パケット全体若しくはパケットの一部）を生成し、これをＤＲＡＭ３７内に確保された書込用バッファに格納する。
【０１３６】
この後、ＣＰＵ３１は、Ｓ１３００にて、上述のＳＲＡＭＩ／Ｆデータ書き込み処理を実行し、生成したブロックデータをＤＲＡＭ３７内からＳＲＡＭ４０内に転送し、Ｓ１３１０にて、ＳＲＡＭＩ／Ｆデータ書き込み処理によるデータの書き込みが成功したかどうかを判断する。
【０１３７】
ここで、ＣＰＵ３１は、ブロックデータが書き込めなかったと判断すると、プロトコル部ポーリングタスク処理（Ｓ８００）により書き込み再開の通知があるまで待機し（Ｓ１３２０）、通知があると再び処理をＳ１３００に戻して、ＳＲＡＭＩ／Ｆデータ書き込み処理を実行し、Ｓ１３１０にて、ブロックデータの書き込みが成功したかどうかを判断する。
【０１３８】
そして、書き込みが成功したと判断すると、続くＳ１３３０にて、次に書き込むべき送信用データのメモリアドレスを更新し、更に残りバイト数にＳ１３００にて書き込めた送信用データのバイト数を引いた値を新たな残りバイト数として更新する。
【０１３９】
この後、ＣＰＵ３１は、Ｓ１３４０にて、残りバイト数がゼロであるか否か判断し、ゼロでなければ、Ｓ１３５０にて、残りバイト数は５０８バイト以下であるか否かを判断する。そして、残りバイト数が５０８バイトより大きいと判断すると、Ｓ１３６０にて、今回の書き込みバイト数を５０８バイトに設定し、残りバイト数が５０８バイト以下であると判断すると、Ｓ１３７０にて残りバイト数を今回の書き込みバイト数に設定する。
【０１４０】
また、Ｓ１３８０にて、そのデータを格納したブロックデータ（パケット後半部分）を作成して、これをＤＲＡＭ３７内の書込用バッファに書き込み、処理をＳ１３００に戻してＳＲＡＭＩ／Ｆデータ書き込み処理を実行することにより、その作成したパケットをＳＲＡＭ４０上に書き込む。
【０１４１】
一方、Ｓ１３４０にて、残りバイト数がゼロであると判断すると、ＣＰＵ３１は、Ｓ１３９０にて、当該チャネルのクレジットタイプがＮＡであるかどうか判断し、ＮＡでないと判断すると、Ｓ１４００にて、チャネルステート情報域に格納されているＬＡＮ側残りクレジット数を１減らして処理をＳ１４１０に移行し、ＮＡであると判断すると、そのＳ１４００の処理をスキップして処理をＳ１４１０に移行する。
【０１４２】
また、Ｓ１４１０に移行すると、ＣＰＵ３１は、Ｓ１２１０にて取得したセマフォを解放すると共に、Ｓ１４２０にて、呼び元のタスクに書き込み済みバイト数を通知して当該処理を終了する。
次に、アプリケーション群の一つとして動作する本体側ＭＩＢアクセス関数を呼び出すためのプロトコル部の本体側ＭＩＢアクセス関数呼び出し処理と、ＬＡＮ側ＭＩＢアクセス関数を呼び出すためのプロトコル部のＬＡＮ側ＭＩＢアクセス関数呼び出し処理とについて説明する。尚、図１７（ａ）は、本体側ＭＩＢアクセス関数呼び出し処理を表すフローチャートである。
【０１４３】
当該実施例においては、制御部２３に、制御部２３側のＭＩＢ内のオブジェクトにアクセスするためのＭＩＢアクセス関数（以下、「ＯＢＪＡＣＣ関数」とも表現する）が用意されており、これを以下に説明するようにしてＬＡＮＩ／Ｆ１９側から呼び出し、ＭＩＢにアクセスする。
【０１４４】
ＣＰＵ３１は、他のタスクから当該処理実行の指令が入力されると、処理を実行してまずＳ１５１０にて、本体側ＯＢＪＡＣＣ関数読みだしのためのセマフォを取得する。尚、このセマフォは、本体側（制御部２３）からのＯＢＪＡＣＣ関数呼び出しと、ＬＡＮＩ／Ｆ１９側からのＯＢＪＡＣＣ関数呼び出しが同時に行われないようにして、オブジェクトが同時操作されてしまうのを防止するためのものである。
【０１４５】
続いてＣＰＵ３１は、Ｓ１５２０にて、当該処理を呼び出したタスクから取得したパラメータに基づき、ＯＢＪＡＣＣ関数呼び出し用のパケットを生成して、これをＤＲＡＭ３７内の書込用バッファに格納し、Ｓ１５３０にて上記送信パケット書き込み処理を実行して、パケットをＳＲＡＭ４０内に書き込む。
【０１４６】
この後、制御部２３からの応答として、本体側ＭＩＢアクセスチャネルの受信バッファへのデータ格納通知（即ち、Ｓ６３０における受信通知）があるまで待機し、通知があると、Ｓ１５５０にて、受信バッファからパケット形式のデータを読み出して、本体側でＯＢＪＡＣＣ関数を呼び出したことによる戻り値を、呼び元のタスクに返すためのパラメータに変換して、そのパラメータを呼び元のタスクに受け渡し、更にＳ１５１０にて取得したセマフォを解放して（Ｓ１５６０）、当該処理を終了する。
【０１４７】
続いて、図１７（ｂ）は、ＬＡＮ側ＭＩＢアクセス関数呼び出し処理を表すフローチャートである。
ＣＰＵ３１は、制御部２３側からＬＡＮ側ＭＩＢアクセスチャネルの受信バッファにデータが格納されたことを示す通知（Ｓ６３０における通知）があると、当該処理を実行し、まずＳ１６１０にて、ＬＡＮ側ＯＢＪＡＣＣ関数呼び出しのためのセマフォを取得する。尚、このセマフォは、本体側ＯＢＪＡＣＣ関数呼び出し用のセマフォと同様の目的で使用されるものである。
【０１４８】
続いてＳ１６２０において、ＣＰＵ３１は、ＬＡＮ側ＭＩＢアクセスチャネルの受信バッファからパケットを取得し、これをＬＡＮＩ／Ｆ１９側でＯＢＪＡＣＣ関数を呼び出すためのパラメータに変換し、Ｓ１６３０にて、ＯＢＪＡＣＣ関数を呼び出す。
【０１４９】
この後、ＣＰＵ３１は、Ｓ１６４０にて、ＯＢＪＡＣＣ関数を呼び出した結果として取得した関数からの戻り値を含むパケットを生成し、これを書込用バッファに格納する。また、Ｓ１６１０にて取得したセマフォを解放し（Ｓ１６５０）、Ｓ１６６０にて上記送信パケット書き込み処理を実行して、当該処理を終了する。
【０１５０】
次に、アプリケーション群として動作するＥＥＰＲＯＭアクセス処理を呼び出すためのプロトコル部のＥＥＰＲＯＭアクセス呼び出し処理と、プリンタステータス通知処理を呼び出すためのプロトコル部のプリンタステータス通知呼び出し処理について説明する。
【０１５１】
図１８（ａ）は、ＥＥＰＲＯＭアクセス呼び出し処理を表すフローチャートである。
ＥＥＰＲＯＭアクセスチャネルの受信バッファへデータが格納されたことを示す通知（Ｓ６３０における通知）があると、ＣＰＵ３１は、当該処理を実行し、まずＳ１７１０にて、ＥＥＰＲＯＭアクセス処理を呼び出すためのセマフォを取得する。ここで、ＥＥＰＲＯＭ３５は、同時アクセスを許容しないハードウェア構成にされており、このセマフォは、本体側からのＥＥＰＲＯＭアクセスと、ＬＡＮＩ／Ｆ１９内でのＥＥＰＲＯＭアクセスとを排他制御することを目的としている。
【０１５２】
このセマフォを取得すると、ＣＰＵ３１は、Ｓ１７２０にて、ＥＥＰＲＯＭアクセスチャネルの受信バッファからパケットを読みだし、これに基づいて、ＥＥＰＲＯＭアクセス処理呼び出し用のパラメータを生成し、このパラメータに基づき、Ｓ１７３０にてＥＥＰＲＯＭアクセス処理を呼び出す。そして、このＥＥＰＲＯＭアクセス処理により、制御部２３側から指示されたＥＥＰＲＯＭ３５内のデータを操作し、Ｓ１７４０にて、ＥＥＰＲＯＭアクセス処理を実行することにより得た戻り値を、ＥＥＰＲＯＭアクセス用に定められたパケットに格納して、これをＤＲＡＭ３７内の書込用バッファに格納する。
【０１５３】
この後、ＣＰＵ３１は、Ｓ１７１０にて取得したセマフォを解放し（Ｓ１７５０）、更に、送信パケット書き込み処理を実行して、上記生成したパケットをＳＲＡＭ４０内に書き込み、当該処理を終了する。
続いて図１８（ｂ）は、プリンタステータス通知呼び出し処理を表すフローチャートである。
【０１５４】
プリンタステータス通知チャネルの受信バッファへデータが格納されたことを示す通知（Ｓ６３０における通知）があると、ＣＰＵ３１は、当該処理を実行し、まずＳ１８１０にて、プリンタステータス通知チャネルの受信バッファから、パケットを読み出し、これに基づいて、プリンタステータス通知処理呼び出し用のパラメータを作成して、Ｓ１８２０にて、プリンタステータス通知処理を呼び出す。そして、制御部２３から指示された宛先にプリンタステータス通知用のメールを作成して、これをＬＡＮ上に送出する。
【０１５５】
またプリンタステータス通知処理が終了すると、ＣＰＵ３１は、Ｓ１８３０にて、プリンタステータス通知処理が完了したことを示す応答パケットを作成し、これをＤＲＡＭ３７内の書込用バッファに格納する。そして、Ｓ１８４０にて送信パケット書き込み処理を実行して、応答パケットをＳＲＡＭ４０上に書き込み、当該処理を終了する。
【０１５６】
以上、本実施例のファクシミリ１０について説明したが、当該ファクシミリ１０においては、プロトコル部に対応する各処理が、アプリケーションから取得した送信用データとチャネルＩＤに関する情報を含むパケットを生成し、これを上記手法にて、受信側がＳＲＡＭ４０より取り込み可能な範囲で、ＳＲＡＭ４０上に書き込み、更に、書き込みが完了すると、書き込みを行ったことを受信側に通知して、受信側に直ぐさまＳＲＡＭ４０からパケットを取り込ませる構成にされているため、結果として、本実施例のファクシミリ１０によれば、ＳＲＡＭ４０にパケットが長時間滞留することにより以後の通信が滞ってしまうなどの問題を十分に抑制することができる。
【０１５７】
また特に、システムコマンドチャネルにおいては、プロトコル部が、すぐさま受信したコマンドを実行するため、長時間システムコマンドが格納されたパケットがＳＲＡＭ４０上に滞留することなく、結果として、送受信パケットの通信制御を円滑に行うことができる。
【０１５８】
また、システムコマンドチャネル及びコマンドチャネルは、パケットを１つしか受信できない構成にされているため、明示的にフロー制御しなくても、受信したパケットの順に、コマンドに対応した処理をＣＰＵに実行させることができる。
【０１５９】
この他、プロトコル部は、データチャネルのオープン時に、ＳＲＡＭ４０より受信バッファに取り込み可能な最大パケット数としての最大クレジット数を通知し、以後、送信側のクレジット数と受信バッファの格納パケット数との合計が閾値（限界クレジット数）以下になる度に、クレジットパケットを生成して、このパケットを通信相手側に送信する構成にされているため、制御部２３及びＬＡＮＩ／Ｆ１９間でやり取りしなければいけない通信制御のためのデータ通信量を最低限に抑えつつ、送信側でクレジット数がゼロになることによってデータ送信が一時的に停止状態になるのを抑制することができ、結果として、効率よく通信を行うことができる。
【０１６０】
尚、本発明の第一チャネルは、システムコマンドチャネルに相当し、第二チャネルはコマンドチャネルに相当し、第三チャネルは、データチャネルに相当する。
また、本発明のデータ取込手段は、本実施例のＳＲＡＭＩ／Ｆデータ読み出し処理、プロトコル部ポーリングタスク処理、受信データポーリング処理に相当する。
【０１６１】
この他、本発明のデータ受渡手段は、本実施例の受信データポーリング処理にてシステムコマンド処理（Ｓ６１０）を呼び出す動作、プロトコル部受信データ読み出し処理のＳ８３０にて受信バッファ内のデータをアプリケーション指定の読み出し先バッファへ転送する動作、上記本体側ＭＩＢアクセス関数呼び出し処理、ＬＡＮ側ＭＩＢアクセス関数呼び出し処理、ＥＥＰＲＯＭアクセス呼び出し処理、及び、プリンタステータス呼び出し処理にて、対応するコマンドチャネルを使用するアプリケーションを呼び出す動作、にて実現される。
【０１６２】
尚、本実施例の受信データポーリング処理では、コマンドチャネル、データチャネルにより送信されてきたパケットを受信すると、ＣＰＵ３１が受信データ待ちのタスクに受信データがあることを通知して、そのタスクに受信バッファのデータを処理させ、システムコマンドチャネルにより送信されてきたパケットを受信すると、ＣＰＵ３１が直接システムコマンド処理を呼び出して実行するようにされているが、後者の動作は、本発明におけるデータ受渡手段がパケットに含まれるコマンドに従った処理を実行する動作に相当する。
【０１６３】
また、データ送出手段は、本実施例のＳＲＡＭＩ／Ｆデータ書き込み処理に相当し、通信制御手段は、プロトコル部に対応する各処理（プロトコル部送信データ書き込み処理、送信パケット書き込み処理など）に相当する。
具体的に、通信制御手段が、外部容量情報を外部のプロセッサから取得する動作は、ＬＡＮＩ／Ｆ１９及び制御部２３双方が、チャネルオープン時に通信相手からオープンパケット若しくはオープンリプレイパケットに含まれるパケット当たり最大データ長、最大クレジット数に関する情報を取得し、更に所定期間毎に、クレジットパケットに含まれるクレジット数付加の情報を取得する動作に相当する。
【０１６４】
【０１６５】
【０１６６】
この他、データ送出手段が第三チャネルにてパケットを送信する場合に、通信制御手段が、外部容量情報に基づき、データ送出手段を制御して、データ送出手段に、パケット数及びパケット長の範囲内でパケットを共有メモリに書き込ませる動作は、ＣＰＵ３１が送信パケット書き込み処理のＳ１２２０にて残りクレジット数がゼロであるかどうか判断し、残りクレジット数がゼロであれば、クレジット付加の通知があるまで待機する動作に相当する。
【０１６７】
また、受信容量通知手段の初期容量通知手段は、ＣＰＵ３１がチャネルオープン処理を実行して、初期データ容量としてのパケット当たり最大データ長及び最大クレジット数を格納したオープンパケット又はオープンリプライパケットを本体側に送信する動作にて実現され、追加容量通知手段は、ＣＰＵ３１がデータチャネルでパケットを受信した場合に、プロトコル部受信データ読み出し処理を実行して、クレジット付加を通知するクレジットパケットを生成し、本体側に送信する動作にて実現される。
【０１６８】
以上、本発明の実施例について説明したが、本発明の通信装置は、上記実施例に限定されるものではなく、種々の態様を採ることができる。
例えば、本実施例では、パケット単位でカウントされるクレジット数で送信側のデータ送出量を調節するようにしたが、クレジット数の代わりに受信側で受信バッファの空きバイト数を所定期間毎に送信側に送信するようにしてもよい。このようにすると、通信制御方法が複雑化するが、より詳細に、送信側のデータ送出量を調節することができる。
【図面の簡単な説明】
【図１】  本実施例のファクシミリ１０の構成を表すブロック図である。
【図２】  ＬＡＮＩ／Ｆ１９の構成を表すブロック図である。
【図３】  ＳＲＡＭ４０内の構成を表す説明図である。
【図４】  データ送受信に係わる各処理と、データの受渡態様とを機能的に表した説明図である。
【図５】  チャネル・プロパティ・テーブルの構成を表す説明図（図５（ａ））と、ＳＲＡＭ４０内に格納されるパケットのデータ構成を表す説明図（図５（ｂ））である。
【図６】  ＳＲＡＭＩ／Ｆデータ読み出し処理を表すフローチャートである。
【図７】  読み出しブロック検索処理を表すフローチャートである。
【図８】  ＳＲＡＭＩ／Ｆデータ書き込み処理を表すフローチャートである。
【図９】  空きブロック検索処理を表すフローチャートである。
【図１０】  プロトコル部ポーリングタスク処理を表すフローチャートである。
【図１１】  受信データポーリング処理を表すフローチャートである。
【図１２】  システムコマンド処理を表すフローチャートである。
【図１３】  プロトコル部受信データ読み出し処理を表すフローチャートである。
【図１４】  チャネルオープン処理を表すフローチャート（図１４（ａ））と、チャネルクローズ処理を表すフローチャート（図１４（ｂ））である。
【図１５】  プロトコル部送信データ書き込み処理を表すフローチャートである。
【図１６】  送信パケット書き込み処理を表すフローチャートである。
【図１７】  本体側ＭＩＢアクセス関数呼び出し処理を表すフローチャート（図１７（ａ））と、ＬＡＮ側ＭＩＢアクセス関数呼び出し処理を表すフローチャート（図１７（ｂ））である。
【図１８】  ＥＥＰＲＯＭアクセス呼び出し処理を表すフローチャート（図１８（ａ））と、プリンタステータス通知呼び出し処理を表すフローチャート（図１８（ｂ））である。
【符号の説明】
１０…ファクシミリ、１９…ＬＡＮＩ／Ｆ、２３…制御部、２５，３１…ＣＰＵ、２９，３７…ＤＲＡＭ、２９ａ，３７ａ…受信バッファ、２７，３３…ＲＯＭ、３５…ＥＥＰＲＯＭ、４０…デュアルポートＳＲＡＭ
【図１】
0004403677.tif 000002
【図２】
0004403677.tif 000003
【図３】
0004403677.tif 000004
【図４】
0004403677.tif 000005
【図５】
0004403677.tif 000006
【図６】
0004403677.tif 000007
【図７】
0004403677.tif 000008
【図８】
0004403677.tif 000009
【図９】
0004403677.tif 000010
【図１０】
0004403677.tif 000011
【図１１】
0004403677.tif 000012
【図１２】
0004403677.tif 000013
【図１３】
0004403677.tif 000014
【図１４】
0004403677.tif 000015
【図１５】
0004403677.tif 000016
【図１６】
0004403677.tif 000017
【図１７】
0004403677.tif 000018
【図１８】
0004403677.tif 000019