(57)【特許請求の範囲】
【請求項１】
デバイスを使用するアプリケーションと、
前記アプリケーションの制御のもとで、前記デバイスを制御するデバイスドライバと、
前記デバイスをエミュレーションするデバイスエミュレータとを有するデバイスエミュレータ装置であって、
前記デバイスドライバから前記デバイスへのリクエストを取得し、前記リクエストを前記デバイスエミュレータへ転送するかどうかを判別し、転送しないと判別した場合には、前記リクエストに応じた応答を前記デバイスドライバに返し、転送すると判別した場合に、前記リクエストを前記デバイスエミュレータに転送して、前記デバイスエミュレータからのリクエスト処理の結果を受信して前記ドライバドライバへ返信する通信サービス手段を具備するデバイスエミュレータ装置。
【請求項２】
前記デバイスドライバから前記ドライバに対して出力されるリクエストを取得して、前記通信サービス手段に受け渡すフィルタドライバをさらに具備し、
前記通信サービス手段は、前記フィルタドライバを通じて前記リクエストを取得する請求項１記載のデバイスエミュレータ装置。
【請求項３】
前記デバイスドライバからの前記リクエストを前記デバイスエミュレータへ転送するか否かを示すデータを記録する記録手段をさらに具備し、
前記通信サービス手段は、前記記録手段に記録されたデータをもとに、前記リクエストを前記デバイスエミュレータへ転送するかどうかを判別する請求項１記載のデバイスエミュレータ装置。
【請求項４】
前記記録手段に記録されるデータは、前記デバイスに対して定期的に発生するリクエストを前記デバイスエミュレータへ転送しないことを示す請求項３記載のデバイスエミュレータ装置。
【請求項５】
前記通信サービス手段は、前記記録手段に記録されたデータをもとに前記デバイスエミュレータへ転送しないと判別された定期的に発生する前記リクエストの一部を前記デバイスエミュレータへ転送する請求項４記載のデバイスエミュレータ装置。
【請求項６】
前記デバイスエミュレータによりエミュレーションされるデバイスの状態を変更する変更手段をさらに具備し、
前記デバイスエミュレータは、前記変更手段により前記デバイスの状態が変更された場合に、前記通信サービス手段に変更後の前記デバイスの状態を通知する請求項１記載のデバイスエミュレータ装置。
【請求項７】
第１の制御装置と第２の制御装置とがネットワークを介して接続され、
前記第１の制御装置は、前記アプリケーション、前記デバイスドライバ、及び前記通信サービス手段とを有し、
前記第２の制御装置は、前記デバイスエミュレータを有した請求項１記載のデバイスエミュレータ装置。
【請求項８】
デバイスを使用するアプリケーションと、
前記アプリケーションの制御のもとで、前記デバイスを制御するデバイスドライバと、
前記デバイスをエミュレーションするデバイスエミュレータとを有するデバイスエミュレータ装置におけるデバイスエミュレーション方法であって、
前記デバイスドライバから前記デバイスへのリクエストを取得し、前記リクエストを前記デバイスエミュレータへ転送するかどうかを判別し、転送しないと判別した場合には、前記リクエストに応じた応答を前記デバイスドライバに返し、転送すると判別した場合に、前記リクエストを前記デバイスエミュレータに転送して、前記デバイスエミュレータからのリクエスト処理の結果を受信して前記ドライバドライバへ返信するデバイスエミュレーション方法。
【請求項９】
デバイスを使用するアプリケーションと、
前記アプリケーションの制御のもとで、前記デバイスを制御するデバイスドライバと、
前記デバイスをエミュレーションするデバイスエミュレータとを実行するコンピュータを、
前記デバイスドライバから前記デバイスへのリクエストを取得し、前記リクエストを前記デバイスエミュレータへ転送するかどうかを判別し、転送しないと判別した場合には、前記リクエストに応じた応答を前記デバイスドライバに返し、転送すると判別した場合に、前記リクエストを前記デバイスエミュレータに転送して、前記デバイスエミュレータからのリクエスト処理の結果を受信して前記ドライバドライバへ返信する通信サービス手段として機能させるための通信サービスプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、デバイスをエミュレーションするデバイスエミュレータ装置、デバイスエミュレーション方法、及び通信サービスプログラムに関する。
【背景技術】
【０００２】
プリンタなどのデバイスを制御するアプリケーションプログラムを開発する場合、アプリケーションプログラムを動作させる制御装置（コンピュータ）にデバイスを接続して、アプリケーション（デバイスドライバ）からのリクエストをデバイスに送信し、このリクエストに応じたデバイスの応答をアプリケーションに返すことで、アプリケーションの動作確認等が行われる。
【０００３】
アプリケーションの開発を複数の開発者が並行して行う場合、開発者数分のデバイスを用意しなければいけなかったり、あるいはデバイスの数が足りなければ、デバイスを使用する順番待ちなどが発生したりする。そのため従来では、デバイスに代えてデバイスエミュレータが使用されている。デバイスエミュレータは、制御装置上で実行させることにより、プリンタなどのデバイスをエミュレートし、アプリケーション（デバイスドライバ）からのリクエストを処理して、デバイスが動作している場合と同様にして応答することができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−１８５５９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、アプリケーション（デバイスドライバ）からデバイスへのリクエストには、短時間で定期的に発生するものがある。定期的に大量に発生するリクエストに対しては、デバイスエミュレータがそれぞれのリクエストに対するリクエスト処理を実行して、処理結果を応答しなければならないため、デバイスエミュレータの負荷が大きい。
【０００６】
特に、アプリケーション（デバイスドライバ）を実行する制御装置（コンピュータ）とデバイスエミュレータを実行する制御装置がネットワークを介して接続されている場合、アプリケーションからのリクエストがネットワークを介してデバイスエミュレータに通知され、デバイスエミュレータによるリクエスト処理の結果がネットワークを介してアプリケーションに応答されるため、ネットワーク負荷が大きくなる。また、アプリケーションがリクエストに対する処理結果を受信するまでのレスポンス待ちが増大するため、結果としてデバイスエミュレータの性能が低下してしまう。
【０００７】
本発明が解決しようとする課題は、デバイスエミュレータの性能を向上させることが可能なデバイスエミュレータ装置、デバイスエミュレーション方法、及び通信サービスプログラムを提供することである。
【課題を解決するための手段】
【０００８】
実施形態によれば、デバイスエミュレータ装置は、デバイスを使用するアプリケーションと、前記アプリケーションの制御のもとで、前記デバイスを制御するデバイスドライバと、前記デバイスをエミュレーションするデバイスエミュレータと、前記デバイスドライバから前記デバイスへのリクエストを取得し、前記リクエストを前記デバイスエミュレータへ転送するかどうかを判別し、転送しないと判別した場合には、前記リクエストに応じた応答を前記デバイスドライバに返し、転送すると判別した場合に、前記リクエストを前記デバイスエミュレータに転送して、前記デバイスエミュレータからのリクエスト処理の結果を受信して前記ドライバドライバへ返信する通信サービス手段とを有する。
【図面の簡単な説明】
【０００９】
【図１】本実施形態におけるデバイスエミュレータ装置の構成を示すブロック図。
【図２】本実施形態における通信サービス制御ファイルに設定されるデータの一例を示す図。
【図３】本実施形態におけるデバイスエミュレータ装置１０の動作について示すフローチャート。
【図４】本実施形態におけるアプリケーション、通信サービス部、及びデバイスエミュレータとの間におけるリクエストと処理結果の応答の流れを示す図。
【図５】本実施形態におけるデバイスエミュレータによってエミュレーションされるデバイスのステータスを変更する場合のフローチャート。
【図６】本実施形態における定期的に発生するリクエストの一部をデバイスエミュレータ３０へ転送する場合のフローチャート。
【図７】本実施形態における他のデバイスエミュレータ装置１８の構成例について示すブロック図。
【発明を実施するための形態】
【００１０】
以下、本実施形態について、図面を参照しながら説明する。  
図１は、本実施形態におけるデバイスエミュレータ装置１０の構成を示すブロック図である。デバイスエミュレータ装置１０は、制御装置Ａ１２と制御装置Ｂ１４とがネットワーク１６を介して接続されて構成される。本実施形態におけるデバイスエミュレータ装置１０は、各種のデバイスを制御するアプリケーションプログラムを開発するために使用される装置である。例えば、ＰＯＳ（Point of Sales）システムで使用されるアプリケーションプログラムは、プリンタ、スキャナ、ディスプレイ等のデバイスを制御する。デバイスエミュレータ装置１０は、アプリケーションプログラムからデバイス（プリンタ、スキャナ、ディスプレイ等）へのリクエストに応じたリクエスト処理をして、実際のデバイスと同様の処理結果を応答するデバイスエミュレータアプリケーションを実行する。
【００１１】
制御装置Ａ１２は、例えばパーソナルコンピュータにより実現されるもので、プロセッサ（ＣＰＵ）、メモリ、ハードディスク装置、ディスプレイ、入力装置などのハードウェアデバイスを有している。制御装置Ａ１２は、プロセッサによりメモリに記憶された各種プログラムを実行することにより、各種の機能を実現することができる。
【００１２】
制御装置Ａ１２は、アプリケーション２０、デバイスドライバ２１、フィルタドライバ２２、通信サービス部２４、ネットワークインタフェース２５、通信サービス制御ファイル２６、及び設定ユーティリティ２７を有する。
【００１３】
アプリケーション２０は、プリンタ、スキャナ、ディスプレイ等のデバイスを使用するもので、デバイスドライバ２１を通じてデバイスに対して各種処理を要求するリクエストを出力し、リクエストに応じた処理結果を受信する。
【００１４】
デバイスドライバ２１は、アプリケーション２０の制御のもとでデバイスを制御する。デバイスドライバ２１は、例えば複数のデバイス（プリンタ、スキャナ、ディスプレイ等）を制御することができるもので、ＵＳＢ（Universal Serial Bus）やその他のシリアルバス等を介して接続されるデバイスを制御する汎用のドライバである。
【００１５】
フィルタドライバ２２は、デバイスドライバ２１からデバイスに対して出力されるリクエストを奪って（フックして）通信サービス部２４に受け渡し、また通信サービス部２４からリクエストに対する応答を受信してデバイスドライバ２１に受け渡す。フィルタドライバ２２は、デバイスドライバ２１からデバイスに対して出力されたリクエストを奪う（フックする）ことで、デバイスドライバ２１に通信サービス部２４を利用するための特別な機能を設ける必要が無いようにしている。
【００１６】
通信サービス部２４は、アプリケーション２０（デバイスドライバ２１）により発生したデバイスに対するリクエストに対して、デバイスエミュレータ３０で処理する必要が無いものについては、リクエストをデバイスエミュレータ３０に転送することなくリクエストに対する処理結果を応答することで、リクエストに対する処理を高速化するためのモジュールである。通信サービス部２４は、リクエスト判別部２４ａ、変換部２４ｂ、リクエスト応答部２４ｃ、設定変更部２４ｄ、及びリクエスト転送部２４ｅとを含む。
【００１７】
リクエスト判別部２４ａは、デバイスドライバ２１からデバイスへのリクエストを、フィルタドライバ２２を通じて取得し、リクエストをデバイスエミュレータ３０へ転送するかどうかを、通信サービス制御ファイル２６に設定されたデータを参照して判別する。変換部２４ｂは、デバイスエミュレータ３０に転送するリクエストを、デバイスエミュレータ３０が処理可能な形式に変換し、またデバイスエミュレータ３０から返信されるリクエストに対する処理結果を、デバイスドライバ２１が処理可能な形式に変換する。リクエスト応答部２４ｃは、リクエスト判別部２４ａがリクエストをデバイスエミュレータ３０に転送しないと判別した場合には、リクエストに応じた応答をデバイスドライバ２１に返す。設定変更部２４ｄは、ネットワークインタフェース２５を介してデバイスエミュレータ３０からデバイスの状態が変化したことが通知された場合に、通信サービス制御ファイル２６に設定された、デバイスの状態を問い合わせるリクエストに対して応答する応答データを変更する。リクエスト転送部２４ｅは、リクエスト判別部２４ａがリクエストをデバイスエミュレータ３０に転送すると判別した場合は、リクエストをデバイスエミュレータ３０に転送して、デバイスエミュレータ３０からのリクエスト処理の結果を受信してドライバドライバ２１へ返信する。
【００１８】
ネットワークインタフェース２５は、制御装置Ｂ１４（ネットワークインタフェース３２）との通信を制御するもので、例えばＴＣＰ（transmission control protocol）／ＩＰ（internet protocol）に基づく通信を行う。従って、制御装置Ａ１２と制御装置Ｂ１４は、同じ場所（同室内等）に設置して使用するだけでなく、インターネット等を介して接続することで離れた場所に設置して使用することもできる。
【００１９】
通信サービス制御ファイル２６は、アプリケーション２０（デバイスドライバ２１）からのデバイスに対するリクエストを、デバイスエミュレータ３０へ転送するか否かを示すデータと、デバイスエミュレータ３０へ転送しないリクエストに対して通信サービス部２４によって応答させるデータ（応答データ）を記録する。通信サービス制御ファイル２６は、通信サービス部２４によって参照される。  
設定ユーティリティ２７は、例えばユーザからの指示に応じて、通信サービス制御ファイル２６に設定されたデータを変更するための処理をする。設定ユーティリティ２７は、例えばユーザによる入力装置への操作に応じて、アプリケーション２０からデバイスへ出力される各リクエストについて、デバイスエミュレータ３０に転送するか否か、デバイスエミュレータ３０に転送しない場合に通信サービス部２４によってリクエストに対して応答させるデータ（応答データ）などを設定することができる。応答データには、例えばデバイスのステータスを示すデータがある。例えば、プリンタについては、電源オン／オフ、カバーオープン有無、インク残量有無などの各種ステータスが応答データとして設定される。
【００２０】
制御装置Ｂ１４は、例えばパーソナルコンピュータにより実現されるもので、プロセッサ（ＣＰＵ）、メモリ、ハードディスク装置、ディスプレイ、入力装置などのハードウェアデバイスを有している。制御装置Ｂ１４は、プロセッサによりメモリに記憶された各種プログラムを実行することにより、各種の機能を実現することができる。
【００２１】
制御装置Ｂ１４は、デバイスエミュレータ３０、エミュレータ制御ユーティリティ３１、及びネットワークインタフェース３２を有する。
【００２２】
デバイスエミュレータ３０は、アプリケーション２０（デバイスドライバ２１）による制御の対象となるデバイスをエミュレーションするもので、通信サービス部２４により転送された、アプリケーション２０（デバイスドライバ２１）からデバイスに対するリクエストに応じたリクエスト処理を実行し、リクエスト処理の処理結果をネットワークインタフェース３２からネットワーク１６を通じて制御装置Ａ１２に送信する。デバイスエミュレータ３０は、アプリケーション２０により制御の対象となる複数のデバイス、例えばプリンタ、スキャナ、ディスプレイ等のそれぞれに対応するエミュレーション機能を実現するプリンタ処理部３０ａ、スキャナ処理部３０ｂ、ディスプレイ処理部３０ｃ等を含む。
【００２３】
エミュレータ制御ユーティリティ３１は、デバイスエミュレータ３０によってエミュレーションされるデバイスの状態（ステータス）を、例えばユーザからの指示に応じて変更するための処理をする。エミュレータ制御ユーティリティ３１は、例えばプリンタ処理部３０ａ、スキャナ処理部３０ｂ、ディスプレイ処理部３０ｃがシミュレーションする各デバイスのステータスを個別に変更できるものとする。
【００２４】
ネットワークインタフェース３２は、制御装置Ａ１２（ネットワークインタフェース２５）との通信を制御するもので、例えばＴＣＰ／ＩＰに基づく通信を行う。
【００２５】
図２は、本実施形態における通信サービス制御ファイル２６に設定されるデータの一例を示す図である。  
通信サービス制御ファイル２６には、複数のデバイスのそれぞれに対するリクエストについて、デバイスエミュレータ３０にリクエストを転送するか、あるいはデバイスエミュレータ３０にリクエストを転送することなく、通信サービス部２４によって応答するかを示すデータが設定される。
【００２６】
図２に示すように、通信サービス制御ファイル２６では、アプリケーション２０（あるいはデバイスドライバ２１）により制御される複数のデバイスのそれぞれについて、リクエスト別にリクエストをデバイスエミュレータ３０に転送するか、デバイスエミュレータ３０に転送することなくリクエストに応答するかを示すデータが設定されている。また、デバイスに転送することなくリクエストに応答する場合に、通信サービス部２４によってリクエストに応答させる場合の応答データが設定されている。
【００２７】
例えば、プリンタに対して出力されるリクエストには、印刷の実行、ステータスの送信要求などがある。ステータスの送信要求のリクエストは、アプリケーション２０（デバイスドライバ２１）から定期的に短い間隔（例えば５ｍｓｅｃ）で発生する。こうした定期的に大量に発生するリクエストは、全てをデバイスエミュレータ３０に転送するとネットワーク１６の負荷が増大すると共に、リクエストに対する処理結果の待ち時間が長くなるため、デバイスエミュレータ３０に転送することなく通信サービス部２４によってリクエストに応答するよう設定することが好ましい。
【００２８】
また、ステータスの送信要求のリクエストに応答するための応答データは、例えばデバイスが正常に動作可能な状態であることを示すように設定することができる。これにより、ステータスの送信要求に対して、通信サービス部２４から、常に、動作可能な状態であることを示す応答を返すことで、アプリケーション２０による一連の動作を継続させることができる。
【００２９】
次に、本実施形態におけるデバイスエミュレータ装置１０の動作について、図３に示すフローチャートを参照しながら説明する。図３は、アプリケーション２０、デバイスドライバ２１、通信サービス部２４、及びデバイスエミュレータ３０のそれぞれの動作を示している。
【００３０】
まず、アプリケーション２０は、デバイスへのリクエストが発生すると（ステップＡ１、Ｙｅｓ）、そのリクエストをデバイスドライバ２１へ送信する（ステップＡ２）。
【００３１】
デバイスドライバ２１は、アプリケーション２０からリクエストを受信し（ステップＢ１）、このリクエストが対象とするドライバに対してリクエストを送信する（ステップＢ２）。ここで、デバイスドライバ２１は、通信サービス部２４に対してリクエストを送信するのではなく、実際のデバイスが接続されている場合と同様にしてリクエストを送信する。すなわち、デバイスドライバ２１は、通信サービス部２４を利用するための特別な動作をする必要がない。デバイスドライバ２１から答申されたリクエストは、フィルタドライバ２２が取得して、通信サービス部２４に受け渡す。
【００３２】
通信サービス部２４は、フィルタドライバ２２から送信されたリクエストを、フィルタドライバ２２を通じて受信すると（ステップＣ１）、リクエスト判別部２４ａによりリクエストを解析し、通信サービス制御ファイル２６を参照して、デバイスエミュレータ３０にリクエストを転送するか、あるいはデバイスエミュレータ３０にリクエストを転送することなく、リクエストに対して応答するかを判別する（ステップＣ２）。
【００３３】
ここで、リクエストをデバイスエミュレータ３０に転送すると判別された場合（ステップＣ３、Ｙｅｓ）、リクエスト転送部２４ｅは、ネットワークインタフェース２５を通じて、リクエストをデバイスエミュレータ３０（制御装置Ｂ１４）に転送する（ステップＣ４）。なお、デバイスエミュレータ３０に転送するリクエストは、変換部２４ｂによってデバイスエミュレータ３０が処理可能な形式に変換されるものとする。
【００３４】
制御装置Ｂ１４のデバイスエミュレータ３０は、ネットワークインタフェース３２を通じて、制御装置Ａ１２（デバイスエミュレータ３０）からデバイスに対するリクエストを受信する（ステップＤ１）。デバイスエミュレータ３０は、リクエストに応じたリクエスト処理を実行して（ステップＤ２）、処理結果を制御装置Ａ１２（通信サービス部２４）に返送する（ステップＤ３）。
【００３５】
例えば、アプリケーション２０からのリクエストがプリンタによる印刷のリクエストである場合、プリンタ処理部３０ａは、印刷処理をシミュレーションし、この印刷処理によってプリンタのステータスが変化した場合には、変化後のステータスを含む処理結果をデバイスエミュレータ３０に返信する。
【００３６】
通信サービス部２４は、ネットワークインタフェース２５を通じて、制御装置Ａ１２（デバイスエミュレータ３０）からリクエストに対する処理結果を受信すると、この処理結果をデバイスドライバ２１に送信する（ステップＣ７）。なお、デバイスドライバ２１に送信する処理結果は、変換部２４ｂによってデバイスドライバ２１が処理可能な形式に変換されるものとする。
【００３７】
デバイスドライバ２１は、通信サービス部２４から受信した処理結果をアプリケーション２０に送信する（ステップＢ３）。アプリケーション２０は、リクエストに対する処理結果をデバイスドライバ２１から受信する（ステップＡ３）。
【００３８】
一方、デバイスドライバ２１からのリクエストについてデバイスエミュレータ３０に転送しない判別された場合（ステップＣ３、Ｎｏ）、リクエスト応答部２４ｃは、リクエストに応じた処理を実行して、その処理結果をデバイスドライバ２１に送信する（ステップＣ６）。デバイスドライバ２１は、通信サービス部２４からの処理結果をアプリケーション２０に送信する（ステップＢ３）。
【００３９】
例えば、図２に示す通信サービス制御ファイル２６では、プリンタに対してステータスの送信要求をするリクエストについては、デバイスエミュレータ３０に転送しない設定がされている。リクエスト応答部２４ｃは、通信サービス制御ファイル２６に設定された、プリンタのステータスを示す応答データ（Ｓ１）をデバイスドライバ２１に返送する。
【００４０】
ステータスの送信要求のリクエストは、アプリケーション２０（デバイスドライバ２１）から定期的に大量に発生するため、デバイスエミュレータ３０に転送することなく通信サービス部２４によってリクエストに応答することで、ネットワーク１６の負荷を軽減すると共に、リクエストに対する処理結果の待ち時間を短くすることができる。
【００４１】
図４は、本実施形態におけるアプリケーション２０、通信サービス部２４、及びデバイスエミュレータ３０との間におけるリクエストと処理結果の応答の流れを示す図である。  
図４のＳ１に示すように、アプリケーション２０（デバイスドライバ２１）において頻繁に発生するリクエスト（ステータスの送信要求など）については、通信サービス部２４が処理結果を応答することで、ネットワーク１６への負荷を発生させない。また、アプリケーション２０（デバイスドライバ２１）のレスポンス待ちも小さくすることができる。
【００４２】
アプリケーション２０（デバイスドライバ２１）からのリクエストＳ２がデバイスエミュレータ３０に転送された場合、デバイスエミュレータ３０は、レスポンスに応じたリクエスト処理Ｓ３を実行して、その処理結果Ｓ４を返送する。例えば、デバイスの状態が変化するリクエストについては、デバイスエミュレータ３０に転送することで、アプリケーション２０は、デバイスエミュレータ３０によりエミュレートされた処理結果を取得することができる。
【００４３】
このようにして、本実施形態におけるデバイスエミュレータ装置１０では、アプリケーション２０（デバイスドライバ２１）からのデバイスに対するリクエストについて、デバイスエミュレータ３０に転送するか否かを判定し、デバイスエミュレータ３０に転送しないと判別したリクエストについては、デバイスエミュレータ３０に転送することなく、通信サービス部２４によりリクエスト応答を返送する。特に、アプリケーション２０（デバイスドライバ２１）から大量に発生するレスポンス（ステータスの送信要求等）について、通信サービス部２４によって応答するように設定することで、ネットワーク１６の負荷を大幅に軽減し、アプリケーション２０（デバイスドライバ２１）のレスポンス待ちの時間を短縮することができ、さらに実機に近いレスポンスを期待できる。
【００４４】
なお、本実施形態におけるデバイスエミュレータ装置１０では、デバイスエミュレータ３０によってエミュレーションされるデバイスのステータスをエミュレータ制御ユーティリティ３１により変更することで、デバイスエミュレータ３０から通信サービス部２４に対して、デバイスのステータスを変更した処理結果を送信することができる。
【００４５】
図５は、本実施形態におけるデバイスエミュレータ３０によってエミュレーションされるデバイスのステータスを変更する場合のフローチャートを示している。  
制御装置Ｂ１４では、エミュレータ制御ユーティリティ３１を実行することで、ユーザの入力装置への操作によって、デバイスエミュレータ３０がエミュレーションするデバイスのステータスを変更することができる。例えば、エミュレータ制御ユーティリティ３１は、デバイスエミュレータ３０がエミュレーションする何れかのデバイスをユーザに選択させ、そのデバイスのステータスの指定を受け付けてデバイスエミュレータ３０に通知する。デバイスエミュレータ３０は、エミュレータ制御ユーティリティ３１からの通知に応じて、選択されたデバイスのステータスを変更する。
【００４６】
デバイスエミュレータ３０は、エミュレータ制御ユーティリティ３１からの通知に応じてデバイスのステータスを変更すると（ステップＤ１０）、処理結果を通信サービス部２４に送信する（ステップＤ１１）。
【００４７】
通信サービス部２４は、デバイスエミュレータ３０からの処理結果を受信すると（ステップＣ１０）、処理対象となったデバイスについて、通信サービス制御ファイル２６に設定されているステータスを示す応答データを参照し、デバイスのステータスが変更されたか判別する（ステップＣ１１）。設定変更部２４ｄは、デバイスエミュレータ３０からの処理結果がデバイスのステータスを変更するものであった場合（ステップＣ１２、Ｙｅｓ）、この処理結果に応じて、通信サービス制御ファイル２６に応答データとして設定されたステータスを変更する（ステップＣ１３）。
【００４８】
図４には、図５のフローチャートに示す処理に対応するリクエストと処理結果の応答の流れＳ６〜Ｓ９を示している。  
デバイスエミュレータ３０においてステータス変更Ｓ６があると、通信サービス部２４に対して処理結果Ｓ７が送信される。通信サービス部２４は、ステータスの変更に応じて通信サービス制御ファイル２６のデバイスのステータスを示す応答データを更新する。通信サービス部２４は、アプリケーション２０（デバイスドライバ２１）からデバイスのステータス送信要求Ｓ８を受信すると、このリクエストに対して、変更済みのステータスを示す応答データをアプリケーション２０（デバイスドライバ２１）に返送する。
【００４９】
なお、前述した説明では、ユーザ操作によって、エミュレータ制御ユーティリティ３１を通じてデバイスのステータスを変更するとしているが、エミュレータ制御ユーティリティ３１からの通知によらないで、デバイスエミュレータ３０が予め決められた条件に基づいて（定期的、ランダムなど）、自動的にデバイスのステータスを変更して、通信サービス部２４に通知するようにしても良い。
【００５０】
このようにして、デバイスエミュレータ３０においてエミュレーションされるデバイスのステータスを変更することで、このステータスの変更を通信サービス制御ファイル２６の応答データに反映させることができる。従って、通信サービス部２４は、アプリケーション２０（デバイスドライバ２１）からのステータス送信要求のリクエストに対して、変更後のステータスを示す応答データによって応答することができる。これにより、アプリケーション２０による一連の処理の途中で、例えば、実際のデバイスと同様にして、デバイスが正常に動作することができない状態に変化したことを通信サービス部２４から応答することが可能となる。
【００５１】
なお、前述した説明では、通信サービス制御ファイル２６において、通信サービス部２４により応答する設定がされているリクエストについては、全て通信サービス部２４によりアプリケーション２０（デバイスドライバ２１）に応答するとしているが、定期的に発生するリクエスト（ステータス送信要求等）の一部をデバイスエミュレータ３０へ転送するようにしても良い。
【００５２】
図６は、本実施形態における定期的に発生するリクエストの一部をデバイスエミュレータ３０へ転送する場合のフローチャートを示している。なお、図３に示すフローチャートと同じ処理については、同一の処理ステップとして示している。  
通信サービス部２４は、アプリケーション２０（デバイスドライバ２１）からのリクエストをデバイスエミュレータ３０に転送すると判別した場合（ステップＣ２０、Ｙｅｓ）、前述と同様にして、アプリケーション２０にリクエストを転送して（ステップＣ２３）、このリクエスト処理結果を受信する。
【００５３】
一方、通信サービス部２４は、リクエストをデバイスエミュレータ３０に転送しないと判別した場合（ステップＣ２０、Ｎｏ）、受信したリクエストが定期的に発生されるリクエスト（ステータス送信要求等）であれば、このリクエストを受信した回数をカウントし、このカウント値が予め決められた所定回数を超過しているかを判別する。ここで、リクエストの受信回数が所定回数を超過していない場合、通信サービス部２４は、前述したように、通信サービス制御ファイル２６に設定された応答データを用いてリクエストに対して応答する（ステップＣ２４，Ｃ２５）。
【００５４】
通信サービス部２４は、リクエストが定期的に発生されることで、このリクエストを受信した回数が所定回数を超過した場合（ステップＣ２２、Ｙｅｓ）、通信サービス部２４は、このリクエストをデバイスエミュレータ３０に転送する（ステップＣ２３）。そして、通信サービス部２４は、このリクエストに対する処理結果をデバイスエミュレータ３０から受信して、デバイスドライバ２１に送信する（ステップＣ２６）。
【００５５】
図４には、図６のフローチャートに示す処理に対応するリクエストと処理結果の応答の流れＳ１０〜Ｓ１５を示している。  
通信サービス部２４は、定期的に発生されるリクエストの受信回数が所定回数を超過し、リクエストを転送すると判別すると（Ｓ１０）、デバイスエミュレータ３０に対してリクエストＳ１１を転送する。デバイスエミュレータ３０は、リクエストに対するリクエスト処理を実行して、処理結果Ｓ１２を通信サービス部２４に返送する。この時、デバイスエミュレータ３０は、エミュレータ制御ユーティリティ３１によってデバイスのステータスが変更されていた場合には、変更後のステータスを返送することになる。従って、図４中のステータス変更Ｓ４のように、ステータス変更後に直ちに処理結果Ｓ７を送信しなくても良い。
【００５６】
なお、通信サービス部２４は、リクエストを転送した場合、その後にアプリケーション２０（デバイスドライバ２１）から受信したステータスの送信要求Ｓ１３に対しては応答せず、デバイスエミュレータ３０の処理結果Ｓ１２を受信して通信サービス制御ファイル２６の応答データを変更した後、ステータスの送信要求Ｓ１４に対して、変更後のステータスを示す応答データによって処理結果Ｓ１５を返信する。
【００５７】
なお、前述した説明では、定期的に発生されるリクエスト（ステータス送信要求等）の受信回数が所定回数を超過した場合に、このリクエストをデバイスエミュレータ３０に転送しているが、このリクエストを継続して受信している時間が予め決められた所定時間を超過した場合に、リクエストをデバイスエミュレータ３０に転送するようにしても良い。
【００５８】
このようにして、定期的に発生するリクエストの一部をデバイスエミュレータ３０へ転送することで、デバイスエミュレータ３０においてエミュレーションされているデバイスのステータスを定期的に取得して、通信サービス制御ファイル２６の応答データを更新することができる。また、定期的に発生されるリクエストの一部をデバイスエミュレータ３０に転送することで（例えば１０ｓｅｃ間隔）、ネットワーク１６への負荷を大幅に増大させることがない。
【００５９】
次に、本実施形態における他のデバイスエミュレータ装置１８の構成例について図７を用いて説明する。  
図１に示すデバイスエミュレータ装置１０は、制御装置Ａ１２と制御装置Ｂ１４とがネットワーク１６によって接続されて構成されているが、図７に示すデバイスエミュレータ装置１８は、１つの制御装置（コンピュータ）によって実現されている。なお、図７では、図１と同一の構成部分については同一符号を付している。
【００６０】
図７に示すように、図１に示す制御装置Ｂ１４において実現した機能をエミュレータ機能３９として組み込まれている。エミュレータ機能３９には、デバイスエミュレータ４０、エミュレータ制御ユーティリティ４１、ネットワークインタフェース４２とが含まれ、それぞれ図１に示すデバイスエミュレータ３０、エミュレータ制御ユーティリティ３１、ネットワークインタフェース３２と同等の処理を実行する。  
このようにして、１つの制御装置によってもデバイスエミュレータ装置１８を実現することが可能である。
【００６１】
以上説明した少なくともひとつの実施形態によれば、アプリケーション２０（デバイスドライバ２１）からドライバへのリクエストに対して、このリクエストをドライバに転送することなく、リクエストに対する応答をアプリケーション２０に返す通信サービス部２４を設けることにより、アプリケーション２０の応答待ちの時間を短縮することができる。特に、デバイスのステータスを問い合わせるリクエストなど、頻繁に出されるリクエストについて、通信サービス部２４によって応答することにより、大幅にアプリケーション２０のリクエスト応答の待ち時間を短縮し、アプリケーション２０の付加を軽減することが可能となる。
【００６２】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【００６３】
また、前述した実施の形態において記載した処理は、コンピュータに実行させることのできるプログラムとして、例えば磁気ディスク（フレキシブルディスク、ハードディスク等）、光ディスク（ＣＤ−ＲＯＭ、ＤＶＤ等）、半導体メモリなどの記録媒体に書き込んで各種装置に提供することができる。また、通信媒体により伝送して各種装置に提供することも可能である。コンピュータは、記録媒体に記録されたプログラムを読み込み、または通信媒体を介してプログラムを受信し、このプログラムによって動作が制御されることにより、上述した処理を実行する。
【符号の説明】
【００６４】
１０…デバイスエミュレータ装置、１２…制御装置Ａ、１４…制御装置Ｂ、１６…ネットワーク、２０…アプリケーション、２１…デバイスドライバ、２２…フィルタドライバ、２４…通信サービス部、２５，３２…ネットワークインタフェース、２６…通信サービス制御ファイル、２７…設定ユーティリティ、３０…デバイスエミュレータ、３１…エミュレータ制御ユーティリティ。
【図１】
0005509237.tif 000002
【図２】
0005509237.tif 000003
【図３】
0005509237.tif 000004
【図４】
0005509237.tif 000005
【図５】
0005509237.tif 000006
【図６】
0005509237.tif 000007
【図７】
0005509237.tif 000008