(57)【要約】      （修正有）【課題】非対称な伝送路で擬似的に全二重通信を行うことができる電子機器及び通信システムを提供する。【解決手段】シーケンス番号記憶手段、及びシーケンス番号更新手段を具備する。シーケンス番号記憶手段は通信に用いられる第１シーケンス番号を格納する。生成手段は、データの送信が要求されたとき、前記データと前記第１シーケンス番号とを含む第１データユニットを生成する。送信手段は外部デバイスに前記第１データユニットを送信する。受信手段は前記外部デバイスから第２シーケンス番号を含む第２データユニットを受信する。シーケンス番号更新手段は、前記第２シーケンス番号を用いて前記格納された第１シーケンス番号を更新する。送信手段は、前記受信手段により前記第２データユニットが受信された後に、前記新たなデータと前記シーケンス番号更新手段により更新された第１シーケンス番号とを含む新たな第１データユニットを送信する。【選択図】図７
2012227619.tif 000002
【特許請求の範囲】
【請求項１】
外部デバイスとの通信を実行する通信モジュールと、
前記通信に用いられる第１シーケンス番号を格納するシーケンス番号記憶手段と、
データの送信が要求されたとき、前記データと前記第１シーケンス番号とを含む第１データユニットを生成するデータユニット生成手段と、
前記通信モジュールを用いて、前記外部デバイスに前記第１データユニットを送信するデータユニット送信手段と、
前記通信モジュールを用いて、前記外部デバイスから第２シーケンス番号を含む第２データユニットを受信するデータユニット受信手段と、
前記第２シーケンス番号を用いて前記格納された第１シーケンス番号を更新するシーケンス番号更新手段とを具備し、
前記データユニット送信手段は、前記第１データユニットが送信された後に新たなデータの送信が要求された場合、前記データユニット受信手段により第２データユニットが受信された後に、前記新たなデータと前記シーケンス番号更新手段により更新された第１シーケンス番号とを含む新たな第１データユニットを送信する電子機器。
【請求項２】
前記第１データユニットが送信されてからのしきい値時間の経過を検出するタイムアウト検出手段をさらに具備し、
前記データユニット送信手段は、前記第１データユニットが送信された後に新たなデータの送信が要求された場合、前記データユニット受信手段が第２データユニットを受信する前に、前記タイムアウト検出手段が前記しきい値時間の経過を検出した場合に、前記新たなデータと前記第１シーケンス番号とを含む新たな第１データユニットを送信する請求項１記載の電子機器。
【請求項３】
前記データユニット受信手段がデータを含まない第２データユニットを受信した場合で、かつ次に送信する第１データユニットがデータを含まない場合、前記第１データユニット送信後のタイムアウト検出処理を行わない請求項２記載の電子機器。
【請求項４】
前記通信モジュールは、当該通信モジュールと前記外部デバイスとが近接状態である場合に、近接無線通信を実行する請求項１記載の電子機器。
【請求項５】
前記通信モジュールは、前記外部デバイスよりも前記通信を実行するための優先度が高い請求項１記載の電子機器。
【請求項６】
外部デバイスとの通信を実行する通信モジュールと、
前記通信に用いられる第２シーケンス番号を格納するシーケンス番号記憶手段と、
前記通信モジュールを用いて、前記外部デバイスから第１シーケンス番号を含む第１データユニットを受信するデータユニット受信手段と、
前記第１データユニットを受信した際、前記第１シーケンス番号と前記第２シーケンス番号との比較を行い、前記第１シーケンス番号と前記第２シーケンス番号とが等しいとき、前記第２シーケンス番号に所定の値を加算することによって前記第２シーケンス番号を更新するシーケンス番号更新手段と、
前記更新された第２シーケンス番号を含む第２データユニットを生成するデータユニット生成手段と、
前記通信モジュールを用いて、前記外部デバイスに前記第２データユニットを送信するデータユニット送信手段とを具備する電子機器。
【請求項７】
前記データユニット生成手段は、送信待ちのデータがある場合、前記送信待ちのデータと前記更新された第２シーケンス番号とを含む第２データユニットを生成する請求項６記載の電子機器。
【請求項８】
前記通信モジュールは、当該通信モジュールと前記外部デバイスとが近接状態である場合に、近接無線通信を実行する請求項６記載の電子機器。
【請求項９】
前記通信モジュールは、前記外部デバイスよりも前記通信を実行するための優先度が低い請求項６記載の電子機器。
【請求項１０】
通信を実行する第１装置と第２装置とによって構成される通信システムであって、
前記第１装置は、
前記通信に用いられる第１シーケンス番号を格納し、
データの送信が要求されたとき、前記データと前記第１シーケンス番号とを含む第１データユニットを生成し、
前記第２装置に前記第１データユニットを送信し、
前記第２装置から第２シーケンス番号を含む第２データユニットを受信し、
前記第２シーケンス番号を用いて前記格納された第１シーケンス番号の値を更新し、
前記第１データユニットが送信された後に新たなデータの送信が要求された場合、前記第２データユニットが受信された後に、前記新たなデータと前記更新された第１シーケンス番号とを含む新たな第１データユニットを送信するように構成され、
前記第２装置は、
前記第２シーケンス番号を格納し、
前記第１装置から前記第１データユニットを受信し、
前記第１シーケンス番号と前記第２シーケンス番号とが等しいとき、前記第２シーケンス番号に所定の値を加算することによって前記第２シーケンス番号を更新し、
前記更新された第２シーケンス番号を含む第２データユニットを生成し、
前記外部デバイスに前記第２データユニットを送信するように構成される通信システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、近接無線通信を実行する電子機器及び通信システムに関する。
【背景技術】
【０００２】
近年、ＩＣカード、携帯電話機等においては、ＮＦＣのような無線通信が利用され始めている。ユーザは、ＩＣカード又は携帯電話をホスト装置のリーダ／ライタ部にかざすといった操作を行うだけで、認証、課金等のための通信を容易に行うことができる。
【０００３】
また、最近では、デバイス間の高速なデータ伝送を可能にする新たな近接無線通信技術も開発され始めている。
【０００４】
このようなデータ伝送では、例えば、一方のデバイスをマスタ（ソース）とし、他方のデバイスをスレーブ（シンク）とすることによって非対称なデータ伝送を行うことがある。非対称なデータ伝送では、一つ前のフレームに対応するデータ伝送が完了してから、次のフレームの送信が開始されるまでの待ち時間（フレーム間スペース）が、マスタとスレーブとで異なるように設定される。すなわち、マスタによるデータ送信を優先的に行うために、マスタの待ち時間がスレーブの待ち時間よりも短く設定される。これにより、マスタによるデータ送信が連続して要求されている間、マスタは途切れることなくデータを送信することができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−７９０４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、マスタの待ち時間がスレーブの待ち時間よりも短く設定されるので、前のフレームの送信が完了した後、マスタとスレーブとが共にデータの送信を待っているとき、マスタによるデータ送信がスレーブによるデータ送信よりも常に先に要求される。つまり、マスタによるデータ送信が連続して要求されている間、スレーブが割り込んでデータを送信することはできない。したがって、ステータスの変更のような緊急度が高いデータを送信したい場合であっても、スレーブはデータを送信することができない可能性がある。
【０００７】
本発明は、非対称なデータ伝送を行うための伝送路で、擬似的に全二重通信を行うことができる電子機器及び通信システムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
実施形態によれば、電子機器は、通信モジュール、シーケンス番号記憶手段、データユニット生成手段、データユニット送信手段、データユニット受信手段、及びシーケンス番号更新手段を具備する。通信モジュールは、外部デバイスとの通信を実行する。シーケンス番号記憶手段は、前記通信に用いられる第１シーケンス番号を格納する。データユニット生成手段は、データの送信が要求されたとき、前記データと前記第１シーケンス番号とを含む第１データユニットを生成する。データユニット送信手段は、前記通信モジュールを用いて、前記外部デバイスに前記第１データユニットを送信する。データユニット受信手段は、前記通信モジュールを用いて、前記外部デバイスから第２シーケンス番号を含む第２データユニットを受信する。シーケンス番号更新手段は、前記第２シーケンス番号を用いて前記格納された第１シーケンス番号を更新する。データユニット送信手段は、前記第１データユニットが送信された後に新たなデータの送信が要求された場合、前記データユニット受信手段により前記第２データユニットが受信された後に、前記新たなデータと前記シーケンス番号更新手段により更新された第１シーケンス番号とを含む新たな第１データユニットを送信する。
【図面の簡単な説明】
【０００９】
【図１】実施形態に係る電子機器の構成を示すブロック図。
【図２】同実施形態の電子機器と外部デバイスとの間で実行される近接無線通信の例を示す図。
【図３】同実施形態の電子機器に適用される、近接無線通信を制御するためのソフトウェアアーキテクチャの例を示す図。
【図４】同実施形態の電子機器に適用される、擬似的な全二重通信を制御するためのソフトウェアアーキテクチャの例を示す図。
【図５】近接無線通信での非対称な通信を説明するための概念図。
【図６】図５に示す非対称な通信による通信シーケンスの例を示す図。
【図７】同実施形態の電子機器によって実行される通信制御プログラムの機能構成の例を示すブロック図。
【図８】同実施形態の電子機器によって用いられるデータユニットを説明するための図。
【図９】同実施形態の電子機器によって用いられるデータユニットの構成の例を示す図。
【図１０】同実施形態の電子機器によって用いられるデータユニットの構成の例を説明するための図。
【図１１】同実施形態の電子機器によって用いられる、近接無線通信を制御するためのコマンドの例を示す図。
【図１２】同実施形態の電子機器によって実行されるデータ通信の階層的な通信シーケンスの例を示す図。
【図１３】同実施形態の電子機器によって実行されるデータ通信の階層的な通信シーケンスの別の例を示す図。
【図１４】同実施形態の電子機器によって実行されるデータ通信の階層的な通信シーケンスのさらに別の例を示す図。
【図１５】同実施形態の電子機器によって実行されるデータ通信の通信シーケンスの第１の例を示す図。
【図１６】同実施形態の電子機器によって実行されるデータ通信の通信シーケンスの第２の例を示す図。
【図１７】同実施形態の電子機器によって実行されるデータ通信の通信シーケンスの第３の例を示す図。
【図１８】同実施形態の電子機器によって実行されるデータ通信の通信シーケンスの第４の例を示す図。
【図１９】同実施形態の電子機器によって実行されるデータ通信の通信シーケンスの第５の例を示す図。
【図２０】同実施形態の電子機器によって実行されるデータ通信の通信シーケンスの第６の例を示す図。
【図２１】同実施形態の電子機器によって実行されるデータ通信の通信シーケンスの第７の例を示す図。
【図２２】同実施形態の電子機器によって実行される通信制御処理の手順の例を示すフローチャート。
【図２３】同実施形態の電子機器によって実行される通信制御処理の手順の別の例を示すフローチャート。
【発明を実施するための形態】
【００１０】
以下、実施の形態について図面を参照して説明する。  
図１は、本発明の一実施形態に係る電子機器の構成を示している。この電子機器は、例えば、携帯機器（例えば、携帯電話機、ＰＤＡ、オーディオプレーヤ、補助記憶媒体等）、パーソナルコンピュータ、又はコンシューマ機器（例えば、ＴＶ、ビデオレコーダ等）として実現される。この電子機器は近接無線通信を実行する通信モジュールを備えており、近接無線通信機能を有する他のデバイス（外部デバイス）との無線接続を確立し、そして外部デバイスとの近接無線通信をピアツーピア形式で実行する。
【００１１】
この電子機器１０は、システム制御部１０１、ＲＯＭ１０２、ＲＡＭ１０３、近接無線通信デバイス１０４、電源制御部１０５、ＡＣアダプタ１０６、バッテリ１０７、及び記憶装置１０８を備える。
【００１２】
システム制御部１０１は、電子機器１０内の各部の動作を制御する。システム制御部１０１は、ＣＰＵ１０１ａを備え、ＲＯＭ１０２、ＲＡＭ１０３、近接無線通信デバイス１０４、電源制御部１０５、及び記憶装置１０８に接続される。
【００１３】
ＣＰＵ１０１ａは、ＲＯＭ１０２に格納された命令群及びデータをＲＡＭ１０３へロードし、必要な処理を実行するプロセッサである。ＲＡＭ１０３には、近接無線通信を制御するための通信制御プログラム１０９がロードされている。ＣＰＵ１０１ａは、ＲＡＭ１０３にロードされた通信制御プログラム１０９を実行して、近接無線通信デバイス１０４を制御する。
【００１４】
近接無線通信デバイス１０４は、近接無線通信を実行する通信モジュールである。近接無線通信デバイス１０４は、近接無線通信デバイス１０４から所定の距離内に存在する、近接無線通信機能を有する他のデバイス（外部デバイス）との無線接続を確立し、そしてファイルのようなデータの伝送を開始する。近接無線通信デバイス１０４と外部デバイスとの間の近接無線通信は、ピアツーピア形式で実行される。通信可能距離は例えば３ｃｍである。近接無線通信デバイス１０４と外部デバイスとの間の無線接続は、近接無線通信デバイス１０４と外部デバイスとが近接状態である場合、つまり近接無線通信デバイス１０４と外部デバイスとの間の距離が通信可能距離（例えば３ｃｍ）以内に接近した場合に可能となる。近接無線通信デバイス１０４と外部デバイスとが通信可能距離以内に接近した時、近接無線通信デバイス１０４と外部デバイスとの間の無線接続が確立される。そして、例えば、外部デバイスは、記憶装置１０８内の所定の記憶領域へアクセスし、所定の記憶領域からのデータファイルの読み出しや、所定の記憶領域へのデータファイルの書き込み等によるデータの伝送が、近接無線通信デバイス１０４と外部デバイスとの間で実行される。
【００１５】
近接無線通信においては、誘導電界が用いられる。近接無線通信方式としては、例えばTransferJetを使用し得る。TransferJetは、UWBを利用した近接無線通信方式であり、高速データ転送を実現することができる。
【００１６】
近接無線通信デバイス１０４はアンテナ１０４ａに接続されている。アンテナ１０４ａはカプラと称される電極であり、誘導電界を用いた無線信号により、外部デバイスに対するデータの送受信を行う。外部デバイスがアンテナ１０４ａから通信可能距離（例えば３ｃｍ）以内の範囲内に接近した場合、近接無線通信デバイス１０４及び外部デバイスそれぞれのアンテナ（カプラ）間が誘導電界によって結合され、これによって近接無線通信デバイス１０４と外部デバイスとの間の無線通信が実行可能となる。なお、近接無線通信デバイス１０４及びアンテナ１０４ａは、一つのモジュールとして実現し得る。
【００１７】
電源制御部１０５は、ＡＣアダプタ１０６を介して外部から供給される電力、又はバッテリ１０７から供給される電力を用いて、電子機器１０内の各部に電力を供給する。換言すれば、電子機器１０は、ＡＣ商用電源のような外部電源、又はバッテリ１０７によって駆動される。ＡＣアダプタ１０６は電子機器１０内に設けることもできる。
【００１８】
図２には、２つのデバイス間で実行される近接無線通信の様子が示されている。  
ここでは、デバイスＡが携帯電話から構成され、デバイスＢがポータブルコンピュータから構成されている場合を想定する。ユーザは、例えば、デバイスＡをデバイスＢに近接させるという操作（タッチ操作）を行うことにより、デバイスＡ，Ｂ間のデータ転送を開始させることができる。デバイスＡ，Ｂ間のデータ転送は、デバイスＡ，Ｂが互いに近接したことをトリガに実行される。上述の電子機器１０は、デバイスＡとデバイスＢのどちらとしても機能し得る。
【００１９】
図３は、近接無線通信デバイス１０４を用いて実行される近接無線通信を制御するためのソフトウェアアーキテクチャを示す。  
図３のソフトウェアアーキテクチャは近接無線通信を制御するためのプロトコルスタックの階層構造を示している。プロトコルスタックは、物理層（ＰＨＹ）２１、コネクション層（ＣＮＬ）２２、プロトコル変換層（ＰＣＬ）２３、アプリケーション層２４から構成されている。例えば、コネクション層（ＣＮＬ）２２、プロトコル変換層（ＰＣＬ）２３、アプリケーション層２４は通信制御プログラム１０９によって実現し得る。
【００２０】
物理層（ＰＨＹ）２１は物理的なデータ転送を制御する層であり、ＯＳＩ参照モデル内の物理層に対応する。物理層（ＰＨＹ）２１の一部の機能又は全ての機能は、近接無線通信デバイス１０４内のハードウェアを用いて実現することもできる。物理層（ＰＨＹ）２１は、コネクション層（ＣＮＬ）２２からのデータを無線信号に変換する。
【００２１】
コネクション層（ＣＮＬ）２２は、ＯＳＩ参照モデル内のデータリンク層及びトランスポート層に対応しており、近接状態に設定されている近接無線通信デバイス１０４と外部デバイスとの間の接続（ＣＮＬ接続）を確立／解除し、データを伝送する処理を実行する。
【００２２】
プロトコル変換層（ＰＣＬ）２３は、ＯＳＩ参照モデル内のセッション層及びプレゼンテーション層に対応しており、アプリケーション層２４と、デバイスＡ，Ｂ間の接続の確立及び解除を制御するためのコネクション層（ＣＮＬ）２２との間に位置する。プロトコル変換層（ＰＣＬ）２３は、アプリケーション層２４内の各アプリケーション（通信プログラム）の管理と、セッション制御とを実行する。セッションは、電子機器１０のアプリケーション層２４と外部デバイスのアプリケーション層との間の通信路（伝送路）に相当する。
【００２３】
より具体的には、プロトコル変換層（ＰＣＬ）２３は、アプリケーション層２４の各通信プログラムが扱うアプリケーションプロトコル（ユーザプロトコルとも称する、例えば、ＳＣＳＩ、ＯＢＥＸ、他の汎用プロトコル等）に対応したデータ（ユーザデータ）を特定の伝送用データ形式に変換するための変換処理を実行する。この変換処理により、いずれの通信プログラムによって送受信されるデータであっても、コネクション層（ＣＮＬ）２２が扱うことが可能なパケット（特定の伝送用データ形式のデータ）に変換することができる。このプロトコル変換層（ＰＣＬ）２３は、さまざまなアプリケーションプロトコルを近接無線通信で利用することを可能にする。
【００２４】
また、プロトコル変換層（ＰＣＬ）２３は、通信相手のデバイスとの間でサービス情報（各デバイスが提供可能なサービスを示す情報）及びセッション情報（確立／切断対象のセッションに関する情報）を交換する処理、さらに、アプリケーションの起動、コネクションの管理、及びセッションの管理等を行う。
【００２５】
アプリケーション層２４は、ＳＣＳＩ、ＯＢＥＸ、他の汎用プロトコル等の幾つかのアプリケーションプロトコルにそれぞれ対応した複数の通信プログラム（アプリケーション）を含んでいる。各アプリケーションは、プロトコル変換層（ＰＣＬ）２３に対してサービス（セッション）の開始／終了を要求する処理、及びプロトコル変換層（ＰＣＬ）２３を介してデータを送受信する処理を実行する。
【００２６】
また、図４は、図３に示した階層と階層間の関係を実現するためのサービスアクセスポイント（ＳＡＰ）との例を示す。サービスアクセスポイントは、隣接する階層間において、一方の階層から他方の階層に要求や応答等のコマンドを伝えるためのインタフェースである。物理層サービスアクセスポイント（ＰＨＹ  ＳＡＰ）２１ａは、物理層２１とコネクション層（ＣＮＬ）２２との間のインタフェースである。コネクション層サービスアクセスポイント（ＣＮＬ  ＳＡＰ）２２ａは、コネクション層（ＣＮＬ）２２とプロトコル変換層（ＰＣＬ）２３との間のインタフェースである。
【００２７】
また、プロトコル変換層（ＰＣＬ）２３は、プロトコル変換層コントローラ（ＰＣＬコントローラ）２３１とプロトコル変換層シリアルアダプタ（ＰＣＬシリアルアダプタ）２３２とを備える。ＰＣＬコントローラ２３１及びＰＣＬシリアルアダプタ２３２は、コネクション層（ＣＮＬ）２２を介して、外部デバイスとの通信を行う。ＰＣＬコントローラ２３１は、アプリケーションマネージャ２４１に対して、接続の確立や解除、認証等の共通のサービスを提供する。ＰＣＬシリアルアダプタ２３２は、シリアルプロトコル（ＥＩＡ／ＴＩＡ−２３２−Ｅ）に対応するデータを、コネクション層（ＣＮＬ）２２が扱うことが可能なパケットに変換することができるＰＣＬアダプタである。ＰＣＬシリアルアダプタ２３２は、ＰＣＬコントローラ２３１によって接続が確立された後にデータを伝送する。なお、プロトコル変換層（ＰＣＬ）２３は、他のユーザプロトコル（例えば、ＯＢＥＸ、他の汎用プロトコル等）に対応するデータを、コネクション層（ＣＮＬ）２２が扱うことが可能なパケットに変換することができる複数のＰＣＬアダプタを備えてもよい。その場合、複数のＰＣＬアダプタの内、ＰＣＬコントローラ２３１によって選択された一つのＰＣＬアダプタが起動される。
【００２８】
アプリケーション層２４は、アプリケーションマネージャ２４１とポートエミュレータ２４２とを備える。アプリケーションマネージャ２４１は、通信を要求する各種のアプリケーションプログラムを管理し、通信に用いられるプロトコルに応じて、ＰＣＬコントローラサービスアクセスポイント２３１ａを介してＰＣＬコントローラ２３１を制御する。ポートエミュレータ２４２は、シリアルプロトコルによる通信をエミュレートするためのプログラムである。ポートエミュレータ２４２は、各種のアプリケーションプログラムによって、シリアルプロトコルに基づくデータ伝送サービスが実行されるとき、データの送受信等に応じたコマンドを生成する。そして、ポートエミュレータ２４２は、ＰＣＬシリアルサービスアクセスポイント２３２ａを介して、ＰＣＬシリアルアダプタ２３２に対してコマンドを出力する。
【００２９】
ＰＣＬコントローラ２３１は、アプリケーションマネージャ２４１による制御の下、ＰＣＬコントローラ２３１と外部デバイスのＰＣＬコントローラとの間で、起動するアダプタのネゴシエーションを実行する。ここで、シリアルアダプタが選択された場合、ＰＣＬシリアルアダプタ２３２が起動される。ＰＣＬシリアルアダプタ２３２は、ポートエミュレータ２４２によって出力されたコマンドに応じて、外部デバイスとのシリアルプロトコルによる通信を実行する。
【００３０】
なお、コネクション層（ＣＮＬ）２２では、外部デバイスにサービスの開始を要求するデバイス（以下、Ｉｎｉｔｉａｔｏｒと称する）をマスタとし、外部デバイスから送信されるサービスの開始要求を受信するデバイス（以下、Ｒｅｓｐｏｎｄｅｒと称する）をスレーブとして通信（サービス）が実行される。Ｉｎｉｔｉａｔｏｒは、通信相手のデバイスを制御してデバイス間のデータ転送のようなサービスを実行する。Ｒｅｓｐｏｎｄｅｒは、通信相手のデバイスの制御の下、デバイス間のデータ転送のようなサービスを実行する。上述の電子機器１０は、ＩｎｉｔｉａｔｏｒとＲｅｓｐｏｎｄｅｒのどちらとしても機能し得る。コネクション層（ＣＮＬ）２２では、Ｉｎｉｔｉａｔｏｒによって送信されるデータ（データユニット）の優先度が、Ｒｅｓｐｏｎｄｅｒによって送信されるデータ（データユニット）の優先度よりも高く設定され、非対称な通信が実行される。
【００３１】
図５を参照して、この非対称な通信が実行される際に、ＩｎｉｔｉａｔｏｒとＲｅｓｐｏｎｄｅｒとによって送信されるデータユニットの例について説明する。図５に示す例では、Ｉｎｉｔｉａｔｏｒによって送信されるデータユニットの優先度を、Ｒｅｓｐｏｎｄｅｒによって送信されるデータユニットの優先度よりも高く設定するために、一つ前のフレーム（コマンド）の処理が完了してからのＩｎｉｔｉａｔｏｒの通信待ち時間（ＩＩＦＳとも称する、例えば８．５マイクロ秒）が、Ｒｅｓｐｏｎｄｅｒの通信待ち時間（ＲＩＦＳとも称する、例えば１５．７マイクロ秒）よりも短く設定されている。ＩｎｉｔｉａｔｏｒとＲｅｓｐｏｎｄｅｒの双方が通信を要求する場合、ＩｎｉｔｉａｔｏｒがＩＩＦＳだけ待って通信を要求し、ＲｅｓｐｏｎｄｅｒがＲＩＦＳだけ待って通信を要求するので、常にＩｎｉｔｉａｔｏｒ側の通信が先行して実行される。そのため、図６のように、Ｉｎｉｔｉａｔｏｒ側が大量のデータを送信する場合、Ｉｎｉｔｉａｔｏｒが一連の送信シーケンス（Ｓ１１〜Ｓ１６）を完了するまで、Ｒｅｓｐｏｎｄｅｒはデータを送信すること（Ｓ１７）ができない。例えば、Ｒｅｓｐｏｎｄｅｒは、ステータスの変更などの緊急度が高いデータを送信したいときであっても、Ｉｎｉｔｉａｔｏｒによるデータ送信が途切れるまで、データ送信を開始する（割り込む）ことができない。
【００３２】
プロトコル変換層（ＰＣＬ）２３のＰＣＬシリアルアダプタ２３２は、アプリケーション層２４で、シリアルプロトコルのような全二重通信を実行するプロトコルを用いたプログラム（すなわち、上述のポートエミュレータ２４２を用いたプログラム）を実行するために、擬似的な全二重通信（Pseudo Full Duplex Emulation）を実行するための機能を有する。つまり、ＰＣＬシリアルアダプタ２３２は、Ｉｎｉｔｉａｔｏｒによってデータが送信されている途中であっても、Ｒｅｓｐｏｎｄｅｒが待たされることなく割り込んでデータを送信できる機能を実現する。
【００３３】
図７は、擬似的な全二重通信を実行するための通信制御プログラム１０９の機能構成の例を示す。すなわち、通信制御プログラム１０９はＰＣＬシリアルアダプタ２３２の動作を実現するプログラムである。図７の例では、Ｉｎｉｔｉａｔｏｒとして動作するための通信制御プログラム１０９ａの構成と、Ｒｅｓｐｏｎｄｅｒとして動作するための通信制御プログラム１０９ｂの構成とを示すが、１つの通信制御プログラム１０９が通信制御プログラム１０９ａの構成と通信制御プログラム１０９ｂの構成とを備えてもよい。すなわち、電子機器１０がＩｎｉｔｉａｔｏｒとして動作するとき、通信制御プログラム１０９ａの構成によって通信処理が実行され、電子機器１０がＲｅｓｐｏｎｄｅｒとして動作するとき、通信制御プログラム１０９ｂの構成によって通信処理が実行される。
【００３４】
ここで、Ｉｎｉｔｉａｔｏｒとして動作する第１デバイスとＲｅｓｐｏｎｄｅｒとして動作する第２デバイスとは、近接状態にあり、第１デバイスに設けられた近接無線通信デバイスと第２デバイスに設けられた近接無線通信デバイスとの間で接続（ＣＮＬ接続）が確立されていることを想定する。図５及び図６を参照して説明したように、コネクション層（ＣＮＬ）２２での第１デバイス（Ｉｎｉｔｉａｔｏｒ）のデータ伝送は、第２デバイス（Ｒｅｓｐｏｎｄｅｒ）のデータ伝送よりも優先して実行される。また、接続開始時のネゴシエーションによって、ＰＣＬコントローラ２３１によってＰＣＬシリアルアダプタ２３２が選択されたこと（すなわち、通信プロトコルとしてシリアルプロトコルが選択されたこと）を想定する。したがって、第１デバイスでは通信制御プログラム１０９ａが実行され、第２デバイスでは通信制御プログラム１０９ｂが実行される。
【００３５】
第１デバイス（Ｉｎｉｔｉａｔｏｒ）上で実行される通信制御プログラム１０９ａは、一つのデータユニットを第２デバイス（Ｒｅｓｐｏｎｄｅｒ）に送信した後、Ｒｅｓｐｏｎｄｅｒから一つのデータユニットを受信するまで、次のデータユニットの送信を待つように通信を制御する。つまり、Ｒｅｓｐｏｎｄｅｒから一つのデータユニットを受信した後に、新たに一つのデータユニットを送信することができる。通信制御プログラム１０９ａは、初期化部３１、通信制御部３２、データユニット生成部３３、データユニット送信部３４、タイムアウト検出部３５、データユニット受信部３６、シーケンス番号更新部３７等を備える。
【００３６】
初期化部３１は、ＰＣＬコントローラ２３１によってＰＣＬシリアルアダプタ２３２が選択（起動）されたとき、初期化処理を実行する。初期化部３１は、例えば、Ｉｎｉｔｉａｔｏｒシーケンス番号３８を初期化する、すなわち、Ｉｎｉｔｉａｔｏｒシーケンス番号３８に０を設定する。Ｉｎｉｔｉａｔｏｒシーケンス番号３８は、ＩｎｉｔｉａｔｏｒとＲｅｓｐｏｎｄｅｒとの間のデータ伝送を制御するために用いられる。Ｉｎｉｔｉａｔｏｒシーケンス番号３８は、例えば、メモリ１０３内の領域に格納される。初期化部３１は、初期化が完了したことを通信制御部３２に通知する。
【００３７】
通信制御部３２は、送信待ちのデータ３９があるか否か（又はポートエミュレータ２４２によって、データの送信を要求するコマンドが出力されているか否か）を判定する。通信制御部３２は、送信待ちのデータ３９がある場合、データユニット生成部３３にデータユニットの生成を要求する。なお、送信待ちデータ３９は、例えば、メモリ１０３内の領域に格納されている。送信待ちデータ３９は、ポートエミュレータ２４２によって出力される送信要求コマンドに指定された、送信対象のデータである。データがデータユニットのペイロードとして送信された後、当該データはメモリ１０３から削除される。データのサイズが、一つのデータユニットのペイロードとして送信できるサイズよりも大きい際には、そのサイズに応じて分割して送信されるので、送信が完了したデータ部分がメモリ１０３から削除される。
【００３８】
データユニット生成部３３は、通信制御部３２による要求に応じて、送信待ちデータ３９とＩｎｉｔｉａｔｏｒシーケンス番号（第１シーケンス番号とも称する）３８とを含むデータユニット（第１データユニットとも称する）を生成する。なお、Ｉｎｉｔｉａｔｏｒシーケンス番号３８は、例えば、データユニット内のヘッダ部分に記述される。データユニット生成部３３は、生成したデータユニットをデータユニット送信部３４に出力する。
【００３９】
データユニット送信部３４は、データユニット生成部３３によって出力されたデータユニットを外部デバイス（外部デバイスのデータユニット受信部４６）に送信する。データユニット送信部３４は、データユニットを送信したことをタイムアウト検出部３５に通知する。
【００４０】
タイムアウト検出部３５は、データユニットが送信されてからの経過時間を計測する。そして、タイムアウト検出部３５は、計測した時間がしきい値時間（例えば、１ミリ秒）を超えたか否か、すなわち、タイムアウトを検出する。タイムアウト検出部３５は、タイムアウトが検出されたことを通信制御部３２に通知する。
【００４１】
また、データユニット受信部３６は、外部デバイスによって送信されたデータユニットを受信する。外部デバイスからデータユニットを受信した場合、データユニット受信部３６は、受信したデータユニットに含まれるシーケンス番号（第２シーケンス番号とも称する）を読み出す。そして、データユニット受信部３６は、読み出したシーケンス番号をシーケンス番号更新部３７に出力する。また、データユニット受信部３６は、受信したデータユニットに含まれるデータ（受信データ）を読み出す。そして、データユニット受信部３６は、読み出した受信データを通信制御部３２に出力する。
【００４２】
シーケンス番号更新部３７は、データユニット受信部３６によって出力されたシーケンス番号を用いて、メモリ１３等に格納されているＩｎｉｔｉａｔｏｒシーケンス番号３８を更新する。つまり、Ｉｎｉｔｉａｔｏｒシーケンス番号３８に、受信したデータユニットに含まれるシーケンス番号が設定される。
【００４３】
通信制御部３２は、データユニット受信部３６によって出力された受信データを、ポートエミュレータ２４２等を介して所定のアプリケーションプログラムに出力する。アプリケーションプログラムは、受信データを用いて所定の処理（例えば、データのバックアップ処理等）を実行する。なお、通信制御部３２は、メモリ１０３内の所定の領域に受信データを格納することによって、アプリケーションプログラムに受信データを渡してもよい。
【００４４】
また、通信制御部３２は、データユニット送信部３４を介して外部デバイスに一つのデータユニットを送信した後、データユニット受信部３６を介して外部デバイスから一つのデータユニットを受信するまで、新たなデータユニットが外部デバイスに送信されることを待つように、通信制御プログラム１０９ａ内の各部を制御する。つまり、通信制御部３２は、データユニット送信部３４を介して外部デバイスに一つのデータユニットを送信した後に、データユニット受信部３６を介して外部デバイスから一つのデータユニットを受信したとき、新たなデータユニットの送信を許可する。又は、通信制御部３２は、データユニット送信部３４を介して外部デバイスに一つのデータユニットを送信した後、データユニット受信部３６を介して外部デバイスから一つのデータユニットを受信せずに、タイムアウト検出部３５によってタイムアウトが検出されたとき（すなわち、データユニットを送信してからの経過時間がしきい値を超えたとき）、新たなデータユニットの送信を許可する。
【００４５】
したがって、データユニット送信部３４を介して外部デバイスに一つのデータユニットを送信し、データユニット受信部３６を介して外部デバイスから一つのデータユニットを受信した後に、通信制御部３２は、上述のようにデータユニット生成部３３及びデータユニット送信部３４を介して、シーケンス番号更新部３７によって更新されたＩｎｉｔｉａｔｏｒシーケンス番号３８とデータとを含む新たなデータユニットを外部デバイスに送信する。また、タイムアウト検出部３５によってタイムアウトが検出された際には、通信制御部３２は、上述のようにデータユニット生成部３３及びデータユニット送信部３４を介して、Ｉｎｉｔｉａｔｏｒシーケンス番号３８（更新されていないＩｎｉｔｉａｔｏｒシーケンス番号３８）とデータとを含む新たなデータユニットを外部デバイスに送信する。
【００４６】
なお、タイムアウト検出部３５は、データユニット送信部３４によって一つデータユニットが送信されてからの経過時間を計測している間に、データユニット受信部３６によって一つのデータユニットが受信された場合、経過時間の計測を終了してもよい。また、データユニット受信部３６によって、データを含まないデータユニット（ＡＣＫ）が受信され、且つデータユニット送信部３４によって次に送信される新たなデータユニットがデータを含まない場合、タイムアウト検出部３５は、データユニット送信部３４によって一つデータユニットが送信されてからの経過時間を計測しなくてもよい、すなわち、タイムアウトを検出しなくてもよい。
【００４７】
次いで、第２デバイス（Ｒｅｓｐｏｎｄｅｒ）上で実行される通信制御プログラム１０９ｂは、第１デバイス（Ｉｎｉｔｉａｔｏｒ）にデータユニットを送信することが要求されたとき、Ｒｅｓｐｏｎｄｅｒ内に格納されるＲｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントし、インクリメントされたＲｅｓｐｏｎｄｅｒシーケンス番号４８を含むデータユニットを送信するように通信を制御する。通信制御プログラム１０９ｂは、初期化部４１、通信制御部４２、シーケンス番号更新部４３、データユニット生成部４４、データユニット送信部４５、データユニット受信部４６、シーケンス番号判定部４７等を備える。
【００４８】
初期化部４１は、ＰＣＬコントローラ２３１によってＰＣＬシリアルアダプタ２３２が選択（起動）されたとき、初期化処理を実行する。初期化部４１は、例えば、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８を初期化する、すなわち、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８に０を設定する。Ｒｅｓｐｏｎｄｅｒシーケンス番号４８は、ＩｎｉｔｉａｔｏｒとＲｅｓｐｏｎｄｅｒとの間のデータ伝送を制御するために用いられる。Ｒｅｓｐｏｎｄｅｒシーケンス番号４８は、例えば、メモリ１０３内の領域に格納される。初期化部４１は、初期化が完了したことを通信制御部４２に通知する。
【００４９】
通信制御部４２は、送信待ちのデータ４９があるか否か（又はポートエミュレータ２４２によって、データの送信を要求するコマンドが出力されているか否か）を判定する。通信制御部４２は、送信待ちのデータ４９がある場合、シーケンス番号更新部４３に、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８の更新を要求する。なお、送信待ちデータ４９は、例えば、メモリ１０３内の領域に格納されている。送信待ちデータ４９は、ポートエミュレータ２４２によって出力される送信要求コマンドに指定された、送信対象のデータである。データがデータユニットのペイロードとして送信された後、当該データはメモリ１０３から削除される。データのサイズが、一つのデータユニットのペイロードとして送信できるサイズよりも大きい際には、そのサイズに応じて分割して送信されるので、送信が完了したデータ部分がメモリ１０３から削除される。
【００５０】
シーケンス番号更新部４３は、通信制御部４２による要求に応じて、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８を更新する。つまり、シーケンス番号更新部４３は、Ｒｅｓｐｏｎｄｅｒシーケンス番号に所定の値（例えば、１）を加算した値を、新たなＲｅｓｐｏｎｄｅｒシーケンス番号４８としてメモリ１０３等に保存する。そして、シーケンス番号更新部４３は、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８が更新されたことをデータユニット生成部４４に通知する。
【００５１】
データユニット生成部４４は、シーケンス番号更新部４３による要求に応じて、送信待ちデータ４９があるか否かを判定する。そして、送信待ちデータ４９がある場合、データユニット生成部４４は、送信待ちデータ４９と更新されたＲｅｓｐｏｎｄｅｒシーケンス番号４８とを含むデータユニット（第２データユニットとも称する）を生成する。また、送信待ちデータ４９がない場合、データユニット生成部４４は、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８を含むＡＣＫを生成する。Ｒｅｓｐｏｎｄｅｒシーケンス番号４８を含むＡＣＫは、換言すると、データを含まないデータユニット（データ長０の第２データユニット）である。なお、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８は、例えばデータユニット内のヘッダ部分に記述される。データユニット生成部４４は、生成したデータユニット又はＡＣＫをデータユニット送信部４５に出力する。
【００５２】
データユニット送信部４５は、データユニット生成部４４によって出力されたデータユニットを外部デバイス（外部デバイスのデータユニット受信部３６）に送信する。
【００５３】
また、データユニット受信部４６は、外部デバイスによって送信されたデータユニットを受信する。外部デバイスからデータユニットを受信した場合、データユニット受信部４６は、受信したデータユニットに含まれるシーケンス番号（Ｉｎｉｔｉａｔｏｒシーケンス番号３８）を読み出す。そして、データユニット受信部４６は、読み出したシーケンス番号をシーケンス番号判定部４７に出力する。また、データユニット受信部４６は、受信したデータユニットに含まれるデータ（受信データ）を読み出す。そして、データユニット受信部４６は、読み出した受信データを通信制御部４２に出力する。
【００５４】
通信制御部４２は、データユニット受信部４６によって出力された受信データを、ポートエミュレータ２４２等を介して所定のアプリケーションプログラムに出力する。アプリケーションプログラムは、受信データを用いて所定の処理（例えば、バックアップデータの更新処理等）を実行する。なお、通信制御部４２は、メモリ１０３内の所定の領域に受信データを格納することによって、アプリケーションプログラムに受信データを渡してもよい。
【００５５】
また、シーケンス番号判定部４７は、データユニット受信部４６によって出力されたシーケンス番号と、メモリ１０３等に格納されたＲｅｓｐｏｎｄｅｒシーケンス番号４８とが等しいか否かを判定する。シーケンス番号判定部４７は、データユニット受信部４６によって出力されたシーケンス番号（すなわち、受信されたデータユニットに含まれるシーケンス番号）とＲｅｓｐｏｎｄｅｒシーケンス番号４８とが等しいか否かを通信制御部４２に通知する。
【００５６】
通信制御部４２は、シーケンス番号判定部４７によって、受信されたデータユニットに含まれるシーケンス番号とＲｅｓｐｏｎｄｅｒシーケンス番号４８とが等しいことが通知された場合、上述のように、シーケンス番号更新部４３、データユニット生成部４４及びデータユニット送信部４５を介して、シーケンス番号更新部４３によって更新（インクリメント）されたＲｅｓｐｏｎｄｅｒシーケンス番号４８とデータとを含むデータユニット、又は更新されたＲｅｓｐｏｎｄｅｒシーケンス番号４８を含むＡＣＫを外部デバイスに送信する。
【００５７】
通信制御部４２は、シーケンス番号判定部４７によって、受信されたデータユニットに含まれるシーケンス番号とＲｅｓｐｏｎｄｅｒシーケンス番号４８とが等しくないことが通知された場合、Ｒｅｓｐｏｎｄｅｒによって既に送信された、現在のＲｅｓｐｏｎｄｅｒシーケンス番号４８を含むデータユニットが、通信経路（伝送経路）の途中のバッファ等に存在することが想定されるので、ＡＣＫ（データユニット）を送信しない。
【００５８】
なお、通信制御部４２は、送信したデータユニット又はＡＣＫの送信エラーを検出した場合、シーケンス番号更新部４３に、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８のデクリメントを要求する。シーケンス番号更新部４３は、通信制御部４２による要求に応じて、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８から所定の値（例えば、１）を減算することによって、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８を更新する。
【００５９】
以上の構成により、Ｉｎｉｔｉａｔｏｒである電子機器１０は、外部デバイス（Ｒｅｓｐｏｎｄｅｒ）に一つのデータユニットを送信した後、一つのデータユニットを外部デバイスから受信するまで、又は外部デバイスに一つのデータユニットを送信してから所定の時間が経過してタイムアウトするまで、次のデータユニットの送信を待つように制御される。つまり、Ｉｎｉｔｉａｔｏｒは、一つのデータユニットを送信した後、ＲｅｓｐｏｎｄｅｒからデータユニットとＡＣＫのいずれか一方を受信することなく、連続してデータユニットを送信することはできないように制御される。また、Ｒｅｓｐｏｎｄｅｒは、アプリケーションプログラムによってデータの送信が要求されたとき等、自由なタイミングでデータユニットを送信することができる。つまり、Ｉｎｉｔｉａｔｏｒにおいて、複数のデータユニットを連続して送信するような要求が生じていても、Ｒｅｓｐｏｎｄｅｒである電子機器１０は、割り込んでデータ（データユニット）を送信することができる。したがって、コネクション層（ＣＮＬ）２２では、ＲｅｓｐｏｎｄｅｒよりもＩｎｉｔｉａｔｏｒによるデータ伝送が優先される非対称な通信が実行される構成であっても、通信制御プログラム１０９ａ，１０９ｂ（シリアルアダプタ２３２）によって擬似的な全二重通信を実現することができる。
【００６０】
図８は、電子機器１０によって送受信されるデータユニットの一構成例を示す。  
シリアルプロトコルデータ５１は、アプリケーション層のポートエミュレータ２４２等によって送信が要求されたデータである。つまり、シリアルプロトコルデータ５１は、送信待ちデータ３９，４９、又は送信待ちデータ３９，４９の内の一部のデータである。また、ＰＣＬシリアルプロトコルデータユニット（ＰＣＬシリアルＰＤＵ）５２は、シリアルプロトコルデータ５１であるＰＣＬシリアルサービスデータユニット（ＰＣＬシリアルＳＤＵ）５２ｂに、ヘッダ５２ａが付加されたデータユニットである。このヘッダ内に上述のシーケンス番号３８，４８が記述される。コネクション層（ＣＮＬ）２２では、ＰＣＬシリアルＰＤＵ５２であるトランスポートブロック５３が複数のＣＮＬサービスユニット（ＣＳＤＵ）５３ａに分割され、送信される。
【００６１】
また、図９及び図１０は、ＰＣＬシリアルＰＤＵ５２のフォーマットの例を示す。  
ＰＣＬシリアルＰＤＵ５２は、先頭から４バイト目までにヘッダ部分５２ａを含み、５バイト目以降に送受信対象のデータ部分５２ｂを含む。データ部分５２ｂに格納されるデータのサイズは、例えば、０バイトから６５５３５バイトである。
【００６２】
また、１バイト目（Ｂｙｔｅ  ０）の先頭の３ビットには「接続番号」（例えば、０から７までのいずれかの値）が記述され、残りの５ビットには「データコマンド」（例えば、０ｘ０３）が記述される。２バイト目（Ｂｙｔｅ  １）には、擬似的な全二重通信を行うための「シーケンス番号」が記述される。「シーケンス番号」には、例えば０から２５５までのいずれかの値が記述される。したがって、「シーケンス番号」には、Ｉｎｉｔｉａｔｏｒによって送信されるデータユニットではＩｎｉｔｉａｔｏｒシーケンス番号３８が記述され、Ｒｅｓｐｏｎｄｅｒによって送信されるデータユニットではＲｅｓｐｏｎｄｅｒシーケンス番号４８が記述される。３バイト目から４バイト目まで（Ｂｙｔｅ  ２及びＢｙｔｅ  ３）には、ＰＣＬシリアルＳＤＵ５２ｂの「長さ」（すなわち、データ部分５２ｂに格納されたデータの長さ）が記述される。「長さ」には、例えば０から６５５３５までのいずれかの値が記述される。なお、「長さ」が０であるＰＣＬシリアルＰＤＵ５２は、ＡＣＫとして用いられる。
【００６３】
図１１は、プロトコル変換層シリアルサービスアクセスポイント（ＰＣＬシリアルＳＡＰ）２３２ａを介して、ポートエミュレータ２４２とＰＣＬシリアルアダプタ２３２との間で用いられるコマンドの例を示す。つまり、ポートエミュレータ２４２は、これらコマンドを用いてシリアルアダプタ２３２ａを制御する。また、他のサービスアクセスポイント２３１ａ，２２ａ等でも同様のコマンドが用いられる。
【００６４】
“.request”は、下位層で実行されるサービスを要求するためのコマンドである。“.confirmation”は、サービスの要求に応答するためのコマンドである。“.indication”は、下位層から上位層への非同期のインジケーションのためのコマンドである。“.response”は、インジケーションに対して応答するためのコマンドである。また、コマンドの種類には、開始を示す“START”、停止を示す“STOP”、データ転送を示す“DATA”、ステータス転送を示す“STATUS”等が含まれる。
【００６５】
より具体的には、例えば、“PCL_SERIAL_DATA.request”は、ポートエミュレータ２４２からＰＣＬシリアルアダプタ２３２に対して、データを送信するサービスを要求するためのコマンドである。また、“PCL_SERIAL_DATA.indication”は、ＰＣＬシリアルアダプタ２３２からポートエミュレータ２４２に対して、データを受信したことを通知（インジケーション）するためのコマンドである。
【００６６】
図１２から図１４は、電子機器１０によって実行される階層的な通信シーケンスの例を示す。上述のように、電子機器１０は、Ｉｎｉｔｉａｔｏｒ１０ａとＲｅｓｐｏｎｄｅｒ１０ｂのどちらとしても機能し得る。なお、以下に説明する通信シーケンスが開始される際のＩｎｉｔｉａｔｏｒシーケンス番号３８とＲｅｓｐｏｎｄｅｒシーケンス番号４８とはいずれも“ｘ”であることを想定する。
【００６７】
図１２は、Ｉｎｉｔｉａｔｏｒ１０ａがＲｅｓｐｏｎｄｅｒ１０ｂに一つのデータユニットを送信した後、Ｒｅｓｐｏｎｄｅｒ１０ｂから一つのデータユニットを受信するまで、新たなデータユニットを送信することを待つ通信シーケンスの例を示す。
【００６８】
まず、Ｉｎｉｔｉａｔｏｒ１０ａのポートエミュレータ２４２ａ（アプリケーション層２４）は、データやステータス等をＲｅｓｐｏｎｄｅｒ１０ｂに送信するための要求（PCLC_SERIAL_XXX.req）をＰＣＬシリアルアダプタ２３２ａ（プロトコル変換層２３）に出力する（Ｓ２０１）。ＰＣＬシリアルアダプタ２３２ａは、この要求に応じて、Ｉｎｉｔｉａｔｏｒシーケンス番号３８（＝ｘ）とデータとを含むデータユニットを送信するための要求（CNL_DATA.req）を、コネクション層（ＣＮＬ）２２ａに出力する（Ｓ２０２）。コネクション層（ＣＮＬ）２２ａでは、ＰＣＬシリアルアダプタ２３２ａによって出力されたデータユニットを用いて作成された、Ｉｎｉｔｉａｔｏｒシーケンス番号３８を含むコネクション層サービスデータユニット（ＣＳＤＵ）が、Ｒｅｓｐｏｎｄｅｒ１０ｂに送信される（Ｓ２０３）。
【００６９】
なお、ＰＣＬシリアルアダプタ２３２ａは、要求をコネクション層（ＣＮＬ）２２ａに出力したことに応答して、タイマーによる計測を開始する。タイマーは、Ｓ２０２で要求が出力されてからの経過時間を計測する。そして、ＰＣＬシリアルアダプタ２３２ａは、Ｒｅｓｐｏｎｄｅｒ１０ｂへの一つのデータユニットの送信要求を出力してから、Ｒｅｓｐｏｎｄｅｒ１０ｂからの一つのデータユニットのインジケーションを受け取るまで、又はタイマーによって計測された経過時間がしきい値時間を超えるまで、新たなデータユニットの送信（送信要求）を待つように制御する。すなわち、ＰＣＬシリアルアダプタ２３２ａは、上記の条件に該当する期間内に、ポートエミュレータ２４２ａによって新たなデータ送信要求が出力されても、コネクション層２２ａにデータユニットの送信要求が出力されないように制御する。
【００７０】
Ｒｅｓｐｏｎｄｅｒ１０ｂのコネクション層２２ｂでは、Ｉｎｉｔｉａｔｏｒ１０ａのコネクション層２２ａによって送信されたＣＳＤＵが受信される。コネクション層２２ｂでは、受信されたＣＳＤＵに含まれるＩｎｉｔｉａｔｏｒシーケンス番号３８を含むインジケーション（CNL_DATA.ind）がシリアルアダプタ２３２ｂに出力される（Ｓ２０４）。
【００７１】
次いで、シリアルアダプタ２３２ｂは、このインジケーションに含まれるＩｎｉｔｉａｔｏｒシーケンス番号３８とＲｅｓｐｏｎｄｅｒシーケンス番号４８とが等しいかどうかを判定する。Ｉｎｉｔｉａｔｏｒシーケンス番号３８とＲｅｓｐｏｎｄｅｒシーケンス番号４８とは、いずれも“ｘ”であり等しい。そのため、シリアルアダプタ２３２ｂは、次にＡＣＫ又はデータユニットを送信するとき、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８に“ｙ”を設定する。そして、シリアルアダプタ２３２ｂは、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８（＝ｙ）を含むデータユニットを送信するための要求（CNL_DATA.req）をコネクション層２２ｂに出力する（Ｓ２０５）。なお、シリアルアダプタ２３２ａは、送信待ちのデータがある場合、そのデータを含むデータユニットの送信を要求し、送信待ちのデータがない場合、ＡＣＫ（すなわち、データを含まないデータユニット）の送信を要求する。コネクション層（ＣＮＬ）２２ｂでは、シリアルアダプタ２３２ｂによって出力されたデータユニットを用いて作成された、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８を含むコネクション層サービスデータユニット（ＣＳＤＵ／ＡＣＫ）が、Ｉｎｉｔｉａｔｏｒ１０ａに送信される（Ｓ２０６）。
【００７２】
Ｉｎｉｔｉａｔｏｒ１０ａのコネクション層２２ａでは、Ｒｅｓｐｏｎｄｅｒ１０ｂのコネクション層２２ｂによって送信されたＣＳＤＵが受信される。コネクション層２２ａでは、受信されたＣＳＤＵに含まれるＲｅｓｐｏｎｄｅｒシーケンス番号４８を含むインジケーション（CNL_DATA.ind）がシリアルアダプタ２３２ａに出力される（Ｓ２０７）。
【００７３】
また、コネクション層２２ａからのインジケーションがシリアルアダプタ２３２ａに出力される（Ｓ２０７）よりも前に、Ｉｎｉｔｉａｔｏｒ１０ａのポートエミュレータ２４２は、データ等をＲｅｓｐｏｎｄｅｒに送信するための要求（PCLC_SERIAL_XXX.req）を出力している（Ｓ２０８）。しかし、上述のように、シリアルアダプタ２３２ａは、一つのデータユニットをＲｅｓｐｏｎｄｅｒ１０ｂに送信した後に、Ｒｅｓｐｏｎｄｅｒ１０ｂからデータユニット（ＡＣＫ）を受け取っておらず、且つタイマーによって計測された経過時間がしきい値時間を超えていないので、新たなデータユニットの送信要求をコネクション層２２ａに出力していない。シリアルアダプタ２３２ａは、Ｓ２０７でコネクション層２２ａによって出力されたインジケーションに応じて（すなわち、Ｒｅｓｐｏｎｄｅｒ１０ｂによって送信されたデータユニットの受信を待って）、インジケーションに含まれるＲｅｓｐｏｎｄｅｒシーケンス番号４８（＝ｙ）を用いて、Ｉｎｉｔｉａｔｏｒシーケンス番号３８を更新することにより、Ｉｎｉｔｉａｔｏｒシーケンス番号３８に“ｙ”を設定する。これにより、シリアルアダプタ２３２ａは、データユニットの送信を再開可能になる。
【００７４】
そして、シリアルアダプタ２３２ａは、更新されたＩｎｉｔｉａｔｏｒシーケンス番号３８とデータとを含むデータユニットの送信要求（CNL_DATA.req）をコネクション層２２ａに出力する（Ｓ２０９）。このデータユニットの送信要求は、Ｓ２０８でのポートエミュレータ２４２による送信要求（PCLC_SERIAL_XXX.req）に対応する要求である。つまり、シリアルアダプタ２３２ａは、一つのデータユニットをＲｅｓｐｏｎｄｅｒ１０ｂに送信した後、一つのデータユニットをＲｅｓｐｏｎｄｅｒ１０ｂから受信するまで、新たなデータユニットを送信しないように制御している。
【００７５】
そして、コネクション層（ＣＮＬ）２２ａでは、ＰＣＬシリアルアダプタ２３２ａによって出力されたデータユニットを用いて作成された、Ｉｎｉｔｉａｔｏｒシーケンス番号３８（＝ｙ）を含むＣＳＤＵが、Ｒｅｓｐｏｎｄｅｒ１０ｂに送信される（Ｓ２１０）。
【００７６】
次いで、図１３は、Ｉｎｉｔｉａｔｏｒ１０ａがＲｅｓｐｏｎｄｅｒ１０ｂに一つのデータユニットを送信した後、Ｒｅｓｐｏｎｄｅｒ１０ｂから一つのデータユニットを受信するまで、新たなデータユニットを送信することを待つ通信シーケンスの別の例を示す。
【００７７】
まず、Ｉｎｉｔｉａｔｏｒ１０ａのポートエミュレータ２４２ａ（アプリケーション層２４）は、データやステータス等をＲｅｓｐｏｎｄｅｒ１０ｂに送信するための要求（PCLC_SERIAL_XXX.req）をＰＣＬシリアルアダプタ２３２ａ（プロトコル変換層２３）に出力する（Ｓ３０１）。ＰＣＬシリアルアダプタ２３２ａは、この要求に応じて、Ｉｎｉｔｉａｔｏｒシーケンス番号３８（＝ｘ）とデータとを含むデータユニットを送信するための要求（CNL_DATA.req）を、コネクション層（ＣＮＬ）２２ａに出力する（Ｓ３０２）。コネクション層（ＣＮＬ）２２ａでは、ＰＣＬシリアルアダプタ２３２ａによって出力されたデータユニットを用いて作成された、Ｉｎｉｔｉａｔｏｒシーケンス番号３８を含むコネクション層サービスデータユニット（ＣＳＤＵ）が、Ｒｅｓｐｏｎｄｅｒ１０ｂに送信される（Ｓ３０３）。
【００７８】
なお、ＰＣＬシリアルアダプタ２３２ａは、要求をコネクション層（ＣＮＬ）２２ａに出力したことに応答して、タイマー（タイムアウト検出部３５）による計測を開始する。タイマーは、Ｓ３０２で要求が出力されてからの経過時間を計測する。そして、ＰＣＬシリアルアダプタ２３２ａは、Ｒｅｓｐｏｎｄｅｒ１０ｂへの一つのデータユニットの送信要求を出力してから、Ｒｅｓｐｏｎｄｅｒ１０ｂからの一つのデータユニットのインジケーションを受け取るまで、又はタイマーによって計測された経過時間がしきい値時間を超えるまで、新たなデータユニットの送信（送信要求）を待つように制御する。すなわち、ＰＣＬシリアルアダプタ２３２ａは、上記の条件に該当する期間中、ポートエミュレータ２４２ａによって新たなデータ送信要求が出力されても、コネクション層２２ａにデータユニットの送信要求が出力されないように制御する。
【００７９】
Ｒｅｓｐｏｎｄｅｒ１０ｂのコネクション層２２ｂでは、Ｉｎｉｔｉａｔｏｒ１０ａのコネクション層２２ａによって送信されたＣＳＤＵが受信される。コネクション層２２ｂでは、受信されたＣＳＤＵに含まれるＩｎｉｔｉａｔｏｒシーケンス番号３８を含むインジケーション（CNL_DATA.ind）がシリアルアダプタ２３２ｂに出力される（Ｓ３０４）。
【００８０】
また、Ｒｅｓｐｏｎｄｅｒ１０ｂのコネクション層２２ｂが、Ｉｎｉｔｉａｔｏｒ１０ａのコネクション層２２ａによって送信されたＣＳＤＵを受信するよりも前に、Ｒｅｓｐｏｎｄｅｒ１０ｂのポートエミュレータ２４２ｂ（アプリケーション層２４）は、データやステータス等をＩｎｉｔｉａｔｏｒ１０ａに送信するための要求（PCLC_SERIAL_XXX.req）をＰＣＬシリアルアダプタ２３２ｂ（プロトコル変換層２３）に出力する（Ｓ３０５）。ＰＣＬシリアルアダプタ２３２ｂは、この要求に応じて、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８に“ｙ”を設定する。そして、ＰＣＬシリアルアダプタ２３２ｂは、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８（＝ｙ）とデータとを含むデータユニットを送信するための要求（CNL_DATA.req）を、コネクション層（ＣＮＬ）２２ｂに出力する（Ｓ３０６）。コネクション層（ＣＮＬ）２２ｂでは、ＰＣＬシリアルアダプタ２３２ｂによって出力されたデータユニットを用いて作成された、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８を含むコネクション層サービスデータユニット（ＣＳＤＵ）が、Ｉｎｉｔｉａｔｏｒ１０ａに送信される（Ｓ３０７）。
【００８１】
Ｉｎｉｔｉａｔｏｒ１０ａのコネクション層２２ａでは、Ｒｅｓｐｏｎｄｅｒ１０ｂのコネクション層２２ｂによって送信されたＣＳＤＵが受信される。コネクション層２２ａでは、受信されたＣＳＤＵに含まれるＲｅｓｐｏｎｄｅｒシーケンス番号４８を含むインジケーション（CNL_DATA.ind）がシリアルアダプタ２３２ａに出力される（Ｓ３０８）。シリアルアダプタ２３２ａは、このインジケーションに応じて、インジケーションに含まれるＲｅｓｐｏｎｄｅｒシーケンス番号４８（＝ｙ）を用いて、Ｉｎｉｔｉａｔｏｒシーケンス番号３８を更新することにより、Ｉｎｉｔｉａｔｏｒシーケンス番号３８に“ｙ”を設定する。
【００８２】
Ｉｎｉｔｉａｔｏｒシーケンス番号３８が更新された後に、Ｉｎｉｔｉａｔｏｒ１０ａのポートエミュレータ２４２ａが、データやステータス等をＲｅｓｐｏｎｄｅｒ１０ｂに送信するための要求（PCLC_SERIAL_XXX.req）をＰＣＬシリアルアダプタ２３２ａに出力したとき（Ｓ３０９）、ＰＣＬシリアルアダプタ２３２ａは、この要求に応じて、Ｉｎｉｔｉａｔｏｒシーケンス番号３８（＝ｙ）とデータとを含むデータユニットを送信するための要求（CNL_DATA.req）を、コネクション層（ＣＮＬ）２２ａに出力する（Ｓ３１０）。すなわち、ＰＣＬシリアルアダプタ２３２ａは、Ｓ３０２で一つのデータユニットをＲｅｓｐｏｎｄｅｒ１０ｂに送信した後に、Ｓ３０８でＲｅｓｐｏｎｄｅｒ１０ｂから一つのデータユニットを受信しており、データユニットの送信が可能であるので、次のデータユニットを送信するための要求をコネクション層（ＣＮＬ）２２ａに出力する。コネクション層（ＣＮＬ）２２ａでは、ＰＣＬシリアルアダプタ２３２ａによって出力されたデータユニットを用いて作成された、Ｉｎｉｔｉａｔｏｒシーケンス番号３８を含むコネクション層サービスデータユニット（ＣＳＤＵ）が、Ｒｅｓｐｏｎｄｅｒ１０ｂに送信される（Ｓ３１１）。
【００８３】
一方、Ｒｅｓｐｏｎｄｅｒ１０ｂのシリアルアダプタ２３２ｂは、Ｓ３０４で、Ｉｎｉｔｉａｔｏｒシーケンス番号３８（＝ｘ）を含むインジケーション（CNL_DATA.ind）を受け取ったことに応じて、このＩｎｉｔｉａｔｏｒシーケンス番号３８とＲｅｓｐｏｎｄｅｒシーケンス番号４８とが等しいかどうかを判定する。そして、Ｉｎｉｔｉａｔｏｒシーケンス番号３８（＝ｘ）とＲｅｓｐｏｎｄｅｒシーケンス番号４８（＝ｙ）とが等しくないので、シリアルアダプタ２３２ｂは、Ｉｎｉｔｉａｔｏｒ１０ａにＡＣＫ（データユニット）を送信しない。つまり、シリアルアダプタ２３２ｂは、Ｉｎｉｔｉａｔｏｒシーケンス番号３８とＲｅｓｐｏｎｄｅｒシーケンス番号４８とに基づいて、ＡＣＫを送信する必要がないことを検出することができる。これにより、Ｉｎｉｔｉａｔｏｒ１０ａによって送信されるデータユニットを受信したことに応じて、毎回ＡＣＫを返すような、不要なトラフィックを削減することができる。
【００８４】
また、図１４は、Ｉｎｉｔｉａｔｏｒ１０ａがＲｅｓｐｏｎｄｅｒ１０ｂに一つのデータユニットを送信した後、タイムアウトを検出するまで、新たなデータユニットを送信することを待つ通信シーケンスの例を示す。
【００８５】
まず、Ｉｎｉｔｉａｔｏｒ１０ａのポートエミュレータ２４２ａ（アプリケーション層２４）は、データやステータス等をＲｅｓｐｏｎｄｅｒ１０ｂに送信するための要求（PCLC_SERIAL_XXX.req）をＰＣＬシリアルアダプタ２３２ａ（プロトコル変換層２３）に出力する（Ｓ４０１）。ＰＣＬシリアルアダプタ２３２ａは、この要求に応じて、Ｉｎｉｔｉａｔｏｒシーケンス番号３８（＝ｘ）とデータとを含むデータユニットを送信するための要求（CNL_DATA.req）を、コネクション層（ＣＮＬ）２２ａに出力する（Ｓ４０２）。コネクション層（ＣＮＬ）２２ａでは、ＰＣＬシリアルアダプタ２３２ａによって出力されたデータユニットを用いて作成された、Ｉｎｉｔｉａｔｏｒシーケンス番号３８を含むコネクション層サービスデータユニット（ＣＳＤＵ）が、Ｒｅｓｐｏｎｄｅｒ１０ｂに送信される（Ｓ４０３）。
【００８６】
なお、ＰＣＬシリアルアダプタ２３２ａは、要求をコネクション層（ＣＮＬ）２２ａに出力したことに応答して、タイマーによる計測を開始する。タイマーは、Ｓ４０２で要求が出力されてからの経過時間を計測する。そして、ＰＣＬシリアルアダプタ２３２ａは、Ｒｅｓｐｏｎｄｅｒ１０ｂへの一つのデータユニットの送信要求を出力してから、Ｒｅｓｐｏｎｄｅｒ１０ｂからの一つのデータユニットのインジケーションを受け取るまで、又はタイマーによって計測された経過時間がしきい値時間を超えるまで、新たなデータユニットの送信（送信要求）を待つように制御する。すなわち、ＰＣＬシリアルアダプタ２３２ａは、上記の条件に該当する期間中、ポートエミュレータ２４２ａによって新たなデータ送信要求が出力されても、コネクション層２２ａにデータユニットの送信要求が出力されないように制御する。
【００８７】
また、Ｓ４０２で送信要求が出力されてからの経過時間がしきい値時間を超えるよりも前に、ポートエミュレータ２４２ａが、データ等をＲｅｓｐｏｎｄｅｒに送信するための要求（PCLC_SERIAL_XXX.req）を出力したとき（Ｓ４０５）、シリアルアダプタ２３２ａは、新たなデータユニットの送信要求をコネクション層２２ａに出力しない。そして、Ｓ４０２で送信要求が出力されてからの経過時間がしきい値時間を超えた場合（すなわち、タイムアウトを検出した場合）、シリアルアダプタ２３２ａは、Ｉｎｉｔｉａｔｏｒシーケンス番号３８（＝ｘ）とデータとを含むデータユニットの送信要求（CNL_DATA.req）をコネクション層２２ａに出力する（Ｓ４０６）。そして、コネクション層（ＣＮＬ）２２ａでは、ＰＣＬシリアルアダプタ２３２ａによって出力されたデータユニットを用いて作成された、Ｉｎｉｔｉａｔｏｒシーケンス番号３８（＝ｙ）を含むＣＳＤＵが、Ｒｅｓｐｏｎｄｅｒ１０ｂに送信される（Ｓ４０７）。これにより、例えば、Ｒｅｓｐｏｎｄｅｒ１０ｂによって送信されるＡＣＫが、通信エラー等の不測の事態によってＩｎｉｔｉａｔｏｒ１０ａに届かなかったような場合でも、タイムアウトを検出することで通信（データ送信）を再開することができる。
【００８８】
また、図１５から図２１は、電子機器１０によって実行される通信シーケンスの種々のパターンの例を示す。上述のように、電子機器１０は、Ｉｎｉｔｉａｔｏｒ１０ａとＲｅｓｐｏｎｄｅｒ１０ｂのどちらとしても機能し得る。なお、以下に説明する通信シーケンスが開始される際のＩｎｉｔｉａｔｏｒシーケンス番号３８とＲｅｓｐｏｎｄｅｒシーケンス番号４８とはいずれも“０”であることを想定する。
【００８９】
図１５は、Ｉｎｉｔｉａｔｏｒ１０ａのみデータを送信する通信シーケンスの例を示す。  
まず、Ｉｎｉｔｉａｔｏｒ１０ａが、シーケンス番号“０”とデータとを含むデータユニットをＲｅｓｐｏｎｄｅｒ１０ｂに送信する（Ｓ５０１）。Ｒｅｓｐｏｎｄｅｒ１０ｂは、Ｉｎｉｔｉａｔｏｒ１０ａからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８とが等しいので、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８に“１”を設定する。そして、Ｒｅｓｐｏｎｄｅｒ１０ｂは、送信待ちデータ４９がないとき、シーケンス番号“１”を含むＡＣＫをＩｎｉｔｉａｔｏｒ１０ａに送信する（Ｓ５０２）。これにより、Ｉｎｉｔｉａｔｏｒ１０ａにデータ送信の再開が促される。
【００９０】
Ｉｎｉｔｉａｔｏｒ１０ａは、Ｒｅｓｐｏｎｄｅｒ１０ｂからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号を用いてＩｎｉｔｉａｔｏｒシーケンス番号３８を更新することによって、Ｉｎｉｔｉａｔｏｒシーケンス番号３８に“１”を設定する。そして、Ｉｎｉｔｉａｔｏｒ１０ａは、シーケンス番号“１”とデータとを含むデータユニットをＲｅｓｐｏｎｄｅｒ１０ｂに送信する（Ｓ５０３）。また、Ｓ５０４からＳ５０８において、Ｓ５０２及びＳ５０３と同様の通信シーケンスが繰り返される。
【００９１】
図１６は、Ｒｅｓｐｏｎｄｅｒ１０ｂのみデータを送信する通信シーケンスの例を示す。  
まず、Ｒｅｓｐｏｎｄｅｒ１０ｂは、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８に“１”を設定する。そして、Ｒｅｓｐｏｎｄｅｒ１０ｂは、データとシーケンス番号“１”とを含むデータユニットをＩｎｉｔｉａｔｏｒ１０ａに送信する（Ｓ５１１）。
【００９２】
次いで、Ｒｅｓｐｏｎｄｅｒ１０ｂは、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８に“２”を設定する。そして、Ｒｅｓｐｏｎｄｅｒ１０ｂは、データとシーケンス番号“２”とを含むデータユニットをＩｎｉｔｉａｔｏｒ１０ａに送信する（Ｓ５１２）。また、Ｓ５１３からＳ５１４において、同様の通信シーケンスが繰り返される。
【００９３】
図１７は、Ｉｎｉｔｉａｔｏｒ１０ａとＲｅｓｐｏｎｄｅｒ１０ｂの双方がデータを送信する通信シーケンスの例を示す。  
まず、Ｉｎｉｔｉａｔｏｒ１０ａが、シーケンス番号“０”とデータとを含むデータユニットをＲｅｓｐｏｎｄｅｒ１０ｂに送信する（Ｓ５２１）。Ｒｅｓｐｏｎｄｅｒ１０ｂは、Ｉｎｉｔｉａｔｏｒ１０ａからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８とが等しいので、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８に“１”を設定する。そして、Ｒｅｓｐｏｎｄｅｒ１０ｂは、シーケンス番号“１”とデータとを含むデータユニットをＩｎｉｔｉａｔｏｒ１０ａに送信する（Ｓ５２２）。
【００９４】
Ｉｎｉｔｉａｔｏｒ１０ａは、Ｒｅｓｐｏｎｄｅｒ１０ｂからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号を用いてＩｎｉｔｉａｔｏｒシーケンス番号３８を更新することによって、Ｉｎｉｔｉａｔｏｒシーケンス番号３８に“１”を設定する。そして、Ｉｎｉｔｉａｔｏｒ１０ａは、シーケンス番号“１”とデータとを含むデータユニットをＲｅｓｐｏｎｄｅｒ１０ｂに送信する（Ｓ５２３）。また、Ｓ５２４からＳ５２５において、Ｓ５２２及びＳ５２３と同様の通信シーケンスが繰り返される。
【００９５】
図１８は、Ｉｎｉｔｉａｔｏｒ１０ａがデータを連続して送信している間に、Ｒｅｓｐｏｎｄｅｒ１０ｂが割り込んでデータを送信する通信シーケンスの例を示す。  
まず、Ｉｎｉｔｉａｔｏｒ１０ａが、シーケンス番号“０”とデータとを含むデータユニットをＲｅｓｐｏｎｄｅｒ１０ｂに送信する（Ｓ５３１）。Ｒｅｓｐｏｎｄｅｒ１０ｂは、Ｉｎｉｔｉａｔｏｒ１０ａからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８とが等しいので、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８に“１”を設定する。そして、Ｒｅｓｐｏｎｄｅｒ１０ｂは、シーケンス番号“１”を含むＡＣＫをＩｎｉｔｉａｔｏｒ１０ａに送信する（Ｓ５３２）。
【００９６】
Ｉｎｉｔｉａｔｏｒ１０ａは、Ｒｅｓｐｏｎｄｅｒ１０ｂからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号を用いてＩｎｉｔｉａｔｏｒシーケンス番号３８を更新することによって、Ｉｎｉｔｉａｔｏｒシーケンス番号３８に“１”を設定する。そして、Ｉｎｉｔｉａｔｏｒ１０ａは、シーケンス番号“１”とデータとを含むデータユニットをＲｅｓｐｏｎｄｅｒ１０ｂに送信する（Ｓ５３３）。Ｒｅｓｐｏｎｄｅｒ１０ｂは、Ｉｎｉｔｉａｔｏｒ１０ａからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８とが等しいので、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８に“２”を設定する。そして、Ｒｅｓｐｏｎｄｅｒ１０ｂは、シーケンス番号“２”を含むＡＣＫをＩｎｉｔｉａｔｏｒ１０ａに送信する（Ｓ５３４）。
【００９７】
次いで、Ｉｎｉｔｉａｔｏｒ１０ａは、Ｒｅｓｐｏｎｄｅｒ１０ｂからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号を用いてＩｎｉｔｉａｔｏｒシーケンス番号３８を更新することによって、Ｉｎｉｔｉａｔｏｒシーケンス番号３８に“２”を設定する。そして、Ｉｎｉｔｉａｔｏｒ１０ａは、シーケンス番号“２”とデータとを含むデータユニットをＲｅｓｐｏｎｄｅｒ１０ｂに送信する（Ｓ５３５）。Ｒｅｓｐｏｎｄｅｒ１０ｂは、Ｉｎｉｔｉａｔｏｒ１０ａからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８とが等しいので、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８に“３”を設定する。そして、Ｒｅｓｐｏｎｄｅｒ１０ｂは、シーケンス番号“３”とデータとを含むデータユニットをＩｎｉｔｉａｔｏｒ１０ａに送信する（Ｓ５３６）。また、Ｓ５３７からＳ５３８において、Ｓ５３３及びＳ５３４と同様の通信シーケンスが繰り返される。上述の通信シーケンスのように、Ｒｅｓｐｏｎｄｅｒ１０ｂは、Ｉｎｉｔｉａｔｏｒ１０ａによる連続したデータ送信の間に、データ送信を行うことができる。
【００９８】
図１９は、Ｒｅｓｐｏｎｄｅｒ１０ｂがデータを連続して送信している間に、Ｉｎｉｔｉａｔｏｒ１０ａが割り込んでデータを送信する通信シーケンスの例を示す。  
まず、Ｒｅｓｐｏｎｄｅｒ１０ｂは、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８に“１”を設定する。そして、Ｒｅｓｐｏｎｄｅｒ１０ｂは、データとシーケンス番号“１”とを含むデータユニットをＩｎｉｔｉａｔｏｒ１０ａに送信する（Ｓ５４１）。Ｉｎｉｔｉａｔｏｒ１０ａは、Ｒｅｓｐｏｎｄｅｒ１０ｂからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号を用いてＩｎｉｔｉａｔｏｒシーケンス番号３８を更新することによって、Ｉｎｉｔｉａｔｏｒシーケンス番号３８に“１”を設定する。
【００９９】
そして、Ｒｅｓｐｏｎｄｅｒ１０ｂは、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８に“２”を設定する。そして、Ｒｅｓｐｏｎｄｅｒ１０ｂは、データとシーケンス番号“２”とを含むデータユニットをＩｎｉｔｉａｔｏｒ１０ａに送信する（Ｓ５４２）。Ｉｎｉｔｉａｔｏｒ１０ａは、Ｒｅｓｐｏｎｄｅｒ１０ｂからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号を用いてＩｎｉｔｉａｔｏｒシーケンス番号３８を更新することによって、Ｉｎｉｔｉａｔｏｒシーケンス番号３８に“２”を設定する。
【０１００】
次いで、Ｒｅｓｐｏｎｄｅｒ１０ｂは、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８に“３”を設定する。そして、Ｒｅｓｐｏｎｄｅｒ１０ｂは、データとシーケンス番号“３”とを含むデータユニットをＩｎｉｔｉａｔｏｒ１０ａに送信する（Ｓ５４３）
Ｉｎｉｔｉａｔｏｒ１０ａは、Ｒｅｓｐｏｎｄｅｒ１０ｂからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号を用いてＩｎｉｔｉａｔｏｒシーケンス番号３８を更新することによって、Ｉｎｉｔｉａｔｏｒシーケンス番号３８に“３”を設定する。そして、Ｉｎｉｔｉａｔｏｒ１０ａは、シーケンス番号“３”とデータとを含むデータユニットをＲｅｓｐｏｎｄｅｒ１０ｂに送信する（Ｓ５４４）。Ｒｅｓｐｏｎｄｅｒ１０ｂは、Ｉｎｉｔｉａｔｏｒ１０ａからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８とが等しいので、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８に“４”を設定する。そして、Ｒｅｓｐｏｎｄｅｒ１０ｂは、シーケンス番号“４”とデータとを含むデータユニットをＩｎｉｔｉａｔｏｒ１０ａに送信する（Ｓ５４５）。上述の通信シーケンスのように、Ｉｎｉｔｉａｔｏｒ１０ａは、必要なときにいつでも、Ｒｅｓｐｏｎｄｅｒ１０ｂによるデータ送信に割り込むことができるので、Ｒｅｓｐｏｎｄｅｒ１０ｂは、Ｉｎｉｔｉａｔｏｒ１０ａの状態を考慮することなく、データ送信を行うことができる。
【０１０１】
図２０は、Ｉｎｉｔｉａｔｏｒ１０ａが送信したデータユニットに対応する、Ｒｅｓｐｏｎｄｅｒ１０ｂからのＡＣＫがタイムアウトする通信シーケンスの例を示す。  
まず、Ｉｎｉｔｉａｔｏｒ１０ａが、シーケンス番号“０”とデータとを含むデータユニットをＲｅｓｐｏｎｄｅｒ１０ｂに送信する（Ｓ５５１）。Ｒｅｓｐｏｎｄｅｒ１０ｂは、Ｉｎｉｔｉａｔｏｒ１０ａからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８とが等しいので、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８に“１”を設定する。そして、Ｒｅｓｐｏｎｄｅｒ１０ｂは、シーケンス番号“１”を含むＡＣＫをＩｎｉｔｉａｔｏｒ１０ａに送信する（Ｓ５５２）。
【０１０２】
Ｉｎｉｔｉａｔｏｒ１０ａは、Ｒｅｓｐｏｎｄｅｒ１０ｂからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号を用いてＩｎｉｔｉａｔｏｒシーケンス番号３８を更新することによって、Ｉｎｉｔｉａｔｏｒシーケンス番号３８に“１”を設定する。そして、Ｉｎｉｔｉａｔｏｒ１０ａは、シーケンス番号“１”とデータとを含むデータユニットをＲｅｓｐｏｎｄｅｒ１０ｂに送信する（Ｓ５５３）。Ｒｅｓｐｏｎｄｅｒ１０ｂは、Ｉｎｉｔｉａｔｏｒ１０ａからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８とが等しいので、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８に“２”を設定する。そして、Ｒｅｓｐｏｎｄｅｒ１０ｂは、シーケンス番号“２”を含むＡＣＫをＩｎｉｔｉａｔｏｒ１０ａに送信する（Ｓ５５４）。
【０１０３】
次いで、Ｉｎｉｔｉａｔｏｒ１０ａは、Ｒｅｓｐｏｎｄｅｒ１０ｂからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号を用いてＩｎｉｔｉａｔｏｒシーケンス番号３８を更新することによって、Ｉｎｉｔｉａｔｏｒシーケンス番号３８に“２”を設定する。そして、Ｉｎｉｔｉａｔｏｒ１０ａは、シーケンス番号“２”とデータとを含むデータユニットをＲｅｓｐｏｎｄｅｒ１０ｂに送信する（Ｓ５５５）。Ｒｅｓｐｏｎｄｅｒ１０ｂは、Ｉｎｉｔｉａｔｏｒ１０ａからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８とが等しいので、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８に“３”を設定する。Ｒｅｓｐｏｎｄｅｒ１０ｂは、シーケンス番号“３”を含むＡＣＫをＩｎｉｔｉａｔｏｒ１０ａに送信する（Ｓ５５６）。そして、ＡＣＫの送信が通信エラー等によって完了できなかった場合、Ｒｅｓｐｏｎｄｅｒ１０ｂは、その通信エラーを検出したことに応答して、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をデクリメントすることによって、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８に“２”を設定する。
【０１０４】
また、Ｉｎｉｔｉａｔｏｒ１０ａは、Ｓ５５５でデータユニットを送信してから所定時間が経過した場合、Ｒｅｓｐｏｎｄｅｒ１０ｂによって送信される一つのデータユニット（又はＡＣＫ）を待つことを中断（タイムアウト）し、シーケンス番号“２”とデータとを含むデータユニットをＲｅｓｐｏｎｄｅｒ１０ｂに送信する（Ｓ５５７）。Ｒｅｓｐｏｎｄｅｒ１０ｂは、Ｉｎｉｔｉａｔｏｒ１０ａからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８とが等しいので、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８に“３”を設定する。そして、Ｒｅｓｐｏｎｄｅｒ１０ｂは、シーケンス番号“３”を含むＡＣＫをＩｎｉｔｉａｔｏｒ１０ａに送信する（Ｓ５５８）。
【０１０５】
以上の通信シーケンスにより、Ｒｅｓｐｏｎｄｅｒ１０ｂからの通信が不測の事態によって途絶えてしまった場合にも、Ｉｎｉｔｉａｔｏｒ１０ａはタイムアウトを検出することで、自身の通信を再開することができる。
【０１０６】
図２１は、データユニットの送信に遅延がある通信シーケンスの例を示す。  
まず、Ｉｎｉｔｉａｔｏｒ１０ａが、シーケンス番号“０”とデータとを含むデータユニットをＲｅｓｐｏｎｄｅｒ１０ｂに送信する（Ｓ５６１）。Ｒｅｓｐｏｎｄｅｒ１０ｂは、Ｉｎｉｔｉａｔｏｒ１０ａからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８とが等しいので、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８に“１”を設定する。そして、Ｒｅｓｐｏｎｄｅｒ１０ｂは、シーケンス番号“１”を含むＡＣＫをＩｎｉｔｉａｔｏｒ１０ａに送信する（Ｓ５６２）。
【０１０７】
Ｉｎｉｔｉａｔｏｒ１０ａは、Ｒｅｓｐｏｎｄｅｒ１０ｂからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号を用いてＩｎｉｔｉａｔｏｒシーケンス番号３８を更新することによって、Ｉｎｉｔｉａｔｏｒシーケンス番号３８に“１”を設定する。そして、Ｉｎｉｔｉａｔｏｒ１０ａは、シーケンス番号“１”とデータとを含むデータユニットをＲｅｓｐｏｎｄｅｒ１０ｂに送信する（Ｓ５６３）。
【０１０８】
また、Ｒｅｓｐｏｎｄｅｒ１０ｂは、Ｓ５６３でＩｎｉｔｉａｔｏｒ１０ａから送信されたデータユニットを受信するよりも前に、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントして“２”を設定し、シーケンス番号“２”とデータとを含むデータユニットをＩｎｉｔｉａｔｏｒ１０ａに送信する（Ｓ５６４）。
【０１０９】
そして、Ｒｅｓｐｏｎｄｅｒ１０ｂは、Ｓ５６３でＩｎｉｔｉａｔｏｒ１０ａから送信されたデータユニットを受信したとき、受信したデータユニットに含まれるシーケンス番号と、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８とが等しくないので、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントせず、またＩｎｉｔｉａｔｏｒ１０ａに対してＡＣＫを送信しない。
【０１１０】
一方、Ｉｎｉｔｉａｔｏｒ１０ａは、Ｒｅｓｐｏｎｄｅｒ１０ｂからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号を用いてＩｎｉｔｉａｔｏｒシーケンス番号３８を更新することによって、Ｉｎｉｔｉａｔｏｒシーケンス番号３８に“２”を設定する。そして、Ｉｎｉｔｉａｔｏｒ１０ａは、シーケンス番号“２”とデータとを含むデータユニットをＲｅｓｐｏｎｄｅｒ１０ｂに送信する（Ｓ５６５）。
【０１１１】
Ｒｅｓｐｏｎｄｅｒ１０ｂは、Ｉｎｉｔｉａｔｏｒ１０ａからデータユニットを受信し、受信したデータユニットに含まれるシーケンス番号と、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８とが等しいので、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８に“３”を設定する。そして、Ｒｅｓｐｏｎｄｅｒ１０ｂは、シーケンス番号“３”を含むＡＣＫをＩｎｉｔｉａｔｏｒ１０ａに送信する（Ｓ５６６）。上述の通信シーケンスにより、データユニットが通信経路内でバッファリングされることにより、データユニットの伝送に遅延が生じても、Ｒｅｓｐｏｎｄｅｒ１０ｂからＩｎｉｔｉａｔｏｒ１０ａに不要なＡＣＫを送ることなく（Ｓ５６３，Ｓ５６４等参照）、擬似的な全二重通信を実行することができる。
【０１１２】
図１５から図２１に示すいずれの通信シーケンスでも、Ｉｎｉｔｉａｔｏｒ１０ａが一つのデータユニットを送信した後、Ｒｅｓｐｏｎｄｅｒ１０ｂから一つのＡＣＫを受信するまで、又はＩｎｉｔｉａｔｏｒ１０ａが一つのデータユニットを送信した後、所定の時間が経過してタイムアウトするまで、次のデータユニットの送信を待つように制御されることにより、Ｉｎｉｔｉａｔｏｒ１０ａとＲｅｓｐｏｎｄｅｒ１０ｂとの間で擬似的な全二重通信を実現することができる。
【０１１３】
次いで、図２２に示すフローチャートを参照して、電子機器１０によって実行される通信制御処理の手順について説明する。ここでは、電子機器１０がＩｎｉｔｉａｔｏｒとして動作し、Ｒｅｓｐｏｎｄｅｒとして動作する外部デバイスとの間で通信を実行することを想定する。また、電子機器１０と外部デバイスとの間で、シリアルプロトコルに基づくデータ伝送サービスが実行されることを想定する。
【０１１４】
まず、近接無線通信デバイス１０４は、外部デバイスが近接状態であるか否かを判定する（ブロックＢ１０１）。外部デバイスが近接状態でない場合（ブロックＢ１０１のＮＯ）、ブロックＢ１０１に戻り、外部デバイスが近接状態であるか否かが再度判定される。
【０１１５】
外部デバイスが近接状態である場合（ブロックＢ１０１のＹＥＳ）、近接無線通信デバイス１０４は、外部デバイスとの接続（ＣＮＬ接続）を確立する（ブロックＢ１０２）。そして、ＰＣＬコントローラ２３１は、外部デバイスのＰＣＬコントローラとの間でネゴシエーションを実行することによって、ＰＣＬシリアルアダプタ２３２を選択する（ブロックＢ１０３）。
【０１１６】
次いで、初期化部３１は、Ｉｎｉｔｉａｔｏｒシーケンス番号３８に０を設定する（ブロックＢ１０４）。そして、通信制御部３２は、送信待ちのデータ３９があるか否か（ポートエミュレータ２４２によって、データの送信を要求するコマンドが出力されているか否か）を判定する（ブロックＢ１０５）。送信待ちのデータ３９がある場合（ブロックＢ１０５のＹＥＳ）、データユニット生成部３３は、送信待ちデータ３９とＩｎｉｔｉａｔｏｒシーケンス番号３８とを含むデータユニットを生成する（ブロックＢ１０６）。そして、データユニット送信部３４は、生成されたデータユニットを外部デバイスに送信する（ブロックＢ１０７）。
【０１１７】
次いで、データユニット受信部３６は、データユニットを外部デバイスから受信したか否かを判定する（ブロックＢ１０８）。外部デバイスからデータユニットを受信している場合（ブロックＢ１０８のＹＥＳ）、データユニット受信部３６は、受信したデータユニットに含まれるＲｅｓｐｏｎｄｅｒシーケンス番号を読み出す（ブロックＢ１０９）。そして、シーケンス番号更新部３７は、メモリ１３等に格納されているＩｎｉｔｉａｔｏｒシーケンス番号３８の値を、読み出されたＲｅｓｐｏｎｄｅｒシーケンス番号の値で更新する（ブロックＢ１１０）。また、データユニット受信部４６は、受信したデータユニットに含まれるデータ（受信データ）を読み出す（ブロックＢ１１１）。そして、通信制御部３２は、ポートエミュレータ２４２等を介してアプリケーションプログラムに受信データを出力し（ブロックＢ１１２）、ブロックＢ１０５に戻る。
【０１１８】
また、外部デバイスからデータユニットを受信していない場合（ブロックＢ１０８のＮＯ）、タイムアウト検出部３５は、ブロックＢ１０７でデータユニットを送信してからの経過時間がしきい値時間を超えるか否かを判定する（ブロックＢ１１３）。データユニットを送信してからの経過時間がしきい値時間を超えるとき（ブロックＢ１１３のＹＥＳ）、タイムアウトと判定され、ブロックＢ１０５に戻る。したがって、送信待ちデータ３９がある場合には、現在設定されているＩｎｉｔｉａｔｏｒシーケンス番号３８を含む新たなデータユニットが送信される。
【０１１９】
データユニットを送信してからの経過時間がしきい値時間以下であるとき（ブロックＢ１１３のＮＯ）、通信制御部３２は、外部デバイスとの近接状態が解除されているか否か、すなわち、外部デバイスとの接続が解除されているか否かを判定する（ブロックＢ１１４）。外部デバイスとの接続が解除されているとき（ブロックＢ１１４のＹＥＳ）、処理を終了する。外部デバイスとの接続が解除されていないとき（ブロックＢ１１４のＮＯ）、ブロックＢ１０８に戻り、外部デバイスによって送信されるデータユニットが受信されたか否かが再度判定される。
【０１２０】
また、ブロックＢ１０５で送信待ちのデータ３９があるか否かを判定したときに、送信待ちのデータ３９がない場合（ブロックＢ１０５のＮＯ）、データユニット受信部４６は、外部デバイスによって送信されたデータユニットを受信したか否かを判定する（ブロックＢ１１５）。外部デバイスによって送信されたデータユニットを受信していない場合（ブロックＢ１１５のＮＯ）、ブロックＢ１０５に戻る。また、外部デバイスによって送信されたデータユニットを受信している場合（ブロックＢ１１５のＹＥＳ）、データユニット受信部３６は、受信したデータユニットに含まれるＲｅｓｐｏｎｄｅｒシーケンス番号を読み出す（ブロックＢ１０９）。そして、シーケンス番号更新部３７は、メモリ１３等に格納されているＩｎｉｔｉａｔｏｒシーケンス番号３８の値を、読み出されたＲｅｓｐｏｎｄｅｒシーケンス番号の値で更新する（ブロックＢ１１０）。また、データユニット受信部４６は、受信したデータユニットに含まれるデータ（受信データ）を読み出す（ブロックＢ１１１）。そして、通信制御部３２は、ポートエミュレータ２４２等を介してアプリケーションプログラムに受信データを出力し（ブロックＢ１１２）、ブロックＢ１０５に戻る。
【０１２１】
上述のシーケンス番号を用いた通信制御処理により、Ｉｎｉｔｉａｔｏｒ１０ａである電子機器１０は、外部デバイス（Ｒｅｓｐｏｎｄｅｒ１０ｂ）に一つのデータユニットを送信した後、一つのデータユニットを外部デバイスから受信するまで、又は外部デバイスに一つのデータユニットを送信してから所定の時間が経過してタイムアウトするまで、次のデータユニットの送信を待つように制御される。なお、電子機器１０は、電子機器１０から外部デバイスにデータユニットを送信することなく、外部デバイスから１以上のデータユニットを受信し得る。
【０１２２】
また、図２３のフローチャートを参照して、電子機器１０によって実行される通信制御処理の手順について説明する。ここでは、電子機器１０がＲｅｓｐｏｎｄｅｒとして動作し、Ｉｎｉｔｉａｔｏｒとして動作する外部デバイスとの間で通信を実行することを想定する。また、電子機器１０と外部デバイスとの間で、シリアルプロトコルに基づくデータ伝送サービスが実行されることを想定する。
【０１２３】
まず、近接無線通信デバイス１０４は、外部デバイスが近接状態であるか否かを判定する（ブロックＢ２０１）。外部デバイスが近接状態でない場合（ブロックＢ２０１のＮＯ）、ブロックＢ２０１に戻り、外部デバイスが近接状態であるか否かが再度判定される。
【０１２４】
外部デバイスが近接状態である場合（ブロックＢ２０１のＹＥＳ）、近接無線通信デバイス１０４は、外部デバイスとの接続（ＣＮＬ接続）を確立する（ブロックＢ２０２）。そして、ＰＣＬコントローラ２３１は、外部デバイスのＰＣＬコントローラとの間でネゴシエーションを実行することによって、ＰＣＬシリアルアダプタ２３２を選択する（ブロックＢ２０３）。
【０１２５】
次いで、初期化部４１は、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８に０を設定する（ブロックＢ２０４）。そして、データユニット受信部４６は、外部デバイスからデータユニットを受信したか否かを判定する（ブロックＢ２０５）。外部デバイスからデータユニットを受信している場合（ブロックＢ２０５のＹＥＳ）、データユニット受信部４６は、受信したデータユニットに含まれるＩｎｉｔｉａｔｏｒシーケンス番号を読み出す（ブロックＢ２０６）。また、データユニット受信部４６は、受信したデータユニットに含まれるデータを読み出す（ブロックＢ２０７）。そして、通信制御部４２は、ポートエミュレータ２４２等を介してアプリケーションプログラムに受信データを出力する（ブロックＢ２０８）。
【０１２６】
次いで、シーケンス番号判定部４７は、読み出したＩｎｉｔｉａｔｏｒシーケンス番号と、メモリ１０３等に格納されたＲｅｓｐｏｎｄｅｒシーケンス番号４８とが等しいか否かを判定する（ブロックＢ２０９）。Ｉｎｉｔｉａｔｏｒシーケンス番号とＲｅｓｐｏｎｄｅｒシーケンス番号４８とが等しくない場合（ブロックＢ２０９のＮＯ）、ブロックＢ１０５に戻る。
【０１２７】
一方、Ｉｎｉｔｉａｔｏｒシーケンス番号とＲｅｓｐｏｎｄｅｒシーケンス番号４８とが等しい場合（ブロックＢ２０９のＹＥＳ）、通信制御部４２は、送信待ちのデータ４９があるか否か（ポートエミュレータ２４２によって、データの送信を要求するコマンドが出力されているか否か）を判定する（ブロックＢ２１０）。
【０１２８】
送信待ちのデータ４９がある場合（ブロックＢ２１０のＹＥＳ）、シーケンス番号更新部４３は、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって更新する（ブロックＢ２１１）。つまり、シーケンス番号更新部４３は、Ｒｅｓｐｏｎｄｅｒシーケンス番号に所定の値（例えば、１）を加算した値を、新たなＲｅｓｐｏｎｄｅｒシーケンス番号４８としてメモリ１０３等に保存する。データユニット生成部４４は、送信待ちデータ４９とＲｅｓｐｏｎｄｅｒシーケンス番号４８とを含むデータユニットを生成する（ブロックＢ２１２）。データユニット送信部４５は、生成されたデータユニットを外部デバイスに送信する（ブロックＢ２１３）。
【０１２９】
一方、送信待ちのデータ４９がない場合（ブロックＢ２１０のＮＯ）、シーケンス番号更新部４３は、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって更新する（ブロックＢ２１４）。つまり、シーケンス番号更新部４３は、Ｒｅｓｐｏｎｄｅｒシーケンス番号に所定の値（例えば、１）を加算した値を、新たなＲｅｓｐｏｎｄｅｒシーケンス番号４８としてメモリ１０３等に保存する。データユニット生成部４４は、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８を含むＡＣＫを生成する（ブロックＢ２１５）。このＡＣＫは、データを含まないデータユニットである。データユニット送信部４５は、生成されたＡＣＫを外部デバイスに送信する（ブロックＢ２１６）。
【０１３０】
また、ブロックＢ２０５で外部デバイスによって送信されるデータユニットが受信されたか否かを判定したときに、データユニットが受信されていない場合（ブロックＢ２０５のＮＯ）、通信制御部４２は、送信待ちデータ４９があるか否かを判定する（ブロックＢ２１８）。送信待ちデータ４９がない場合（ブロックＢ２１８のＮＯ）、ブロックＢ２０５に戻る。また、送信待ちデータ４９がある場合（ブロックＢ２１８のＹＥＳ）、シーケンス番号更新部４３は、Ｒｅｓｐｏｎｄｅｒシーケンス番号４８をインクリメントすることによって更新する（ブロックＢ２１１）。つまり、シーケンス番号更新部４３は、Ｒｅｓｐｏｎｄｅｒシーケンス番号に所定の値（例えば、１）を加算した値を、新たなＲｅｓｐｏｎｄｅｒシーケンス番号４８としてメモリ１０３等に保存する。データユニット生成部４４は、送信待ちデータ４９とＲｅｓｐｏｎｄｅｒシーケンス番号４８とを含むデータユニットを生成する（ブロックＢ２１２）。データユニット送信部４５は、生成されたデータユニットを外部デバイスに送信する（ブロックＢ２１３）。
【０１３１】
ブロックＢ２１３でデータユニットを送信した後、又はブロックＢ２１６でＡＣＫ（データを含まないデータユニット）を送信した後、通信制御部４２は、外部デバイスとの近接状態が解除されているか否か、すなわち、外部デバイスとの接続が解除されているか否かを判定する（ブロックＢ２１７）。外部デバイスとの接続が解除されているとき（ブロックＢ２１７のＹＥＳ）、処理を終了する。外部デバイスとの接続が解除されていないとき（ブロックＢ２１７のＮＯ）、ブロックＢ２０５に戻り、外部デバイスによって送信されるデータユニットが受信されたか否かが再度判定される。
【０１３２】
上述のシーケンス番号を用いた通信制御処理により、Ｉｎｉｔｉａｔｏｒにおいて、複数のデータユニットを連続して送信するような要求が生じていても、Ｒｅｓｐｏｎｄｅｒである電子機器１０は、割り込んでデータ（データユニット）を送信することができる。
【０１３３】
以上説明したように、本実施形態によれば、非対称なデータ伝送を行うための伝送路で、擬似的に全二重通信を行うことができる。Ｉｎｉｔｉａｔｏｒ１０ａは、Ｒｅｓｐｏｎｄｅｒ１０ｂに一つのデータユニットを送信した後、一つのデータユニットをＲｅｓｐｏｎｄｅｒ１０ｂから受信するまで、又はＲｅｓｐｏｎｄｅｒ１０ｂに一つのデータユニットを送信してから所定の時間が経過してタイムアウトするまで、次のデータユニットの送信を待つように制御される。これにより、Ｉｎｉｔｉａｔｏｒ１０ａにおいて、複数のデータユニットを連続して送信するような要求が生じていても、Ｒｅｓｐｏｎｄｅｒ１０ｂは、割り込んでデータを送信することができる。したがって、コネクション層（ＣＮＬ）２２では、Ｒｅｓｐｏｎｄｅｒ１０ｂよりもＩｎｉｔｉａｔｏｒ１０ａによるデータ伝送が優先される非対称な通信が実行される構成であっても、プロトコル変換層（ＰＣＬ）２３で通信制御プログラム１０９ａ，１０９ｂ（シリアルアダプタ２３２）を実行することによって擬似的な全二重通信を実現することができる。
【０１３４】
なお、本実施形態の通信制御処理の手順は全てソフトウェアによって実行することができる。このため、通信制御処理の手順を実行するプログラムを格納したコンピュータ読み取り可能な記憶媒体を通じてこのプログラムを通常のコンピュータにインストールして実行するだけで、本実施形態と同様の効果を容易に実現することができる。
【０１３５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１３６】
１０９ａ…Ｉｎｉｔｉａｔｏｒ通信制御プログラム、１０９ｂ…Ｒｅｓｐｏｎｄｅｒ通信制御プログラム、３１…初期化部、３２…通信制御部、３３…データユニット生成部、３４…データユニット送信部、３５…タイムアウト検出部、３６…データユニット受信部、３７…シーケンス番号更新部、３８…Ｉｎｉｔｉａｔｏｒシーケンス番号、３９…送信待ちデータ、４１…初期化部、４２…通信制御部、４３…シーケンス番号更新部、４４…データユニット生成部、４５…データユニット送信部、４６…データユニット受信部、４７…シーケンス番号判定部、４８…Ｒｅｓｐｏｎｄｅｒシーケンス番号、４９…送信待ちデータ。
【図１】
2012227619.tif 000003
【図２】
2012227619.tif 000004
【図３】
2012227619.tif 000005
【図４】
2012227619.tif 000006
【図５】
2012227619.tif 000007
【図６】
2012227619.tif 000008
【図７】
2012227619.tif 000009
【図８】
2012227619.tif 000010
【図９】
2012227619.tif 000011
【図１０】
2012227619.tif 000012
【図１１】
2012227619.tif 000013
【図１２】
2012227619.tif 000014
【図１３】
2012227619.tif 000015
【図１４】
2012227619.tif 000016
【図１５】
2012227619.tif 000017
【図１６】
2012227619.tif 000018
【図１７】
2012227619.tif 000019
【図１８】
2012227619.tif 000020
【図１９】
2012227619.tif 000021
【図２０】
2012227619.tif 000022
【図２１】
2012227619.tif 000023
【図２２】
2012227619.tif 000024
【図２３】
2012227619.tif 000025