(57)【要約】【課題】特定のデバイスとの通信を適切に行うことができる通信制御装置および通信制御プログラムを提供すること。【解決手段】デバイスとの通信を制御する通信制御装置であって、特定のデバイスの第１エンドポイントに対する通信により、前記特定のデバイスの識別情報を取得する第１通信部と、第２エンドポイントを用いて通信可能なデバイスの前記第２エンドポイントに対する通信により、前記通信可能なデバイスの識別情報を取得する第２通信部と、前記第１通信部により取得された識別情報と、前記第２通信部により取得された識別情報とに基づいて、前記第２通信部が識別情報を取得したデバイスのうち前記特定のデバイスに該当するデバイスを選択するデバイス選択部と、を備え、前記第２通信部は、前記選択されたデバイスの前記第２エンドポイントに対する通信を実行する。【選択図】図２
2017182257.tif 000002
【特許請求の範囲】
【請求項１】
デバイスとの通信を制御する通信制御装置であって、
特定のデバイスの第１エンドポイントに対する通信により、前記特定のデバイスの識別情報を取得する第１通信部と、
第２エンドポイントを用いて通信可能なデバイスの前記第２エンドポイントに対する通信により、前記通信可能なデバイスの識別情報を取得する第２通信部と、
前記第１通信部により取得された識別情報と、前記第２通信部により取得された識別情報とに基づいて、前記第２通信部が識別情報を取得したデバイスのうち前記特定のデバイスに該当するデバイスを選択するデバイス選択部と、を備え、
前記第２通信部は、前記選択されたデバイスの前記第２エンドポイントに対する通信を実行する、ことを特徴とする通信制御装置。
【請求項２】
前記第１エンドポイントは、プリンタークラスによる通信で用いるエンドポイントであり、
前記第２エンドポイントは、ベンダークラスによる通信で用いるエンドポイントであり、
前記第１通信部および前記第２通信部は、通信先のＵＳＢデバイスが有するステータス情報に含まれている前記識別情報を取得することを特徴とする請求項１に記載の通信制御装置。
【請求項３】
前記第２エンドポイントを用いた通信に対応するＵＳＢデバイスのグループを定義するグループＩＤを予め有し、
前記第２通信部は、認識可能なＵＳＢデバイスのうち前記グループＩＤが定義するグループに属するＵＳＢデバイスから前記識別情報を取得することを特徴とする請求項１または請求項２に記載の通信制御装置。
【請求項４】
前記第１通信部は、プリンターである前記特定のデバイスの前記第１エンドポイントに対する通信により、前記特定のデバイスに印刷を実行させるための印刷データを送信し、
前記第２通信部は、前記選択されたデバイスであるＵＳＢデバイスの前記第２エンドポイントに対する通信により、前記選択されたＵＳＢデバイスの機能設定にかかわるコマンドを送信することを特徴とする請求項１〜請求項３のいずれかに記載の通信制御装置。
【請求項５】
デバイスとの通信を行う装置を制御する通信制御プログラムであって、
特定のデバイスの第１エンドポイントに対する通信により、前記特定のデバイスの識別情報を取得する第１通信機能と、
第２エンドポイントを用いて通信可能なデバイスの前記第２エンドポイントに対する通信により、前記通信可能なデバイスの識別情報を取得する第２通信機能と、
前記第１通信機能により取得された識別情報と、前記第２通信機能により取得された識別情報とに基づいて、前記第２通信機能が識別情報を取得したデバイスのうち前記特定のデバイスに該当するデバイスを選択するデバイス選択機能と、を前記装置に実行させ、
前記第２通信機能は、前記選択されたデバイスの前記第２エンドポイントに対する通信を前記装置に実行させる、ことを特徴とする通信制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信制御装置および通信制御プログラムに関する。
【背景技術】
【０００２】
オペレーティングシステム（以下、ＯＳ）としての、Microsoft（登録商標）社が提供するWindows（登録商標）において動作するプリンタードライバーが知られている。また、ＸＰＳ（XML Paper Specification）仕様で記述されたＸＰＳファイルを処理するＸＰＳプリンタードライバーが開示されている（特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３‐２５７８２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
前記プリンタードライバーを搭載したＰＣ（パーソナルコンピューター）等のホストと、プリンターとが、ＵＳＢ（Universal Serial Bus）ケーブルを介して通信する環境を想定する。この場合、共通の通信経路を用いる通信の安定性や確実性のために、排他的通信や同期的通信が求められる。ここで言う排他的通信とは、例えば、ホストからプリンターへ印刷実行に必要な印刷データを送信している期間は、当該印刷実行に必要でない他のコマンドの送受信は実行せず、逆に、当該コマンドの送受信の期間は前記印刷データの送信を実行しない、等といった制御である。また、同期的通信とは、例えば、ホストがあるコマンドをプリンターへ送信した後、続けて、当該送信したコマンドへのプリンターからの応答をホストが受信する、といった制御である。前記プリンタードライバーでは、標準的に定められた仕様等の制約があるため、このような制御を正しく行うことができないことが生じ得た。
【０００５】
本発明は上述の課題に鑑みてなされたものであり、特定のデバイスとの通信を適切に行うことができる通信制御装置および通信制御プログラムを提供する。
【課題を解決するための手段】
【０００６】
本発明の態様の１つは、デバイスとの通信を制御する通信制御装置であって、特定のデバイスの第１エンドポイントに対する通信により、前記特定のデバイスの識別情報を取得する第１通信部と、第２エンドポイントを用いて通信可能なデバイスの前記第２エンドポイントに対する通信により、前記通信可能なデバイスの識別情報を取得する第２通信部と、前記第１通信部により取得された識別情報と、前記第２通信部により取得された識別情報とに基づいて、前記第２通信部が識別情報を取得したデバイスのうち前記特定のデバイスに該当するデバイスを選択するデバイス選択部と、を備え、前記第２通信部は、前記選択されたデバイスの前記第２エンドポイントに対する通信を実行する。
【０００７】
当該構成によれば、通信制御装置は、通信対象である特定のデバイスとの間で第２エンドポイントを用いた通信経路を確実に確保することができる。つまり、当該通信対象である特定のデバイスとの間で、第１エンドポイントを用いた通信経路と干渉しない別の通信経路が確保される。これにより、通信の安定性や確実性が担保され、特定のデバイスとの通信を適切に行うことができる。
【０００８】
本発明の態様の１つは、前記第１エンドポイントは、プリンタークラスによる通信で用いるエンドポイントであり、前記第２エンドポイントは、ベンダークラスによる通信で用いるエンドポイントであり、前記第１通信部および前記第２通信部は、通信先のＵＳＢデバイスが有するステータス情報に含まれている前記識別情報を取得するとしてもよい。
当該構成によれば、第１、第２エンドポイントそれぞれを用いたＵＳＢデバイス（プリンター）との通信により取得可能なステータス情報の中から、識別情報を得ることができる。
【０００９】
本発明の態様の１つは、通信制御装置は、前記第２エンドポイントを用いた通信に対応するＵＳＢデバイスのグループを定義するグループＩＤを予め有し、前記第２通信部は、認識可能なＵＳＢデバイスのうち前記グループＩＤが定義するグループに属するＵＳＢデバイスから前記識別情報を取得するとしてもよい。
当該構成によれば、前記第２エンドポイントを用いた通信に対応する各ＵＳＢデバイスから容易に識別情報を得ることができる。
【００１０】
本発明の態様の１つは、前記第１通信部は、プリンターである前記特定のデバイスの前記第１エンドポイントに対する通信により、前記特定のデバイスに印刷を実行させるための印刷データを送信し、前記第２通信部は、前記選択されたデバイスであるＵＳＢデバイスの前記第２エンドポイントに対する通信により、前記選択されたＵＳＢデバイスの機能設定にかかわるコマンドを送信するとしてもよい。
当該構成によれば、通信制御装置とプリンターとの間で、印刷実行にかかわる通信と、前記コマンドの送受信とを、互いに干渉することなく独立して実行することができる。
【００１１】
本発明の技術的思想は、通信制御装置以外によっても実現される。例えば、通信制御装置の各部に上述したような各処理を実行させるプログラム（通信制御プログラム）や、当該プログラムを記憶したコンピューター読み取り可能な記憶媒体や、通信制御装置の各部による上述したような各処理を含んだ方法等を、それぞれ発明として捉えることができる。
【図面の簡単な説明】
【００１２】
【図１】ホストの構成等を示すブロック図。
【図２】通信制御処理を示すフローチャート。
【図３】デバイスパスリストを示す図。
【発明を実施するための形態】
【００１３】
以下、図面を参照しながら本発明の実施形態を説明する。各図は、本実施形態を説明するための例示に過ぎない。
【００１４】
図１は、本実施形態にかかるホスト１０の構成等を示すブロック図である。ホスト１０は、ＰＣやＰＣに相当する能力を有する装置である。ホスト１０は、ＵＳＢデバイスなどのデバイスとの通信を制御する通信制御装置の具体例である。ホスト１０は、ＵＳＢデバイスの１つであるプリンター３０と接続してプリンター３０を制御する。従って、ホスト１０を、印刷制御装置と呼んでもよい。また、ホスト１０の全体を通信制御装置や印刷制御装置と捉えるだけでなく、ホスト１０が有する構成の一部（例えば、制御部１１を含む構成）を通信制御装置や印刷制御装置と捉えることも可能である。
【００１５】
ホスト１０は、例えば、ＲＡＭ、ＲＯＭ、ＣＰＵ等を備えるＩＣやその他の記憶媒体等による制御部１１を備える。また、ホスト１０は、例えばハードディスクドライブにより構成される記憶装置１２や、操作受付部１３や、ＵＳＢインターフェイス（Ｉ／Ｆ）１４や、表示部１５等を備える。操作受付部１３は、外部（ユーザー）からの入力操作を受け付けるための手段であり、マウス、キーボード、タッチパネル、各種入力キーやボタン等が該当し得る。表示部１５は、制御部１１による制御下で種々の画像を表示するディスプレイである。前記タッチパネルは、表示部１５に表示される。
【００１６】
ＵＳＢＩＦ１４は、１つ以上のＵＳＢポートを含んでおり、当該ＵＳＢポートおよびＵＳＢケーブル４０を介してプリンター３０と接続している。つまり本実施形態では、ホスト１０‐プリンター３０間の通信は、ＵＳＢケーブル４０を介して実行される。プリンター３０は、図示は省略しているが、公知のプリンターが有するあらゆる構成を有し得る。プリンター３０は、プリンターとしての機能だけでなく、例えば、スキャナーやファクシミリやネットワーク端末といった複数の機能を併せ持つ複合機であってもよい。プリンター３０は、特定のデバイスの一例に該当する。図示していないが、ホスト１０のＵＳＢＩＦ１４に対しては、プリンター３０とは別の１台以上のＵＳＢデバイスが、複数のＵＳＢポートやＵＳＢハブ等を介して接続していてもよい。
【００１７】
制御部１１では、ＣＰＵが、ＲＯＭやその他の記憶媒体や記憶装置１２に記憶された各プログラムに従った処理をＯＳ２０の下で実行することにより、これらプログラムの一種であるアプリケーション２１や、プリンタードライバー２２や、通信制御モジュール２３等の機能を実現する。ＯＳ２０は、Microsoft社が提供するWindowsであり、プリンタードライバー２２は、このようなＯＳ２０の下で動作可能な、例えばXPS Version4に対応するプリンタードライバーであるとする。通信制御モジュール２３は、後述するプリンタークラス２４やベンダークラス２５へアクセスするためのＩ／Ｆを有する。通信制御モジュール２３は、通信制御プログラムに該当する。また、通信制御モジュール２３をプリンタードライバー２２が有する拡張機能の一種と捉えてもよい。
【００１８】
ＵＳＢデバイスがＵＳＢＩＦ１４に接続されると、ホスト１０は、プラグアンドプレイにより、当該ＵＳＢデバイスの種類に対応するクラスドライバーを呼び出す。図１のように、ＵＳＢＩＦ１４にプリンター３０が接続された場合は、通信制御モジュール２３は、プリンター３０からディスクリプターを取得し、このディスクリプターにより、接続しているＵＳＢデバイスがプリンターであることを認識する。この結果、通信制御モジュール２３は、プリンターとの通信を実現するためのクラスドライバーであるプリンタークラス２４を呼び出す。このように、ＵＳＢＩＦ１４に接続されたＵＳＢデバイスの自動検知から始まる一連の標準的な初期動作を、エニュメレーションとも呼ぶ。プリンタークラス２４は、通信先のＵＳＢデバイスの種類（この場合プリンター）に応じて標準化されている通信プロトコル（ＵＳＢ通信におけるデータ転送の手順）およびエンドポイントを用いて通信を実現する。
【００１９】
アプリケーション２１は、例えば、表計算、文書作成、描画あるいはその他の特定の機能を有する様々なソフトウェアである。ユーザーは、ホスト１０において、アプリケーション２１を起動させた状態で、表示部１５に表示させた所定のユーザーインターフェイス（ＵＩ）画面に対する操作受付部１３による入力により、印刷先のデバイスとしてプリンター３０を選択し、印刷指示を行うことができる。当該印刷指示により、当該選択されたプリンター３０に対応するプリンタードライバー２２が起動する。
【００２０】
プリンタードライバー２２は、アプリケーション２１が生成したデータに基づいて、印刷データを生成する。アプリケーション２１が生成するデータは、ＸＰＳのフォーマットに対応したファイルが想定されるが、これ以外のフォーマットに対応したデータであってもよい。印刷データは、プリンター３０に印刷を実行させるためのデータ（プリンター３０が解釈可能なデータ）である。印刷データのフォーマットは種々考えられるが、プリンター３０が例えばインクジェットプリンターであれば、画素毎のドットのオン・オフを規定したビットマップデータであったりする。
【００２１】
プリンタードライバー２２によって生成された印刷データは、通信制御モジュール２３によって、スプーラー２６が管理する、前記選択された印刷先のデバイス（プリンター３０）に対応したキュー（以下、対応プリンターキュー）に加えられる。スプーラー２６は、ホスト１０とプリンター３０等との間の複数の通信の順序等を管理するソフトウェアであり、ＯＳ２０が有する一機能であるとも言える。プリンタークラス２４は、前記対応プリンターキューに並んだデータをプリンター３０へ送信する。このとき、プリンタークラス２４は、プリンター３０が有するエンドポイントのうち決められたエンドポイントに対する通信を行う。
【００２２】
エンドポイントとは、ＵＳＢ通信において知られているように、通信端点の一種である。個々のエンドポイントは、バッファを含んで構成される。ホスト１０とプリンター３０とを繋ぐＵＳＢケーブル４０は、物理的には共通のケーブルであるが、プリンター３０が複数のエンドポイントを有することで、ホスト１０は、それぞれを独立した通信経路として認識する。図１の例では、プリンター３０は、少なくともエンドポイントＥＰ１，ＥＰ２を含む複数のエンドポイントを有する。
【００２３】
エンドポイントＥＰ１は、プリンタークラス２４による通信に用いられるエンドポイント（第１エンドポイント）である。プリンタークラス２４は、ＵＳＢＩ／Ｆ１４からプリンター３０に向けて何らかのデータ（例えば、印刷データを含んだパケット）を送信する際、エンドポイントＥＰ１に一義的に対応するエンドポイントアドレスを付加して送信する。当該エンドポイントＥＰ１に対応するエンドポイントアドレスを有するパケットが、エンドポイントＥＰ１に一時的に保持される。プリンター３０側の制御部３１は、エンドポイントＥＰ１に対して送信されたデータに応じて、印刷等の処理を実行する。このような、エンドポイントＥＰ１に対応するエンドポイントアドレスのＯＳ２０上での設定登録は、例えば、通信制御モジュール２３をＯＳ２０にインストールするとき、あるいは前記エニュメレーションの過程で実行される。
【００２４】
アプリケーション２１は、プリンター３０と通信するために、前記対応プリンターキューを指定する。例えば、上述したようにユーザーがＵＩ画面に対する入力により印刷先のデバイスとしてプリンター３０を選択する操作が、アプリケーション２１にとっては前記対応プリンターキューを指定する処理となる。上述したように前記対応プリンターキューに加えられたデータは、プリンタークラス２４によって、プリンター３０のエンドポイントＥＰ１に対して送信される。つまり、前記対応プリンターキューとプリンター３０のエンドポイントＥＰ１とは実質的に紐付けられていると言える。従って、アプリケーション２１は、前記対応プリンターキューを指定することにより、確実にプリンター３０のエンドポイントＥＰ１に対する通信を行うことができる。
【００２５】
一方、エンドポイントＥＰ２は、汎用的なエンドポイント（第２エンドポイント）である。ＵＳＢデバイスは、当該ＵＳＢデバイスのベンダーが独自に定めた通信プロトコルを用いるクラスドライバー（ベンダークラス２５）との通信のために、このような汎用的なエンドポイントＥＰ２を有することができる。ベンダークラス２５は、ＵＳＢＩ／Ｆ１４からＵＳＢデバイス（例えば、プリンター３０）に向けて何らかのデータ（当該データを含んだパケット）を送信する際、エンドポイントＥＰ２に一義的に対応するエンドポイントアドレスを付加して送信する。当該エンドポイントＥＰ２に対応するエンドポイントアドレスを有するパケットが、送信先のＵＳＢデバイスのエンドポイントＥＰ２に一時的に保持される。プリンター３０側の制御部３１は、エンドポイントＥＰ２に対して送信されたデータに応じた処理を実行する。
【００２６】
しかし、ベンダークラス２５は、プリンタークラス２４とは異なり、前記対応プリンターキューとの対応付けがＯＳ２０によって当然に実行されるものではない。そのため、前記対応プリンターキューとプリンター３０のエンドポイントＥＰ２とは紐付けられておらず、従来、アプリケーション２１は、前記対応プリンターキューを指定してもプリンター３０のエンドポイントＥＰ２に対する通信を行うことはできなかった。このような課題を鑑みて、本実施形態では、以下に説明する通信制御処理を行う。
【００２７】
図２は、本実施形態にかかる通信制御処理を示すフローチャートである。図２では、アプリケーション２１によって実現される処理と、主に通信制御モジュール２３によって実現される処理とを併せて示している。
【００２８】
アプリケーション２１は、前記対応プリンターキューを指定した上で、通信制御モジュール２３に所定のコマンドの送信を依頼する（ステップＳ１００）。当該コマンドは、例えば、プリンター３０の機能設定にかかわるコマンドである。具体的には、プリンター３０が有する種々の機能のうちいずれを有効化していずれを無効化するかといった設定や、当該設定の変更のためにホスト１０とプリンター３０との間でやり取りが必要なコマンドの一種である。また、当該コマンドは、プリンター３０におけるインクや用紙といった消耗品の状態をホスト１０が問い合わせるためのコマンドであったり、プリンター３０に印字ヘッドのクリーニング等のメンテナンス処理を実行させるためのコマンドであったりする。
【００２９】
前記依頼を受けた通信制御モジュール２３は、前記指定された前記対応プリンターキューにステータス情報要求を加えることにより、プリンタークラス２４に、プリンター３０のステータス情報を取得するための通信を実行させる（ステップＳ２００）。プリンタークラス２４は、プリンター３０のエンドポイントＥＰ１に対してステータス情報要求を送信する。プリンター３０側では、エンドポイントＥＰ１を介してステータス情報要求を受信した制御部３１が、プリンター３０のステータス情報をプリンタークラス２４に対して送信する。この結果、通信制御モジュール２３は、プリンター３０のステータス情報を得ることができる。
【００３０】
一般に、ＵＳＢデバイスのステータス情報には、当該ＵＳＢデバイスの状態（プリンターであれば「印刷中」等の状態）の他、各種オプション機能の有無など、デバイス独自の様々な情報が含まれている。また本実施形態では、プリンター３０のステータス情報には、当該プリンター３０の個体識別ＩＤが含まれているものとする。個体識別ＩＤとは、１台の製品に１つ割り当てられたユニークな識別情報である。従って、量産される同型のプリンターであっても、それぞれが異なる個体識別ＩＤを有する。
【００３１】
通信制御モジュール２３は、ステップＳ２００で取得したプリンター３０のステータス情報の中から個体識別ＩＤを抽出し、当該抽出した個体識別ＩＤを所定の記憶領域に保持する（ステップＳ２１０）。このようなステップＳ２００，Ｓ２１０によれば、通信制御モジュール２３およびプリンタークラス２４は、特定のＵＳＢデバイス（プリンター３０）のエンドポイントＥＰ１に対する通信により当該特定のＵＳＢデバイスの識別情報を取得する第１通信部、として機能すると言える。
【００３２】
次に、通信制御モジュール２３は、ＯＳ２０がＵＳＢＩ／Ｆ１４を介して認識可能なＵＳＢデバイスのうち、前記エンドポイントＥＰ２を用いたＵＳＢ通信（ベンダークラス２５によるＵＳＢ通信）に対応するＵＳＢデバイスのリストを取得する（ステップＳ２２０）。プリンター３０は、当然、前記エンドポイントＥＰ２を用いたＵＳＢ通信に対応するＵＳＢデバイスである。本実施形態では、ホスト１０は、エンドポイントＥＰ２に対応するエンドポイントアドレスと、当該エンドポイントＥＰ２を用いたＵＳＢ通信に対応するＵＳＢデバイスのグループを定義する一意のグループＩＤとを、予め有しているものとする。このようなエンドポイントアドレスやグループＩＤのＯＳ２０上での設定登録は、例えば、通信制御モジュール２３をＯＳ２０にインストールするとき、あるいは前記エニュメレーションの過程で実行される。
【００３３】
ステップＳ２２０について、具体的に説明する。通信制御モジュール２３は、前記認識可能なＵＳＢデバイス毎のデバイスパスの中から前記グループＩＤを含んでいるデバイスパスを抽出し、前記リストとして、当該抽出したデバイスパスのリスト（デバイスパスリスト）を生成する。デバイスパスは、ＯＳ２０が接続している各ＵＳＢデバイスを認識するために内部的に保持している情報である。
【００３４】
図３は、デバイスパスリスト５０の一例を示している。デバイスパスリスト５０では、インデックス（例えば、番号１，２，３…で表現される見出し）毎にデバイスパスが記されている。あるＵＳＢデバイスのデバイスパス（インデックス番号１のデバイスパス）は、例えば、以下のように表される。
\\?\usb#vid_04zz&pid_1104&mi_03#6&145699dd&0&0003#{2826B7BA-16B3-4EBA-B5A6-28684BC0A1DD}
【００３５】
このようなデバイスパスにおいて“vid_04zz” の“04zz”が、ベンダーＩＤに該当する。ベンダーＩＤとは、デバイスを製造するベンダー毎に与えられたＩＤであり、同じベンダーが製造した製品の全てに同じベンダーＩＤが与えられる。本実施形態においては、デバイスパスリスト５０に含まれる各デバイスパスにおけるベンダーＩＤは、当然、プリンター３０を製造したベンダーに対応するベンダーＩＤである。また、前記デバイスパスにおいて“pid_1104” の“1104”が、プロダクトＩＤに該当する。プロダクトＩＤは、同じベンダーの同じ製品に共通して与えられるＩＤである。デバイスパスリスト５０に含まれる各デバイスパスにおけるプロダクトＩＤは、同じであったり違っていたりする。また、前記デバイスパスにおいて“2826B7BA-16B3-4EBA-B5A6-28684BC0A1DD”は、前記グループＩＤに該当する。つまり、デバイスパスリスト５０は、あるベンダーが製造する製品群の中で前記グループＩＤを共通して持つグループに属するＵＳＢデバイスの（デバイスパスの）リストであると言える。
【００３６】
ホスト１０に接続するＵＳＢデバイスが、仮に、図１が示すようにプリンター３０の１台のみであれば、デバイスパスリスト５０に含まれるデバイスパスは、プリンター３０のデバイスパスのみとなる。一方、ホスト１０に接続するＵＳＢデバイスが、プリンター３０を含めて複数存在していれば、デバイスパスリスト５０には複数のデバイスパスが列記され得る。
【００３７】
次に、通信制御モジュール２３は、ステップＳ２２０で生成した前記リストに含まれるＵＳＢデバイスを１つ指定し、ベンダークラス２５に、この指定したＵＳＢデバイス（指定ＵＳＢデバイス）のステータス情報を取得するための通信を実行させる（ステップＳ２３０）。図３の例を参照した場合、通信制御モジュール２３は、例えば、デバイスパスリスト５０におけるインデックス番号が若い方から順にデバイスパスを１つ指定する。ベンダークラス２５は、当該指定されたデバイスパスが示す指定ＵＳＢデバイスのエンドポイントＥＰ２に対してステータス情報要求を送信する。当該送信を受ける側の指定ＵＳＢデバイスは、エンドポイントＥＰ２を介してステータス情報要求を受信し、この要求に応じてステータス情報をベンダークラス２５に対して送信する。この結果、通信制御モジュール２３は、指定ＵＳＢデバイスのステータス情報を得ることができる。
【００３８】
通信制御モジュール２３は、ステップＳ２３０で取得した指定ＵＳＢデバイスのステータス情報の中から個体識別ＩＤを抽出するとともに、当該抽出した指定ＵＳＢデバイスの個体識別ＩＤと、ステップＳ２１０で保持したプリンター３０の個体識別ＩＤとを比較する（ステップＳ２４０）。そして、通信制御モジュール２３は、指定ＵＳＢデバイスの個体識別ＩＤと、プリンター３０の個体識別ＩＤとが一致するか否かに応じて処理を分岐する（ステップＳ２５０）。通信制御モジュール２３は、それら個体識別ＩＤが一致する場合（ステップＳ２５０において“Ｙｅｓ”）、ステップＳ２５０からステップＳ２６０へ進み、一方、それら個体識別ＩＤが一致しない場合（ステップＳ２５０において“Ｎｏ”）、ステップＳ２５０からステップＳ２３０へ戻る。
【００３９】
指定ＵＳＢデバイスの個体識別ＩＤと、プリンター３０の個体識別ＩＤとが一致する場合、ステップＳ２００でプリンタークラス２４が通信した特定のＵＳＢデバイスであるプリンター３０と、ステップＳ２３０でベンダークラス２５が通信したＵＳＢデバイス（指定ＵＳＢデバイス）とが同じ機体ということになる。一方、それら個体識別ＩＤが一致しない場合は、ステップＳ２００でプリンタークラス２４が通信したプリンター３０とは別のＵＳＢデバイスと、ステップＳ２３０でベンダークラス２５が通信したということになる。ステップＳ２５０から進んだステップＳ２３０では、通信制御モジュール２３は、ステップＳ２２０で生成した前記リストに含まれるＵＳＢデバイスのうち現時点で未指定のＵＳＢデバイスを次の指定ＵＳＢデバイスとし、上述の処理（ステップＳ２３０〜Ｓ２５０）を繰り返す。
【００４０】
このようなステップＳ２２０〜Ｓ２４０によれば、通信制御モジュール２３およびベンダークラス２５は、エンドポイントＥＰ２を用いて通信可能なＵＳＢデバイスのエンドポイントＥＰ２に対する通信により、当該通信可能なＵＳＢデバイスの識別情報を取得する第２通信部、として機能すると言える。また、ステップＳ２４０，Ｓ２５０によれば、通信制御モジュール２３は、第１通信部により取得された識別情報（特定のＵＳＢデバイス（プリンター３０）の個体識別ＩＤ）と、第２通信部により取得された識別情報（指定ＵＳＢデバイスの個体識別ＩＤ）とに基づいて、第２通信部が識別情報を取得したＵＳＢデバイスのうち特定のＵＳＢデバイスに該当するＵＳＢデバイスを選択するデバイス選択部、として機能すると言える。
【００４１】
ステップＳ２６０では、通信制御モジュール２３は、ベンダークラス２５に、前記特定のＵＳＢデバイスに該当するとして選択したＵＳＢデバイス、つまり指定ＵＳＢデバイスへのコマンド送信を実行させる。言うまでもなく、ステップＳ２６０の段階での指定ＵＳＢデバイスの実体はプリンター３０である。ベンダークラス２５は、指定ＵＳＢデバイスのエンドポイントＥＰ２に対してコマンドを送信する。当該コマンドは、ステップＳ１００でアプリケーション２１が通信制御モジュール２３に送信を依頼したコマンドである。ステップ２６０によれば、第２通信部は、前記選択されたＵＳＢデバイスのエンドポイントＥＰ２に対する通信を実行する、と言える。
【００４２】
ステップＳ２６０によるコマンド送信を受ける側の指定ＵＳＢデバイス（＝プリンター３０）は、エンドポイントＥＰ２を介して前記コマンドを受信し、受信したコマンドに応じた応答内容を表した応答データをベンダークラス２５に対して送信する。これにより、通信制御モジュール２３は、前記送信したコマンドに対する応答データを受信する（ステップＳ２７０）。そして、通信制御モジュール２３は、ステップＳ２７０で受信した応答データをアプリケーション２１へ送る。つまり、アプリケーション２１からのコマンド送信の依頼（ステップＳ１００）に対して、応答データを返す（ステップＳ２８０）。この結果、アプリケーション２１は、当該応答データを受信する（ステップＳ１１０）。
【００４３】
このように本実施形態によれば、ホスト１０は、通信対象である特定のＵＳＢデバイスとの間でエンドポイントＥＰ２を用いた通信経路を確実に確保することができる。つまり、通信対象であるプリンター３０との間で、通常確保されるエンドポイントＥＰ１を用いた通信経路に加え、当該通信経路と干渉しないエンドポイントＥＰ２を用いた別の通信経路が確保される。
【００４４】
具体的には、ホスト１０において、アプリケーション２１が、プリンター３０に前記コマンドを送信するために前記対応プリンターキューを指定し、コマンド送信を通信制御モジュール２３に依頼すると（ステップＳ１００）、通信制御モジュール２３は、ステップＳ２００〜Ｓ２８０を実行する。つまり、アプリケーション２１は、前記ステップＳ１００を実行するだけで、ベンダークラス２５によるエンドポイントＥＰ２を用いた通信を介して前記コマンドに対するプリンター３０からの応答データを得ることができる。従って、ＵＳＢ接続したホスト１０とプリンター３０との間では、例えば、プリンタークラス２４によるエンドポイントＥＰ１を用いた通信で、ホスト１０からプリンター３０へ印刷データを送信し、ベンダークラス２５によるエンドポイントＥＰ２を用いた通信で、ホスト１０からプリンター３０へのコマンド送信および応答データの返信を行うことができる。すなわち、印刷データに関わる通信と前記コマンドに関わる通信とが、混線することなく互いに独立して実行されるため、上述したような排他的通信や同期的通信と同様の効果が実質的に確保され、通信の安定性および確実性が確保される。
【００４５】
また上述したように、通信制御モジュール２３は、そのとき通信対象とする特定のＵＳＢデバイスからエンドポイントＥＰ１を用いた通信の結果得た個体識別ＩＤと、当該特定のＵＳＢデバイスである可能性があるＵＳＢデバイスからエンドポイントＥＰ２を用いた通信の結果得た個体識別ＩＤとの一致・不一致を見ることで、特定のＵＳＢデバイスに対するエンドポイントＥＰ２を用いた通信経路を確保する。従って本実施形態によれば、前記プロダクトＩＤが共通する複数のＵＳＢデバイス（例えば、プロダクトＩＤが共通する複数のプリンター）がホスト１０にＵＳＢ接続されている環境においても、その中の１台の特定のＵＳＢデバイスとの間で、エンドポイントＥＰ２を用いた通信経路を確実に確保することができる。
【００４６】
また、通信制御装置が実行する本発明にかかる通信の相手先となるデバイスは、ＵＳＢデバイスに限定されない。つまり、本発明は、上述したようなエンドポイントを用いた通信全般に適用することができる。
【符号の説明】
【００４７】
１０…ホスト（通信制御装置）、１１…制御部、１２…記憶装置、１３…操作受付部、１４…ＵＳＢＩ／Ｆ、１５…表示部、２０…ＯＳ、２１…アプリケーション、２２…プリンタードライバー、２３…通信制御モジュール、２４…プリンタークラス、２５…ベンダークラス、２６…スプーラー、３０…プリンター、３１…制御部、４０…ＵＳＢケーブル、５０…デバイスパスリスト、ＥＰ１，ＥＰ２…エンドポイント
【図１】
2017182257.tif 000003
【図２】
2017182257.tif 000004
【図３】
2017182257.tif 000005