通信システム
【課題】通信動作の確認方法を、通信ケーブルを用いた外部通信によって行う方法と、外部通信を行わずに仮想的に行う方法とで切り替えうる通信システムを提供する。
【解決手段】通信システム1は、仮想通信確認手段と外部通信確認手段とを備えており、更に、これら仮想通信確認手段及び外部通信確認手段のいずれかを選択する選択手段を有している。また、仮想通信確認手段は、通信ポート割当手段と仮想送受信手段とを備えており、選択手段により仮想通信確認手段が選択された場合、仮想送受信手段により、一のアプリケーションプログラムから他のアプリケーションプログラムに対してデータの仮想的な送受信を行い、その送受信結果に基づいてデータの通信動作を確認する。
【解決手段】通信システム1は、仮想通信確認手段と外部通信確認手段とを備えており、更に、これら仮想通信確認手段及び外部通信確認手段のいずれかを選択する選択手段を有している。また、仮想通信確認手段は、通信ポート割当手段と仮想送受信手段とを備えており、選択手段により仮想通信確認手段が選択された場合、仮想送受信手段により、一のアプリケーションプログラムから他のアプリケーションプログラムに対してデータの仮想的な送受信を行い、その送受信結果に基づいてデータの通信動作を確認する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、通信システムに関するものである。
【背景技術】
【0002】
現在、パーソナルコンピュータなどの情報処理装置では、アプリケーションによる情報通信が広く行われている。この種の情報処理装置では、必要なときに情報通信が円滑に行われるようにするため、所望のタイミングで通信動作を確認しうる構成が求められており、従来では、確認対象となる情報処理装置に通信ケーブルを接続し、当該通信ケーブルを介して外部装置(例えば他のパーソナルコンピュータ)との通信を試行することで通信動作を確認する手法がとられていた。なお、本発明に関連する技術としては特許文献1のようなものがある。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2006−195954
【発明の概要】
【発明が解決しようとする課題】
【0004】
上記のような従来構成の場合、通信動作の確認を行う場合、通信ケーブルや他のパーソナルコンピュータなどを必須とするため、これら通信ケーブルや他のパーソナルコンピュータを別途用意する必要があった。しかしながら、このような構成(即ち、通信ケーブルや他のパーソナルコンピュータなどの外部機器の準備を必須とする構成)では、通信動作の確認を、迅速に、或いは容易に行いにくいという問題があった。
【0005】
また、従来の情報処理装置では、いずれかのアプリケーションプログラムがある通信ポートを使用した場合、当該通信ポートはこのアプリケーションプログラムの占有状態となり、他のアプリケーションプログラムの使用を排除するような制御が行われていた。従って、複数のアプリケーションプログラムが同一の通信ポートを同時期に使用しながら動作確認やその他の通信を同時進行で行うことができず、動作確認やその他の通信を行う上で非常に制約が大きかった。
【0006】
本発明は、上述した課題を解決するためになされたものであり、通信動作の確認方法を、通信ケーブルを用いた外部通信によって行う方法と、外部通信を行わずに仮想的に行う方法とで切り替えうる通信システムを提供することを第一の目的とする。
また、複数のアプリケーションプログラムが同一の通信ポートを同時期に使用することができる通信システムを提供することを第二の目的とする。
【課題を解決するための手段】
【0007】
上記目的を達成するため、請求項1の発明は、通信機器を接続可能な複数の通信ポートと、メモリとを備えたコンピュータを有し、前記通信ポートを介して外部装置と通信を行う通信システムであって、前記コンピュータは、複数のアプリケーションプログラムと、前記アプリケーションプログラムにて生成されるデータについての通信動作を確認する通信動作確認手段と、を備え、前記通信動作確認手段は、前記複数のアプリケーションプログラムにおける、一のアプリケーションプログラムと他のアプリケーションプログラムとの通信を仮想的に試行することで前記データの通信動作を確認する仮想通信確認手段と、
前記通信ポートに前記通信機器が接続されている場合に、前記アプリケーションプログラムにて生成された前記データを、前記通信ポートを介して前記コンピュータの外部に送信することで、前記データの通信動作を確認する外部通信確認手段と、前記データの通信動作を確認する手段として、前記仮想通信確認手段及び前記外部通信確認手段のいずれかを選択する選択手段と、を有し、前記仮想通信確認手段は、前記一のアプリケーションプログラムに対し、複数の前記通信ポートにおける第1の通信ポートを割り当てると共に、前記他のアプリケーションプログラムに対して第2の通信ポートを割り当て、それら第1の通信ポート及び第2の通信ポートを特定するポート情報を前記メモリに記憶する通信ポート割当手段と、前記ポート情報に基づいて前記第1の通信ポートと対応する前記第2の通信ポートを特定すると共に、前記一のアプリケーションプログラムから前記第1の通信ポートに送られるべき前記データを、前記第2の通信ポートが受信した前記データとして前記メモリに記憶し、且つ前記他のアプリケージョンプログラムに与える仮想送受信手段と、を備え、前記選択手段により当該仮想通信確認手段が選択された場合、前記仮想送受信手段により、前記一のアプリケーションプログラムから前記他のアプリケーションプログラムに対して前記データの仮想的な送受信を行い、その送受信結果に基づいて前記データの通信動作を確認することを特徴とする。
【0008】
請求項2の発明は、請求項1に記載の通信システムにおいて、前記通信機器が前記通信ポートに接続されているか否かを検出する検出手段を備え、前記選択手段は、前記検出手段により前記通信機器が検出されたことを条件として前記外部通信確認手段を選択することを特徴とする。
【0009】
請求項3の発明は、請求項2に記載の通信システムにおいて、前記検出手段は、前記通信ポートに特定種類の前記通信機器が接続されているか否かを検出し、前記選択手段は、前記検出手段により前記特定種類の前記通信機器が検出された場合にのみ前記外部通信確認手段を選択することを特徴とする。
【0010】
請求項4の発明は、請求項2又は請求項3に記載の通信システムにおいて、前記検出手段は、前記通信ポート割当手段によって割り当てられた前記第1の通信ポートに前記通信機器が接続されているか否かを検出し、前記選択手段は、前記第1の通信ポートに前記通信機器が接続されている場合に前記外部通信確認手段を選択することを特徴とする。
【0011】
請求項5の発明は、請求項1から請求項4のいずれか一項に記載の通信システムにおいて、前記通信ポート割当手段は、前記仮想通信確認手段に対して命令を与える上位プログラムからの設定変更命令に基づき、前記他のアプリケーションプログラムに割り当てる前記第2の通信ポートを設定変更する設定変更手段を備え、前記仮想送受信手段による前記仮想的な送受信中に前記設定変更命令がなされた場合、当該仮想的な送受信が完了するまで、前記設定変更手段による前記第2の通信ポートの設定変更を中止することを特徴とする。
【0012】
請求項6の発明は、請求項1から請求項5のいずれか一項に記載の通信システムにおいて、前記通信ポート割当手段は、前記一のアプリケーションプログラムに割り当てる前記第1の通信ポートと、前記他のアプリケーションプログラムに割り当てる前記第2の通信ポートとを互いに異なる前記通信ポートとすることを特徴とする。
【0013】
請求項7の発明は、通信機器を接続可能な通信ポートと、メモリとを備えたコンピュータを有し、前記通信ポートを介して外部装置と通信を行う通信システムであって、
前記コンピュータが、複数のアプリケーションプログラムと、各アプリケーションプログラムによる前記通信ポートの呼び出し回数をカウントすると共に、前記各アプリケーションプログラムによる当該通信ポートを用いた通信処理の終了毎に前記呼び出し回数を減じる呼び出し回数増減手段と、前記アプリケーションプログラムが前記通信ポートを呼び出したときに、前記呼び出し回数増減手段による前記呼び出し回数が所定値以下か否かを判断する判断手段と、前記判断手段によって前記通信ポートの前記呼び出し回数が前記所定値以下と判断された場合に、前記アプリケーションプログラムによって呼び出された当該通信ポートにて通信を行うためのハンドルを保存するハンドル保存手段と、前記各アプリケーションプログラムが前記通信ポートを呼び出したときに、前記各アプリケーションプログラムに対し、前記ハンドル保存手段によって保存された前記ハンドルに対応した仮想ハンドルを設定する仮想ハンドル設定手段と、前記ハンドル保存手段によって保存される前記ハンドルと、前記仮想ハンドル設定手段によって前記各アプリケーションプログラムに設定される各仮想ハンドルとの対応データを保存する対応データ保存手段と、前記各アプリケーションプログラムが前記通信ポートを用いて通信を行う際に、前記対応データ保存手段に保存された前記対応データに従い、前記各アプリケーションプログラムに設定された前記仮想ハンドルと対応付けられた前記ハンドルを使用する通信制御手段と、を備えたことを特徴としている。
【0014】
請求項8の発明は、請求項7に記載の通信システムにおいて、前記通信制御手段が、前記アプリケーションプログラムが特定の通信関連コマンドを実行したときに、前記仮想ハンドルを用いた通信を行うか否かを確認する仮想ハンドル利用確認手段を備え、前記仮想ハンドル利用確認手段によって前記仮想ハンドルを用いた通信であることが確認された場合に、前記アプリケーションプログラムに設定された前記仮想ハンドルと対応付けられた前記ハンドルを使用することを特徴としている。
【0015】
請求項9の発明は、請求項7又は請求項8に記載の通信システムにおいて、
前記アプリケーションプログラムによる前記通信ポートを使用した通信処理が終了した場合に、前記対応データ保存手段によって保存された前記対応データにおいて、その通信処理が終了した前記アプリケーションプログラムについての前記仮想ハンドルと前記ハンドルとの対応値を破棄する対応値破棄手段を備えたことを特徴としている。
【0016】
請求項10の発明は、請求項7から請求項9のいずれか一項に記載の通信システムにおいて、
前記外部装置が、前記コンピュータとの間でデータの送信又は受信を行う複数のプログラムを備えた携帯端末であり、
前記通信制御手段が、前記コンピュータの複数の前記アプリケーションプログラムのうち、いずれか一のアプリケーションプログラムが前記通信ポートを用いて前記携帯端末の一のプログラムと通信を行う際に、前記対応データ保存手段に保存された前記対応データに従い、前記一のアプリケーションプログラムに設定された前記仮想ハンドルに対応する前記ハンドルを使用し、
前記一のアプリケーションプログラムによる前記通信ポートを用いた通信処理の継続中に、複数の前記アプリケーションプログラムのうちの他のアプリケーションプログラムが当該通信ポートを用いて前記携帯端末の他のプログラムと通信を行う場合、前記他のアプリケーションプログラムに設定された前記仮想ハンドルと前記対応データとに基づき、当該通信ポートに対応する前記ハンドルを使用することを特徴としている。
【発明の効果】
【0017】
請求項1の発明は、一のアプリケーションプログラムと他のアプリケーションプログラムとの通信を仮想的に試行する仮想通信確認手段と、アプリケーションプログラムにて生成されたデータを、通信ポートを介してコンピュータの外部に送信してデータの通信動作を確認する外部通信確認手段とが設けられているため、状況に応じて仮想通信確認手段と外部通信確認手段とを使い分けることができ、通信動作をより適切な方法で確認できるようになる。例えば、通信ケーブルや外部装置を準備しにくい場合であっても、外部通信確認手段を用いずに仮想通信確認手段によって通信動作を確認でき、通信動作の確認作業やその準備の容易化が効果的に図られる。
また、一のアプリケーションプログラムに対し第1の通信ポートを割り当て、他のアプリケーションプログラムに対し第2の通信ポートを割り当て、それら第1の通信ポート及び第2の通信ポートを特定するポート情報をメモリに記憶しているため、一のアプリケーションプログラムに対応する送信ポートと、他のアプリケーションプログラムに対応する受信ポートとの対応関係を明確にすることができる。
更に、一のアプリケーションプログラムから第1の通信ポートに送られるべきデータを、第2の通信ポートが受信したデータとしてメモリに記憶し、且つ他のアプリケージョンプログラムに与えるように構成されているため、実際に通信ケーブルを通信ポートに接続しなくても、一のアプリケーションプログラムからのデータを第1の通信ポートに与えるという送信状態の確認と、他のアプリケーションプログラムに対するデータを第2の通信ポートにて受信するという受信状態の確認とを仮想的に実現でき、外部通信確認手段を用いない場合であっても通信動作の確認が良好に行われることとなる。
【0018】
請求項2の発明では、通信機器が通信ポートに接続されているか否かを検出する検出手段が設けられており、検出手段により通信機器が検出されたことを条件として外部通信確認手段が選択されるように構成されている。このようにすると、外部通信確認手段による通信動作の確認が可能なときのみ外部通信確認手段が選択されるようになり、より適切な選択が可能となる。
【0019】
請求項3の発明は、検出手段により特定種類の通信機器が検出された場合にのみ外部通信確認手段を選択するように構成されている。このようにすると、通信動作確認の対象となる特定種類の通信機器が接続されたとき以外で外部通信確認手段が選択されることがなく、より一層適切な選択が可能となる。
【0020】
請求項4の発明は、通信ポート割当手段によって割り当てられた第1の通信ポートに通信機器が接続されているか否かを検出し、第1の通信ポートに通信機器が接続されている場合に外部通信確認手段を選択するように構成されている。このようにすると、一のアプリケーションシステムから外部への通信が可能な状態においては、外部通信確認手段を用いてより精度の高い通信動作確認が可能となる。
【0021】
請求項5の発明は、上位プログラムからの設定変更命令に基づき、他のアプリケーションプログラムに割り当てる第2の通信ポートを設定変更する設定変更手段が設けられているため、他のアプリケーションプログラムに割り当てる通信ポートを必要に応じて変更できる。更に、仮想送受信手段による仮想的な送受信中に設定変更命令がなされた場合、当該仮想的な送受信が完了するまで、設定変更手段による第2の通信ポートの設定変更を中止している。このようにすると、第2の通信ポートを必要に応じて設定変更できるようにしつつ、その設定変更によって仮想的な動作確認が強制的に中断されることを効果的に防止できる。
【0022】
請求項6の発明は、一のアプリケーションプログラムに割り当てる第1の通信ポートと、他のアプリケーションプログラムに割り当てる第2の通信ポートとが互いに異なる通信ポートとなるように設定している。このようにすると、仮想通信確認手段によって通信動作を確認するときに、第1の通信ポートと第2の通信ポートと区別して適切な動作確認を行うことができる。
【0023】
請求項7の発明では、呼び出し回数増減手段によってアプリケーションプログラムによる通信ポートの呼び出し回数を管理しており、アプリケーションプログラムが通信ポートを呼び出したときに、呼び出し回数増減手段によって管理される呼び出し回数が所定値以下か否かを判断している。そして、その通信ポートの呼び出し回数が所定値以下と判断された場合に、アプリケーションプログラムによって呼び出された当該通信ポートにて通信を行うためのハンドルを保存している。
このようにすると、通信ポートに対するアプリケーションプログラムの呼び出しがどの程度重複しているかを確認できる。そして、呼び出し回数が少ないときに、当該通信ポートで通信を行うためにハンドルを予め保存しておくことができる。
更に、各アプリケーションプログラムが通信ポートを呼び出したときに、各アプリケーションプログラムに対し、ハンドル保存手段によって保存されたハンドルに対応した仮想ハンドルを設定し、この設定された仮想ハンドルと、既に保存されているハンドルとの対応データを保存している。そして、各アプリケーションプログラムが通信ポートを用いて通信を行う際に、保存された対応データに従い、各アプリケーションプログラムに設定された仮想ハンドルと対応付けられたハンドルを使用している。
このようにすると、複数のアプリケーションプログラムが同じ通信ポートを呼び出した場合に、各アプリケーションプログラムに仮想ハンドルを割り当てることができ、各アプリケーションプログラムは対応データを拠り所として仮想ハンドルと対応する実際のハンドルを使用し、当該通信ポートでの通信を行うことができるようになる。従って、最初に通信ポートを呼び出したアプリケーションプログラムだけに当該通信ポートを占有させて他のアプリケーションプログラムによる当該通信ポートへのアクセスを排除するといった対応を行う必要がなく、複数のアプリケーションプログラムが同一の通信ポートを同時期に使用することができるようになる。
【0024】
請求項8の発明では、アプリケーションプログラムが特定の通信関連コマンドを実行したときに、仮想ハンドルを用いた通信を行うか否かを確認する仮想ハンドル利用確認手段を備え、仮想ハンドル利用確認手段によって仮想ハンドルを用いた通信であることが確認された場合に、アプリケーションプログラムに設定された仮想ハンドルと対応付けられたハンドルを使用している。
このようにすると、特定の通信関連コマンドが実行されたことをトリガとして仮想ハンドルを用いた通信を行うことができるようになる。その際、仮想ハンドルを用いた通信を行うか否かの確認を行った上で、通信処理に移行しているため、特定の通信関連コマンドで他の処理を実行する場合(即ち、仮想ハンドルを用いた通信を行わない例外ケース)にも対応しやすくなる。
【0025】
請求項9の発明は、アプリケーションプログラムによる通信ポートを使用した通信処理が終了した場合に、対応データ保存手段によって保存された対応データにおいて、その通信処理が終了したアプリケーションプログラムについての仮想ハンドルとハンドルとの対応値を破棄する対応値破棄手段を備えている。このようにすると、通信処理が終了して不要になった仮想ハンドルを削除することができ、対応データを常に適切な状態に維持できるようになる。
【0026】
請求項10の発明は、外部装置が、コンピュータとの間でデータの送信又は受信を行う複数のプログラムを備えた携帯端末として構成されている。そして、コンピュータの複数のアプリケーションプログラムのうち、いずれか一のアプリケーションプログラムが通信ポートを用いて携帯端末の一のプログラムと通信を行う際に、対応データ保存手段に保存された対応データに従い、一のアプリケーションプログラムに設定された仮想ハンドルに対応するハンドルを使用している。また、一のアプリケーションプログラムによる通信ポートを用いた通信処理の継続中に、複数のアプリケーションプログラムのうちの他のアプリケーションプログラムが当該通信ポートを用いて携帯端末の他のプログラムと通信を行う場合、他のアプリケーションプログラムに設定された仮想ハンドルと対応データとに基づき、当該通信ポートに対応するハンドルを使用している。
このようにすると、コンピュータに記憶されたいずれかのアプリケーションプログラムが通信ポートを介して携帯端末のいずれかのプログラムと通信処理を行っている際に、コンピュータの他のアプリケーションプログラムが同じ通信ポートを用いて携帯端末の他のプログラムと通信処理を行うことができるようになる。従って、通信ポートが制約されやすい携帯端末との通信であっても、複数のアプリケーションプログラムが同一の通信ポートを使用して同時期に通信を行うことができるようになり、ひいては、コンピュータと携帯端末との間で多様な処理が実現可能となる。
【図面の簡単な説明】
【0027】
【図1】図1は、第1実施形態に係る通信システムを概略的に説明する説明図である。
【図2】図2は、図1の通信システムの電気的構成を例示するブロック図である。
【図3】図3は、ハードウェアが接続されているときのOS内の構成を概略的に説明する説明図である。
【図4】図4は、ドライバロード処理の流れを例示するフローチャートである。
【図5】図5は、通信ポートオープン処理の流れを例示するフローチャートである。
【図6】図6は、データ送信処理の流れを例示するフローチャートである。
【図7】図7は、データ受信処理の流れを例示するフローチャートである。
【図8】図8は、第2実施形態に係る通信システムを概略的に説明する説明図である。
【図9】図9は、アプリケーションプログラムによって実行される通信処理の流れを概略的に例示するフローチャートである。
【図10】図10は、通信ポートオープン時のAPIフック処理を例示するフローチャートである。
【図11】図11(a)は、送信関連APIが呼び出されたときのAPIフック処理を例示するフローチャートである。図11(b)は、受信関連APIが呼び出されたときのAPIフック処理を例示するフローチャートである。
【図12】図12は、通信ポートクローズ時のAPIフック処理を例示するフローチャートである。
【図13】図13(a)は、各仮想ハンドルと正規のハンドルとの対応データを概念的に説明する説明図であり、図13(b)は、各アプリケーションプログラムに仮想ハンドルが割り当てられた状態を概念的に説明する説明図である。
【発明を実施するための形態】
【0028】
[第1実施形態]
以下、本発明の通信システムを具現化した第1実施形態について、図面を参照して説明する。図1は、第1実施形態に係る通信システムを概略的に説明する説明図である。図2は、図1の通信システムの電気的構成を例示するブロック図である。図3は、通信ポートにハードウェアが接続されているときのOS内の構成を概略的に説明する説明図である。図4は、ドライバロード処理の流れを例示するフローチャートである。図5は、通信ポートオープン処理の流れを例示するフローチャートである。図6は、データ送信処理の流れを例示するフローチャートである。図7は、データ受信処理の流れを例示するフローチャートである。
【0029】
(第1実施形態の通信システムの概要)
図1に示すように、本実施形態に係る通信システム1は、コンピュータ2によって構成されており、このコンピュータ2の内部に、アプリケーションプログラム(以下、アプリケーションとも称する)やオペレーティングシステム(以下、OSとも称する)20が格納された構成をなしている。コンピュータ2は、OS20の制御の下、これらアプリケーションプログラムを実行することで、各種処理を行うように構成されている。なお、図1では、コンピュータ2で用いられる一部のアプリケーションプログラムA、B(図1では、アプリケーションA、Bと略称)を例示しており、これら以外のアプリケーションプログラムについては図示を省略している。
【0030】
コンピュータ2は、例えばパーソナルコンピュータとして構成されており、図2に示すように、CPU3、ROM4、RAM5、ハードディスクドライブ(以下HDDとも称する)6を備えている。また、CPU3には、バス11を介して、出力部7、入力部8、通信部9が接続されている。なお、図示はしていないが、バス11に接続された各回路とCPU3との間の入出力制御を行う入出力コントローラなども設けられている。
【0031】
出力部7は、表示装置やスピーカなどによって構成されており、CPU3からの指令に基づいて各種画像や音声を出力する。また、入力部8は、キーボードやマウスなどによって構成されており、ユーザの操作に応じて各種信号を入力する。
【0032】
通信部9は、アプリケーションプログラムなどによって生成されたデータを外部に送信したり、或いは外部装置からのデータを受信するように機能するものであり、通信インターフェース13と、複数の通信ポート14a〜14cとを備えた構成をなしている。各通信ポート14a〜14cは、シリアルコネクタやパラレルコネクタとして構成されており、RS232CケーブルやUSBケーブルなどの通信ケーブルを介して各種通信機器(例えば、他のコンピュータ、外部記憶装置、その他の情報処理装置等)が接続される構成をなしている。また、通信インターフェース13は、各通信ポート14a〜14cを介したデータの入出力制御を行うように構成されている。
【0033】
CPU3は、必要に応じ、上記入力部8にて入力された情報の取得、出力部7に対する出力制御、ROM4、RAM5、HDD6に対する読み取り或いは書き込みの制御、或いは、通信部9の制御を行う。また、CPU3は、HDD6に格納されているプログラムやHDD6にインストールされたプログラム等をRAM5にロードして実行する機能を有している。
【0034】
また、コンピュータ2で用いられるOS20は、図1のような構成をなしている。なお、図1では、後述する仮想ドライバがロードされた状態を示している。OS20としては、例えば、Unix(登録商標)や、Linux、さらには、マイクロソフト社のWindows(登録商標)、その他の任意のOSを採用することができる。図1では、その一例として、Windows(登録商標)のNT系のOSが採用されたときの構成例を示している。
【0035】
Windows(登録商標)のNT系のOSであるOS20は、マイクロカーネル技術とオブジェクト指向技術をベースとし、各サービスを、サブシステムによって実装している。Win32サブシステム21は、サブシステムの1つで、アプリケーションプログラムA、Bに対して、各種のAPI(Application Programming Interface)(関数)を提供し、例えば、メモリ管理、プロセス管理、グラフィックス描画などを行う。Win32サブシステム21は、アプリケーションプログラムA、Bから、例えば、入出力関係のAPI関数が呼び出されると、そのAPI関数に応じた入出力要求を、IOマネージャ22に出力する。
【0036】
また、OS20には、デバイスドライバが組み込まれるようになっており、図1では、後述する仮想ドライバがロードされたときの階層構成を示している。また、図3では、ハードウェアが接続され、このハードウェアのデバイスドライバがロードされているときの階層構成を示している。
【0037】
(第1実施形態の特徴的構成)
次に、本実施形態の特徴的構成について説明する。
本実施形態に係る通信システム1は、アプリケーションプログラムにて生成されるデータについての通信動作を確認する「通信動作確認手段」を備えている。以下では、この通信動作確認処理について具体的に説明する。
【0038】
まず、図4を参照してドライバロード処理の流れを説明する。このドライバロード処理は、通信動作の確認処理を行うためのドライバをRAM5にロードする処理であり、例えば、ユーザによる所定操作時、或いはコンピュータ2の起動時などに実行される。当該処理が開始されると、まず、設定値の取得処理が行われる(S1)。この設定値の取得処理では、通信が行われるアプリケーションプログラム毎に使用する通信ポートが割り当てられる。例えば、図1のようにシリアル通信を行うアプリケーションとしてアプリケーションA、Bが存在する場合、一方のアプリケーションプログラムAに対していずれかの一の通信ポートが割り当てられ、他方のアプリケーションプログラムBに対して、アプリケーションプログラムAに割り当てられた通信ポートと異なる通信ポートが割り当てられる。
【0039】
以下では、アプリケーションプログラムAに対して通信ポート14aが割り当てられ、アプリケーションプログラムBに対して通信ポート14bが割り当てられた例を挙げて説明する。なお、アプリケーションプログラムAに割り当てられる通信ポート14aは、「第1の通信ポート」に相当し、アプリケーションプログラムBに割り当てられる通信ポート14bは、「第2の通信ポート」に相当するものであり、以下、通信ポート14aを、第1の通信ポートとも称し、通信ポート14bを第2の通信ポートとも称することとする。
【0040】
S1では、通信相手のポート番号を設定する処理も行われる。この処理は、仮想的に通信動作確認を行うときの通信相手のポート番号を設定する処理であり、例えばアプリケーションプログラムAからアプリケーションプログラムBに対してデータを送信し仮想的な通信動作確認を行う場合、アプリケーションプログラムAの通信相手のポート番号として、アプリケーションプログラムBに割り当てられた通信ポート14bのポート番号を設定する。なお、どのアプリケーションプログラムにどの通信ポートを割り当てるか、或いはどの通信ポートとどの通信ポートで仮想的な通信を行うかはユーザによって任意に選択できるようにすることができる。
【0041】
S1の処理においてアプリケーションプログラムAに割り当てられた通信ポート14aのポート番号(第1の通信ポートのポート番号)及びアプリケーションプログラムBに割り当てられた通信ポート14bのポート番号(第2の通信ポートのポート番号)はレジストリに記憶され、更に、通信ポート14aの通信相手として通信ポート14bを指定する対応情報もレジストリに記憶される。
【0042】
なお、CPU3は、「通信ポート割当手段」の一例に相当し、アプリケーションプログラムA(一のアプリケーションプログラム)に対し、通信ポート14a(第1の通信ポート)を割り当てると共に、アプリケーションプログラムB(他のアプリケーションプログラム)に対して通信ポート14b(第2の通信ポート)を割り当て、それら第1の通信ポート及び第2の通信ポートを特定するポート情報をメモリに記憶するように機能する。また、アプリケーションプログラムA(一のアプリケーションプログラム)に割り当てる第1の通信ポートと、アプリケーションプログラムB(他のアプリケーションプログラム)に割り当てる第2の通信ポートとを互いに異なる通信ポートとするように機能している。
【0043】
その後、ハードウェアの接続状況を確認する(S2)。このS2の処理は、通信動作確認を行おうとするアプリケーションプログラムに割り当てられた通信ポートにハードウェア(通信機器)が接続されているか否かを確認する処理であり、上述のようにアプリケーションプログラムAに対して通信ポート14aが割り当てられている場合、この通信ポート14aにコンピュータ2と通信を行い得る通信機器が接続されているか否かを確認する。
【0044】
アプリケーションプログラムAに割り当てられた通信ポート14aにハードウェア(通信機器)が接続されていない場合には、S3にてNoに進み、仮想ドライバをロードする(S4)。この仮想ドライバは、通信動作の確認を仮想的に行うためのドライバであり、予めHDD6等の記憶手段に記憶され、CPU3によって読み出され実行されるものである。
【0045】
仮想ドライバがロードされたときには、OS内部の構成は図1のようになる。この構成では、アプリケーションプログラムAにて生成された送信データが、Win32サブシステム21、IOマネージャ22を介してデバイスドライバ上位23に渡されるようになっており、仮想ドライバは、デバイスドライバ下位25として構成され、デバイスドライバ23から上記送信データを取得するように機能する。
【0046】
なお、CPU3は、「仮想通信確認手段」の一例に相当し、コンピュータ2に格納される一のアプリケーションプログラムと他のアプリケーションプログラムとの通信を仮想的に試行することでデータの通信動作を確認するように機能する。
【0047】
一方、アプリケーションプログラムAに割り当てられた通信ポート14aにハードウェア(通信機器)が接続されている場合にはS3にてYesに進み、接続されているハードウェアのドライバをロードする(S5)。
【0048】
ハードウェアのドライバがロードされたときには、OS内部の構成は例えば図3のようになり、アプリケーションプログラムAにて生成された送信データは、Win32サブシステム21、IOマネージャ22を介してデバイスドライバ上位23に渡され、デバイスドライバ下位25として構成されるハードウェアのドライバがこの送信データを取得する。そして、このデバイスドライバ下位26によってハードウェア27(通信機器)に対する通信制御がなされる。
【0049】
なお、ハードウェアのドライバを実行するCPU3は、「外部通信確認手段」の一例に相当し、通信ポート14aに通信機器が接続されている場合に、アプリケーションプログラムAにて生成されたデータを、通信ポート14aを介してコンピュータ2の外部に送信することで、データの通信動作を確認するように機能する(例えば、アプリケーションプログラムAにて生成されたデータを、通信ポート14aを介して他のパーソナルコンピュータ、携帯情報端末等の外部通信装置に送信し、データの通信動作を確認するように機能する)。なお、ハードウェアのドライバをロードしてハードウェアと通信を行う構成、或いはその通信動作についてのデバック等を行う構成については公知であるので詳細は省略する。
【0050】
本実施形態では、CPU3が「検出手段」の一例に相当し、通信機器が通信ポート14aに接続されているか否かを検出するように機能する。更に、S5の処理を実行するCPU3は、「選択手段」の一例に相当し、通信ポート14aにおいて通信機器の接続が検出されたことを条件として「外部通信確認手段」を選択するように機能する。
【0051】
次に、図5を参照して通信ポートオープン処理について説明する。通信ポートオープン処理は、アプリケーションプログラムAに割り当てられた通信ポート14aとアプリケーションプログラムBに割り当てられた通信ポート14bとをオープンする処理であり、上述の仮想ドライバに基づいて行われる。
【0052】
この処理では、まず、設定値の取得処理が行われる(S10)。S10の処理では、通信動作確認を行おうとするアプリケーションプログラム(アプリケーションプログラムA)に割り当てられた通信ポート14aのポート番号をレジストリから読み出すと共に、その通信ポート14aの通信相手として設定されている通信ポート14bのポート番号をレジストリから読み出す。そして、それら通信ポート番号とバッファとを関連付ける処理を行う(S11)。S11では、受信側で使用されるバッファ(受信バッファ)のメモリアドレスを取得し、通信ポート14bと対応付けてRAM5に記憶する。更に、上記受信バッファと送信バッファ(送信側の通信ポート14aと対応付けられたバッファ(なお、送信バッファは省略可))とをクリアし(S12)、内部状態をオープンに設定する(S13)。なお、S13の処理は、例えば通信ポート14a及び通信ポート14bがオープン状態であることを示すフラグを設定する。
【0053】
次に、仮想ドライバによって行われるデータ送信処理について説明する。図6の処理は、アプリケーションプログラムAの実行中にデータ送信の指示がなされることに基づいて開始される処理であり、まず、アプリケーションプログラムAに割り当てられた通信ポート14aがオープン状態であるか否かを確認する(S20)。通信ポート14aがオープン状態である場合には、Win32サブシステム21、IOマネージャ22、デバイスドライバ23を介し、デバイスドライバ下位25(仮想ドライバ)に対してアプリケーションプログラムAからの送信データが渡される(S21)。仮想ドライバは、その取得した送信データを、アプリケーションプログラムAの通信相手となるアプリケーションプログラムBの受信バッファ(即ち、通信ポート14aの通信相手として設定された通信ポート14bに対応付けられた受信バッファ)に書き込み(S22)、通信相手の通信ポート14bに対して受信通知を行う(S23)。
【0054】
一方、アプリケーションプログラムB側では図7のようなデータ受信処理が行われる。このデータ受信処理では、アプリケーションプログラムBに割り当てられた通信ポート14bがオープン状態であるか否かの確認がなされ(S30)、オープン状態のときにはS30にてYesに進み、受信通知の確認を行う(S31)。S31では、アプリケーションプログラムBに割り当てられた通信ポート14bに対して受信通知がなされたか否かの確認が行われ、S23(図6)の受信通知がなされている場合にはS31にてYesに進み、その受信イベントが上位に通知され、その通知に応じてアプリケーションプログラムBが受信バッファに書き込まれたデータ(アプリケーションプログラムAからの送信データ)を取得する(S32)。アプリケーションプログラムBが受信バッファに蓄積された送信データを取得した後には、受信バッファ内のデータは削除される。
【0055】
なお、図5の処理によって設定された通信ポートのオープン状態は、ユーザによる所定操作、或いはコンピュータの起動終了時においてクローズ状態とされる。
【0056】
このように、仮想ドライバがロードされる場合(即ち、仮想通信確認手段が選択される場合)、アプリケーションプログラムA(一のアプリケーションプログラム)からアプリケーションプログラムB(他のアプリケーションプログラム)に対してデータの仮想的な送受信が行われ、その送受信結果に基づいてデータの通信動作の確認がなされる。通信動作の確認は、アプリケーションプログラムAのデータがアプリケーションプログラムBによって良好に取得されたか否か等、公知のデバック処理で用いられる様々な確認を行うことができる。
【0057】
なお、CPU3は、「仮想送受信手段」の一例に相当し、ポート情報に基づいて第1の通信ポートと対応する第2の通信ポートを特定すると共に、一のアプリケーションプログラムから第1の通信ポートに送られるべきデータを、第2の通信ポートが受信したデータとしてメモリに記憶し、且つ他のアプリケージョンプログラムに与えるように機能する。
【0058】
(第1実施形態の主な効果)
本実施形態の構成によれば例えば以下のような効果を奏する。
上記実施形態では、アプリケーションプログラムAとアプリケーションプログラムBとの通信を仮想的に試行する「仮想通信確認手段」と、アプリケーションプログラムにて生成されたデータを、通信ポートを介してコンピュータの外部に送信してデータの通信動作を確認する「外部通信確認手段」とが設けられているため、状況に応じて仮想通信確認手段と外部通信確認手段とを使い分けることができ、通信動作をより適切な方法で確認できるようになる。例えば、通信ケーブルや外部装置を準備しにくい場合であっても、外部通信確認手段を用いずに仮想通信確認手段によって通信動作を確認でき、通信動作の確認作業やその準備の容易化が効果的に図られる。
【0059】
また、アプリケーションプログラムAに対し第1の通信ポートを割り当て、アプリケーションプログラムBに対し第2の通信ポートを割り当て、それら第1の通信ポート及び第2の通信ポートを特定するポート情報をメモリに記憶しているため、アプリケーションプログラムAに対応する送信ポートと、アプリケーションプログラムBに対応する受信ポートとの対応関係を明確にすることができる。
【0060】
更に、アプリケーションプログラムAから第1の通信ポートに送られるべきデータが、第2の通信ポートが受信したデータとしてメモリに記憶され、更に、他のアプリケージョンプログラムに与えられるように構成されているため、実際に通信ケーブルを通信ポートに接続しなくても、アプリケーションプログラムAからのデータを第1の通信ポートを介して送信するという送信状態の確認と、アプリケーションプログラムBに対するデータを第2の通信ポートを介して受信するという受信状態の確認とを仮想的に実現でき、外部通信確認手段を用いない場合であっても通信動作の確認が良好に行われる。
【0061】
また、通信機器が通信ポートに接続されているか否かを検出する「検出手段」が設けられており、「検出手段」により通信機器が検出されたことを条件として「外部通信確認手段」が選択されるように構成されている。このようにすると、「外部通信確認手段」による通信動作の確認が可能なときのみ「外部通信確認手段」が選択されるようになり、より適切な選択が可能となる。
【0062】
また、「通信ポート割当手段」によって割り当てられた第1の通信ポートに通信機器が接続されているか否かを検出し、第1の通信ポートに通信機器が接続されている場合に「外部通信確認手段」を選択するように構成されている。このようにすると、一のアプリケーションシステムから外部への通信が可能な状態においては、「外部通信確認手段」を用いてより精度の高い通信動作確認が可能となる。
【0063】
また、アプリケーションプログラムAに割り当てる第1の通信ポートと、アプリケーションプログラムBに割り当てる第2の通信ポートとが互いに異なる通信ポートとなるように設定している。このようにすると、「仮想通信確認手段」によって通信動作を確認するときに、第1の通信ポートと第2の通信ポートと区別して適切な動作確認を行うことができる。
【0064】
[第2実施形態]
次に、本発明の通信システムの第2実施形態について図8〜図13を参照して説明する。
図8は、第2実施形態に係る通信システムを概略的に説明する説明図である。図9は、アプリケーションプログラムによって実行される通信処理の流れを概略的に例示するフローチャートである。図10は、通信ポートオープン時のAPIフック処理を例示するフローチャートである。図11(a)は、送信関連APIが呼び出されたときのAPIフック処理を例示するフローチャートであり、図11(b)は、受信関連APIが呼び出されたときのAPIフック処理を例示するフローチャートである。図12は、通信ポートクローズ時のAPIフック処理を例示するフローチャートである。図13(a)は、各仮想ハンドルと正規のハンドルとの対応データを概念的に説明する説明図であり、図13(b)は、コンピュータ内の各アプリケーションプログラムに仮想ハンドルが割り当てられた状態を概念的に説明する説明図である。なお、図13では、通信ポート14a(図2)の正規ハンドルとしてハンドルZが用いられ、通信ポート14aの仮想ハンドルとして、アプリケーションAに仮想ハンドルZ−1が割り当てられ、アプリケーションBに仮想ハンドルZ−2が割り当てられた例を示している。
【0065】
なお、第2実施形態に係る通信システム200で用いられるコンピュータ202は、ハードウェア構成については、第1実施形態で用いられるコンピュータ2と同一である。よって、コンピュータ202のハードウェア(CPU3、ROM4、RAM5、ハードディスクドライブ6、出力部7、入力部8、通信部9、バス11、通信インターフェース13、通信ポート14a〜14c等)については適宜図2を参照することとし、詳細な説明は省略する。
【0066】
(第2実施形態の通信システムの概要)
図8に示すように、本実施形態に係る通信システム200は、通信機器を接続可能な通信ポートと、メモリ(RAM等)とを備えたコンピュータ202によって構成されている。本実施形態でも、第1実施形態と同様の通信部9(図2)が設けられ、通信インターフェース13と、複数の通信ポート14a〜14cとを備えている。このコンピュータ202でも、各通信ポート14a〜14c(図2)が、シリアルコネクタやパラレルコネクタとして構成されており、RS232CケーブルやUSBケーブルなどの通信ケーブルを介して各種通信機器(例えば、他のコンピュータ、外部記憶装置、その他の情報処理装置等)が接続可能とされている。そして、各通信ポート14a〜14c(図2)を介してこれらの通信機器(外部装置)と通信を行うことができるようになっている。なお、図8では、外部装置の例として携帯端末300が示されている。
【0067】
図8に示すように、コンピュータ202の内部には、複数のアプリケーションプログラム(以下、アプリケーションとも称する)やオペレーティングシステム(以下、OSとも称する)220が格納されており、コンピュータ202は、OS220の制御の下、これらアプリケーションプログラムを実行することで、各種処理を行っている。なお、図8では、コンピュータ202で用いられる一部のアプリケーションプログラムA、B(図8では、アプリケーションA、Bと略称)を例示しており、これら以外のアプリケーションプログラムについては図示を省略している。
【0068】
コンピュータ202で用いられるOS220としては、例えば、Unix(登録商標)、Linux、マイクロソフト社のWindows(登録商標)、その他の任意のOSなどが挙げられる。なお、以下では、Windows(登録商標)のNT系のOSが採用され、マイクロカーネル技術とオブジェクト指向技術をベースとし、各サービスを、サブシステムによって実装した構成を代表例として説明する。
【0069】
OS220では、サブシステムが各アプリケーションプログラムA、B等に対して、各種のAPI(関数)を提供し、例えば、メモリ管理、プロセス管理、グラフィックス描画などを行うようになっている。このサブシステムでは、アプリケーションプログラムA、Bから、例えば、入出力関係のAPI関数が呼び出されると、そのAPI関数に応じた入出力要求を、IOマネージャ(図示略)に出力する。また、OS220には、各種デバイスドライバが組み込まれるようになっており、図8では、ハードウェア(携帯端末に接続された通信ケーブル)が接続され、このハードウェアのデバイスドライバがロードされたときの構成を概念的に示している。
【0070】
(第2実施形態の特徴的構成)
次に、本実施形態に係る通信システム200の特徴的構成について説明する。
まず、アプリケーションプログラムによる通信処理について説明する。各アプリケーションプログラムは、所定の通信開始条件の成立(例えば、ユーザによる所定操作等)に応じて図9のような通信処理を実行するようになっており、この通信処理では、まず、通信ポートのオープン処理が行われる(S1)。このS1では、アプリケーションプログラムが通信ポートをオープンするためのAPI関数を呼び出す処理が行われる。例えば、Windows(登録商標)で用いられるAPI関数では、「CreateFile」関数が使用されており、S1では、この、「CreateFile」関数が、通信に使用する通信ポート対応付けられて呼び出される。
【0071】
本実施形態では、アプリケーションプログラムから通信ポートをオープンするAPI関数(例えば、「CreateFile」関数)が呼び出されたとき、このAPI関数をそのままサブシステムによって実行するのではなく、図10のように、API関数をフックする処理を行っている。図10の処理は、アプリケーションプログラムによって通信ポートをオープンするAPI関数が呼び出されたときに開始される処理であり、まず、S11にて、通信処理で用いようとする通信ポートの呼び出しが初回であるか否かを判断している。
【0072】
本実施形態では、各通信ポート毎に、アプリケーションプログラムによる「呼び出し回数」をカウントしている。この「呼び出し回数」は、各通信ポートにおける通信処理継続中(通信ポートのオープン継続中)のアプリケーション数を示す値であり、例えば、通信ポート14a(COM1)を例に挙げると、各アプリケーションプログラムが当該通信ポート14aのオープンを要求する毎に(即ち、通信ポート14aについて図10の処理が行われる毎に)当該通信ポート14aの「呼び出し回数」がインクリメントされるようになっている。また、各アプリケーションプログラムが当該通信ポート14aのクローズを要求する毎に(即ち、通信ポート14aについて図12の処理が行われる毎に)、当該通信ポート14aの「呼び出し回数」がデクリメントされるようになっている。
【0073】
このように各通信ポートごとに呼び出し回数がカウントされることを前提とし、S11では、S1の処理によって指定された通信ポートの現在(S11の処理実行時)の呼び出し回数が「0」であるか否かを判断している。例えば、図9のS1の処理で、通信ポート14a(以下、COM1ともいう)を指定して、当該通信ポート14a(COM1)をオープンするAPI関数が呼び出された場合、このS1の処理に応じて実行されるS11の処理では、当該通信ポート14a(COM1)の「呼び出し回数」が現在「0」であるか否かを判断する。
【0074】
S1で指定された通信ポートについての「呼び出し回数」がS11の処理時において「0」であり、今回の呼び出しが、当該通信ポートについての1回目の呼び出しとなるときには、S11でYesに進み、S1で呼び出されたAPI関数(例えば、「CreateFile」関数)をOS220にて実行し、S1で指定された通信ポートをオープンする(S12)。このオープン処理では、S1で指定された通信ポートのハンドル(正規ハンドル)が公知の方法で取得され、その取得されたハンドル(正規ハンドル)がRAM等のメモリに保存される(S13)。
【0075】
なお、この「正規ハンドル」は、API関数によって通信ポートを介して通信を行う際に実際に当該通信ポートでの通信に用いる公知のハンドルであり、当該通信ポートのオープン中は当該通信ポートに対して1つのみ設定されるようになっている。一方、後述する「仮想ハンドル」は、当該通信ポートについて各アプリケーションプログラム毎に設定される仮想的なハンドルであり、アプリケーションプログラムが当該通信ポートについて「仮想ハンドル」を取得したとしても、最終的にはこの「仮想ハンドル」を対応する「正規ハンドル」に変換し、「正規ハンドル」を用いて当該通信ポートでの通信を行うようになっている。なお、通信の詳細については後述する。
【0076】
本実施形態では、図10の処理や、後述する図12の処理を実行するCPU3(図2)が、「呼び出し回数増減手段」の一例に相当し、各アプリケーションプログラムによる通信ポートの呼び出し回数をカウントすると共に、各アプリケーションプログラムによる当該通信ポートを用いた通信処理の終了毎に呼び出し回数を減じるように機能する。
また、S11(図10)の処理を実行するCPU3は、「判断手段」の一例に相当し、アプリケーションプログラムが通信ポートを呼び出したときに、上記「呼び出し回数増減手段」による呼び出し回数が所定値以下か否かを判断するように機能する。
更に、CPU3、メモリ(RAM5等)が、「ハンドル保存手段」の一例に相当し、上記「判断手段」によって通信ポートの呼び出し回数が所定値以下と判断された場合に、アプリケーションプログラムによって呼び出された当該通信ポートにて通信を行うためのハンドルを保存するように機能する。
【0077】
一方、S11の判断処理において、S1で指定された通信ポートの最初の呼び出しでないと判断された場合(即ち、S1の処理によって指定された通信ポートの現在(S11の処理実行時)の呼び出し回数が「1」以上である場合)、S11にてNoに進み、そのアプリケーションプログラムに割り当てるべき仮想ハンドルを生成する処理を行う(S14)。
【0078】
従来では、通信ポートが既に先のアプリケーションプログラムによって呼び出されてオープンされている場合、後からアクセスする他のアプリケーションプログラムによる当該通信ポートの使用が禁止され、他のアプリケーションプログラムは当該通信ポートのハンドルを使用できないという問題があった。しかし、本実施形態では、既に先のアプリケーションプログラムによって通信ポートがオープンされている場合であっても、他のアプリケーションプログラムによる当該通信ポートのオープン処理を排除せず、他のアプリケーションプログラムに対して仮想的なハンドルを割り当てることができるようになっている。
【0079】
また、S11でYesに進む場合も同様であり、S13でハンドル(正規ハンドル)を保存した後、S1の処理を行ったアプリケーションプログラム(この場合、通信ポートの最初の呼び出しを行ったアプリケーションプログラム)に割り当てるべき仮想ハンドルを生成する処理を行う(S14)。
【0080】
このように、本実施形態では、通信ポートを最初に呼び出したアプリケーションプログラムにも、その後に通信ポートを呼び出したアプリケーションプログラムにも仮想ハンドルが設定されることとなる。
なお、本実施形態では、S14(図10)の処理を実行するCPU3が「仮想ハンドル設定手段」の一例に相当し、各アプリケーションプログラムが通信ポートを呼び出したときに、各アプリケーションプログラムに対し、上記「ハンドル保存手段」によって保存されたハンドル(正規ハンドル)に対応した仮想ハンドルを設定するように機能する。
【0081】
そして、S14で生成された仮想ハンドルと、S13で保存されたハンドル(正規ハンドル)との対応関係を示すデータ(対応データ)を保存する(S15)。図13(a)では、S15で生成、保存される対応データの一例を示しており、例えば、通信ポート14a(COM1)の最初の呼び出しの際にS13にてハンドルZ(正規ハンドル)が生成、保存され、この通信ポート14a(COM1)の最初の呼び出しを行ったアプリケーションプログラムに対してS14にて仮想ハンドルZ−1が生成された場合、図13(a)のように、仮想ハンドルZ−1と正規のハンドルZとを対応付けたデータを生成、保存する。このようにすることで、最初の呼び出しを行ったアプリケーションプログラムに対して仮想ハンドルZ−1を割り当てることができ、且つ、この仮想ハンドルZ−1に対応する正規ハンドル(ハンドルZ)を特定できるようになる。
【0082】
二回目以降の呼び出しでも同様であり、上記先のアプリケーションプログラムによる通信ポート14aのオープン中に、この通信ポート14a(COM1)に対して他のアプリケーションプログラムが呼び出し(二回目の呼び出し)を行った場合、S15の処理では、S11でNoに進んでS14で生成される仮想ハンドルZ−2(図13(a))と、当該通信ポート14aについて先のS13の処理で既に生成されている正規のハンドルZとを対応付けたデータを生成、保存する。このようにすることで、二回目の呼び出しを行ったアプリケーションプログラムに仮想ハンドルZ−2を割り当てることができ、この仮想ハンドルZ−2に対応する正規ハンドル(ハンドルZ)を特定できるようになる。
【0083】
なお、本実施形態では、S15の処理を実行するCPU3及びメモリ(RAM5等)が「対応データ保存手段」の一例に相当し、上記「ハンドル保存手段」によって保存されるハンドルと、「仮想ハンドル設定手段」によって各アプリケーションプログラムに設定される各仮想ハンドルとの対応データを保存するように機能する。
【0084】
S15の処理の後には、呼び出し回数を更新する処理を行う(S16)。この処理では、当該APIフック処理で着目している通信ポート(即ち、S1で指定された通信ポート)についてのそれまでの「呼び出し回数」に「1」を加え、その値を当該通信ポートの新たな「呼び出し回数」として記憶する。例えば、通信ポート14a(COM1)のオープンを要求するAPI関数に基づいて図10のAPIフック処理を行っており、当該APIフック処理の開始時点で通信ポート14aの「呼び出し回数」が「0」の場合には、S16の処理では、新たな「呼び出し回数」としてカウントアップされた「1」が記憶される。
【0085】
S16の後には、S1でオープン要求を行ったアプリケーションプログラムに対してS14で得られた仮想ハンドルを返す処理を行う(S17)。このような処理を行うことで、S1で通信ポートのオープン要求を行ったアプリケーションプログラムが、S1で指定された当該通信ポート用の仮想ハンドルを取得することができ、このアプリケーションプログラムが当該通信ポートで通信する際の固有の仮想ハンドルとしてメモリに記憶しておくことができる。
【0086】
なお、図13(b)では、上記のようなオープン要求に対するAPIフック処理が、アプリケーションA,Bそれぞれに対して実行された場合を例示している。図13(b)の例では、アプリケーションAが先に図9の処理を行ってS1にて通信ポート14a(COM1)をオープンするAPI要求を行い、図10のAPIフック処理によってこのアプリケーションAに対し仮想ハンドルZ−1が割り当てられている。そして、そのアプリケーションAによるオープン中に、アプリケーションBが図9の処理を行ってS1にて通信ポート14a(COM1)をオープンするAPI要求を行い、図10のAPIフック処理によってこのアプリケーションBに対して仮想ハンドルZ−1が割り当てられている。このように、通信ポート14aを同時期にオープンしているアプリケーションA,Bのいずれもが、自身に割り当てられている仮想ハンドルを把握できるようになっており、更に、APIフックプログラム側では、図13(a)の対応データに基づいて各仮想ハンドルに対応する正規ハンドルを特定できるようになっている。
【0087】
次に、図9のS2の通信処理について説明する。
上述したように、S1での通信ポートのオープン要求に応じ、図10のAPIフックプログラムによって当該通信ポートに対応する仮想ハンドルが割り当てられた後には、図9の処理を実行するアプリケーションプログラムによって当該通信ポートを使用した通信処理が行われる(S2)。この通信処理では、図9の処理を実行するアプリケーションプログラムによって通信関連のAPI関数を呼び出す処理が行われる。例えば、Windows(登録商標)で用いられるAPI関数では、通信ポートからデータを送信するAPI関数として、「WriteFile」関数を用いており、S1でオープンした通信ポートからデータ送信を行うときには、S2ではこの「WriteFile」関数が呼び出される。また、この「WriteFile」関数の呼び出しの際には、S1でオープン要求された通信ポートと対応付けられた仮想ハンドル(S1のオープン要求に対してS17で返された仮想ハンドル)が指定される。例えば、図13(b)のようなアプリケーションAが上述の通信ポート14a(COM1)を使用してデータ送信を行う場合、通信ポート14a用に設定されたアプリケーションA固有の仮想ハンドルZ−1と、アプリケーションAが送信しようとするデータ(送信データ)などを対応付けて「WriteFile」関数を呼び出す。
【0088】
本実施形態では、S2にて通信ポートでの送信に関連する所定のAPI関数(上記例では、「WriteFile」関数)が呼び出されたときに、図11(a)のようなAPIフック処理が行われるようになっている。この処理では、呼び出された送信関連API関数(例えば、「WriteFile」関数)の具体的内容を確認し(S21)、仮想ハンドルを利用した送信が指示されているか否かを判断する(S22)。具体的には、S2で呼び出された送信関連API関数(例えば「WriteFile」関数)と対応付けられて仮想ハンドルが指定されているか否かをS21にて確認し、仮想ハンドルが指定されていない場合には、S22にてNoに進み、API関数で指示された他の処理(例えば、ファイルへの書き込みなど)を行う(S23)。
【0089】
一方、S2で呼び出された送信関連API関数に対応して仮想ハンドルが指定されている場合には、S22にてYesに進み、その指定された仮想ハンドルに対応する正規ハンドルを用いて送信処理を行う。この送信処理では、まず、当該送信処理に先立ってS15(図10)で保存されている対応データ(例えば図13(a))を参照し、S2で指定された仮想ハンドルに対応する正規ハンドルを読み出している。そして、読み出された正規ハンドルをS2で指定された仮想ハンドルに代えて用い、S2(図9)で呼び出された送信関連API関数を実行する。これにより、S2の処理を実行するアプリケーションプログラムが、正規ハンドルを用いて送信関連API関数(例えば「WriteFile」関数)を実行できるようになり、S1で指定された通信ポートから外部装置(携帯端末300等)にデータ送信を行うことができる。
【0090】
この構成では、例えば、携帯端末300(外部装置)が、二次元コード等の情報コードを読み取り可能な携帯型のコードリーダとして構成される場合、或いは、携帯端末300が、RFIDタグなどを読み取り可能な無線タグリーダとして構成される場合などにおいて、当該携帯端末300の複数のプログラムとコンピュータ2とが同一の通信ポートを使用して同時期に通信を行うことができるようになる。
【0091】
例えば、図8のように、コンピュータ2のアプリケーションA(一のアプリケーションプログラム)が通信ポート14a(COM1)を用いて携帯端末300のアプリケーションプログラム(一のプログラム)と通信を行う際に、図13(a)のような対応データに従い、図13(b)のようにアプリケーションAに設定された仮想ハンドルZ−1に対応するハンドルZ(正規ハンドル)を使用してAPI通信を行うことができる。また、このようにアプリケーションA(一のアプリケーションプログラム)による通信ポート14a(COM1)を用いた通信処理の継続中(アプリケーションAによる通信ポート14aのオープン中)に、アプリケーションB(他のアプリケーションプログラム)が当該通信ポート14a(COM1)を用いて携帯端末300のサービスプログラム(他のプログラム)と通信を行う場合、アプリケーションBに設定された仮想ハンドルZ−2と対応データ(図13(a))とに基づき、当該通信ポート14aに対応するハンドルZ(正規ハンドル)を使用して通信を行うことができる。
【0092】
なお、このような構成において、アプリケーションAから携帯端末300の所定のアプリケーションプログラムに対し、図9、図11(a)のような送信処理を行う場合、図9のS2で呼び出される送信関連API関数(例えば、「WriteFile」関数)と対応付けられた送信データ内に、例えば、携帯端末300の所定のアプリケーションプログラムを特定する宛先データを含ませておけばよい。同様に、アプリケーションBから携帯端末300の所定のサービスプログラムに対し、図9、図11(a)のような送信処理を行う場合、図9のS2で呼び出される送信関連API関数(例えば、「WriteFile」関数)と対応付けられた送信データ内に、例えば、携帯端末300の所定のサービスプログラムを特定する宛先データを含ませておけばよい。そして、携帯端末300のドライバが、このような送信データから宛先データを読み取り、送信データを宛先データに応じたプログラムに振り分けるようにすればよい。
【0093】
上記説明では、S2においてデータ送信が行われる例を示したが、S1でオープンされた通信ポートを利用したデータ受信も同様に行われる。以下、S2でデータ受信処理を行う場合について説明する。
【0094】
S2にてデータ受信処理を行う場合でも、アプリケーションプログラムによって通信関連のAPI関数を呼び出す処理が行われる。例えば、Windows(登録商標)で用いられるAPI関数では、通信ポートからデータを受信するAPI関数として、「ReadFile」関数を用いており、S1でオープンした通信ポートからデータ受信を行うときには、この、「ReadFile」関数が呼び出される。また、この、「ReadFile」関数を呼び出す際には、S1でオープンされた通信ポートと対応付けられた仮想ハンドル(S1のオープン要求に応じてS17で返された仮想ハンドル)が指定される。例えば、図13(b)のようなアプリケーションAが上述の通信ポート14a(COM1)を使用してデータ受信を行う場合、通信ポート14a用に設定されたアプリケーションA固有の仮想ハンドルZ−1と対応付けて「ReadFile」関数を呼び出す。
【0095】
本実施形態では、上記のように、通信ポートでの受信に関連する所定のAPI関数(例えば、ReadFile)関数)が呼び出されたときに、図11(b)のようなAPIフック処理が行われるようになっている。この処理では、呼び出された受信関連API関数(例えば、「ReadFile」関数)の具体的内容を確認し(S31)、仮想ハンドルを利用した受信が指示されているか否かを判断する(S32)。具体的には、S2で呼び出された受信関連API関数(例えば「ReadFile」関数)と対応付けられて仮想ハンドルが指定されているか否かをS31にて確認し、仮想ハンドルが指定されていない場合には、S32にてNoに進み、API関数で指示された他の処理(例えば、ファイルの読み取りなど)を行う。
【0096】
一方、仮想ハンドルが指定されている場合には、S32にてYesに進み、仮想ハンドルに対応する正規ハンドルを用いて受信処理を行う(S34)。この処理では、まず、当該受信処理に先立ってS15(図10)で保存されている対応データ(図13(a))に基づき、S2(図9)で呼び出された受信関連API関数で指定される仮想ハンドルに対応する正規ハンドルを読み出している。そして、その読み出された正規ハンドルをS2で指定されていた仮想ハンドルに代えて用い、S2(図9)で呼び出された受信関連API関数を実行する。これにより、S2の処理を実行するアプリケーションプログラムが、正規ハンドルを用いて受信関連API関数(例えば「ReadFile」関数)を実行できるようになり、S1で指定された通信ポートを介して外部装置(携帯端末300等)からデータ受信を行うことができる。
【0097】
なお、この場合、外部装置(例えば携帯端末300等)の各プログラムがコンピュータ2の各アプリケーションに送信する送信データ内に、当該送信データの送信先となるアプリケーションプログラムを示す宛先データを含ませるようにすればよい。そして、コンピュータ2側では、上記受信処理(S2:図9)によって受信を行おうとするアプリケーションプログラムが、当該アプリケーションプログラムを指定する宛先データを含んだデータのみを有効なものとして読み込むようにすれば、同一の通信ポートから受信する各アプリケーソンプログラム宛の各受信データを、各アプリケーションプログラムに適切に振り分けることができるようになる。
【0098】
なお、本実施形態では、S22或いはS32の処理を実行するCPU3(図3)が「仮想ハンドル利用確認手段」の一例に相当し、アプリケーションプログラムが特定の通信関連コマンドを実行したときに、仮想ハンドルを用いた通信を行うか否かを確認するように機能する。
また、S24、S34の処理を実行するCPU3は、「通信制御手段」の一例に相当し、各アプリケーションプログラムが通信ポートを用いて通信を行う際に、「対応データ保存手段」に保存された対応データに従い、各アプリケーションプログラムに設定された仮想ハンドルと対応付けられたハンドル(正規ハンドル)を使用するように機能すると共に、上記「仮想ハンドル利用確認手段」によって仮想ハンドルを用いた通信であることが確認された場合に、アプリケーションプログラムに設定された仮想ハンドルと対応付けられたハンドル(正規ハンドル)を使用するように機能している。
【0099】
次に、図9のS3の通信ポートクローズ処理について説明する。
図9の処理を実行するアプリケーションプログラムは、S2の通信処理が終了した後に、S1でオープンした通信ポートをクローズする処理を行っている(S3)。このS3では、アプリケーションプログラムが通信ポートをクローズするためのAPI関数を呼び出す処理が行われる。例えば、Windows(登録商標)で用いられるAPI関数では、「CloseHandle」関数が使用されており、S3では、この、「CloseHandle」関数が、クローズしようとする通信ポート(S1でオープンされた通信ポート)の仮想ハンドル(S1のオープン要求に応じてS17で返された仮想ハンドル)と対応付けて呼び出される。
【0100】
本実施形態では、アプリケーションプログラムから通信ポートをオープンするAPI関数(例えば、「CloseHandle」関数)が呼び出されたとき、図12のように、API関数をフックする処理を行っている。図12の処理は、アプリケーションプログラムによって通信ポートをクローズするAPI関数(例えば、「CloseHandle」関数)が呼び出されたときに開始される処理であり、まず、S3でのクローズ要求で指定された仮想ハンドルと正規ハンドルとの対応データを破棄している(S41)。この処理では、図13(a)のような対応データの中から、S3で指定された仮想ハンドルについてのデータを削除しており、例えば、図13(b)に示すアプリケーションAがS3(図9)において仮想ハンドルZ−1を指定してクローズ要求(クローズ関連API関数の呼び出し)をしているような場合には、図13(a)の対応データの中からこの仮想ハンドルZ−1と正規ハンドルZとを対応付けたデータを削除する。
【0101】
S41の処理の後には、着目している通信ポート(即ち、S3でクローズ要求がなさている通信ポート)の「呼び出し回数」をデクリメントする。例えば、アプリケーションAによる通信ポート14aのクローズ要求に応じて図12の処理がなされており、当該図12のAPIフック処理開始時点で通信ポート14aの「呼び出し回数」が「3」である場合、S42ではこの値をデクリメントして「呼び出し回数」を「2」に変更する。
【0102】
そして、S41で対応値を削除した仮想ポートが着目している通信ポート(即ち、S3でクローズ要求がなさている通信ポート)の最後の仮想ハンドルであるか否かを判断する(S43)。具体的には、S42の処理後において当該通信ポートの「呼び出し回数」が「0」となっているか否かを判断し、「0」でない場合、着目している当該通信ポートの呼び出しを行っているアプリケーションプログラムがまだ存在することを意味し、S41で対応値を削除した仮想ポートが当該通信ポートの最後の仮想ハンドルではないため、S43にてNoに進み、当該処理を終了する。
【0103】
一方、S42の処理後において当該通信ポートの「呼び出し回数」が「0」である場合、着目している当該通信ポートの呼び出しを行っているアプリケーションプログラムが存在せず、S41で対応値を削除した仮想ポートが当該通信ポートの最後の仮想ハンドルであるため、S43にてYesに進む。S43にてYesに進む場合には、当該通信ポートの正規ハンドルを指定してクローズ関連API(例えば、「CloseHandle」関数)を実行し、当該通信ポートの正規ハンドルを削除する(S44)。
【0104】
本実施形態では、S41の処理を実行するCPU3が「対応値破棄手段」の一例に相当し、アプリケーションプログラムによる通信ポートを使用した通信処理が終了した場合に、上記「対応データ保存手段」によって保存された対応データにおいて、その通信処理が終了したアプリケーションプログラムについての仮想ハンドルとハンドル(正規ハンドル)との対応値を破棄するように機能する。
【0105】
(第2実施形態の主な効果)
第2実施形態に係る通信システム200では、「呼び出し回数増減手段」によってアプリケーションプログラムによる通信ポートの呼び出し回数を管理しており、アプリケーションプログラムが通信ポートを呼び出したときに、「呼び出し回数増減手段」によって管理される呼び出し回数が所定値以下か否かを判断している。そして、その通信ポートの呼び出し回数が所定値以下と判断された場合に、アプリケーションプログラムによって呼び出された当該通信ポートにて通信を行うためのハンドル(正規ハンドル)を保存している。
このようにすると、通信ポートに対するアプリケーションプログラムの呼び出しがどの程度重複しているかを確認できる。また、呼び出し回数が少ないときに、当該通信ポートで通信を行うためにハンドル(正規ハンドル)を予め保存しておくことができる。
更に、各アプリケーションプログラムが通信ポートを呼び出したときに、各アプリケーションプログラムに対し、上記「ハンドル保存手段」によって保存されたハンドルに対応した仮想ハンドルを設定し、この設定された仮想ハンドルと、既に保存されているハンドル(正規ハンドル)との対応データを保存している。そして、各アプリケーションプログラムが通信ポートを用いて通信を行う際に、保存された対応データに従い、各アプリケーションプログラムに設定された仮想ハンドルと対応付けられたハンドル(正規ハンドル)を使用している。
このようにすると、複数のアプリケーションプログラムが同じ通信ポートを呼び出した場合に、各アプリケーションプログラムに仮想ハンドルを割り当てることができ、各アプリケーションプログラムは対応データを拠り所として仮想ハンドルと対応する実際のハンドルを使用し、当該通信ポートでの通信を行うことができるようになる。従って、最初に通信ポートを呼び出したアプリケーションプログラムだけに当該通信ポートを占有させて他のアプリケーションプログラムによる当該通信ポートへのアクセスを排除するといった対応を行う必要がなく、複数のアプリケーションプログラムが同一の通信ポートを同時期に使用することができるようになる。
【0106】
また、第2実施形態の通信システム200では、アプリケーションプログラムが特定の通信関連コマンドを実行したときに、仮想ハンドルを用いた通信を行うか否かを確認する「仮想ハンドル利用確認手段」を備え、この「仮想ハンドル利用確認手段」によって仮想ハンドルを用いた通信であることが確認された場合に、アプリケーションプログラムに設定された仮想ハンドルと対応付けられたハンドル(正規ハンドル)を使用している。
このようにすると、特定の通信関連コマンドが実行されたことをトリガとして仮想ハンドルを用いた通信を行うことができるようになる。その際、仮想ハンドルを用いた通信を行うか否かの確認を行った上で、通信処理に移行しているため、特定の通信関連コマンドで他の処理を実行する場合(即ち、仮想ハンドルを用いた通信を行わない例外ケース)にも対応しやすくなる。
【0107】
また、第2実施形態の通信システム200では、アプリケーションプログラムによる通信ポートを使用した通信処理が終了した場合に、上記「対応データ保存手段」によって保存された対応データにおいて、その通信処理が終了したアプリケーションプログラムについての仮想ハンドルとハンドル(正規ハンドル)との対応値を破棄する「対応値破棄手段」を備えている。このようにすると、通信処理が終了して不要になった仮想ハンドルを削除することができ、対応データを常に適切な状態に維持できるようになる。
【0108】
更に、第2実施形態の通信システム200では、外部装置が、コンピュータ2との間でデータの送信又は受信を行う複数のプログラムを備えた携帯端末300として構成されている。そして、コンピュータ2の複数のアプリケーションプログラムのうち、アプリケーションA(一のアプリケーションプログラム)が通信ポートを用いて携帯端末300のアプリケーションプログラム(一のプログラム)と通信を行う際に、上記「対応データ保存手段」に保存された対応データに従い、アプリケーションA(一のアプリケーションプログラム)に設定された仮想ハンドルZ−1に対応するハンドルZを使用している。また、アプリケーションA(一のアプリケーションプログラム)による通信ポートを用いた通信処理の継続中(アプリケーションAによる当該通信ポートのオープン中)に、アプリケーションB(他のアプリケーションプログラム)が当該通信ポートを用いて携帯端末300のサービスプログラム(他のプログラム)と通信を行う場合、アプリケーションB(他のアプリケーションプログラム)に設定された仮想ハンドルZ−2と対応データとに基づき、当該通信ポートに対応するハンドルZを使用している。
このようにすると、コンピュータ2に記憶されたいずれかのアプリケーションプログラムが通信ポートを介して携帯端末300のいずれかのプログラムと通信処理を行っている際に、コンピュータ2の他のアプリケーションプログラムが同じ通信ポートを用いて携帯端末300の他のプログラムと通信処理を行うことができるようになる。従って、通信ポートが制約されやすい携帯端末300との通信であっても、複数のアプリケーションプログラムが同一の通信ポートを使用して同時期に通信を行うことができるようになり、ひいては、コンピュータ2と携帯端末300との間で多様な処理が実現可能となる。
【0109】
[他の実施形態]
本発明は上記記述及び図面によって説明した実施形態に限定されるものではなく、例えば次のような実施形態も本発明の技術的範囲に含まれる。
【0110】
第1実施形態では、アプリケーションプログラムAに割り当てられた通信ポート14a(第1の通信ポート)に何らかの通信機器が接続されている場合に「外部通信確認手段」を選択する構成としているが、通信ポート14aに特定種類の通信機器が接続されているか否かを検出し、特定種類の通信機器が検出された場合にのみ「外部通信確認手段」を選択する構成としてもよい。例えば、通信ポート14aにパーソナルコンピュータが接続されている場合のみ、或いは通信ポート14aに特定種類の携帯情報端末が接続されている場合のみ、S3(図4)にてYesに進みS5の処理を行うようにしてもよい。このようにすると、通信動作確認の対象となる特定種類の通信機器が接続されたとき以外で外部通信確認手段が選択されることがなく、より一層適切な選択が可能となる。
【0111】
第1実施形態の構成において、「仮想通信確認手段」に対して命令を与える上位プログラムからの設定変更命令に基づき、アプリケーションプログラムBに割り当てる第2の通信ポートを設定変更する「設定変更手段」を付加してもよい。例えば、S1(図4)でアプリケーションプログラムBに割り当てられた通信ポート14bを、上位プログラム(仮想ドライバの上位にあるいずれかのプログラム)からの設定変更命令に基づいて設定変更できるようにしてもよい。
このようにすると、アプリケーションプログラムBに割り当てる通信ポートを必要に応じて変更できる。なお、「設定変更命令」としては、ユーザによる指示に基づいてS1のような設定値取得処理を再度行わせる命令などが挙げられる。
また、このような構成において、「仮想送受信手段」による仮想的な送受信中(例えば、図6、図7の処理が行われている時)に上位プログラムから上記設定変更命令がなされた場合、当該仮想的な送受信が完了するまで、「設定変更手段」による第2の通信ポートの設定変更を中止するように構成できる。このようにすると、第2の通信ポートを必要に応じて設定変更できるようにしつつ、その設定変更によって仮想的な動作確認が強制的に中断されることを効果的に防止できる。
【0112】
第1実施形態では、通信動作確認を行おうとするアプリケーションプログラムに割り当てられた通信ポートにハードウェアが接続されている場合に強制的にハードウェアのドライバをロードしていたが、このような場合、ユーザに対し、いずれを採用するか(即ち、ハードウェアを用いずに仮想的な通信動作確認を行うか、それともハードウェアを用いた外部通信動作確認を行うか)を確認し、ユーザの指示に応じた通信動作確認方法を用いるようにしてもよい。
【0113】
第1実施形態では、アプリケーションプログラムAからアプリケーションプログラムBに対しデータを送信して仮想的な動作確認を行う例を説明したが、データだけでなく制御信号を送信してもよい。例えば、アプリケーションプログラムAからの各制御信号をアプリケーションプログラムBの受信バッファにそれぞれ記憶するように構成し、その制御信号の変更状態をアプリケーションプログラムB側で検出できるようにしてもよい。
【符号の説明】
【0114】
1…通信システム
2…コンピュータ
3…CPU(通信動作確認手段,仮想通信確認手段,外部通信確認手段,選択手段,通信ポート割当手段,仮想送受信手段,検出手段、設定変更手段、呼び出し回数増減手段、判断手段、ハンドル保存手段、仮想ハンドル設定手段、通信制御手段、仮想ハンドル利用確認手段、対応値破棄手段)
5…RAM(メモリ、ハンドル保存手段、対応データ保存手段)
14a,14b,14c…通信ポート
300…携帯端末(外部装置、通信機器)
【技術分野】
【0001】
本発明は、通信システムに関するものである。
【背景技術】
【0002】
現在、パーソナルコンピュータなどの情報処理装置では、アプリケーションによる情報通信が広く行われている。この種の情報処理装置では、必要なときに情報通信が円滑に行われるようにするため、所望のタイミングで通信動作を確認しうる構成が求められており、従来では、確認対象となる情報処理装置に通信ケーブルを接続し、当該通信ケーブルを介して外部装置(例えば他のパーソナルコンピュータ)との通信を試行することで通信動作を確認する手法がとられていた。なお、本発明に関連する技術としては特許文献1のようなものがある。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2006−195954
【発明の概要】
【発明が解決しようとする課題】
【0004】
上記のような従来構成の場合、通信動作の確認を行う場合、通信ケーブルや他のパーソナルコンピュータなどを必須とするため、これら通信ケーブルや他のパーソナルコンピュータを別途用意する必要があった。しかしながら、このような構成(即ち、通信ケーブルや他のパーソナルコンピュータなどの外部機器の準備を必須とする構成)では、通信動作の確認を、迅速に、或いは容易に行いにくいという問題があった。
【0005】
また、従来の情報処理装置では、いずれかのアプリケーションプログラムがある通信ポートを使用した場合、当該通信ポートはこのアプリケーションプログラムの占有状態となり、他のアプリケーションプログラムの使用を排除するような制御が行われていた。従って、複数のアプリケーションプログラムが同一の通信ポートを同時期に使用しながら動作確認やその他の通信を同時進行で行うことができず、動作確認やその他の通信を行う上で非常に制約が大きかった。
【0006】
本発明は、上述した課題を解決するためになされたものであり、通信動作の確認方法を、通信ケーブルを用いた外部通信によって行う方法と、外部通信を行わずに仮想的に行う方法とで切り替えうる通信システムを提供することを第一の目的とする。
また、複数のアプリケーションプログラムが同一の通信ポートを同時期に使用することができる通信システムを提供することを第二の目的とする。
【課題を解決するための手段】
【0007】
上記目的を達成するため、請求項1の発明は、通信機器を接続可能な複数の通信ポートと、メモリとを備えたコンピュータを有し、前記通信ポートを介して外部装置と通信を行う通信システムであって、前記コンピュータは、複数のアプリケーションプログラムと、前記アプリケーションプログラムにて生成されるデータについての通信動作を確認する通信動作確認手段と、を備え、前記通信動作確認手段は、前記複数のアプリケーションプログラムにおける、一のアプリケーションプログラムと他のアプリケーションプログラムとの通信を仮想的に試行することで前記データの通信動作を確認する仮想通信確認手段と、
前記通信ポートに前記通信機器が接続されている場合に、前記アプリケーションプログラムにて生成された前記データを、前記通信ポートを介して前記コンピュータの外部に送信することで、前記データの通信動作を確認する外部通信確認手段と、前記データの通信動作を確認する手段として、前記仮想通信確認手段及び前記外部通信確認手段のいずれかを選択する選択手段と、を有し、前記仮想通信確認手段は、前記一のアプリケーションプログラムに対し、複数の前記通信ポートにおける第1の通信ポートを割り当てると共に、前記他のアプリケーションプログラムに対して第2の通信ポートを割り当て、それら第1の通信ポート及び第2の通信ポートを特定するポート情報を前記メモリに記憶する通信ポート割当手段と、前記ポート情報に基づいて前記第1の通信ポートと対応する前記第2の通信ポートを特定すると共に、前記一のアプリケーションプログラムから前記第1の通信ポートに送られるべき前記データを、前記第2の通信ポートが受信した前記データとして前記メモリに記憶し、且つ前記他のアプリケージョンプログラムに与える仮想送受信手段と、を備え、前記選択手段により当該仮想通信確認手段が選択された場合、前記仮想送受信手段により、前記一のアプリケーションプログラムから前記他のアプリケーションプログラムに対して前記データの仮想的な送受信を行い、その送受信結果に基づいて前記データの通信動作を確認することを特徴とする。
【0008】
請求項2の発明は、請求項1に記載の通信システムにおいて、前記通信機器が前記通信ポートに接続されているか否かを検出する検出手段を備え、前記選択手段は、前記検出手段により前記通信機器が検出されたことを条件として前記外部通信確認手段を選択することを特徴とする。
【0009】
請求項3の発明は、請求項2に記載の通信システムにおいて、前記検出手段は、前記通信ポートに特定種類の前記通信機器が接続されているか否かを検出し、前記選択手段は、前記検出手段により前記特定種類の前記通信機器が検出された場合にのみ前記外部通信確認手段を選択することを特徴とする。
【0010】
請求項4の発明は、請求項2又は請求項3に記載の通信システムにおいて、前記検出手段は、前記通信ポート割当手段によって割り当てられた前記第1の通信ポートに前記通信機器が接続されているか否かを検出し、前記選択手段は、前記第1の通信ポートに前記通信機器が接続されている場合に前記外部通信確認手段を選択することを特徴とする。
【0011】
請求項5の発明は、請求項1から請求項4のいずれか一項に記載の通信システムにおいて、前記通信ポート割当手段は、前記仮想通信確認手段に対して命令を与える上位プログラムからの設定変更命令に基づき、前記他のアプリケーションプログラムに割り当てる前記第2の通信ポートを設定変更する設定変更手段を備え、前記仮想送受信手段による前記仮想的な送受信中に前記設定変更命令がなされた場合、当該仮想的な送受信が完了するまで、前記設定変更手段による前記第2の通信ポートの設定変更を中止することを特徴とする。
【0012】
請求項6の発明は、請求項1から請求項5のいずれか一項に記載の通信システムにおいて、前記通信ポート割当手段は、前記一のアプリケーションプログラムに割り当てる前記第1の通信ポートと、前記他のアプリケーションプログラムに割り当てる前記第2の通信ポートとを互いに異なる前記通信ポートとすることを特徴とする。
【0013】
請求項7の発明は、通信機器を接続可能な通信ポートと、メモリとを備えたコンピュータを有し、前記通信ポートを介して外部装置と通信を行う通信システムであって、
前記コンピュータが、複数のアプリケーションプログラムと、各アプリケーションプログラムによる前記通信ポートの呼び出し回数をカウントすると共に、前記各アプリケーションプログラムによる当該通信ポートを用いた通信処理の終了毎に前記呼び出し回数を減じる呼び出し回数増減手段と、前記アプリケーションプログラムが前記通信ポートを呼び出したときに、前記呼び出し回数増減手段による前記呼び出し回数が所定値以下か否かを判断する判断手段と、前記判断手段によって前記通信ポートの前記呼び出し回数が前記所定値以下と判断された場合に、前記アプリケーションプログラムによって呼び出された当該通信ポートにて通信を行うためのハンドルを保存するハンドル保存手段と、前記各アプリケーションプログラムが前記通信ポートを呼び出したときに、前記各アプリケーションプログラムに対し、前記ハンドル保存手段によって保存された前記ハンドルに対応した仮想ハンドルを設定する仮想ハンドル設定手段と、前記ハンドル保存手段によって保存される前記ハンドルと、前記仮想ハンドル設定手段によって前記各アプリケーションプログラムに設定される各仮想ハンドルとの対応データを保存する対応データ保存手段と、前記各アプリケーションプログラムが前記通信ポートを用いて通信を行う際に、前記対応データ保存手段に保存された前記対応データに従い、前記各アプリケーションプログラムに設定された前記仮想ハンドルと対応付けられた前記ハンドルを使用する通信制御手段と、を備えたことを特徴としている。
【0014】
請求項8の発明は、請求項7に記載の通信システムにおいて、前記通信制御手段が、前記アプリケーションプログラムが特定の通信関連コマンドを実行したときに、前記仮想ハンドルを用いた通信を行うか否かを確認する仮想ハンドル利用確認手段を備え、前記仮想ハンドル利用確認手段によって前記仮想ハンドルを用いた通信であることが確認された場合に、前記アプリケーションプログラムに設定された前記仮想ハンドルと対応付けられた前記ハンドルを使用することを特徴としている。
【0015】
請求項9の発明は、請求項7又は請求項8に記載の通信システムにおいて、
前記アプリケーションプログラムによる前記通信ポートを使用した通信処理が終了した場合に、前記対応データ保存手段によって保存された前記対応データにおいて、その通信処理が終了した前記アプリケーションプログラムについての前記仮想ハンドルと前記ハンドルとの対応値を破棄する対応値破棄手段を備えたことを特徴としている。
【0016】
請求項10の発明は、請求項7から請求項9のいずれか一項に記載の通信システムにおいて、
前記外部装置が、前記コンピュータとの間でデータの送信又は受信を行う複数のプログラムを備えた携帯端末であり、
前記通信制御手段が、前記コンピュータの複数の前記アプリケーションプログラムのうち、いずれか一のアプリケーションプログラムが前記通信ポートを用いて前記携帯端末の一のプログラムと通信を行う際に、前記対応データ保存手段に保存された前記対応データに従い、前記一のアプリケーションプログラムに設定された前記仮想ハンドルに対応する前記ハンドルを使用し、
前記一のアプリケーションプログラムによる前記通信ポートを用いた通信処理の継続中に、複数の前記アプリケーションプログラムのうちの他のアプリケーションプログラムが当該通信ポートを用いて前記携帯端末の他のプログラムと通信を行う場合、前記他のアプリケーションプログラムに設定された前記仮想ハンドルと前記対応データとに基づき、当該通信ポートに対応する前記ハンドルを使用することを特徴としている。
【発明の効果】
【0017】
請求項1の発明は、一のアプリケーションプログラムと他のアプリケーションプログラムとの通信を仮想的に試行する仮想通信確認手段と、アプリケーションプログラムにて生成されたデータを、通信ポートを介してコンピュータの外部に送信してデータの通信動作を確認する外部通信確認手段とが設けられているため、状況に応じて仮想通信確認手段と外部通信確認手段とを使い分けることができ、通信動作をより適切な方法で確認できるようになる。例えば、通信ケーブルや外部装置を準備しにくい場合であっても、外部通信確認手段を用いずに仮想通信確認手段によって通信動作を確認でき、通信動作の確認作業やその準備の容易化が効果的に図られる。
また、一のアプリケーションプログラムに対し第1の通信ポートを割り当て、他のアプリケーションプログラムに対し第2の通信ポートを割り当て、それら第1の通信ポート及び第2の通信ポートを特定するポート情報をメモリに記憶しているため、一のアプリケーションプログラムに対応する送信ポートと、他のアプリケーションプログラムに対応する受信ポートとの対応関係を明確にすることができる。
更に、一のアプリケーションプログラムから第1の通信ポートに送られるべきデータを、第2の通信ポートが受信したデータとしてメモリに記憶し、且つ他のアプリケージョンプログラムに与えるように構成されているため、実際に通信ケーブルを通信ポートに接続しなくても、一のアプリケーションプログラムからのデータを第1の通信ポートに与えるという送信状態の確認と、他のアプリケーションプログラムに対するデータを第2の通信ポートにて受信するという受信状態の確認とを仮想的に実現でき、外部通信確認手段を用いない場合であっても通信動作の確認が良好に行われることとなる。
【0018】
請求項2の発明では、通信機器が通信ポートに接続されているか否かを検出する検出手段が設けられており、検出手段により通信機器が検出されたことを条件として外部通信確認手段が選択されるように構成されている。このようにすると、外部通信確認手段による通信動作の確認が可能なときのみ外部通信確認手段が選択されるようになり、より適切な選択が可能となる。
【0019】
請求項3の発明は、検出手段により特定種類の通信機器が検出された場合にのみ外部通信確認手段を選択するように構成されている。このようにすると、通信動作確認の対象となる特定種類の通信機器が接続されたとき以外で外部通信確認手段が選択されることがなく、より一層適切な選択が可能となる。
【0020】
請求項4の発明は、通信ポート割当手段によって割り当てられた第1の通信ポートに通信機器が接続されているか否かを検出し、第1の通信ポートに通信機器が接続されている場合に外部通信確認手段を選択するように構成されている。このようにすると、一のアプリケーションシステムから外部への通信が可能な状態においては、外部通信確認手段を用いてより精度の高い通信動作確認が可能となる。
【0021】
請求項5の発明は、上位プログラムからの設定変更命令に基づき、他のアプリケーションプログラムに割り当てる第2の通信ポートを設定変更する設定変更手段が設けられているため、他のアプリケーションプログラムに割り当てる通信ポートを必要に応じて変更できる。更に、仮想送受信手段による仮想的な送受信中に設定変更命令がなされた場合、当該仮想的な送受信が完了するまで、設定変更手段による第2の通信ポートの設定変更を中止している。このようにすると、第2の通信ポートを必要に応じて設定変更できるようにしつつ、その設定変更によって仮想的な動作確認が強制的に中断されることを効果的に防止できる。
【0022】
請求項6の発明は、一のアプリケーションプログラムに割り当てる第1の通信ポートと、他のアプリケーションプログラムに割り当てる第2の通信ポートとが互いに異なる通信ポートとなるように設定している。このようにすると、仮想通信確認手段によって通信動作を確認するときに、第1の通信ポートと第2の通信ポートと区別して適切な動作確認を行うことができる。
【0023】
請求項7の発明では、呼び出し回数増減手段によってアプリケーションプログラムによる通信ポートの呼び出し回数を管理しており、アプリケーションプログラムが通信ポートを呼び出したときに、呼び出し回数増減手段によって管理される呼び出し回数が所定値以下か否かを判断している。そして、その通信ポートの呼び出し回数が所定値以下と判断された場合に、アプリケーションプログラムによって呼び出された当該通信ポートにて通信を行うためのハンドルを保存している。
このようにすると、通信ポートに対するアプリケーションプログラムの呼び出しがどの程度重複しているかを確認できる。そして、呼び出し回数が少ないときに、当該通信ポートで通信を行うためにハンドルを予め保存しておくことができる。
更に、各アプリケーションプログラムが通信ポートを呼び出したときに、各アプリケーションプログラムに対し、ハンドル保存手段によって保存されたハンドルに対応した仮想ハンドルを設定し、この設定された仮想ハンドルと、既に保存されているハンドルとの対応データを保存している。そして、各アプリケーションプログラムが通信ポートを用いて通信を行う際に、保存された対応データに従い、各アプリケーションプログラムに設定された仮想ハンドルと対応付けられたハンドルを使用している。
このようにすると、複数のアプリケーションプログラムが同じ通信ポートを呼び出した場合に、各アプリケーションプログラムに仮想ハンドルを割り当てることができ、各アプリケーションプログラムは対応データを拠り所として仮想ハンドルと対応する実際のハンドルを使用し、当該通信ポートでの通信を行うことができるようになる。従って、最初に通信ポートを呼び出したアプリケーションプログラムだけに当該通信ポートを占有させて他のアプリケーションプログラムによる当該通信ポートへのアクセスを排除するといった対応を行う必要がなく、複数のアプリケーションプログラムが同一の通信ポートを同時期に使用することができるようになる。
【0024】
請求項8の発明では、アプリケーションプログラムが特定の通信関連コマンドを実行したときに、仮想ハンドルを用いた通信を行うか否かを確認する仮想ハンドル利用確認手段を備え、仮想ハンドル利用確認手段によって仮想ハンドルを用いた通信であることが確認された場合に、アプリケーションプログラムに設定された仮想ハンドルと対応付けられたハンドルを使用している。
このようにすると、特定の通信関連コマンドが実行されたことをトリガとして仮想ハンドルを用いた通信を行うことができるようになる。その際、仮想ハンドルを用いた通信を行うか否かの確認を行った上で、通信処理に移行しているため、特定の通信関連コマンドで他の処理を実行する場合(即ち、仮想ハンドルを用いた通信を行わない例外ケース)にも対応しやすくなる。
【0025】
請求項9の発明は、アプリケーションプログラムによる通信ポートを使用した通信処理が終了した場合に、対応データ保存手段によって保存された対応データにおいて、その通信処理が終了したアプリケーションプログラムについての仮想ハンドルとハンドルとの対応値を破棄する対応値破棄手段を備えている。このようにすると、通信処理が終了して不要になった仮想ハンドルを削除することができ、対応データを常に適切な状態に維持できるようになる。
【0026】
請求項10の発明は、外部装置が、コンピュータとの間でデータの送信又は受信を行う複数のプログラムを備えた携帯端末として構成されている。そして、コンピュータの複数のアプリケーションプログラムのうち、いずれか一のアプリケーションプログラムが通信ポートを用いて携帯端末の一のプログラムと通信を行う際に、対応データ保存手段に保存された対応データに従い、一のアプリケーションプログラムに設定された仮想ハンドルに対応するハンドルを使用している。また、一のアプリケーションプログラムによる通信ポートを用いた通信処理の継続中に、複数のアプリケーションプログラムのうちの他のアプリケーションプログラムが当該通信ポートを用いて携帯端末の他のプログラムと通信を行う場合、他のアプリケーションプログラムに設定された仮想ハンドルと対応データとに基づき、当該通信ポートに対応するハンドルを使用している。
このようにすると、コンピュータに記憶されたいずれかのアプリケーションプログラムが通信ポートを介して携帯端末のいずれかのプログラムと通信処理を行っている際に、コンピュータの他のアプリケーションプログラムが同じ通信ポートを用いて携帯端末の他のプログラムと通信処理を行うことができるようになる。従って、通信ポートが制約されやすい携帯端末との通信であっても、複数のアプリケーションプログラムが同一の通信ポートを使用して同時期に通信を行うことができるようになり、ひいては、コンピュータと携帯端末との間で多様な処理が実現可能となる。
【図面の簡単な説明】
【0027】
【図1】図1は、第1実施形態に係る通信システムを概略的に説明する説明図である。
【図2】図2は、図1の通信システムの電気的構成を例示するブロック図である。
【図3】図3は、ハードウェアが接続されているときのOS内の構成を概略的に説明する説明図である。
【図4】図4は、ドライバロード処理の流れを例示するフローチャートである。
【図5】図5は、通信ポートオープン処理の流れを例示するフローチャートである。
【図6】図6は、データ送信処理の流れを例示するフローチャートである。
【図7】図7は、データ受信処理の流れを例示するフローチャートである。
【図8】図8は、第2実施形態に係る通信システムを概略的に説明する説明図である。
【図9】図9は、アプリケーションプログラムによって実行される通信処理の流れを概略的に例示するフローチャートである。
【図10】図10は、通信ポートオープン時のAPIフック処理を例示するフローチャートである。
【図11】図11(a)は、送信関連APIが呼び出されたときのAPIフック処理を例示するフローチャートである。図11(b)は、受信関連APIが呼び出されたときのAPIフック処理を例示するフローチャートである。
【図12】図12は、通信ポートクローズ時のAPIフック処理を例示するフローチャートである。
【図13】図13(a)は、各仮想ハンドルと正規のハンドルとの対応データを概念的に説明する説明図であり、図13(b)は、各アプリケーションプログラムに仮想ハンドルが割り当てられた状態を概念的に説明する説明図である。
【発明を実施するための形態】
【0028】
[第1実施形態]
以下、本発明の通信システムを具現化した第1実施形態について、図面を参照して説明する。図1は、第1実施形態に係る通信システムを概略的に説明する説明図である。図2は、図1の通信システムの電気的構成を例示するブロック図である。図3は、通信ポートにハードウェアが接続されているときのOS内の構成を概略的に説明する説明図である。図4は、ドライバロード処理の流れを例示するフローチャートである。図5は、通信ポートオープン処理の流れを例示するフローチャートである。図6は、データ送信処理の流れを例示するフローチャートである。図7は、データ受信処理の流れを例示するフローチャートである。
【0029】
(第1実施形態の通信システムの概要)
図1に示すように、本実施形態に係る通信システム1は、コンピュータ2によって構成されており、このコンピュータ2の内部に、アプリケーションプログラム(以下、アプリケーションとも称する)やオペレーティングシステム(以下、OSとも称する)20が格納された構成をなしている。コンピュータ2は、OS20の制御の下、これらアプリケーションプログラムを実行することで、各種処理を行うように構成されている。なお、図1では、コンピュータ2で用いられる一部のアプリケーションプログラムA、B(図1では、アプリケーションA、Bと略称)を例示しており、これら以外のアプリケーションプログラムについては図示を省略している。
【0030】
コンピュータ2は、例えばパーソナルコンピュータとして構成されており、図2に示すように、CPU3、ROM4、RAM5、ハードディスクドライブ(以下HDDとも称する)6を備えている。また、CPU3には、バス11を介して、出力部7、入力部8、通信部9が接続されている。なお、図示はしていないが、バス11に接続された各回路とCPU3との間の入出力制御を行う入出力コントローラなども設けられている。
【0031】
出力部7は、表示装置やスピーカなどによって構成されており、CPU3からの指令に基づいて各種画像や音声を出力する。また、入力部8は、キーボードやマウスなどによって構成されており、ユーザの操作に応じて各種信号を入力する。
【0032】
通信部9は、アプリケーションプログラムなどによって生成されたデータを外部に送信したり、或いは外部装置からのデータを受信するように機能するものであり、通信インターフェース13と、複数の通信ポート14a〜14cとを備えた構成をなしている。各通信ポート14a〜14cは、シリアルコネクタやパラレルコネクタとして構成されており、RS232CケーブルやUSBケーブルなどの通信ケーブルを介して各種通信機器(例えば、他のコンピュータ、外部記憶装置、その他の情報処理装置等)が接続される構成をなしている。また、通信インターフェース13は、各通信ポート14a〜14cを介したデータの入出力制御を行うように構成されている。
【0033】
CPU3は、必要に応じ、上記入力部8にて入力された情報の取得、出力部7に対する出力制御、ROM4、RAM5、HDD6に対する読み取り或いは書き込みの制御、或いは、通信部9の制御を行う。また、CPU3は、HDD6に格納されているプログラムやHDD6にインストールされたプログラム等をRAM5にロードして実行する機能を有している。
【0034】
また、コンピュータ2で用いられるOS20は、図1のような構成をなしている。なお、図1では、後述する仮想ドライバがロードされた状態を示している。OS20としては、例えば、Unix(登録商標)や、Linux、さらには、マイクロソフト社のWindows(登録商標)、その他の任意のOSを採用することができる。図1では、その一例として、Windows(登録商標)のNT系のOSが採用されたときの構成例を示している。
【0035】
Windows(登録商標)のNT系のOSであるOS20は、マイクロカーネル技術とオブジェクト指向技術をベースとし、各サービスを、サブシステムによって実装している。Win32サブシステム21は、サブシステムの1つで、アプリケーションプログラムA、Bに対して、各種のAPI(Application Programming Interface)(関数)を提供し、例えば、メモリ管理、プロセス管理、グラフィックス描画などを行う。Win32サブシステム21は、アプリケーションプログラムA、Bから、例えば、入出力関係のAPI関数が呼び出されると、そのAPI関数に応じた入出力要求を、IOマネージャ22に出力する。
【0036】
また、OS20には、デバイスドライバが組み込まれるようになっており、図1では、後述する仮想ドライバがロードされたときの階層構成を示している。また、図3では、ハードウェアが接続され、このハードウェアのデバイスドライバがロードされているときの階層構成を示している。
【0037】
(第1実施形態の特徴的構成)
次に、本実施形態の特徴的構成について説明する。
本実施形態に係る通信システム1は、アプリケーションプログラムにて生成されるデータについての通信動作を確認する「通信動作確認手段」を備えている。以下では、この通信動作確認処理について具体的に説明する。
【0038】
まず、図4を参照してドライバロード処理の流れを説明する。このドライバロード処理は、通信動作の確認処理を行うためのドライバをRAM5にロードする処理であり、例えば、ユーザによる所定操作時、或いはコンピュータ2の起動時などに実行される。当該処理が開始されると、まず、設定値の取得処理が行われる(S1)。この設定値の取得処理では、通信が行われるアプリケーションプログラム毎に使用する通信ポートが割り当てられる。例えば、図1のようにシリアル通信を行うアプリケーションとしてアプリケーションA、Bが存在する場合、一方のアプリケーションプログラムAに対していずれかの一の通信ポートが割り当てられ、他方のアプリケーションプログラムBに対して、アプリケーションプログラムAに割り当てられた通信ポートと異なる通信ポートが割り当てられる。
【0039】
以下では、アプリケーションプログラムAに対して通信ポート14aが割り当てられ、アプリケーションプログラムBに対して通信ポート14bが割り当てられた例を挙げて説明する。なお、アプリケーションプログラムAに割り当てられる通信ポート14aは、「第1の通信ポート」に相当し、アプリケーションプログラムBに割り当てられる通信ポート14bは、「第2の通信ポート」に相当するものであり、以下、通信ポート14aを、第1の通信ポートとも称し、通信ポート14bを第2の通信ポートとも称することとする。
【0040】
S1では、通信相手のポート番号を設定する処理も行われる。この処理は、仮想的に通信動作確認を行うときの通信相手のポート番号を設定する処理であり、例えばアプリケーションプログラムAからアプリケーションプログラムBに対してデータを送信し仮想的な通信動作確認を行う場合、アプリケーションプログラムAの通信相手のポート番号として、アプリケーションプログラムBに割り当てられた通信ポート14bのポート番号を設定する。なお、どのアプリケーションプログラムにどの通信ポートを割り当てるか、或いはどの通信ポートとどの通信ポートで仮想的な通信を行うかはユーザによって任意に選択できるようにすることができる。
【0041】
S1の処理においてアプリケーションプログラムAに割り当てられた通信ポート14aのポート番号(第1の通信ポートのポート番号)及びアプリケーションプログラムBに割り当てられた通信ポート14bのポート番号(第2の通信ポートのポート番号)はレジストリに記憶され、更に、通信ポート14aの通信相手として通信ポート14bを指定する対応情報もレジストリに記憶される。
【0042】
なお、CPU3は、「通信ポート割当手段」の一例に相当し、アプリケーションプログラムA(一のアプリケーションプログラム)に対し、通信ポート14a(第1の通信ポート)を割り当てると共に、アプリケーションプログラムB(他のアプリケーションプログラム)に対して通信ポート14b(第2の通信ポート)を割り当て、それら第1の通信ポート及び第2の通信ポートを特定するポート情報をメモリに記憶するように機能する。また、アプリケーションプログラムA(一のアプリケーションプログラム)に割り当てる第1の通信ポートと、アプリケーションプログラムB(他のアプリケーションプログラム)に割り当てる第2の通信ポートとを互いに異なる通信ポートとするように機能している。
【0043】
その後、ハードウェアの接続状況を確認する(S2)。このS2の処理は、通信動作確認を行おうとするアプリケーションプログラムに割り当てられた通信ポートにハードウェア(通信機器)が接続されているか否かを確認する処理であり、上述のようにアプリケーションプログラムAに対して通信ポート14aが割り当てられている場合、この通信ポート14aにコンピュータ2と通信を行い得る通信機器が接続されているか否かを確認する。
【0044】
アプリケーションプログラムAに割り当てられた通信ポート14aにハードウェア(通信機器)が接続されていない場合には、S3にてNoに進み、仮想ドライバをロードする(S4)。この仮想ドライバは、通信動作の確認を仮想的に行うためのドライバであり、予めHDD6等の記憶手段に記憶され、CPU3によって読み出され実行されるものである。
【0045】
仮想ドライバがロードされたときには、OS内部の構成は図1のようになる。この構成では、アプリケーションプログラムAにて生成された送信データが、Win32サブシステム21、IOマネージャ22を介してデバイスドライバ上位23に渡されるようになっており、仮想ドライバは、デバイスドライバ下位25として構成され、デバイスドライバ23から上記送信データを取得するように機能する。
【0046】
なお、CPU3は、「仮想通信確認手段」の一例に相当し、コンピュータ2に格納される一のアプリケーションプログラムと他のアプリケーションプログラムとの通信を仮想的に試行することでデータの通信動作を確認するように機能する。
【0047】
一方、アプリケーションプログラムAに割り当てられた通信ポート14aにハードウェア(通信機器)が接続されている場合にはS3にてYesに進み、接続されているハードウェアのドライバをロードする(S5)。
【0048】
ハードウェアのドライバがロードされたときには、OS内部の構成は例えば図3のようになり、アプリケーションプログラムAにて生成された送信データは、Win32サブシステム21、IOマネージャ22を介してデバイスドライバ上位23に渡され、デバイスドライバ下位25として構成されるハードウェアのドライバがこの送信データを取得する。そして、このデバイスドライバ下位26によってハードウェア27(通信機器)に対する通信制御がなされる。
【0049】
なお、ハードウェアのドライバを実行するCPU3は、「外部通信確認手段」の一例に相当し、通信ポート14aに通信機器が接続されている場合に、アプリケーションプログラムAにて生成されたデータを、通信ポート14aを介してコンピュータ2の外部に送信することで、データの通信動作を確認するように機能する(例えば、アプリケーションプログラムAにて生成されたデータを、通信ポート14aを介して他のパーソナルコンピュータ、携帯情報端末等の外部通信装置に送信し、データの通信動作を確認するように機能する)。なお、ハードウェアのドライバをロードしてハードウェアと通信を行う構成、或いはその通信動作についてのデバック等を行う構成については公知であるので詳細は省略する。
【0050】
本実施形態では、CPU3が「検出手段」の一例に相当し、通信機器が通信ポート14aに接続されているか否かを検出するように機能する。更に、S5の処理を実行するCPU3は、「選択手段」の一例に相当し、通信ポート14aにおいて通信機器の接続が検出されたことを条件として「外部通信確認手段」を選択するように機能する。
【0051】
次に、図5を参照して通信ポートオープン処理について説明する。通信ポートオープン処理は、アプリケーションプログラムAに割り当てられた通信ポート14aとアプリケーションプログラムBに割り当てられた通信ポート14bとをオープンする処理であり、上述の仮想ドライバに基づいて行われる。
【0052】
この処理では、まず、設定値の取得処理が行われる(S10)。S10の処理では、通信動作確認を行おうとするアプリケーションプログラム(アプリケーションプログラムA)に割り当てられた通信ポート14aのポート番号をレジストリから読み出すと共に、その通信ポート14aの通信相手として設定されている通信ポート14bのポート番号をレジストリから読み出す。そして、それら通信ポート番号とバッファとを関連付ける処理を行う(S11)。S11では、受信側で使用されるバッファ(受信バッファ)のメモリアドレスを取得し、通信ポート14bと対応付けてRAM5に記憶する。更に、上記受信バッファと送信バッファ(送信側の通信ポート14aと対応付けられたバッファ(なお、送信バッファは省略可))とをクリアし(S12)、内部状態をオープンに設定する(S13)。なお、S13の処理は、例えば通信ポート14a及び通信ポート14bがオープン状態であることを示すフラグを設定する。
【0053】
次に、仮想ドライバによって行われるデータ送信処理について説明する。図6の処理は、アプリケーションプログラムAの実行中にデータ送信の指示がなされることに基づいて開始される処理であり、まず、アプリケーションプログラムAに割り当てられた通信ポート14aがオープン状態であるか否かを確認する(S20)。通信ポート14aがオープン状態である場合には、Win32サブシステム21、IOマネージャ22、デバイスドライバ23を介し、デバイスドライバ下位25(仮想ドライバ)に対してアプリケーションプログラムAからの送信データが渡される(S21)。仮想ドライバは、その取得した送信データを、アプリケーションプログラムAの通信相手となるアプリケーションプログラムBの受信バッファ(即ち、通信ポート14aの通信相手として設定された通信ポート14bに対応付けられた受信バッファ)に書き込み(S22)、通信相手の通信ポート14bに対して受信通知を行う(S23)。
【0054】
一方、アプリケーションプログラムB側では図7のようなデータ受信処理が行われる。このデータ受信処理では、アプリケーションプログラムBに割り当てられた通信ポート14bがオープン状態であるか否かの確認がなされ(S30)、オープン状態のときにはS30にてYesに進み、受信通知の確認を行う(S31)。S31では、アプリケーションプログラムBに割り当てられた通信ポート14bに対して受信通知がなされたか否かの確認が行われ、S23(図6)の受信通知がなされている場合にはS31にてYesに進み、その受信イベントが上位に通知され、その通知に応じてアプリケーションプログラムBが受信バッファに書き込まれたデータ(アプリケーションプログラムAからの送信データ)を取得する(S32)。アプリケーションプログラムBが受信バッファに蓄積された送信データを取得した後には、受信バッファ内のデータは削除される。
【0055】
なお、図5の処理によって設定された通信ポートのオープン状態は、ユーザによる所定操作、或いはコンピュータの起動終了時においてクローズ状態とされる。
【0056】
このように、仮想ドライバがロードされる場合(即ち、仮想通信確認手段が選択される場合)、アプリケーションプログラムA(一のアプリケーションプログラム)からアプリケーションプログラムB(他のアプリケーションプログラム)に対してデータの仮想的な送受信が行われ、その送受信結果に基づいてデータの通信動作の確認がなされる。通信動作の確認は、アプリケーションプログラムAのデータがアプリケーションプログラムBによって良好に取得されたか否か等、公知のデバック処理で用いられる様々な確認を行うことができる。
【0057】
なお、CPU3は、「仮想送受信手段」の一例に相当し、ポート情報に基づいて第1の通信ポートと対応する第2の通信ポートを特定すると共に、一のアプリケーションプログラムから第1の通信ポートに送られるべきデータを、第2の通信ポートが受信したデータとしてメモリに記憶し、且つ他のアプリケージョンプログラムに与えるように機能する。
【0058】
(第1実施形態の主な効果)
本実施形態の構成によれば例えば以下のような効果を奏する。
上記実施形態では、アプリケーションプログラムAとアプリケーションプログラムBとの通信を仮想的に試行する「仮想通信確認手段」と、アプリケーションプログラムにて生成されたデータを、通信ポートを介してコンピュータの外部に送信してデータの通信動作を確認する「外部通信確認手段」とが設けられているため、状況に応じて仮想通信確認手段と外部通信確認手段とを使い分けることができ、通信動作をより適切な方法で確認できるようになる。例えば、通信ケーブルや外部装置を準備しにくい場合であっても、外部通信確認手段を用いずに仮想通信確認手段によって通信動作を確認でき、通信動作の確認作業やその準備の容易化が効果的に図られる。
【0059】
また、アプリケーションプログラムAに対し第1の通信ポートを割り当て、アプリケーションプログラムBに対し第2の通信ポートを割り当て、それら第1の通信ポート及び第2の通信ポートを特定するポート情報をメモリに記憶しているため、アプリケーションプログラムAに対応する送信ポートと、アプリケーションプログラムBに対応する受信ポートとの対応関係を明確にすることができる。
【0060】
更に、アプリケーションプログラムAから第1の通信ポートに送られるべきデータが、第2の通信ポートが受信したデータとしてメモリに記憶され、更に、他のアプリケージョンプログラムに与えられるように構成されているため、実際に通信ケーブルを通信ポートに接続しなくても、アプリケーションプログラムAからのデータを第1の通信ポートを介して送信するという送信状態の確認と、アプリケーションプログラムBに対するデータを第2の通信ポートを介して受信するという受信状態の確認とを仮想的に実現でき、外部通信確認手段を用いない場合であっても通信動作の確認が良好に行われる。
【0061】
また、通信機器が通信ポートに接続されているか否かを検出する「検出手段」が設けられており、「検出手段」により通信機器が検出されたことを条件として「外部通信確認手段」が選択されるように構成されている。このようにすると、「外部通信確認手段」による通信動作の確認が可能なときのみ「外部通信確認手段」が選択されるようになり、より適切な選択が可能となる。
【0062】
また、「通信ポート割当手段」によって割り当てられた第1の通信ポートに通信機器が接続されているか否かを検出し、第1の通信ポートに通信機器が接続されている場合に「外部通信確認手段」を選択するように構成されている。このようにすると、一のアプリケーションシステムから外部への通信が可能な状態においては、「外部通信確認手段」を用いてより精度の高い通信動作確認が可能となる。
【0063】
また、アプリケーションプログラムAに割り当てる第1の通信ポートと、アプリケーションプログラムBに割り当てる第2の通信ポートとが互いに異なる通信ポートとなるように設定している。このようにすると、「仮想通信確認手段」によって通信動作を確認するときに、第1の通信ポートと第2の通信ポートと区別して適切な動作確認を行うことができる。
【0064】
[第2実施形態]
次に、本発明の通信システムの第2実施形態について図8〜図13を参照して説明する。
図8は、第2実施形態に係る通信システムを概略的に説明する説明図である。図9は、アプリケーションプログラムによって実行される通信処理の流れを概略的に例示するフローチャートである。図10は、通信ポートオープン時のAPIフック処理を例示するフローチャートである。図11(a)は、送信関連APIが呼び出されたときのAPIフック処理を例示するフローチャートであり、図11(b)は、受信関連APIが呼び出されたときのAPIフック処理を例示するフローチャートである。図12は、通信ポートクローズ時のAPIフック処理を例示するフローチャートである。図13(a)は、各仮想ハンドルと正規のハンドルとの対応データを概念的に説明する説明図であり、図13(b)は、コンピュータ内の各アプリケーションプログラムに仮想ハンドルが割り当てられた状態を概念的に説明する説明図である。なお、図13では、通信ポート14a(図2)の正規ハンドルとしてハンドルZが用いられ、通信ポート14aの仮想ハンドルとして、アプリケーションAに仮想ハンドルZ−1が割り当てられ、アプリケーションBに仮想ハンドルZ−2が割り当てられた例を示している。
【0065】
なお、第2実施形態に係る通信システム200で用いられるコンピュータ202は、ハードウェア構成については、第1実施形態で用いられるコンピュータ2と同一である。よって、コンピュータ202のハードウェア(CPU3、ROM4、RAM5、ハードディスクドライブ6、出力部7、入力部8、通信部9、バス11、通信インターフェース13、通信ポート14a〜14c等)については適宜図2を参照することとし、詳細な説明は省略する。
【0066】
(第2実施形態の通信システムの概要)
図8に示すように、本実施形態に係る通信システム200は、通信機器を接続可能な通信ポートと、メモリ(RAM等)とを備えたコンピュータ202によって構成されている。本実施形態でも、第1実施形態と同様の通信部9(図2)が設けられ、通信インターフェース13と、複数の通信ポート14a〜14cとを備えている。このコンピュータ202でも、各通信ポート14a〜14c(図2)が、シリアルコネクタやパラレルコネクタとして構成されており、RS232CケーブルやUSBケーブルなどの通信ケーブルを介して各種通信機器(例えば、他のコンピュータ、外部記憶装置、その他の情報処理装置等)が接続可能とされている。そして、各通信ポート14a〜14c(図2)を介してこれらの通信機器(外部装置)と通信を行うことができるようになっている。なお、図8では、外部装置の例として携帯端末300が示されている。
【0067】
図8に示すように、コンピュータ202の内部には、複数のアプリケーションプログラム(以下、アプリケーションとも称する)やオペレーティングシステム(以下、OSとも称する)220が格納されており、コンピュータ202は、OS220の制御の下、これらアプリケーションプログラムを実行することで、各種処理を行っている。なお、図8では、コンピュータ202で用いられる一部のアプリケーションプログラムA、B(図8では、アプリケーションA、Bと略称)を例示しており、これら以外のアプリケーションプログラムについては図示を省略している。
【0068】
コンピュータ202で用いられるOS220としては、例えば、Unix(登録商標)、Linux、マイクロソフト社のWindows(登録商標)、その他の任意のOSなどが挙げられる。なお、以下では、Windows(登録商標)のNT系のOSが採用され、マイクロカーネル技術とオブジェクト指向技術をベースとし、各サービスを、サブシステムによって実装した構成を代表例として説明する。
【0069】
OS220では、サブシステムが各アプリケーションプログラムA、B等に対して、各種のAPI(関数)を提供し、例えば、メモリ管理、プロセス管理、グラフィックス描画などを行うようになっている。このサブシステムでは、アプリケーションプログラムA、Bから、例えば、入出力関係のAPI関数が呼び出されると、そのAPI関数に応じた入出力要求を、IOマネージャ(図示略)に出力する。また、OS220には、各種デバイスドライバが組み込まれるようになっており、図8では、ハードウェア(携帯端末に接続された通信ケーブル)が接続され、このハードウェアのデバイスドライバがロードされたときの構成を概念的に示している。
【0070】
(第2実施形態の特徴的構成)
次に、本実施形態に係る通信システム200の特徴的構成について説明する。
まず、アプリケーションプログラムによる通信処理について説明する。各アプリケーションプログラムは、所定の通信開始条件の成立(例えば、ユーザによる所定操作等)に応じて図9のような通信処理を実行するようになっており、この通信処理では、まず、通信ポートのオープン処理が行われる(S1)。このS1では、アプリケーションプログラムが通信ポートをオープンするためのAPI関数を呼び出す処理が行われる。例えば、Windows(登録商標)で用いられるAPI関数では、「CreateFile」関数が使用されており、S1では、この、「CreateFile」関数が、通信に使用する通信ポート対応付けられて呼び出される。
【0071】
本実施形態では、アプリケーションプログラムから通信ポートをオープンするAPI関数(例えば、「CreateFile」関数)が呼び出されたとき、このAPI関数をそのままサブシステムによって実行するのではなく、図10のように、API関数をフックする処理を行っている。図10の処理は、アプリケーションプログラムによって通信ポートをオープンするAPI関数が呼び出されたときに開始される処理であり、まず、S11にて、通信処理で用いようとする通信ポートの呼び出しが初回であるか否かを判断している。
【0072】
本実施形態では、各通信ポート毎に、アプリケーションプログラムによる「呼び出し回数」をカウントしている。この「呼び出し回数」は、各通信ポートにおける通信処理継続中(通信ポートのオープン継続中)のアプリケーション数を示す値であり、例えば、通信ポート14a(COM1)を例に挙げると、各アプリケーションプログラムが当該通信ポート14aのオープンを要求する毎に(即ち、通信ポート14aについて図10の処理が行われる毎に)当該通信ポート14aの「呼び出し回数」がインクリメントされるようになっている。また、各アプリケーションプログラムが当該通信ポート14aのクローズを要求する毎に(即ち、通信ポート14aについて図12の処理が行われる毎に)、当該通信ポート14aの「呼び出し回数」がデクリメントされるようになっている。
【0073】
このように各通信ポートごとに呼び出し回数がカウントされることを前提とし、S11では、S1の処理によって指定された通信ポートの現在(S11の処理実行時)の呼び出し回数が「0」であるか否かを判断している。例えば、図9のS1の処理で、通信ポート14a(以下、COM1ともいう)を指定して、当該通信ポート14a(COM1)をオープンするAPI関数が呼び出された場合、このS1の処理に応じて実行されるS11の処理では、当該通信ポート14a(COM1)の「呼び出し回数」が現在「0」であるか否かを判断する。
【0074】
S1で指定された通信ポートについての「呼び出し回数」がS11の処理時において「0」であり、今回の呼び出しが、当該通信ポートについての1回目の呼び出しとなるときには、S11でYesに進み、S1で呼び出されたAPI関数(例えば、「CreateFile」関数)をOS220にて実行し、S1で指定された通信ポートをオープンする(S12)。このオープン処理では、S1で指定された通信ポートのハンドル(正規ハンドル)が公知の方法で取得され、その取得されたハンドル(正規ハンドル)がRAM等のメモリに保存される(S13)。
【0075】
なお、この「正規ハンドル」は、API関数によって通信ポートを介して通信を行う際に実際に当該通信ポートでの通信に用いる公知のハンドルであり、当該通信ポートのオープン中は当該通信ポートに対して1つのみ設定されるようになっている。一方、後述する「仮想ハンドル」は、当該通信ポートについて各アプリケーションプログラム毎に設定される仮想的なハンドルであり、アプリケーションプログラムが当該通信ポートについて「仮想ハンドル」を取得したとしても、最終的にはこの「仮想ハンドル」を対応する「正規ハンドル」に変換し、「正規ハンドル」を用いて当該通信ポートでの通信を行うようになっている。なお、通信の詳細については後述する。
【0076】
本実施形態では、図10の処理や、後述する図12の処理を実行するCPU3(図2)が、「呼び出し回数増減手段」の一例に相当し、各アプリケーションプログラムによる通信ポートの呼び出し回数をカウントすると共に、各アプリケーションプログラムによる当該通信ポートを用いた通信処理の終了毎に呼び出し回数を減じるように機能する。
また、S11(図10)の処理を実行するCPU3は、「判断手段」の一例に相当し、アプリケーションプログラムが通信ポートを呼び出したときに、上記「呼び出し回数増減手段」による呼び出し回数が所定値以下か否かを判断するように機能する。
更に、CPU3、メモリ(RAM5等)が、「ハンドル保存手段」の一例に相当し、上記「判断手段」によって通信ポートの呼び出し回数が所定値以下と判断された場合に、アプリケーションプログラムによって呼び出された当該通信ポートにて通信を行うためのハンドルを保存するように機能する。
【0077】
一方、S11の判断処理において、S1で指定された通信ポートの最初の呼び出しでないと判断された場合(即ち、S1の処理によって指定された通信ポートの現在(S11の処理実行時)の呼び出し回数が「1」以上である場合)、S11にてNoに進み、そのアプリケーションプログラムに割り当てるべき仮想ハンドルを生成する処理を行う(S14)。
【0078】
従来では、通信ポートが既に先のアプリケーションプログラムによって呼び出されてオープンされている場合、後からアクセスする他のアプリケーションプログラムによる当該通信ポートの使用が禁止され、他のアプリケーションプログラムは当該通信ポートのハンドルを使用できないという問題があった。しかし、本実施形態では、既に先のアプリケーションプログラムによって通信ポートがオープンされている場合であっても、他のアプリケーションプログラムによる当該通信ポートのオープン処理を排除せず、他のアプリケーションプログラムに対して仮想的なハンドルを割り当てることができるようになっている。
【0079】
また、S11でYesに進む場合も同様であり、S13でハンドル(正規ハンドル)を保存した後、S1の処理を行ったアプリケーションプログラム(この場合、通信ポートの最初の呼び出しを行ったアプリケーションプログラム)に割り当てるべき仮想ハンドルを生成する処理を行う(S14)。
【0080】
このように、本実施形態では、通信ポートを最初に呼び出したアプリケーションプログラムにも、その後に通信ポートを呼び出したアプリケーションプログラムにも仮想ハンドルが設定されることとなる。
なお、本実施形態では、S14(図10)の処理を実行するCPU3が「仮想ハンドル設定手段」の一例に相当し、各アプリケーションプログラムが通信ポートを呼び出したときに、各アプリケーションプログラムに対し、上記「ハンドル保存手段」によって保存されたハンドル(正規ハンドル)に対応した仮想ハンドルを設定するように機能する。
【0081】
そして、S14で生成された仮想ハンドルと、S13で保存されたハンドル(正規ハンドル)との対応関係を示すデータ(対応データ)を保存する(S15)。図13(a)では、S15で生成、保存される対応データの一例を示しており、例えば、通信ポート14a(COM1)の最初の呼び出しの際にS13にてハンドルZ(正規ハンドル)が生成、保存され、この通信ポート14a(COM1)の最初の呼び出しを行ったアプリケーションプログラムに対してS14にて仮想ハンドルZ−1が生成された場合、図13(a)のように、仮想ハンドルZ−1と正規のハンドルZとを対応付けたデータを生成、保存する。このようにすることで、最初の呼び出しを行ったアプリケーションプログラムに対して仮想ハンドルZ−1を割り当てることができ、且つ、この仮想ハンドルZ−1に対応する正規ハンドル(ハンドルZ)を特定できるようになる。
【0082】
二回目以降の呼び出しでも同様であり、上記先のアプリケーションプログラムによる通信ポート14aのオープン中に、この通信ポート14a(COM1)に対して他のアプリケーションプログラムが呼び出し(二回目の呼び出し)を行った場合、S15の処理では、S11でNoに進んでS14で生成される仮想ハンドルZ−2(図13(a))と、当該通信ポート14aについて先のS13の処理で既に生成されている正規のハンドルZとを対応付けたデータを生成、保存する。このようにすることで、二回目の呼び出しを行ったアプリケーションプログラムに仮想ハンドルZ−2を割り当てることができ、この仮想ハンドルZ−2に対応する正規ハンドル(ハンドルZ)を特定できるようになる。
【0083】
なお、本実施形態では、S15の処理を実行するCPU3及びメモリ(RAM5等)が「対応データ保存手段」の一例に相当し、上記「ハンドル保存手段」によって保存されるハンドルと、「仮想ハンドル設定手段」によって各アプリケーションプログラムに設定される各仮想ハンドルとの対応データを保存するように機能する。
【0084】
S15の処理の後には、呼び出し回数を更新する処理を行う(S16)。この処理では、当該APIフック処理で着目している通信ポート(即ち、S1で指定された通信ポート)についてのそれまでの「呼び出し回数」に「1」を加え、その値を当該通信ポートの新たな「呼び出し回数」として記憶する。例えば、通信ポート14a(COM1)のオープンを要求するAPI関数に基づいて図10のAPIフック処理を行っており、当該APIフック処理の開始時点で通信ポート14aの「呼び出し回数」が「0」の場合には、S16の処理では、新たな「呼び出し回数」としてカウントアップされた「1」が記憶される。
【0085】
S16の後には、S1でオープン要求を行ったアプリケーションプログラムに対してS14で得られた仮想ハンドルを返す処理を行う(S17)。このような処理を行うことで、S1で通信ポートのオープン要求を行ったアプリケーションプログラムが、S1で指定された当該通信ポート用の仮想ハンドルを取得することができ、このアプリケーションプログラムが当該通信ポートで通信する際の固有の仮想ハンドルとしてメモリに記憶しておくことができる。
【0086】
なお、図13(b)では、上記のようなオープン要求に対するAPIフック処理が、アプリケーションA,Bそれぞれに対して実行された場合を例示している。図13(b)の例では、アプリケーションAが先に図9の処理を行ってS1にて通信ポート14a(COM1)をオープンするAPI要求を行い、図10のAPIフック処理によってこのアプリケーションAに対し仮想ハンドルZ−1が割り当てられている。そして、そのアプリケーションAによるオープン中に、アプリケーションBが図9の処理を行ってS1にて通信ポート14a(COM1)をオープンするAPI要求を行い、図10のAPIフック処理によってこのアプリケーションBに対して仮想ハンドルZ−1が割り当てられている。このように、通信ポート14aを同時期にオープンしているアプリケーションA,Bのいずれもが、自身に割り当てられている仮想ハンドルを把握できるようになっており、更に、APIフックプログラム側では、図13(a)の対応データに基づいて各仮想ハンドルに対応する正規ハンドルを特定できるようになっている。
【0087】
次に、図9のS2の通信処理について説明する。
上述したように、S1での通信ポートのオープン要求に応じ、図10のAPIフックプログラムによって当該通信ポートに対応する仮想ハンドルが割り当てられた後には、図9の処理を実行するアプリケーションプログラムによって当該通信ポートを使用した通信処理が行われる(S2)。この通信処理では、図9の処理を実行するアプリケーションプログラムによって通信関連のAPI関数を呼び出す処理が行われる。例えば、Windows(登録商標)で用いられるAPI関数では、通信ポートからデータを送信するAPI関数として、「WriteFile」関数を用いており、S1でオープンした通信ポートからデータ送信を行うときには、S2ではこの「WriteFile」関数が呼び出される。また、この「WriteFile」関数の呼び出しの際には、S1でオープン要求された通信ポートと対応付けられた仮想ハンドル(S1のオープン要求に対してS17で返された仮想ハンドル)が指定される。例えば、図13(b)のようなアプリケーションAが上述の通信ポート14a(COM1)を使用してデータ送信を行う場合、通信ポート14a用に設定されたアプリケーションA固有の仮想ハンドルZ−1と、アプリケーションAが送信しようとするデータ(送信データ)などを対応付けて「WriteFile」関数を呼び出す。
【0088】
本実施形態では、S2にて通信ポートでの送信に関連する所定のAPI関数(上記例では、「WriteFile」関数)が呼び出されたときに、図11(a)のようなAPIフック処理が行われるようになっている。この処理では、呼び出された送信関連API関数(例えば、「WriteFile」関数)の具体的内容を確認し(S21)、仮想ハンドルを利用した送信が指示されているか否かを判断する(S22)。具体的には、S2で呼び出された送信関連API関数(例えば「WriteFile」関数)と対応付けられて仮想ハンドルが指定されているか否かをS21にて確認し、仮想ハンドルが指定されていない場合には、S22にてNoに進み、API関数で指示された他の処理(例えば、ファイルへの書き込みなど)を行う(S23)。
【0089】
一方、S2で呼び出された送信関連API関数に対応して仮想ハンドルが指定されている場合には、S22にてYesに進み、その指定された仮想ハンドルに対応する正規ハンドルを用いて送信処理を行う。この送信処理では、まず、当該送信処理に先立ってS15(図10)で保存されている対応データ(例えば図13(a))を参照し、S2で指定された仮想ハンドルに対応する正規ハンドルを読み出している。そして、読み出された正規ハンドルをS2で指定された仮想ハンドルに代えて用い、S2(図9)で呼び出された送信関連API関数を実行する。これにより、S2の処理を実行するアプリケーションプログラムが、正規ハンドルを用いて送信関連API関数(例えば「WriteFile」関数)を実行できるようになり、S1で指定された通信ポートから外部装置(携帯端末300等)にデータ送信を行うことができる。
【0090】
この構成では、例えば、携帯端末300(外部装置)が、二次元コード等の情報コードを読み取り可能な携帯型のコードリーダとして構成される場合、或いは、携帯端末300が、RFIDタグなどを読み取り可能な無線タグリーダとして構成される場合などにおいて、当該携帯端末300の複数のプログラムとコンピュータ2とが同一の通信ポートを使用して同時期に通信を行うことができるようになる。
【0091】
例えば、図8のように、コンピュータ2のアプリケーションA(一のアプリケーションプログラム)が通信ポート14a(COM1)を用いて携帯端末300のアプリケーションプログラム(一のプログラム)と通信を行う際に、図13(a)のような対応データに従い、図13(b)のようにアプリケーションAに設定された仮想ハンドルZ−1に対応するハンドルZ(正規ハンドル)を使用してAPI通信を行うことができる。また、このようにアプリケーションA(一のアプリケーションプログラム)による通信ポート14a(COM1)を用いた通信処理の継続中(アプリケーションAによる通信ポート14aのオープン中)に、アプリケーションB(他のアプリケーションプログラム)が当該通信ポート14a(COM1)を用いて携帯端末300のサービスプログラム(他のプログラム)と通信を行う場合、アプリケーションBに設定された仮想ハンドルZ−2と対応データ(図13(a))とに基づき、当該通信ポート14aに対応するハンドルZ(正規ハンドル)を使用して通信を行うことができる。
【0092】
なお、このような構成において、アプリケーションAから携帯端末300の所定のアプリケーションプログラムに対し、図9、図11(a)のような送信処理を行う場合、図9のS2で呼び出される送信関連API関数(例えば、「WriteFile」関数)と対応付けられた送信データ内に、例えば、携帯端末300の所定のアプリケーションプログラムを特定する宛先データを含ませておけばよい。同様に、アプリケーションBから携帯端末300の所定のサービスプログラムに対し、図9、図11(a)のような送信処理を行う場合、図9のS2で呼び出される送信関連API関数(例えば、「WriteFile」関数)と対応付けられた送信データ内に、例えば、携帯端末300の所定のサービスプログラムを特定する宛先データを含ませておけばよい。そして、携帯端末300のドライバが、このような送信データから宛先データを読み取り、送信データを宛先データに応じたプログラムに振り分けるようにすればよい。
【0093】
上記説明では、S2においてデータ送信が行われる例を示したが、S1でオープンされた通信ポートを利用したデータ受信も同様に行われる。以下、S2でデータ受信処理を行う場合について説明する。
【0094】
S2にてデータ受信処理を行う場合でも、アプリケーションプログラムによって通信関連のAPI関数を呼び出す処理が行われる。例えば、Windows(登録商標)で用いられるAPI関数では、通信ポートからデータを受信するAPI関数として、「ReadFile」関数を用いており、S1でオープンした通信ポートからデータ受信を行うときには、この、「ReadFile」関数が呼び出される。また、この、「ReadFile」関数を呼び出す際には、S1でオープンされた通信ポートと対応付けられた仮想ハンドル(S1のオープン要求に応じてS17で返された仮想ハンドル)が指定される。例えば、図13(b)のようなアプリケーションAが上述の通信ポート14a(COM1)を使用してデータ受信を行う場合、通信ポート14a用に設定されたアプリケーションA固有の仮想ハンドルZ−1と対応付けて「ReadFile」関数を呼び出す。
【0095】
本実施形態では、上記のように、通信ポートでの受信に関連する所定のAPI関数(例えば、ReadFile)関数)が呼び出されたときに、図11(b)のようなAPIフック処理が行われるようになっている。この処理では、呼び出された受信関連API関数(例えば、「ReadFile」関数)の具体的内容を確認し(S31)、仮想ハンドルを利用した受信が指示されているか否かを判断する(S32)。具体的には、S2で呼び出された受信関連API関数(例えば「ReadFile」関数)と対応付けられて仮想ハンドルが指定されているか否かをS31にて確認し、仮想ハンドルが指定されていない場合には、S32にてNoに進み、API関数で指示された他の処理(例えば、ファイルの読み取りなど)を行う。
【0096】
一方、仮想ハンドルが指定されている場合には、S32にてYesに進み、仮想ハンドルに対応する正規ハンドルを用いて受信処理を行う(S34)。この処理では、まず、当該受信処理に先立ってS15(図10)で保存されている対応データ(図13(a))に基づき、S2(図9)で呼び出された受信関連API関数で指定される仮想ハンドルに対応する正規ハンドルを読み出している。そして、その読み出された正規ハンドルをS2で指定されていた仮想ハンドルに代えて用い、S2(図9)で呼び出された受信関連API関数を実行する。これにより、S2の処理を実行するアプリケーションプログラムが、正規ハンドルを用いて受信関連API関数(例えば「ReadFile」関数)を実行できるようになり、S1で指定された通信ポートを介して外部装置(携帯端末300等)からデータ受信を行うことができる。
【0097】
なお、この場合、外部装置(例えば携帯端末300等)の各プログラムがコンピュータ2の各アプリケーションに送信する送信データ内に、当該送信データの送信先となるアプリケーションプログラムを示す宛先データを含ませるようにすればよい。そして、コンピュータ2側では、上記受信処理(S2:図9)によって受信を行おうとするアプリケーションプログラムが、当該アプリケーションプログラムを指定する宛先データを含んだデータのみを有効なものとして読み込むようにすれば、同一の通信ポートから受信する各アプリケーソンプログラム宛の各受信データを、各アプリケーションプログラムに適切に振り分けることができるようになる。
【0098】
なお、本実施形態では、S22或いはS32の処理を実行するCPU3(図3)が「仮想ハンドル利用確認手段」の一例に相当し、アプリケーションプログラムが特定の通信関連コマンドを実行したときに、仮想ハンドルを用いた通信を行うか否かを確認するように機能する。
また、S24、S34の処理を実行するCPU3は、「通信制御手段」の一例に相当し、各アプリケーションプログラムが通信ポートを用いて通信を行う際に、「対応データ保存手段」に保存された対応データに従い、各アプリケーションプログラムに設定された仮想ハンドルと対応付けられたハンドル(正規ハンドル)を使用するように機能すると共に、上記「仮想ハンドル利用確認手段」によって仮想ハンドルを用いた通信であることが確認された場合に、アプリケーションプログラムに設定された仮想ハンドルと対応付けられたハンドル(正規ハンドル)を使用するように機能している。
【0099】
次に、図9のS3の通信ポートクローズ処理について説明する。
図9の処理を実行するアプリケーションプログラムは、S2の通信処理が終了した後に、S1でオープンした通信ポートをクローズする処理を行っている(S3)。このS3では、アプリケーションプログラムが通信ポートをクローズするためのAPI関数を呼び出す処理が行われる。例えば、Windows(登録商標)で用いられるAPI関数では、「CloseHandle」関数が使用されており、S3では、この、「CloseHandle」関数が、クローズしようとする通信ポート(S1でオープンされた通信ポート)の仮想ハンドル(S1のオープン要求に応じてS17で返された仮想ハンドル)と対応付けて呼び出される。
【0100】
本実施形態では、アプリケーションプログラムから通信ポートをオープンするAPI関数(例えば、「CloseHandle」関数)が呼び出されたとき、図12のように、API関数をフックする処理を行っている。図12の処理は、アプリケーションプログラムによって通信ポートをクローズするAPI関数(例えば、「CloseHandle」関数)が呼び出されたときに開始される処理であり、まず、S3でのクローズ要求で指定された仮想ハンドルと正規ハンドルとの対応データを破棄している(S41)。この処理では、図13(a)のような対応データの中から、S3で指定された仮想ハンドルについてのデータを削除しており、例えば、図13(b)に示すアプリケーションAがS3(図9)において仮想ハンドルZ−1を指定してクローズ要求(クローズ関連API関数の呼び出し)をしているような場合には、図13(a)の対応データの中からこの仮想ハンドルZ−1と正規ハンドルZとを対応付けたデータを削除する。
【0101】
S41の処理の後には、着目している通信ポート(即ち、S3でクローズ要求がなさている通信ポート)の「呼び出し回数」をデクリメントする。例えば、アプリケーションAによる通信ポート14aのクローズ要求に応じて図12の処理がなされており、当該図12のAPIフック処理開始時点で通信ポート14aの「呼び出し回数」が「3」である場合、S42ではこの値をデクリメントして「呼び出し回数」を「2」に変更する。
【0102】
そして、S41で対応値を削除した仮想ポートが着目している通信ポート(即ち、S3でクローズ要求がなさている通信ポート)の最後の仮想ハンドルであるか否かを判断する(S43)。具体的には、S42の処理後において当該通信ポートの「呼び出し回数」が「0」となっているか否かを判断し、「0」でない場合、着目している当該通信ポートの呼び出しを行っているアプリケーションプログラムがまだ存在することを意味し、S41で対応値を削除した仮想ポートが当該通信ポートの最後の仮想ハンドルではないため、S43にてNoに進み、当該処理を終了する。
【0103】
一方、S42の処理後において当該通信ポートの「呼び出し回数」が「0」である場合、着目している当該通信ポートの呼び出しを行っているアプリケーションプログラムが存在せず、S41で対応値を削除した仮想ポートが当該通信ポートの最後の仮想ハンドルであるため、S43にてYesに進む。S43にてYesに進む場合には、当該通信ポートの正規ハンドルを指定してクローズ関連API(例えば、「CloseHandle」関数)を実行し、当該通信ポートの正規ハンドルを削除する(S44)。
【0104】
本実施形態では、S41の処理を実行するCPU3が「対応値破棄手段」の一例に相当し、アプリケーションプログラムによる通信ポートを使用した通信処理が終了した場合に、上記「対応データ保存手段」によって保存された対応データにおいて、その通信処理が終了したアプリケーションプログラムについての仮想ハンドルとハンドル(正規ハンドル)との対応値を破棄するように機能する。
【0105】
(第2実施形態の主な効果)
第2実施形態に係る通信システム200では、「呼び出し回数増減手段」によってアプリケーションプログラムによる通信ポートの呼び出し回数を管理しており、アプリケーションプログラムが通信ポートを呼び出したときに、「呼び出し回数増減手段」によって管理される呼び出し回数が所定値以下か否かを判断している。そして、その通信ポートの呼び出し回数が所定値以下と判断された場合に、アプリケーションプログラムによって呼び出された当該通信ポートにて通信を行うためのハンドル(正規ハンドル)を保存している。
このようにすると、通信ポートに対するアプリケーションプログラムの呼び出しがどの程度重複しているかを確認できる。また、呼び出し回数が少ないときに、当該通信ポートで通信を行うためにハンドル(正規ハンドル)を予め保存しておくことができる。
更に、各アプリケーションプログラムが通信ポートを呼び出したときに、各アプリケーションプログラムに対し、上記「ハンドル保存手段」によって保存されたハンドルに対応した仮想ハンドルを設定し、この設定された仮想ハンドルと、既に保存されているハンドル(正規ハンドル)との対応データを保存している。そして、各アプリケーションプログラムが通信ポートを用いて通信を行う際に、保存された対応データに従い、各アプリケーションプログラムに設定された仮想ハンドルと対応付けられたハンドル(正規ハンドル)を使用している。
このようにすると、複数のアプリケーションプログラムが同じ通信ポートを呼び出した場合に、各アプリケーションプログラムに仮想ハンドルを割り当てることができ、各アプリケーションプログラムは対応データを拠り所として仮想ハンドルと対応する実際のハンドルを使用し、当該通信ポートでの通信を行うことができるようになる。従って、最初に通信ポートを呼び出したアプリケーションプログラムだけに当該通信ポートを占有させて他のアプリケーションプログラムによる当該通信ポートへのアクセスを排除するといった対応を行う必要がなく、複数のアプリケーションプログラムが同一の通信ポートを同時期に使用することができるようになる。
【0106】
また、第2実施形態の通信システム200では、アプリケーションプログラムが特定の通信関連コマンドを実行したときに、仮想ハンドルを用いた通信を行うか否かを確認する「仮想ハンドル利用確認手段」を備え、この「仮想ハンドル利用確認手段」によって仮想ハンドルを用いた通信であることが確認された場合に、アプリケーションプログラムに設定された仮想ハンドルと対応付けられたハンドル(正規ハンドル)を使用している。
このようにすると、特定の通信関連コマンドが実行されたことをトリガとして仮想ハンドルを用いた通信を行うことができるようになる。その際、仮想ハンドルを用いた通信を行うか否かの確認を行った上で、通信処理に移行しているため、特定の通信関連コマンドで他の処理を実行する場合(即ち、仮想ハンドルを用いた通信を行わない例外ケース)にも対応しやすくなる。
【0107】
また、第2実施形態の通信システム200では、アプリケーションプログラムによる通信ポートを使用した通信処理が終了した場合に、上記「対応データ保存手段」によって保存された対応データにおいて、その通信処理が終了したアプリケーションプログラムについての仮想ハンドルとハンドル(正規ハンドル)との対応値を破棄する「対応値破棄手段」を備えている。このようにすると、通信処理が終了して不要になった仮想ハンドルを削除することができ、対応データを常に適切な状態に維持できるようになる。
【0108】
更に、第2実施形態の通信システム200では、外部装置が、コンピュータ2との間でデータの送信又は受信を行う複数のプログラムを備えた携帯端末300として構成されている。そして、コンピュータ2の複数のアプリケーションプログラムのうち、アプリケーションA(一のアプリケーションプログラム)が通信ポートを用いて携帯端末300のアプリケーションプログラム(一のプログラム)と通信を行う際に、上記「対応データ保存手段」に保存された対応データに従い、アプリケーションA(一のアプリケーションプログラム)に設定された仮想ハンドルZ−1に対応するハンドルZを使用している。また、アプリケーションA(一のアプリケーションプログラム)による通信ポートを用いた通信処理の継続中(アプリケーションAによる当該通信ポートのオープン中)に、アプリケーションB(他のアプリケーションプログラム)が当該通信ポートを用いて携帯端末300のサービスプログラム(他のプログラム)と通信を行う場合、アプリケーションB(他のアプリケーションプログラム)に設定された仮想ハンドルZ−2と対応データとに基づき、当該通信ポートに対応するハンドルZを使用している。
このようにすると、コンピュータ2に記憶されたいずれかのアプリケーションプログラムが通信ポートを介して携帯端末300のいずれかのプログラムと通信処理を行っている際に、コンピュータ2の他のアプリケーションプログラムが同じ通信ポートを用いて携帯端末300の他のプログラムと通信処理を行うことができるようになる。従って、通信ポートが制約されやすい携帯端末300との通信であっても、複数のアプリケーションプログラムが同一の通信ポートを使用して同時期に通信を行うことができるようになり、ひいては、コンピュータ2と携帯端末300との間で多様な処理が実現可能となる。
【0109】
[他の実施形態]
本発明は上記記述及び図面によって説明した実施形態に限定されるものではなく、例えば次のような実施形態も本発明の技術的範囲に含まれる。
【0110】
第1実施形態では、アプリケーションプログラムAに割り当てられた通信ポート14a(第1の通信ポート)に何らかの通信機器が接続されている場合に「外部通信確認手段」を選択する構成としているが、通信ポート14aに特定種類の通信機器が接続されているか否かを検出し、特定種類の通信機器が検出された場合にのみ「外部通信確認手段」を選択する構成としてもよい。例えば、通信ポート14aにパーソナルコンピュータが接続されている場合のみ、或いは通信ポート14aに特定種類の携帯情報端末が接続されている場合のみ、S3(図4)にてYesに進みS5の処理を行うようにしてもよい。このようにすると、通信動作確認の対象となる特定種類の通信機器が接続されたとき以外で外部通信確認手段が選択されることがなく、より一層適切な選択が可能となる。
【0111】
第1実施形態の構成において、「仮想通信確認手段」に対して命令を与える上位プログラムからの設定変更命令に基づき、アプリケーションプログラムBに割り当てる第2の通信ポートを設定変更する「設定変更手段」を付加してもよい。例えば、S1(図4)でアプリケーションプログラムBに割り当てられた通信ポート14bを、上位プログラム(仮想ドライバの上位にあるいずれかのプログラム)からの設定変更命令に基づいて設定変更できるようにしてもよい。
このようにすると、アプリケーションプログラムBに割り当てる通信ポートを必要に応じて変更できる。なお、「設定変更命令」としては、ユーザによる指示に基づいてS1のような設定値取得処理を再度行わせる命令などが挙げられる。
また、このような構成において、「仮想送受信手段」による仮想的な送受信中(例えば、図6、図7の処理が行われている時)に上位プログラムから上記設定変更命令がなされた場合、当該仮想的な送受信が完了するまで、「設定変更手段」による第2の通信ポートの設定変更を中止するように構成できる。このようにすると、第2の通信ポートを必要に応じて設定変更できるようにしつつ、その設定変更によって仮想的な動作確認が強制的に中断されることを効果的に防止できる。
【0112】
第1実施形態では、通信動作確認を行おうとするアプリケーションプログラムに割り当てられた通信ポートにハードウェアが接続されている場合に強制的にハードウェアのドライバをロードしていたが、このような場合、ユーザに対し、いずれを採用するか(即ち、ハードウェアを用いずに仮想的な通信動作確認を行うか、それともハードウェアを用いた外部通信動作確認を行うか)を確認し、ユーザの指示に応じた通信動作確認方法を用いるようにしてもよい。
【0113】
第1実施形態では、アプリケーションプログラムAからアプリケーションプログラムBに対しデータを送信して仮想的な動作確認を行う例を説明したが、データだけでなく制御信号を送信してもよい。例えば、アプリケーションプログラムAからの各制御信号をアプリケーションプログラムBの受信バッファにそれぞれ記憶するように構成し、その制御信号の変更状態をアプリケーションプログラムB側で検出できるようにしてもよい。
【符号の説明】
【0114】
1…通信システム
2…コンピュータ
3…CPU(通信動作確認手段,仮想通信確認手段,外部通信確認手段,選択手段,通信ポート割当手段,仮想送受信手段,検出手段、設定変更手段、呼び出し回数増減手段、判断手段、ハンドル保存手段、仮想ハンドル設定手段、通信制御手段、仮想ハンドル利用確認手段、対応値破棄手段)
5…RAM(メモリ、ハンドル保存手段、対応データ保存手段)
14a,14b,14c…通信ポート
300…携帯端末(外部装置、通信機器)
【特許請求の範囲】
【請求項1】
通信機器を接続可能な複数の通信ポートと、メモリとを備えたコンピュータを有し、
前記通信ポートを介して外部装置と通信を行う通信システムであって、
前記コンピュータは、
複数のアプリケーションプログラムと、
前記アプリケーションプログラムにて生成されるデータについての通信動作を確認する通信動作確認手段と、
を備え、
前記通信動作確認手段は、
前記複数のアプリケーションプログラムにおける、一のアプリケーションプログラムと他のアプリケーションプログラムとの通信を仮想的に試行することで前記データの通信動作を確認する仮想通信確認手段と、
前記通信ポートに前記通信機器が接続されている場合に、前記アプリケーションプログラムにて生成された前記データを、前記通信ポートを介して前記コンピュータの外部に送信することで、前記データの通信動作を確認する外部通信確認手段と、
前記データの通信動作を確認する手段として、前記仮想通信確認手段及び前記外部通信確認手段のいずれかを選択する選択手段と、
を有し、
前記仮想通信確認手段は、
前記一のアプリケーションプログラムに対し、複数の前記通信ポートにおける第1の通信ポートを割り当てると共に、前記他のアプリケーションプログラムに対して第2の通信ポートを割り当て、それら第1の通信ポート及び第2の通信ポートを特定するポート情報を前記メモリに記憶する通信ポート割当手段と、
前記ポート情報に基づいて前記第1の通信ポートと対応する前記第2の通信ポートを特定すると共に、前記一のアプリケーションプログラムから前記第1の通信ポートに送られるべき前記データを、前記第2の通信ポートが受信した前記データとして前記メモリに記憶し、且つ前記他のアプリケージョンプログラムに与える仮想送受信手段と、
を備え、
前記選択手段により当該仮想通信確認手段が選択された場合、前記仮想送受信手段により、前記一のアプリケーションプログラムから前記他のアプリケーションプログラムに対して前記データの仮想的な送受信を行い、その送受信結果に基づいて前記データの通信動作を確認することを特徴とする通信システム。
【請求項2】
前記通信機器が前記通信ポートに接続されているか否かを検出する検出手段を備え、
前記選択手段は、前記検出手段により前記通信機器が検出されたことを条件として前記外部通信確認手段を選択することを特徴とする請求項1に記載の通信システム。
【請求項3】
前記検出手段は、前記通信ポートに特定種類の前記通信機器が接続されているか否かを検出し、
前記選択手段は、前記検出手段により前記特定種類の前記通信機器が検出された場合にのみ前記外部通信確認手段を選択することを特徴とする請求項2に記載の通信システム。
【請求項4】
前記検出手段は、前記通信ポート割当手段によって割り当てられた前記第1の通信ポートに前記通信機器が接続されているか否かを検出し、
前記選択手段は、前記第1の通信ポートに前記通信機器が接続されている場合に前記外部通信確認手段を選択することを特徴とする請求項2又は請求項3に記載の通信システム。
【請求項5】
前記通信ポート割当手段は、
前記仮想通信確認手段に対して命令を与える上位プログラムからの設定変更命令に基づき、前記他のアプリケーションプログラムに割り当てる前記第2の通信ポートを設定変更する設定変更手段を備え、
前記仮想送受信手段による前記仮想的な送受信中に前記設定変更命令がなされた場合、当該仮想的な送受信が完了するまで、前記設定変更手段による前記第2の通信ポートの設定変更を中止することを特徴とする請求項1から請求項4のいずれか一項に記載の通信システム。
【請求項6】
前記通信ポート割当手段は、前記一のアプリケーションプログラムに割り当てる前記第1の通信ポートと、前記他のアプリケーションプログラムに割り当てる前記第2の通信ポートとを互いに異なる前記通信ポートとすることを特徴とする請求項1から請求項5のいずれか一項に記載の通信システム。
【請求項7】
通信機器を接続可能な通信ポートと、メモリとを備えたコンピュータを有し、
前記通信ポートを介して外部装置と通信を行う通信システムであって、
前記コンピュータは、
複数のアプリケーションプログラムと、
各アプリケーションプログラムによる前記通信ポートの呼び出し回数をカウントすると共に、前記各アプリケーションプログラムによる当該通信ポートを用いた通信処理の終了毎に前記呼び出し回数を減じる呼び出し回数増減手段と、
前記アプリケーションプログラムが前記通信ポートを呼び出したときに、前記呼び出し回数増減手段による前記呼び出し回数が所定値以下か否かを判断する判断手段と、
前記判断手段によって前記通信ポートの前記呼び出し回数が前記所定値以下と判断された場合に、前記アプリケーションプログラムによって呼び出された当該通信ポートにて通信を行うためのハンドルを保存するハンドル保存手段と、
前記各アプリケーションプログラムが前記通信ポートを呼び出したときに、前記各アプリケーションプログラムに対し、前記ハンドル保存手段によって保存された前記ハンドルに対応した仮想ハンドルを設定する仮想ハンドル設定手段と、
前記ハンドル保存手段によって保存される前記ハンドルと、前記仮想ハンドル設定手段によって前記各アプリケーションプログラムに設定される各仮想ハンドルとの対応データを保存する対応データ保存手段と、
前記各アプリケーションプログラムが前記通信ポートを用いて通信を行う際に、前記対応データ保存手段に保存された前記対応データに従い、前記各アプリケーションプログラムに設定された前記仮想ハンドルと対応付けられた前記ハンドルを使用する通信制御手段と、
を備えたことを特徴とする通信システム。
【請求項8】
前記通信制御手段は、
前記アプリケーションプログラムが特定の通信関連コマンドを実行したときに、前記仮想ハンドルを用いた通信を行うか否かを確認する仮想ハンドル利用確認手段を備え、
前記仮想ハンドル利用確認手段によって前記仮想ハンドルを用いた通信であることが確認された場合に、前記アプリケーションプログラムに設定された前記仮想ハンドルと対応付けられた前記ハンドルを使用することを特徴とする請求項7に記載の通信システム。
【請求項9】
前記アプリケーションプログラムによる前記通信ポートを使用した通信処理が終了した場合に、前記対応データ保存手段によって保存された前記対応データにおいて、その通信処理が終了した前記アプリケーションプログラムについての前記仮想ハンドルと前記ハンドルとの対応値を破棄する対応値破棄手段を備えたことを特徴とする請求項7又は請求項8に記載の通信システム。
【請求項10】
前記外部装置は、前記コンピュータとの間でデータの送信又は受信を行う複数のプログラムを備えた携帯端末であり、
前記通信制御手段は、
前記コンピュータの複数の前記アプリケーションプログラムのうち、いずれか一のアプリケーションプログラムが前記通信ポートを用いて前記携帯端末の一のプログラムと通信を行う際に、前記対応データ保存手段に保存された前記対応データに従い、前記一のアプリケーションプログラムに設定された前記仮想ハンドルに対応する前記ハンドルを使用し、
前記一のアプリケーションプログラムによる前記通信ポートを用いた通信処理の継続中に、複数の前記アプリケーションプログラムのうちの他のアプリケーションプログラムが当該通信ポートを用いて前記携帯端末の他のプログラムと通信を行う場合、前記他のアプリケーションプログラムに設定された前記仮想ハンドルと前記対応データとに基づき、当該通信ポートに対応する前記ハンドルを使用することを特徴とする請求項7から請求項9のいずれか一項に記載の通信システム。
【請求項1】
通信機器を接続可能な複数の通信ポートと、メモリとを備えたコンピュータを有し、
前記通信ポートを介して外部装置と通信を行う通信システムであって、
前記コンピュータは、
複数のアプリケーションプログラムと、
前記アプリケーションプログラムにて生成されるデータについての通信動作を確認する通信動作確認手段と、
を備え、
前記通信動作確認手段は、
前記複数のアプリケーションプログラムにおける、一のアプリケーションプログラムと他のアプリケーションプログラムとの通信を仮想的に試行することで前記データの通信動作を確認する仮想通信確認手段と、
前記通信ポートに前記通信機器が接続されている場合に、前記アプリケーションプログラムにて生成された前記データを、前記通信ポートを介して前記コンピュータの外部に送信することで、前記データの通信動作を確認する外部通信確認手段と、
前記データの通信動作を確認する手段として、前記仮想通信確認手段及び前記外部通信確認手段のいずれかを選択する選択手段と、
を有し、
前記仮想通信確認手段は、
前記一のアプリケーションプログラムに対し、複数の前記通信ポートにおける第1の通信ポートを割り当てると共に、前記他のアプリケーションプログラムに対して第2の通信ポートを割り当て、それら第1の通信ポート及び第2の通信ポートを特定するポート情報を前記メモリに記憶する通信ポート割当手段と、
前記ポート情報に基づいて前記第1の通信ポートと対応する前記第2の通信ポートを特定すると共に、前記一のアプリケーションプログラムから前記第1の通信ポートに送られるべき前記データを、前記第2の通信ポートが受信した前記データとして前記メモリに記憶し、且つ前記他のアプリケージョンプログラムに与える仮想送受信手段と、
を備え、
前記選択手段により当該仮想通信確認手段が選択された場合、前記仮想送受信手段により、前記一のアプリケーションプログラムから前記他のアプリケーションプログラムに対して前記データの仮想的な送受信を行い、その送受信結果に基づいて前記データの通信動作を確認することを特徴とする通信システム。
【請求項2】
前記通信機器が前記通信ポートに接続されているか否かを検出する検出手段を備え、
前記選択手段は、前記検出手段により前記通信機器が検出されたことを条件として前記外部通信確認手段を選択することを特徴とする請求項1に記載の通信システム。
【請求項3】
前記検出手段は、前記通信ポートに特定種類の前記通信機器が接続されているか否かを検出し、
前記選択手段は、前記検出手段により前記特定種類の前記通信機器が検出された場合にのみ前記外部通信確認手段を選択することを特徴とする請求項2に記載の通信システム。
【請求項4】
前記検出手段は、前記通信ポート割当手段によって割り当てられた前記第1の通信ポートに前記通信機器が接続されているか否かを検出し、
前記選択手段は、前記第1の通信ポートに前記通信機器が接続されている場合に前記外部通信確認手段を選択することを特徴とする請求項2又は請求項3に記載の通信システム。
【請求項5】
前記通信ポート割当手段は、
前記仮想通信確認手段に対して命令を与える上位プログラムからの設定変更命令に基づき、前記他のアプリケーションプログラムに割り当てる前記第2の通信ポートを設定変更する設定変更手段を備え、
前記仮想送受信手段による前記仮想的な送受信中に前記設定変更命令がなされた場合、当該仮想的な送受信が完了するまで、前記設定変更手段による前記第2の通信ポートの設定変更を中止することを特徴とする請求項1から請求項4のいずれか一項に記載の通信システム。
【請求項6】
前記通信ポート割当手段は、前記一のアプリケーションプログラムに割り当てる前記第1の通信ポートと、前記他のアプリケーションプログラムに割り当てる前記第2の通信ポートとを互いに異なる前記通信ポートとすることを特徴とする請求項1から請求項5のいずれか一項に記載の通信システム。
【請求項7】
通信機器を接続可能な通信ポートと、メモリとを備えたコンピュータを有し、
前記通信ポートを介して外部装置と通信を行う通信システムであって、
前記コンピュータは、
複数のアプリケーションプログラムと、
各アプリケーションプログラムによる前記通信ポートの呼び出し回数をカウントすると共に、前記各アプリケーションプログラムによる当該通信ポートを用いた通信処理の終了毎に前記呼び出し回数を減じる呼び出し回数増減手段と、
前記アプリケーションプログラムが前記通信ポートを呼び出したときに、前記呼び出し回数増減手段による前記呼び出し回数が所定値以下か否かを判断する判断手段と、
前記判断手段によって前記通信ポートの前記呼び出し回数が前記所定値以下と判断された場合に、前記アプリケーションプログラムによって呼び出された当該通信ポートにて通信を行うためのハンドルを保存するハンドル保存手段と、
前記各アプリケーションプログラムが前記通信ポートを呼び出したときに、前記各アプリケーションプログラムに対し、前記ハンドル保存手段によって保存された前記ハンドルに対応した仮想ハンドルを設定する仮想ハンドル設定手段と、
前記ハンドル保存手段によって保存される前記ハンドルと、前記仮想ハンドル設定手段によって前記各アプリケーションプログラムに設定される各仮想ハンドルとの対応データを保存する対応データ保存手段と、
前記各アプリケーションプログラムが前記通信ポートを用いて通信を行う際に、前記対応データ保存手段に保存された前記対応データに従い、前記各アプリケーションプログラムに設定された前記仮想ハンドルと対応付けられた前記ハンドルを使用する通信制御手段と、
を備えたことを特徴とする通信システム。
【請求項8】
前記通信制御手段は、
前記アプリケーションプログラムが特定の通信関連コマンドを実行したときに、前記仮想ハンドルを用いた通信を行うか否かを確認する仮想ハンドル利用確認手段を備え、
前記仮想ハンドル利用確認手段によって前記仮想ハンドルを用いた通信であることが確認された場合に、前記アプリケーションプログラムに設定された前記仮想ハンドルと対応付けられた前記ハンドルを使用することを特徴とする請求項7に記載の通信システム。
【請求項9】
前記アプリケーションプログラムによる前記通信ポートを使用した通信処理が終了した場合に、前記対応データ保存手段によって保存された前記対応データにおいて、その通信処理が終了した前記アプリケーションプログラムについての前記仮想ハンドルと前記ハンドルとの対応値を破棄する対応値破棄手段を備えたことを特徴とする請求項7又は請求項8に記載の通信システム。
【請求項10】
前記外部装置は、前記コンピュータとの間でデータの送信又は受信を行う複数のプログラムを備えた携帯端末であり、
前記通信制御手段は、
前記コンピュータの複数の前記アプリケーションプログラムのうち、いずれか一のアプリケーションプログラムが前記通信ポートを用いて前記携帯端末の一のプログラムと通信を行う際に、前記対応データ保存手段に保存された前記対応データに従い、前記一のアプリケーションプログラムに設定された前記仮想ハンドルに対応する前記ハンドルを使用し、
前記一のアプリケーションプログラムによる前記通信ポートを用いた通信処理の継続中に、複数の前記アプリケーションプログラムのうちの他のアプリケーションプログラムが当該通信ポートを用いて前記携帯端末の他のプログラムと通信を行う場合、前記他のアプリケーションプログラムに設定された前記仮想ハンドルと前記対応データとに基づき、当該通信ポートに対応する前記ハンドルを使用することを特徴とする請求項7から請求項9のいずれか一項に記載の通信システム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【公開番号】特開2010−97603(P2010−97603A)
【公開日】平成22年4月30日(2010.4.30)
【国際特許分類】
【出願番号】特願2009−214032(P2009−214032)
【出願日】平成21年9月16日(2009.9.16)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Linux
【出願人】(501428545)株式会社デンソーウェーブ (1,155)
【Fターム(参考)】
【公開日】平成22年4月30日(2010.4.30)
【国際特許分類】
【出願日】平成21年9月16日(2009.9.16)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Linux
【出願人】(501428545)株式会社デンソーウェーブ (1,155)
【Fターム(参考)】
[ Back to top ]