"外部デバイスとの通信を実行する通信モジュールと、前記通信に用いられる第1シーケンス番号を格納するシーケンス番号記憶手段と、データの送信が要求されたとき、前記データと前記第1シーケンス番号とを含む第1データユニットを生成するデータユニット生成手段と、前記通信モジュールを用いて、前記外部デバイスに前記第1データユニットを送信するデータユニット送信手段と、前記通信モジュールを用いて、前記外部デバイスから第2シーケンス番号を含む第2データユニットを受信するデータユニット受信手段と、前記第2シーケンス番号を用いて前記格納された第1シーケンス番号を更新するシーケンス番号更新手段とを具備し、前記データユニット送信手段は、前記第1データユニットが送信された後に新たなデータの送信が要求された場合、前記データユニット受信手段により第2データユニットが受信された後に、前記新たなデータと前記シーケンス番号更新手段により更新された第1シーケンス番号とを含む新たな第1データユニットを送信する電子機器。前記第1データユニットが送信されてからのしきい値時間の経過を検出するタイムアウト検出手段をさらに具備し、前記データユニット送信手段は、前記第1データユニットが送信された後に新たなデータの送信が要求された場合、前記データユニット受信手段が第2データユニットを受信する前に、前記タイムアウト検出手段が前記しきい値時間の経過を検出した場合に、前記新たなデータと前記第1シーケンス番号とを含む新たな第1データユニットを送信する請求項1記載の電子機器。前記データユニット受信手段がデータを含まない第2データユニットを受信した場合で、かつ次に送信する第1データユニットがデータを含まない場合、前記第1データユニット送信後のタイムアウト検出処理を行わない請求項2記載の電子機器。前記通信モジュールは、当該通信モジュールと前記外部デバイスとが近接状態である場合に、近接無線通信を実行する請求項1記載の電子機器。前記通信モジュールは、前記外部デバイスよりも前記通信を実行するための優先度が高い請求項1記載の電子機器。外部デバイスとの通信を実行する通信モジュールと、前記通信に用いられる第2シーケンス番号を格納するシーケンス番号記憶手段と、前記通信モジュールを用いて、前記外部デバイスから第1シーケンス番号を含む第1データユニットを受信するデータユニット受信手段と、前記第1データユニットを受信した際、前記第1シーケンス番号と前記第2シーケンス番号との比較を行い、前記第1シーケンス番号と前記第2シーケンス番号とが等しいとき、前記第2シーケンス番号に所定の値を加算することによって前記第2シーケンス番号を更新するシーケンス番号更新手段と、前記更新された第2シーケンス番号を含む第2データユニットを生成するデータユニット生成手段と、前記通信モジュールを用いて、前記外部デバイスに前記第2データユニットを送信するデータユニット送信手段とを具備する電子機器。前記データユニット生成手段は、送信待ちのデータがある場合、前記送信待ちのデータと前記更新された第2シーケンス番号とを含む第2データユニットを生成する請求項6記載の電子機器。前記通信モジュールは、当該通信モジュールと前記外部デバイスとが近接状態である場合に、近接無線通信を実行する請求項6記載の電子機器。前記通信モジュールは、前記外部デバイスよりも前記通信を実行するための優先度が低い請求項6記載の電子機器。通信を実行する第1装置と第2装置とによって構成される通信システムであって、前記第1装置は、前記通信に用いられる第1シーケンス番号を格納し、データの送信が要求されたとき、前記データと前記第1シーケンス番号とを含む第1データユニットを生成し、前記第2装置に前記第1データユニットを送信し、前記第2装置から第2シーケンス番号を含む第2データユニットを受信し、前記第2シーケンス番号を用いて前記格納された第1シーケンス番号の値を更新し、前記第1データユニットが送信された後に新たなデータの送信が要求された場合、前記第2データユニットが受信された後に、前記新たなデータと前記更新された第1シーケンス番号とを含む新たな第1データユニットを送信するように構成され、前記第2装置は、前記第2シーケンス番号を格納し、前記第1装置から前記第1データユニットを受信し、前記第1シーケンス番号と前記第2シーケンス番号とが等しいとき、前記第2シーケンス番号に所定の値を加算することによって前記第2シーケンス番号を更新し、前記更新された第2シーケンス番号を含む第2データユニットを生成し、前記外部デバイスに前記第2データユニットを送信するように構成される通信システム。しかし、マスタの待ち時間がスレーブの待ち時間よりも短く設定されるので、前のフレームの送信が完了した後、マスタとスレーブとが共にデータの送信を待っているとき、マスタによるデータ送信がスレーブによるデータ送信よりも常に先に要求される。つまり、マスタによるデータ送信が連続して要求されている間、スレーブが割り込んでデータを送信することはできない。したがって、ステータスの変更のような緊急度が高いデータを送信したい場合であっても、スレーブはデータを送信することができない可能性がある。本発明は、非対称なデータ伝送を行うための伝送路で、擬似的に全二重通信を行うことができる電子機器及び通信システムを提供することを目的とする。実施形態によれば、電子機器は、通信モジュール、シーケンス番号記憶手段、データユニット生成手段、データユニット送信手段、データユニット受信手段、及びシーケンス番号更新手段を具備する。通信モジュールは、外部デバイスとの通信を実行する。シーケンス番号記憶手段は、前記通信に用いられる第1シーケンス番号を格納する。データユニット生成手段は、データの送信が要求されたとき、前記データと前記第1シーケンス番号とを含む第1データユニットを生成する。データユニット送信手段は、前記通信モジュールを用いて、前記外部デバイスに前記第1データユニットを送信する。データユニット受信手段は、前記通信モジュールを用いて、前記外部デバイスから第2シーケンス番号を含む第2データユニットを受信する。シーケンス番号更新手段は、前記第2シーケンス番号を用いて前記格納された第1シーケンス番号を更新する。データユニット送信手段は、前記第1データユニットが送信された後に新たなデータの送信が要求された場合、前記データユニット受信手段により前記第2データユニットが受信された後に、前記新たなデータと前記シーケンス番号更新手段により更新された第1シーケンス番号とを含む新たな第1データユニットを送信する。以下、実施の形態について図面を参照して説明する。図1は、本発明の一実施形態に係る電子機器の構成を示している。この電子機器は、例えば、携帯機器例えば、携帯電話機、PDA、オーディオプレーヤ、補助記憶媒体等、パーソナルコンピュータ、又はコンシューマ機器例えば、TV、ビデオレコーダ等として実現される。この電子機器は近接無線通信を実行する通信モジュールを備えており、近接無線通信機能を有する他のデバイス外部デバイスとの無線接続を確立し、そして外部デバイスとの近接無線通信をピアツーピア形式で実行する。この電子機器10は、システム制御部101、ROM102、RAM103、近接無線通信デバイス104、電源制御部105、ACアダプタ106、バッテリ107、及び記憶装置108を備える。システム制御部101は、電子機器10内の各部の動作を制御する。システム制御部101は、CPU101aを備え、ROM102、RAM103、近接無線通信デバイス104、電源制御部105、及び記憶装置108に接続される。CPU101aは、ROM102に格納された命令群及びデータをRAM103へロードし、必要な処理を実行するプロセッサである。RAM103には、近接無線通信を制御するための通信制御プログラム109がロードされている。CPU101aは、RAM103にロードされた通信制御プログラム109を実行して、近接無線通信デバイス104を制御する。近接無線通信デバイス104は、近接無線通信を実行する通信モジュールである。近接無線通信デバイス104は、近接無線通信デバイス104から所定の距離内に存在する、近接無線通信機能を有する他のデバイス外部デバイスとの無線接続を確立し、そしてファイルのようなデータの伝送を開始する。近接無線通信デバイス104と外部デバイスとの間の近接無線通信は、ピアツーピア形式で実行される。通信可能距離は例えば3cmである。近接無線通信デバイス104と外部デバイスとの間の無線接続は、近接無線通信デバイス104と外部デバイスとが近接状態である場合、つまり近接無線通信デバイス104と外部デバイスとの間の距離が通信可能距離例えば3cm以内に接近した場合に可能となる。近接無線通信デバイス104と外部デバイスとが通信可能距離以内に接近した時、近接無線通信デバイス104と外部デバイスとの間の無線接続が確立される。そして、例えば、外部デバイスは、記憶装置108内の所定の記憶領域へアクセスし、所定の記憶領域からのデータファイルの読み出しや、所定の記憶領域へのデータファイルの書き込み等によるデータの伝送が、近接無線通信デバイス104と外部デバイスとの間で実行される。近接無線通信においては、誘導電界が用いられる。近接無線通信方式としては、例えばTransferJetを使用し得る。TransferJetは、UWBを利用した近接無線通信方式であり、高速データ転送を実現することができる。近接無線通信デバイス104はアンテナ104aに接続されている。アンテナ104aはカプラと称される電極であり、誘導電界を用いた無線信号により、外部デバイスに対するデータの送受信を行う。外部デバイスがアンテナ104aから通信可能距離例えば3cm以内の範囲内に接近した場合、近接無線通信デバイス104及び外部デバイスそれぞれのアンテナカプラ間が誘導電界によって結合され、これによって近接無線通信デバイス104と外部デバイスとの間の無線通信が実行可能となる。なお、近接無線通信デバイス104及びアンテナ104aは、一つのモジュールとして実現し得る。電源制御部105は、ACアダプタ106を介して外部から供給される電力、又はバッテリ107から供給される電力を用いて、電子機器10内の各部に電力を供給する。換言すれば、電子機器10は、AC商用電源のような外部電源、又はバッテリ107によって駆動される。ACアダプタ106は電子機器10内に設けることもできる。図2には、2つのデバイス間で実行される近接無線通信の様子が示されている。ここでは、デバイスAが携帯電話から構成され、デバイスBがポータブルコンピュータから構成されている場合を想定する。ユーザは、例えば、デバイスAをデバイスBに近接させるという操作タッチ操作を行うことにより、デバイスA,B間のデータ転送を開始させることができる。デバイスA,B間のデータ転送は、デバイスA,Bが互いに近接したことをトリガに実行される。上述の電子機器10は、デバイスAとデバイスBのどちらとしても機能し得る。図3は、近接無線通信デバイス104を用いて実行される近接無線通信を制御するためのソフトウェアアーキテクチャを示す。図3のソフトウェアアーキテクチャは近接無線通信を制御するためのプロトコルスタックの階層構造を示している。プロトコルスタックは、物理層PHY21、コネクション層CNL22、プロトコル変換層PCL23、アプリケーション層24から構成されている。例えば、コネクション層CNL22、プロトコル変換層PCL23、アプリケーション層24は通信制御プログラム109によって実現し得る。物理層PHY21は物理的なデータ転送を制御する層であり、OSI参照モデル内の物理層に対応する。物理層PHY21の一部の機能又は全ての機能は、近接無線通信デバイス104内のハードウェアを用いて実現することもできる。物理層PHY21は、コネクション層CNL22からのデータを無線信号に変換する。コネクション層CNL22は、OSI参照モデル内のデータリンク層及びトランスポート層に対応しており、近接状態に設定されている近接無線通信デバイス104と外部デバイスとの間の接続CNL接続を確立/解除し、データを伝送する処理を実行する。プロトコル変換層PCL23は、OSI参照モデル内のセッション層及びプレゼンテーション層に対応しており、アプリケーション層24と、デバイスA,B間の接続の確立及び解除を制御するためのコネクション層CNL22との間に位置する。プロトコル変換層PCL23は、アプリケーション層24内の各アプリケーション通信プログラムの管理と、セッション制御とを実行する。セッションは、電子機器10のアプリケーション層24と外部デバイスのアプリケーション層との間の通信路伝送路に相当する。より具体的には、プロトコル変換層PCL23は、アプリケーション層24の各通信プログラムが扱うアプリケーションプロトコルユーザプロトコルとも称する、例えば、SCSI、OBEX、他の汎用プロトコル等に対応したデータユーザデータを特定の伝送用データ形式に変換するための変換処理を実行する。この変換処理により、いずれの通信プログラムによって送受信されるデータであっても、コネクション層CNL22が扱うことが可能なパケット特定の伝送用データ形式のデータに変換することができる。このプロトコル変換層PCL23は、さまざまなアプリケーションプロトコルを近接無線通信で利用することを可能にする。また、プロトコル変換層PCL23は、通信相手のデバイスとの間でサービス情報各デバイスが提供可能なサービスを示す情報及びセッション情報確立/切断対象のセッションに関する情報を交換する処理、さらに、アプリケーションの起動、コネクションの管理、及びセッションの管理等を行う。アプリケーション層24は、SCSI、OBEX、他の汎用プロトコル等の幾つかのアプリケーションプロトコルにそれぞれ対応した複数の通信プログラムアプリケーションを含んでいる。各アプリケーションは、プロトコル変換層PCL23に対してサービスセッションの開始/終了を要求する処理、及びプロトコル変換層PCL23を介してデータを送受信する処理を実行する。また、図4は、図3に示した階層と階層間の関係を実現するためのサービスアクセスポイントSAPとの例を示す。サービスアクセスポイントは、隣接する階層間において、一方の階層から他方の階層に要求や応答等のコマンドを伝えるためのインタフェースである。物理層サービスアクセスポイントPHYSAP21aは、物理層21とコネクション層CNL22との間のインタフェースである。コネクション層サービスアクセスポイントCNLSAP22aは、コネクション層CNL22とプロトコル変換層PCL23との間のインタフェースである。また、プロトコル変換層PCL23は、プロトコル変換層コントローラPCLコントローラ231とプロトコル変換層シリアルアダプタPCLシリアルアダプタ232とを備える。PCLコントローラ231及びPCLシリアルアダプタ232は、コネクション層CNL22を介して、外部デバイスとの通信を行う。PCLコントローラ231は、アプリケーションマネージャ241に対して、接続の確立や解除、認証等の共通のサービスを提供する。PCLシリアルアダプタ232は、シリアルプロトコルEIA/TIA-232-Eに対応するデータを、コネクション層CNL22が扱うことが可能なパケットに変換することができるPCLアダプタである。PCLシリアルアダプタ232は、PCLコントローラ231によって接続が確立された後にデータを伝送する。なお、プロトコル変換層PCL23は、他のユーザプロトコル例えば、OBEX、他の汎用プロトコル等に対応するデータを、コネクション層CNL22が扱うことが可能なパケットに変換することができる複数のPCLアダプタを備えてもよい。その場合、複数のPCLアダプタの内、PCLコントローラ231によって選択された一つのPCLアダプタが起動される。アプリケーション層24は、アプリケーションマネージャ241とポートエミュレータ242とを備える。アプリケーションマネージャ241は、通信を要求する各種のアプリケーションプログラムを管理し、通信に用いられるプロトコルに応じて、PCLコントローラサービスアクセスポイント231aを介してPCLコントローラ231を制御する。ポートエミュレータ242は、シリアルプロトコルによる通信をエミュレートするためのプログラムである。ポートエミュレータ242は、各種のアプリケーションプログラムによって、シリアルプロトコルに基づくデータ伝送サービスが実行されるとき、データの送受信等に応じたコマンドを生成する。そして、ポートエミュレータ242は、PCLシリアルサービスアクセスポイント232aを介して、PCLシリアルアダプタ232に対してコマンドを出力する。PCLコントローラ231は、アプリケーションマネージャ241による制御の下、PCLコントローラ231と外部デバイスのPCLコントローラとの間で、起動するアダプタのネゴシエーションを実行する。ここで、シリアルアダプタが選択された場合、PCLシリアルアダプタ232が起動される。PCLシリアルアダプタ232は、ポートエミュレータ242によって出力されたコマンドに応じて、外部デバイスとのシリアルプロトコルによる通信を実行する。なお、コネクション層CNL22では、外部デバイスにサービスの開始を要求するデバイス以下、Initiatorと称するをマスタとし、外部デバイスから送信されるサービスの開始要求を受信するデバイス以下、Responderと称するをスレーブとして通信サービスが実行される。Initiatorは、通信相手のデバイスを制御してデバイス間のデータ転送のようなサービスを実行する。Responderは、通信相手のデバイスの制御の下、デバイス間のデータ転送のようなサービスを実行する。上述の電子機器10は、InitiatorとResponderのどちらとしても機能し得る。コネクション層CNL22では、Initiatorによって送信されるデータデータユニットの優先度が、Responderによって送信されるデータデータユニットの優先度よりも高く設定され、非対称な通信が実行される。図5を参照して、この非対称な通信が実行される際に、InitiatorとResponderとによって送信されるデータユニットの例について説明する。図5に示す例では、Initiatorによって送信されるデータユニットの優先度を、Responderによって送信されるデータユニットの優先度よりも高く設定するために、一つ前のフレームコマンドの処理が完了してからのInitiatorの通信待ち時間IIFSとも称する、例えば8.5マイクロ秒が、Responderの通信待ち時間RIFSとも称する、例えば15.7マイクロ秒よりも短く設定されている。InitiatorとResponderの双方が通信を要求する場合、InitiatorがIIFSだけ待って通信を要求し、ResponderがRIFSだけ待って通信を要求するので、常にInitiator側の通信が先行して実行される。そのため、図6のように、Initiator側が大量のデータを送信する場合、Initiatorが一連の送信シーケンスS11~S16を完了するまで、Responderはデータを送信することS17ができない。例えば、Responderは、ステータスの変更などの緊急度が高いデータを送信したいときであっても、Initiatorによるデータ送信が途切れるまで、データ送信を開始する割り込むことができない。プロトコル変換層PCL23のPCLシリアルアダプタ232は、アプリケーション層24で、シリアルプロトコルのような全二重通信を実行するプロトコルを用いたプログラムすなわち、上述のポートエミュレータ242を用いたプログラムを実行するために、擬似的な全二重通信PseudoFullDuplexEmulationを実行するための機能を有する。つまり、PCLシリアルアダプタ232は、Initiatorによってデータが送信されている途中であっても、Responderが待たされることなく割り込んでデータを送信できる機能を実現する。図7は、擬似的な全二重通信を実行するための通信制御プログラム109の機能構成の例を示す。すなわち、通信制御プログラム109はPCLシリアルアダプタ232の動作を実現するプログラムである。図7の例では、Initiatorとして動作するための通信制御プログラム109aの構成と、Responderとして動作するための通信制御プログラム109bの構成とを示すが、1つの通信制御プログラム109が通信制御プログラム109aの構成と通信制御プログラム109bの構成とを備えてもよい。すなわち、電子機器10がInitiatorとして動作するとき、通信制御プログラム109aの構成によって通信処理が実行され、電子機器10がResponderとして動作するとき、通信制御プログラム109bの構成によって通信処理が実行される。ここで、Initiatorとして動作する第1デバイスとResponderとして動作する第2デバイスとは、近接状態にあり、第1デバイスに設けられた近接無線通信デバイスと第2デバイスに設けられた近接無線通信デバイスとの間で接続CNL接続が確立されていることを想定する。図5及び図6を参照して説明したように、コネクション層CNL22での第1デバイスInitiatorのデータ伝送は、第2デバイスResponderのデータ伝送よりも優先して実行される。また、接続開始時のネゴシエーションによって、PCLコントローラ231によってPCLシリアルアダプタ232が選択されたことすなわち、通信プロトコルとしてシリアルプロトコルが選択されたことを想定する。したがって、第1デバイスでは通信制御プログラム109aが実行され、第2デバイスでは通信制御プログラム109bが実行される。第1デバイスInitiator上で実行される通信制御プログラム109aは、一つのデータユニットを第2デバイスResponderに送信した後、Responderから一つのデータユニットを受信するまで、次のデータユニットの送信を待つように通信を制御する。つまり、Responderから一つのデータユニットを受信した後に、新たに一つのデータユニットを送信することができる。通信制御プログラム109aは、初期化部31、通信制御部32、データユニット生成部33、データユニット送信部34、タイムアウト検出部35、データユニット受信部36、シーケンス番号更新部37等を備える。初期化部31は、PCLコントローラ231によってPCLシリアルアダプタ232が選択起動されたとき、初期化処理を実行する。初期化部31は、例えば、Initiatorシーケンス番号38を初期化する、すなわち、Initiatorシーケンス番号38に0を設定する。Initiatorシーケンス番号38は、InitiatorとResponderとの間のデータ伝送を制御するために用いられる。Initiatorシーケンス番号38は、例えば、メモリ103内の領域に格納される。初期化部31は、初期化が完了したことを通信制御部32に通知する。通信制御部32は、送信待ちのデータ39があるか否か又はポートエミュレータ242によって、データの送信を要求するコマンドが出力されているか否かを判定する。通信制御部32は、送信待ちのデータ39がある場合、データユニット生成部33にデータユニットの生成を要求する。なお、送信待ちデータ39は、例えば、メモリ103内の領域に格納されている。送信待ちデータ39は、ポートエミュレータ242によって出力される送信要求コマンドに指定された、送信対象のデータである。データがデータユニットのペイロードとして送信された後、当該データはメモリ103から削除される。データのサイズが、一つのデータユニットのペイロードとして送信できるサイズよりも大きい際には、そのサイズに応じて分割して送信されるので、送信が完了したデータ部分がメモリ103から削除される。データユニット生成部33は、通信制御部32による要求に応じて、送信待ちデータ39とInitiatorシーケンス番号第1シーケンス番号とも称する38とを含むデータユニット第1データユニットとも称するを生成する。なお、Initiatorシーケンス番号38は、例えば、データユニット内のヘッダ部分に記述される。データユニット生成部33は、生成したデータユニットをデータユニット送信部34に出力する。データユニット送信部34は、データユニット生成部33によって出力されたデータユニットを外部デバイス外部デバイスのデータユニット受信部46に送信する。データユニット送信部34は、データユニットを送信したことをタイムアウト検出部35に通知する。タイムアウト検出部35は、データユニットが送信されてからの経過時間を計測する。そして、タイムアウト検出部35は、計測した時間がしきい値時間例えば、1ミリ秒を超えたか否か、すなわち、タイムアウトを検出する。タイムアウト検出部35は、タイムアウトが検出されたことを通信制御部32に通知する。また、データユニット受信部36は、外部デバイスによって送信されたデータユニットを受信する。外部デバイスからデータユニットを受信した場合、データユニット受信部36は、受信したデータユニットに含まれるシーケンス番号第2シーケンス番号とも称するを読み出す。そして、データユニット受信部36は、読み出したシーケンス番号をシーケンス番号更新部37に出力する。また、データユニット受信部36は、受信したデータユニットに含まれるデータ受信データを読み出す。そして、データユニット受信部36は、読み出した受信データを通信制御部32に出力する。シーケンス番号更新部37は、データユニット受信部36によって出力されたシーケンス番号を用いて、メモリ13等に格納されているInitiatorシーケンス番号38を更新する。つまり、Initiatorシーケンス番号38に、受信したデータユニットに含まれるシーケンス番号が設定される。通信制御部32は、データユニット受信部36によって出力された受信データを、ポートエミュレータ242等を介して所定のアプリケーションプログラムに出力する。アプリケーションプログラムは、受信データを用いて所定の処理例えば、データのバックアップ処理等を実行する。なお、通信制御部32は、メモリ103内の所定の領域に受信データを格納することによって、アプリケーションプログラムに受信データを渡してもよい。また、通信制御部32は、データユニット送信部34を介して外部デバイスに一つのデータユニットを送信した後、データユニット受信部36を介して外部デバイスから一つのデータユニットを受信するまで、新たなデータユニットが外部デバイスに送信されることを待つように、通信制御プログラム109a内の各部を制御する。つまり、通信制御部32は、データユニット送信部34を介して外部デバイスに一つのデータユニットを送信した後に、データユニット受信部36を介して外部デバイスから一つのデータユニットを受信したとき、新たなデータユニットの送信を許可する。又は、通信制御部32は、データユニット送信部34を介して外部デバイスに一つのデータユニットを送信した後、データユニット受信部36を介して外部デバイスから一つのデータユニットを受信せずに、タイムアウト検出部35によってタイムアウトが検出されたときすなわち、データユニットを送信してからの経過時間がしきい値を超えたとき、新たなデータユニットの送信を許可する。したがって、データユニット送信部34を介して外部デバイスに一つのデータユニットを送信し、データユニット受信部36を介して外部デバイスから一つのデータユニットを受信した後に、通信制御部32は、上述のようにデータユニット生成部33及びデータユニット送信部34を介して、シーケンス番号更新部37によって更新されたInitiatorシーケンス番号38とデータとを含む新たなデータユニットを外部デバイスに送信する。また、タイムアウト検出部35によってタイムアウトが検出された際には、通信制御部32は、上述のようにデータユニット生成部33及びデータユニット送信部34を介して、Initiatorシーケンス番号38更新されていないInitiatorシーケンス番号38とデータとを含む新たなデータユニットを外部デバイスに送信する。なお、タイムアウト検出部35は、データユニット送信部34によって一つデータユニットが送信されてからの経過時間を計測している間に、データユニット受信部36によって一つのデータユニットが受信された場合、経過時間の計測を終了してもよい。また、データユニット受信部36によって、データを含まないデータユニットACKが受信され、且つデータユニット送信部34によって次に送信される新たなデータユニットがデータを含まない場合、タイムアウト検出部35は、データユニット送信部34によって一つデータユニットが送信されてからの経過時間を計測しなくてもよい、すなわち、タイムアウトを検出しなくてもよい。次いで、第2デバイスResponder上で実行される通信制御プログラム109bは、第1デバイスInitiatorにデータユニットを送信することが要求されたとき、Responder内に格納されるResponderシーケンス番号48をインクリメントし、インクリメントされたResponderシーケンス番号48を含むデータユニットを送信するように通信を制御する。通信制御プログラム109bは、初期化部41、通信制御部42、シーケンス番号更新部43、データユニット生成部44、データユニット送信部45、データユニット受信部46、シーケンス番号判定部47等を備える。初期化部41は、PCLコントローラ231によってPCLシリアルアダプタ232が選択起動されたとき、初期化処理を実行する。初期化部41は、例えば、Responderシーケンス番号48を初期化する、すなわち、Responderシーケンス番号48に0を設定する。Responderシーケンス番号48は、InitiatorとResponderとの間のデータ伝送を制御するために用いられる。Responderシーケンス番号48は、例えば、メモリ103内の領域に格納される。初期化部41は、初期化が完了したことを通信制御部42に通知する。通信制御部42は、送信待ちのデータ49があるか否か又はポートエミュレータ242によって、データの送信を要求するコマンドが出力されているか否かを判定する。通信制御部42は、送信待ちのデータ49がある場合、シーケンス番号更新部43に、Responderシーケンス番号48の更新を要求する。なお、送信待ちデータ49は、例えば、メモリ103内の領域に格納されている。送信待ちデータ49は、ポートエミュレータ242によって出力される送信要求コマンドに指定された、送信対象のデータである。データがデータユニットのペイロードとして送信された後、当該データはメモリ103から削除される。データのサイズが、一つのデータユニットのペイロードとして送信できるサイズよりも大きい際には、そのサイズに応じて分割して送信されるので、送信が完了したデータ部分がメモリ103から削除される。シーケンス番号更新部43は、通信制御部42による要求に応じて、Responderシーケンス番号48をインクリメントすることによって、Responderシーケンス番号48を更新する。つまり、シーケンス番号更新部43は、Responderシーケンス番号に所定の値例えば、1を加算した値を、新たなResponderシーケンス番号48としてメモリ103等に保存する。そして、シーケンス番号更新部43は、Responderシーケンス番号48が更新されたことをデータユニット生成部44に通知する。データユニット生成部44は、シーケンス番号更新部43による要求に応じて、送信待ちデータ49があるか否かを判定する。そして、送信待ちデータ49がある場合、データユニット生成部44は、送信待ちデータ49と更新されたResponderシーケンス番号48とを含むデータユニット第2データユニットとも称するを生成する。また、送信待ちデータ49がない場合、データユニット生成部44は、Responderシーケンス番号48を含むACKを生成する。Responderシーケンス番号48を含むACKは、換言すると、データを含まないデータユニットデータ長0の第2データユニットである。なお、Responderシーケンス番号48は、例えばデータユニット内のヘッダ部分に記述される。データユニット生成部44は、生成したデータユニット又はACKをデータユニット送信部45に出力する。データユニット送信部45は、データユニット生成部44によって出力されたデータユニットを外部デバイス外部デバイスのデータユニット受信部36に送信する。また、データユニット受信部46は、外部デバイスによって送信されたデータユニットを受信する。外部デバイスからデータユニットを受信した場合、データユニット受信部46は、受信したデータユニットに含まれるシーケンス番号Initiatorシーケンス番号38を読み出す。そして、データユニット受信部46は、読み出したシーケンス番号をシーケンス番号判定部47に出力する。また、データユニット受信部46は、受信したデータユニットに含まれるデータ受信データを読み出す。そして、データユニット受信部46は、読み出した受信データを通信制御部42に出力する。通信制御部42は、データユニット受信部46によって出力された受信データを、ポートエミュレータ242等を介して所定のアプリケーションプログラムに出力する。アプリケーションプログラムは、受信データを用いて所定の処理例えば、バックアップデータの更新処理等を実行する。なお、通信制御部42は、メモリ103内の所定の領域に受信データを格納することによって、アプリケーションプログラムに受信データを渡してもよい。また、シーケンス番号判定部47は、データユニット受信部46によって出力されたシーケンス番号と、メモリ103等に格納されたResponderシーケンス番号48とが等しいか否かを判定する。シーケンス番号判定部47は、データユニット受信部46によって出力されたシーケンス番号すなわち、受信されたデータユニットに含まれるシーケンス番号とResponderシーケンス番号48とが等しいか否かを通信制御部42に通知する。通信制御部42は、シーケンス番号判定部47によって、受信されたデータユニットに含まれるシーケンス番号とResponderシーケンス番号48とが等しいことが通知された場合、上述のように、シーケンス番号更新部43、データユニット生成部44及びデータユニット送信部45を介して、シーケンス番号更新部43によって更新インクリメントされたResponderシーケンス番号48とデータとを含むデータユニット、又は更新されたResponderシーケンス番号48を含むACKを外部デバイスに送信する。通信制御部42は、シーケンス番号判定部47によって、受信されたデータユニットに含まれるシーケンス番号とResponderシーケンス番号48とが等しくないことが通知された場合、Responderによって既に送信された、現在のResponderシーケンス番号48を含むデータユニットが、通信経路伝送経路の途中のバッファ等に存在することが想定されるので、ACKデータユニットを送信しない。なお、通信制御部42は、送信したデータユニット又はACKの送信エラーを検出した場合、シーケンス番号更新部43に、Responderシーケンス番号48のデクリメントを要求する。シーケンス番号更新部43は、通信制御部42による要求に応じて、Responderシーケンス番号48から所定の値例えば、1を減算することによって、Responderシーケンス番号48を更新する。以上の構成により、Initiatorである電子機器10は、外部デバイスResponderに一つのデータユニットを送信した後、一つのデータユニットを外部デバイスから受信するまで、又は外部デバイスに一つのデータユニットを送信してから所定の時間が経過してタイムアウトするまで、次のデータユニットの送信を待つように制御される。つまり、Initiatorは、一つのデータユニットを送信した後、ResponderからデータユニットとACKのいずれか一方を受信することなく、連続してデータユニットを送信することはできないように制御される。また、Responderは、アプリケーションプログラムによってデータの送信が要求されたとき等、自由なタイミングでデータユニットを送信することができる。つまり、Initiatorにおいて、複数のデータユニットを連続して送信するような要求が生じていても、Responderである電子機器10は、割り込んでデータデータユニットを送信することができる。したがって、コネクション層CNL22では、ResponderよりもInitiatorによるデータ伝送が優先される非対称な通信が実行される構成であっても、通信制御プログラム109a,109bシリアルアダプタ232によって擬似的な全二重通信を実現することができる。図8は、電子機器10によって送受信されるデータユニットの一構成例を示す。シリアルプロトコルデータ51は、アプリケーション層のポートエミュレータ242等によって送信が要求されたデータである。つまり、シリアルプロトコルデータ51は、送信待ちデータ39,49、又は送信待ちデータ39,49の内の一部のデータである。また、PCLシリアルプロトコルデータユニットPCLシリアルPDU52は、シリアルプロトコルデータ51であるPCLシリアルサービスデータユニットPCLシリアルSDU52bに、ヘッダ52aが付加されたデータユニットである。このヘッダ内に上述のシーケンス番号38,48が記述される。コネクション層CNL22では、PCLシリアルPDU52であるトランスポートブロック53が複数のCNLサービスユニットCSDU53aに分割され、送信される。また、図9及び図10は、PCLシリアルPDU52のフォーマットの例を示す。PCLシリアルPDU52は、先頭から4バイト目までにヘッダ部分52aを含み、5バイト目以降に送受信対象のデータ部分52bを含む。データ部分52bに格納されるデータのサイズは、例えば、0バイトから65535バイトである。また、1バイト目Byte0の先頭の3ビットには接続番号例えば、0から7までのいずれかの値が記述され、残りの5ビットにはデータコマンド例えば、0x03が記述される。2バイト目Byte1には、擬似的な全二重通信を行うためのシーケンス番号が記述される。シーケンス番号には、例えば0から255までのいずれかの値が記述される。したがって、シーケンス番号には、Initiatorによって送信されるデータユニットではInitiatorシーケンス番号38が記述され、Responderによって送信されるデータユニットではResponderシーケンス番号48が記述される。3バイト目から4バイト目までByte2及びByte3には、PCLシリアルSDU52bの長さすなわち、データ部分52bに格納されたデータの長さが記述される。長さには、例えば0から65535までのいずれかの値が記述される。なお、長さが0であるPCLシリアルPDU52は、ACKとして用いられる。図11は、プロトコル変換層シリアルサービスアクセスポイントPCLシリアルSAP232aを介して、ポートエミュレータ242とPCLシリアルアダプタ232との間で用いられるコマンドの例を示す。つまり、ポートエミュレータ242は、これらコマンドを用いてシリアルアダプタ232aを制御する。また、他のサービスアクセスポイント231a,22a等でも同様のコマンドが用いられる。requestは、下位層で実行されるサービスを要求するためのコマンドである。confirmationは、サービスの要求に応答するためのコマンドである。indicationは、下位層から上位層への非同期のインジケーションのためのコマンドである。responseは、インジケーションに対して応答するためのコマンドである。また、コマンドの種類には、開始を示すSTART、停止を示すSTOP、データ転送を示すDATA、ステータス転送を示すSTATUS等が含まれる。より具体的には、例えば、PCLSERIALDATArequestは、ポートエミュレータ242からPCLシリアルアダプタ232に対して、データを送信するサービスを要求するためのコマンドである。また、PCLSERIALDATAindicationは、PCLシリアルアダプタ232からポートエミュレータ242に対して、データを受信したことを通知インジケーションするためのコマンドである。図12から図14は、電子機器10によって実行される階層的な通信シーケンスの例を示す。上述のように、電子機器10は、Initiator10aとResponder10bのどちらとしても機能し得る。なお、以下に説明する通信シーケンスが開始される際のInitiatorシーケンス番号38とResponderシーケンス番号48とはいずれもxであることを想定する。図12は、Initiator10aがResponder10bに一つのデータユニットを送信した後、Responder10bから一つのデータユニットを受信するまで、新たなデータユニットを送信することを待つ通信シーケンスの例を示す。まず、Initiator10aのポートエミュレータ242aアプリケーション層24は、データやステータス等をResponder10bに送信するための要求PCLCSERIALXXXreqをPCLシリアルアダプタ232aプロトコル変換層23に出力するS201。PCLシリアルアダプタ232aは、この要求に応じて、Initiatorシーケンス番号38=xとデータとを含むデータユニットを送信するための要求CNLDATAreqを、コネクション層CNL22aに出力するS202。コネクション層CNL22aでは、PCLシリアルアダプタ232aによって出力されたデータユニットを用いて作成された、Initiatorシーケンス番号38を含むコネクション層サービスデータユニットCSDUが、Responder10bに送信されるS203。なお、PCLシリアルアダプタ232aは、要求をコネクション層CNL22aに出力したことに応答して、タイマーによる計測を開始する。タイマーは、S202で要求が出力されてからの経過時間を計測する。そして、PCLシリアルアダプタ232aは、Responder10bへの一つのデータユニットの送信要求を出力してから、Responder10bからの一つのデータユニットのインジケーションを受け取るまで、又はタイマーによって計測された経過時間がしきい値時間を超えるまで、新たなデータユニットの送信送信要求を待つように制御する。すなわち、PCLシリアルアダプタ232aは、上記の条件に該当する期間内に、ポートエミュレータ242aによって新たなデータ送信要求が出力されても、コネクション層22aにデータユニットの送信要求が出力されないように制御する。Responder10bのコネクション層22bでは、Initiator10aのコネクション層22aによって送信されたCSDUが受信される。コネクション層22bでは、受信されたCSDUに含まれるInitiatorシーケンス番号38を含むインジケーションCNLDATAindがシリアルアダプタ232bに出力されるS204。次いで、シリアルアダプタ232bは、このインジケーションに含まれるInitiatorシーケンス番号38とResponderシーケンス番号48とが等しいかどうかを判定する。Initiatorシーケンス番号38とResponderシーケンス番号48とは、いずれもxであり等しい。そのため、シリアルアダプタ232bは、次にACK又はデータユニットを送信するとき、Responderシーケンス番号48をインクリメントすることによって、Responderシーケンス番号48にyを設定する。そして、シリアルアダプタ232bは、Responderシーケンス番号48=yを含むデータユニットを送信するための要求CNLDATAreqをコネクション層22bに出力するS205。なお、シリアルアダプタ232aは、送信待ちのデータがある場合、そのデータを含むデータユニットの送信を要求し、送信待ちのデータがない場合、ACKすなわち、データを含まないデータユニットの送信を要求する。コネクション層CNL22bでは、シリアルアダプタ232bによって出力されたデータユニットを用いて作成された、Responderシーケンス番号48を含むコネクション層サービスデータユニットCSDU/ACKが、Initiator10aに送信されるS206。Initiator10aのコネクション層22aでは、Responder10bのコネクション層22bによって送信されたCSDUが受信される。コネクション層22aでは、受信されたCSDUに含まれるResponderシーケンス番号48を含むインジケーションCNLDATAindがシリアルアダプタ232aに出力されるS207。また、コネクション層22aからのインジケーションがシリアルアダプタ232aに出力されるS207よりも前に、Initiator10aのポートエミュレータ242は、データ等をResponderに送信するための要求PCLCSERIALXXXreqを出力しているS208。しかし、上述のように、シリアルアダプタ232aは、一つのデータユニットをResponder10bに送信した後に、Responder10bからデータユニットACKを受け取っておらず、且つタイマーによって計測された経過時間がしきい値時間を超えていないので、新たなデータユニットの送信要求をコネクション層22aに出力していない。シリアルアダプタ232aは、S207でコネクション層22aによって出力されたインジケーションに応じてすなわち、Responder10bによって送信されたデータユニットの受信を待って、インジケーションに含まれるResponderシーケンス番号48=yを用いて、Initiatorシーケンス番号38を更新することにより、Initiatorシーケンス番号38にyを設定する。これにより、シリアルアダプタ232aは、データユニットの送信を再開可能になる。そして、シリアルアダプタ232aは、更新されたInitiatorシーケンス番号38とデータとを含むデータユニットの送信要求CNLDATAreqをコネクション層22aに出力するS209。このデータユニットの送信要求は、S208でのポートエミュレータ242による送信要求PCLCSERIALXXXreqに対応する要求である。つまり、シリアルアダプタ232aは、一つのデータユニットをResponder10bに送信した後、一つのデータユニットをResponder10bから受信するまで、新たなデータユニットを送信しないように制御している。そして、コネクション層CNL22aでは、PCLシリアルアダプタ232aによって出力されたデータユニットを用いて作成された、Initiatorシーケンス番号38=yを含むCSDUが、Responder10bに送信されるS210。次いで、図13は、Initiator10aがResponder10bに一つのデータユニットを送信した後、Responder10bから一つのデータユニットを受信するまで、新たなデータユニットを送信することを待つ通信シーケンスの別の例を示す。まず、Initiator10aのポートエミュレータ242aアプリケーション層24は、データやステータス等をResponder10bに送信するための要求PCLCSERIALXXXreqをPCLシリアルアダプタ232aプロトコル変換層23に出力するS301。PCLシリアルアダプタ232aは、この要求に応じて、Initiatorシーケンス番号38=xとデータとを含むデータユニットを送信するための要求CNLDATAreqを、コネクション層CNL22aに出力するS302。コネクション層CNL22aでは、PCLシリアルアダプタ232aによって出力されたデータユニットを用いて作成された、Initiatorシーケンス番号38を含むコネクション層サービスデータユニットCSDUが、Responder10bに送信されるS303。なお、PCLシリアルアダプタ232aは、要求をコネクション層CNL22aに出力したことに応答して、タイマータイムアウト検出部35による計測を開始する。タイマーは、S302で要求が出力されてからの経過時間を計測する。そして、PCLシリアルアダプタ232aは、Responder10bへの一つのデータユニットの送信要求を出力してから、Responder10bからの一つのデータユニットのインジケーションを受け取るまで、又はタイマーによって計測された経過時間がしきい値時間を超えるまで、新たなデータユニットの送信送信要求を待つように制御する。すなわち、PCLシリアルアダプタ232aは、上記の条件に該当する期間中、ポートエミュレータ242aによって新たなデータ送信要求が出力されても、コネクション層22aにデータユニットの送信要求が出力されないように制御する。Responder10bのコネクション層22bでは、Initiator10aのコネクション層22aによって送信されたCSDUが受信される。コネクション層22bでは、受信されたCSDUに含まれるInitiatorシーケンス番号38を含むインジケーションCNLDATAindがシリアルアダプタ232bに出力されるS304。また、Responder10bのコネクション層22bが、Initiator10aのコネクション層22aによって送信されたCSDUを受信するよりも前に、Responder10bのポートエミュレータ242bアプリケーション層24は、データやステータス等をInitiator10aに送信するための要求PCLCSERIALXXXreqをPCLシリアルアダプタ232bプロトコル変換層23に出力するS305。PCLシリアルアダプタ232bは、この要求に応じて、Responderシーケンス番号48をインクリメントすることによって、Responderシーケンス番号48にyを設定する。そして、PCLシリアルアダプタ232bは、Responderシーケンス番号48=yとデータとを含むデータユニットを送信するための要求CNLDATAreqを、コネクション層CNL22bに出力するS306。コネクション層CNL22bでは、PCLシリアルアダプタ232bによって出力されたデータユニットを用いて作成された、Responderシーケンス番号48を含むコネクション層サービスデータユニットCSDUが、Initiator10aに送信されるS307。Initiator10aのコネクション層22aでは、Responder10bのコネクション層22bによって送信されたCSDUが受信される。コネクション層22aでは、受信されたCSDUに含まれるResponderシーケンス番号48を含むインジケーションCNLDATAindがシリアルアダプタ232aに出力されるS308。シリアルアダプタ232aは、このインジケーションに応じて、インジケーションに含まれるResponderシーケンス番号48=yを用いて、Initiatorシーケンス番号38を更新することにより、Initiatorシーケンス番号38にyを設定する。Initiatorシーケンス番号38が更新された後に、Initiator10aのポートエミュレータ242aが、データやステータス等をResponder10bに送信するための要求PCLCSERIALXXXreqをPCLシリアルアダプタ232aに出力したときS309、PCLシリアルアダプタ232aは、この要求に応じて、Initiatorシーケンス番号38=yとデータとを含むデータユニットを送信するための要求CNLDATAreqを、コネクション層CNL22aに出力するS310。すなわち、PCLシリアルアダプタ232aは、S302で一つのデータユニットをResponder10bに送信した後に、S308でResponder10bから一つのデータユニットを受信しており、データユニットの送信が可能であるので、次のデータユニットを送信するための要求をコネクション層CNL22aに出力する。コネクション層CNL22aでは、PCLシリアルアダプタ232aによって出力されたデータユニットを用いて作成された、Initiatorシーケンス番号38を含むコネクション層サービスデータユニットCSDUが、Responder10bに送信されるS311。一方、Responder10bのシリアルアダプタ232bは、S304で、Initiatorシーケンス番号38=xを含むインジケーションCNLDATAindを受け取ったことに応じて、このInitiatorシーケンス番号38とResponderシーケンス番号48とが等しいかどうかを判定する。そして、Initiatorシーケンス番号38=xとResponderシーケンス番号48=yとが等しくないので、シリアルアダプタ232bは、Initiator10aにACKデータユニットを送信しない。つまり、シリアルアダプタ232bは、Initiatorシーケンス番号38とResponderシーケンス番号48とに基づいて、ACKを送信する必要がないことを検出することができる。これにより、Initiator10aによって送信されるデータユニットを受信したことに応じて、毎回ACKを返すような、不要なトラフィックを削減することができる。また、図14は、Initiator10aがResponder10bに一つのデータユニットを送信した後、タイムアウトを検出するまで、新たなデータユニットを送信することを待つ通信シーケンスの例を示す。まず、Initiator10aのポートエミュレータ242aアプリケーション層24は、データやステータス等をResponder10bに送信するための要求PCLCSERIALXXXreqをPCLシリアルアダプタ232aプロトコル変換層23に出力するS401。PCLシリアルアダプタ232aは、この要求に応じて、Initiatorシーケンス番号38=xとデータとを含むデータユニットを送信するための要求CNLDATAreqを、コネクション層CNL22aに出力するS402。コネクション層CNL22aでは、PCLシリアルアダプタ232aによって出力されたデータユニットを用いて作成された、Initiatorシーケンス番号38を含むコネクション層サービスデータユニットCSDUが、Responder10bに送信されるS403。なお、PCLシリアルアダプタ232aは、要求をコネクション層CNL22aに出力したことに応答して、タイマーによる計測を開始する。タイマーは、S402で要求が出力されてからの経過時間を計測する。そして、PCLシリアルアダプタ232aは、Responder10bへの一つのデータユニットの送信要求を出力してから、Responder10bからの一つのデータユニットのインジケーションを受け取るまで、又はタイマーによって計測された経過時間がしきい値時間を超えるまで、新たなデータユニットの送信送信要求を待つように制御する。すなわち、PCLシリアルアダプタ232aは、上記の条件に該当する期間中、ポートエミュレータ242aによって新たなデータ送信要求が出力されても、コネクション層22aにデータユニットの送信要求が出力されないように制御する。また、S402で送信要求が出力されてからの経過時間がしきい値時間を超えるよりも前に、ポートエミュレータ242aが、データ等をResponderに送信するための要求PCLCSERIALXXXreqを出力したときS405、シリアルアダプタ232aは、新たなデータユニットの送信要求をコネクション層22aに出力しない。そして、S402で送信要求が出力されてからの経過時間がしきい値時間を超えた場合すなわち、タイムアウトを検出した場合、シリアルアダプタ232aは、Initiatorシーケンス番号38=xとデータとを含むデータユニットの送信要求CNLDATAreqをコネクション層22aに出力するS406。そして、コネクション層CNL22aでは、PCLシリアルアダプタ232aによって出力されたデータユニットを用いて作成された、Initiatorシーケンス番号38=yを含むCSDUが、Responder10bに送信されるS407。これにより、例えば、Responder10bによって送信されるACKが、通信エラー等の不測の事態によってInitiator10aに届かなかったような場合でも、タイムアウトを検出することで通信データ送信を再開することができる。また、図15から図21は、電子機器10によって実行される通信シーケンスの種々のパターンの例を示す。上述のように、電子機器10は、Initiator10aとResponder10bのどちらとしても機能し得る。なお、以下に説明する通信シーケンスが開始される際のInitiatorシーケンス番号38とResponderシーケンス番号48とはいずれも0であることを想定する。図15は、Initiator10aのみデータを送信する通信シーケンスの例を示す。まず、Initiator10aが、シーケンス番号0とデータとを含むデータユニットをResponder10bに送信するS501。Responder10bは、Initiator10aからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Responderシーケンス番号48とが等しいので、Responderシーケンス番号48をインクリメントすることによって、Responderシーケンス番号48に1を設定する。そして、Responder10bは、送信待ちデータ49がないとき、シーケンス番号1を含むACKをInitiator10aに送信するS502。これにより、Initiator10aにデータ送信の再開が促される。Initiator10aは、Responder10bからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号を用いてInitiatorシーケンス番号38を更新することによって、Initiatorシーケンス番号38に1を設定する。そして、Initiator10aは、シーケンス番号1とデータとを含むデータユニットをResponder10bに送信するS503。また、S504からS508において、S502及びS503と同様の通信シーケンスが繰り返される。図16は、Responder10bのみデータを送信する通信シーケンスの例を示す。まず、Responder10bは、Responderシーケンス番号48をインクリメントすることによって、Responderシーケンス番号48に1を設定する。そして、Responder10bは、データとシーケンス番号1とを含むデータユニットをInitiator10aに送信するS511。次いで、Responder10bは、Responderシーケンス番号48をインクリメントすることによって、Responderシーケンス番号48に2を設定する。そして、Responder10bは、データとシーケンス番号2とを含むデータユニットをInitiator10aに送信するS512。また、S513からS514において、同様の通信シーケンスが繰り返される。図17は、Initiator10aとResponder10bの双方がデータを送信する通信シーケンスの例を示す。まず、Initiator10aが、シーケンス番号0とデータとを含むデータユニットをResponder10bに送信するS521。Responder10bは、Initiator10aからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Responderシーケンス番号48とが等しいので、Responderシーケンス番号48をインクリメントすることによって、Responderシーケンス番号48に1を設定する。そして、Responder10bは、シーケンス番号1とデータとを含むデータユニットをInitiator10aに送信するS522。Initiator10aは、Responder10bからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号を用いてInitiatorシーケンス番号38を更新することによって、Initiatorシーケンス番号38に1を設定する。そして、Initiator10aは、シーケンス番号1とデータとを含むデータユニットをResponder10bに送信するS523。また、S524からS525において、S522及びS523と同様の通信シーケンスが繰り返される。図18は、Initiator10aがデータを連続して送信している間に、Responder10bが割り込んでデータを送信する通信シーケンスの例を示す。まず、Initiator10aが、シーケンス番号0とデータとを含むデータユニットをResponder10bに送信するS531。Responder10bは、Initiator10aからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Responderシーケンス番号48とが等しいので、Responderシーケンス番号48をインクリメントすることによって、Responderシーケンス番号48に1を設定する。そして、Responder10bは、シーケンス番号1を含むACKをInitiator10aに送信するS532。Initiator10aは、Responder10bからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号を用いてInitiatorシーケンス番号38を更新することによって、Initiatorシーケンス番号38に1を設定する。そして、Initiator10aは、シーケンス番号1とデータとを含むデータユニットをResponder10bに送信するS533。Responder10bは、Initiator10aからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Responderシーケンス番号48とが等しいので、Responderシーケンス番号48をインクリメントすることによって、Responderシーケンス番号48に2を設定する。そして、Responder10bは、シーケンス番号2を含むACKをInitiator10aに送信するS534。次いで、Initiator10aは、Responder10bからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号を用いてInitiatorシーケンス番号38を更新することによって、Initiatorシーケンス番号38に2を設定する。そして、Initiator10aは、シーケンス番号2とデータとを含むデータユニットをResponder10bに送信するS535。Responder10bは、Initiator10aからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Responderシーケンス番号48とが等しいので、Responderシーケンス番号48をインクリメントすることによって、Responderシーケンス番号48に3を設定する。そして、Responder10bは、シーケンス番号3とデータとを含むデータユニットをInitiator10aに送信するS536。また、S537からS538において、S533及びS534と同様の通信シーケンスが繰り返される。上述の通信シーケンスのように、Responder10bは、Initiator10aによる連続したデータ送信の間に、データ送信を行うことができる。図19は、Responder10bがデータを連続して送信している間に、Initiator10aが割り込んでデータを送信する通信シーケンスの例を示す。まず、Responder10bは、Responderシーケンス番号48をインクリメントすることによって、Responderシーケンス番号48に1を設定する。そして、Responder10bは、データとシーケンス番号1とを含むデータユニットをInitiator10aに送信するS541。Initiator10aは、Responder10bからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号を用いてInitiatorシーケンス番号38を更新することによって、Initiatorシーケンス番号38に1を設定する。そして、Responder10bは、Responderシーケンス番号48をインクリメントすることによって、Responderシーケンス番号48に2を設定する。そして、Responder10bは、データとシーケンス番号2とを含むデータユニットをInitiator10aに送信するS542。Initiator10aは、Responder10bからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号を用いてInitiatorシーケンス番号38を更新することによって、Initiatorシーケンス番号38に2を設定する。次いで、Responder10bは、Responderシーケンス番号48をインクリメントすることによって、Responderシーケンス番号48に3を設定する。そして、Responder10bは、データとシーケンス番号3とを含むデータユニットをInitiator10aに送信するS543Initiator10aは、Responder10bからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号を用いてInitiatorシーケンス番号38を更新することによって、Initiatorシーケンス番号38に3を設定する。そして、Initiator10aは、シーケンス番号3とデータとを含むデータユニットをResponder10bに送信するS544。Responder10bは、Initiator10aからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Responderシーケンス番号48とが等しいので、Responderシーケンス番号48をインクリメントすることによって、Responderシーケンス番号48に4を設定する。そして、Responder10bは、シーケンス番号4とデータとを含むデータユニットをInitiator10aに送信するS545。上述の通信シーケンスのように、Initiator10aは、必要なときにいつでも、Responder10bによるデータ送信に割り込むことができるので、Responder10bは、Initiator10aの状態を考慮することなく、データ送信を行うことができる。図20は、Initiator10aが送信したデータユニットに対応する、Responder10bからのACKがタイムアウトする通信シーケンスの例を示す。まず、Initiator10aが、シーケンス番号0とデータとを含むデータユニットをResponder10bに送信するS551。Responder10bは、Initiator10aからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Responderシーケンス番号48とが等しいので、Responderシーケンス番号48をインクリメントすることによって、Responderシーケンス番号48に1を設定する。そして、Responder10bは、シーケンス番号1を含むACKをInitiator10aに送信するS552。Initiator10aは、Responder10bからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号を用いてInitiatorシーケンス番号38を更新することによって、Initiatorシーケンス番号38に1を設定する。そして、Initiator10aは、シーケンス番号1とデータとを含むデータユニットをResponder10bに送信するS553。Responder10bは、Initiator10aからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Responderシーケンス番号48とが等しいので、Responderシーケンス番号48をインクリメントすることによって、Responderシーケンス番号48に2を設定する。そして、Responder10bは、シーケンス番号2を含むACKをInitiator10aに送信するS554。次いで、Initiator10aは、Responder10bからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号を用いてInitiatorシーケンス番号38を更新することによって、Initiatorシーケンス番号38に2を設定する。そして、Initiator10aは、シーケンス番号2とデータとを含むデータユニットをResponder10bに送信するS555。Responder10bは、Initiator10aからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Responderシーケンス番号48とが等しいので、Responderシーケンス番号48をインクリメントすることによって、Responderシーケンス番号48に3を設定する。Responder10bは、シーケンス番号3を含むACKをInitiator10aに送信するS556。そして、ACKの送信が通信エラー等によって完了できなかった場合、Responder10bは、その通信エラーを検出したことに応答して、Responderシーケンス番号48をデクリメントすることによって、Responderシーケンス番号48に2を設定する。また、Initiator10aは、S555でデータユニットを送信してから所定時間が経過した場合、Responder10bによって送信される一つのデータユニット又はACKを待つことを中断タイムアウトし、シーケンス番号2とデータとを含むデータユニットをResponder10bに送信するS557。Responder10bは、Initiator10aからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Responderシーケンス番号48とが等しいので、Responderシーケンス番号48をインクリメントすることによって、Responderシーケンス番号48に3を設定する。そして、Responder10bは、シーケンス番号3を含むACKをInitiator10aに送信するS558。以上の通信シーケンスにより、Responder10bからの通信が不測の事態によって途絶えてしまった場合にも、Initiator10aはタイムアウトを検出することで、自身の通信を再開することができる。図21は、データユニットの送信に遅延がある通信シーケンスの例を示す。まず、Initiator10aが、シーケンス番号0とデータとを含むデータユニットをResponder10bに送信するS561。Responder10bは、Initiator10aからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Responderシーケンス番号48とが等しいので、Responderシーケンス番号48をインクリメントすることによって、Responderシーケンス番号48に1を設定する。そして、Responder10bは、シーケンス番号1を含むACKをInitiator10aに送信するS562。Initiator10aは、Responder10bからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号を用いてInitiatorシーケンス番号38を更新することによって、Initiatorシーケンス番号38に1を設定する。そして、Initiator10aは、シーケンス番号1とデータとを含むデータユニットをResponder10bに送信するS563。また、Responder10bは、S563でInitiator10aから送信されたデータユニットを受信するよりも前に、Responderシーケンス番号48をインクリメントして2を設定し、シーケンス番号2とデータとを含むデータユニットをInitiator10aに送信するS564。そして、Responder10bは、S563でInitiator10aから送信されたデータユニットを受信したとき、受信したデータユニットに含まれるシーケンス番号と、Responderシーケンス番号48とが等しくないので、Responderシーケンス番号48をインクリメントせず、またInitiator10aに対してACKを送信しない。一方、Initiator10aは、Responder10bからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号を用いてInitiatorシーケンス番号38を更新することによって、Initiatorシーケンス番号38に2を設定する。そして、Initiator10aは、シーケンス番号2とデータとを含むデータユニットをResponder10bに送信するS565。Responder10bは、Initiator10aからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Responderシーケンス番号48とが等しいので、Responderシーケンス番号48をインクリメントすることによって、Responderシーケンス番号48に3を設定する。そして、Responder10bは、シーケンス番号3を含むACKをInitiator10aに送信するS566。上述の通信シーケンスにより、データユニットが通信経路内でバッファリングされることにより、データユニットの伝送に遅延が生じても、Responder10bからInitiator10aに不要なACKを送ることなくS563,S564等参照、擬似的な全二重通信を実行することができる。図15から図21に示すいずれの通信シーケンスでも、Initiator10aが一つのデータユニットを送信した後、Responder10bから一つのACKを受信するまで、又はInitiator10aが一つのデータユニットを送信した後、所定の時間が経過してタイムアウトするまで、次のデータユニットの送信を待つように制御されることにより、Initiator10aとResponder10bとの間で擬似的な全二重通信を実現することができる。次いで、図22に示すフローチャートを参照して、電子機器10によって実行される通信制御処理の手順について説明する。ここでは、電子機器10がInitiatorとして動作し、Responderとして動作する外部デバイスとの間で通信を実行することを想定する。また、電子機器10と外部デバイスとの間で、シリアルプロトコルに基づくデータ伝送サービスが実行されることを想定する。まず、近接無線通信デバイス104は、外部デバイスが近接状態であるか否かを判定するブロックB101。外部デバイスが近接状態でない場合ブロックB101のNO、ブロックB101に戻り、外部デバイスが近接状態であるか否かが再度判定される。外部デバイスが近接状態である場合ブロックB101のYES、近接無線通信デバイス104は、外部デバイスとの接続CNL接続を確立するブロックB102。そして、PCLコントローラ231は、外部デバイスのPCLコントローラとの間でネゴシエーションを実行することによって、PCLシリアルアダプタ232を選択するブロックB103。次いで、初期化部31は、Initiatorシーケンス番号38に0を設定するブロックB104。そして、通信制御部32は、送信待ちのデータ39があるか否かポートエミュレータ242によって、データの送信を要求するコマンドが出力されているか否かを判定するブロックB105。送信待ちのデータ39がある場合ブロックB105のYES、データユニット生成部33は、送信待ちデータ39とInitiatorシーケンス番号38とを含むデータユニットを生成するブロックB106。そして、データユニット送信部34は、生成されたデータユニットを外部デバイスに送信するブロックB107。次いで、データユニット受信部36は、データユニットを外部デバイスから受信したか否かを判定するブロックB108。外部デバイスからデータユニットを受信している場合ブロックB108のYES、データユニット受信部36は、受信したデータユニットに含まれるResponderシーケンス番号を読み出すブロックB109。そして、シーケンス番号更新部37は、メモリ13等に格納されているInitiatorシーケンス番号38の値を、読み出されたResponderシーケンス番号の値で更新するブロックB110。また、データユニット受信部46は、受信したデータユニットに含まれるデータ受信データを読み出すブロックB111。そして、通信制御部32は、ポートエミュレータ242等を介してアプリケーションプログラムに受信データを出力しブロックB112、ブロックB105に戻る。また、外部デバイスからデータユニットを受信していない場合ブロックB108のNO、タイムアウト検出部35は、ブロックB107でデータユニットを送信してからの経過時間がしきい値時間を超えるか否かを判定するブロックB113。データユニットを送信してからの経過時間がしきい値時間を超えるときブロックB113のYES、タイムアウトと判定され、ブロックB105に戻る。したがって、送信待ちデータ39がある場合には、現在設定されているInitiatorシーケンス番号38を含む新たなデータユニットが送信される。データユニットを送信してからの経過時間がしきい値時間以下であるときブロックB113のNO、通信制御部32は、外部デバイスとの近接状態が解除されているか否か、すなわち、外部デバイスとの接続が解除されているか否かを判定するブロックB114。外部デバイスとの接続が解除されているときブロックB114のYES、処理を終了する。外部デバイスとの接続が解除されていないときブロックB114のNO、ブロックB108に戻り、外部デバイスによって送信されるデータユニットが受信されたか否かが再度判定される。また、ブロックB105で送信待ちのデータ39があるか否かを判定したときに、送信待ちのデータ39がない場合ブロックB105のNO、データユニット受信部46は、外部デバイスによって送信されたデータユニットを受信したか否かを判定するブロックB115。外部デバイスによって送信されたデータユニットを受信していない場合ブロックB115のNO、ブロックB105に戻る。また、外部デバイスによって送信されたデータユニットを受信している場合ブロックB115のYES、データユニット受信部36は、受信したデータユニットに含まれるResponderシーケンス番号を読み出すブロックB109。そして、シーケンス番号更新部37は、メモリ13等に格納されているInitiatorシーケンス番号38の値を、読み出されたResponderシーケンス番号の値で更新するブロックB110。また、データユニット受信部46は、受信したデータユニットに含まれるデータ受信データを読み出すブロックB111。そして、通信制御部32は、ポートエミュレータ242等を介してアプリケーションプログラムに受信データを出力しブロックB112、ブロックB105に戻る。上述のシーケンス番号を用いた通信制御処理により、Initiator10aである電子機器10は、外部デバイスResponder10bに一つのデータユニットを送信した後、一つのデータユニットを外部デバイスから受信するまで、又は外部デバイスに一つのデータユニットを送信してから所定の時間が経過してタイムアウトするまで、次のデータユニットの送信を待つように制御される。なお、電子機器10は、電子機器10から外部デバイスにデータユニットを送信することなく、外部デバイスから1以上のデータユニットを受信し得る。また、図23のフローチャートを参照して、電子機器10によって実行される通信制御処理の手順について説明する。ここでは、電子機器10がResponderとして動作し、Initiatorとして動作する外部デバイスとの間で通信を実行することを想定する。また、電子機器10と外部デバイスとの間で、シリアルプロトコルに基づくデータ伝送サービスが実行されることを想定する。まず、近接無線通信デバイス104は、外部デバイスが近接状態であるか否かを判定するブロックB201。外部デバイスが近接状態でない場合ブロックB201のNO、ブロックB201に戻り、外部デバイスが近接状態であるか否かが再度判定される。外部デバイスが近接状態である場合ブロックB201のYES、近接無線通信デバイス104は、外部デバイスとの接続CNL接続を確立するブロックB202。そして、PCLコントローラ231は、外部デバイスのPCLコントローラとの間でネゴシエーションを実行することによって、PCLシリアルアダプタ232を選択するブロックB203。次いで、初期化部41は、Responderシーケンス番号48に0を設定するブロックB204。そして、データユニット受信部46は、外部デバイスからデータユニットを受信したか否かを判定するブロックB205。外部デバイスからデータユニットを受信している場合ブロックB205のYES、データユニット受信部46は、受信したデータユニットに含まれるInitiatorシーケンス番号を読み出すブロックB206。また、データユニット受信部46は、受信したデータユニットに含まれるデータを読み出すブロックB207。そして、通信制御部42は、ポートエミュレータ242等を介してアプリケーションプログラムに受信データを出力するブロックB208。次いで、シーケンス番号判定部47は、読み出したInitiatorシーケンス番号と、メモリ103等に格納されたResponderシーケンス番号48とが等しいか否かを判定するブロックB209。Initiatorシーケンス番号とResponderシーケンス番号48とが等しくない場合ブロックB209のNO、ブロックB105に戻る。一方、Initiatorシーケンス番号とResponderシーケンス番号48とが等しい場合ブロックB209のYES、通信制御部42は、送信待ちのデータ49があるか否かポートエミュレータ242によって、データの送信を要求するコマンドが出力されているか否かを判定するブロックB210。送信待ちのデータ49がある場合ブロックB210のYES、シーケンス番号更新部43は、Responderシーケンス番号48をインクリメントすることによって更新するブロックB211。つまり、シーケンス番号更新部43は、Responderシーケンス番号に所定の値例えば、1を加算した値を、新たなResponderシーケンス番号48としてメモリ103等に保存する。データユニット生成部44は、送信待ちデータ49とResponderシーケンス番号48とを含むデータユニットを生成するブロックB212。データユニット送信部45は、生成されたデータユニットを外部デバイスに送信するブロックB213。一方、送信待ちのデータ49がない場合ブロックB210のNO、シーケンス番号更新部43は、Responderシーケンス番号48をインクリメントすることによって更新するブロックB214。つまり、シーケンス番号更新部43は、Responderシーケンス番号に所定の値例えば、1を加算した値を、新たなResponderシーケンス番号48としてメモリ103等に保存する。データユニット生成部44は、Responderシーケンス番号48を含むACKを生成するブロックB215。このACKは、データを含まないデータユニットである。データユニット送信部45は、生成されたACKを外部デバイスに送信するブロックB216。また、ブロックB205で外部デバイスによって送信されるデータユニットが受信されたか否かを判定したときに、データユニットが受信されていない場合ブロックB205のNO、通信制御部42は、送信待ちデータ49があるか否かを判定するブロックB218。送信待ちデータ49がない場合ブロックB218のNO、ブロックB205に戻る。また、送信待ちデータ49がある場合ブロックB218のYES、シーケンス番号更新部43は、Responderシーケンス番号48をインクリメントすることによって更新するブロックB211。つまり、シーケンス番号更新部43は、Responderシーケンス番号に所定の値例えば、1を加算した値を、新たなResponderシーケンス番号48としてメモリ103等に保存する。データユニット生成部44は、送信待ちデータ49とResponderシーケンス番号48とを含むデータユニットを生成するブロックB212。データユニット送信部45は、生成されたデータユニットを外部デバイスに送信するブロックB213。ブロックB213でデータユニットを送信した後、又はブロックB216でACKデータを含まないデータユニットを送信した後、通信制御部42は、外部デバイスとの近接状態が解除されているか否か、すなわち、外部デバイスとの接続が解除されているか否かを判定するブロックB217。外部デバイスとの接続が解除されているときブロックB217のYES、処理を終了する。外部デバイスとの接続が解除されていないときブロックB217のNO、ブロックB205に戻り、外部デバイスによって送信されるデータユニットが受信されたか否かが再度判定される。上述のシーケンス番号を用いた通信制御処理により、Initiatorにおいて、複数のデータユニットを連続して送信するような要求が生じていても、Responderである電子機器10は、割り込んでデータデータユニットを送信することができる。以上説明したように、本実施形態によれば、非対称なデータ伝送を行うための伝送路で、擬似的に全二重通信を行うことができる。Initiator10aは、Responder10bに一つのデータユニットを送信した後、一つのデータユニットをResponder10bから受信するまで、又はResponder10bに一つのデータユニットを送信してから所定の時間が経過してタイムアウトするまで、次のデータユニットの送信を待つように制御される。これにより、Initiator10aにおいて、複数のデータユニットを連続して送信するような要求が生じていても、Responder10bは、割り込んでデータを送信することができる。したがって、コネクション層CNL22では、Responder10bよりもInitiator10aによるデータ伝送が優先される非対称な通信が実行される構成であっても、プロトコル変換層PCL23で通信制御プログラム109a,109bシリアルアダプタ232を実行することによって擬似的な全二重通信を実現することができる。なお、本実施形態の通信制御処理の手順は全てソフトウェアによって実行することができる。このため、通信制御処理の手順を実行するプログラムを格納したコンピュータ読み取り可能な記憶媒体を通じてこのプログラムを通常のコンピュータにインストールして実行するだけで、本実施形態と同様の効果を容易に実現することができる。本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。"