(57)【要約】【課題】アプリケーションの開発を簡素化でき、且つデバイス制御にかかる処理パフォーマンスの向上を図ることができるコントローラーの制御方法およびコントローラーを提供する。【解決手段】アプリケーション１から処理要求を受信するステップと、受信した処理要求が初期化要求の場合、その要求がアプリケーション１起動後の最初の初期化要求か否かを判別するステップと、最初の初期化要求である場合、当該要求をデバイスドライバー３へ送信するステップと、デバイスドライバー３の初期化処理後の状態を示す初期化設定情報を記憶するステップと、デバイスドライバー３の状態を検出するステップと、デバイスドライバー３でエラーが発生した場合、その状態に基づく復帰処理をするステップと、デバイスドライバー３が復帰した場合、デバイスドライバー３の状態を、初期化設定情報に基づく状態に設定するための要求を行うステップと、を備える。【選択図】図３
2010277293.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションとデバイスドライバーとの間に介在し、前記アプリケーションからの処理要求を前記デバイスドライバーに転送すると共に、前記デバイスドライバーからの前記処理要求に対する応答を前記アプリケーションに転送するためのソフトウェアモジュールであるコントローラーの制御方法であって、
前記アプリケーションから前記処理要求を受信する処理要求受信ステップと、
受信した前記処理要求が初期化要求である場合、当該初期化要求が前記アプリケーションの起動後における最初の初期化要求か否かを判別する初期化要求判別ステップと、
前記初期化要求判別ステップにおける判別の結果、前記初期化要求が前記最初の初期化要求である場合、前記デバイスドライバーへ当該最初の初期化要求を送信する初期化要求送信ステップと、
前記最初の初期化要求に基づく前記デバイスドライバーの初期化処理後の状態を示す初期化設定情報を前記デバイスドライバーから取得し、当該初期化設定情報を記憶する初期化設定情報記憶ステップと、
前記デバイスドライバーの状態を検出する状態検出ステップと、
前記状態検出ステップにおいて、前記デバイスドライバーでエラーが発生したことを検出した場合、当該デバイスドライバーの状態に基づく復帰処理を実行する復帰処理ステップと、
前記復帰処理により前記デバイスドライバーがエラーから復帰した場合、前記デバイスドライバーの状態を、記憶した前記初期化設定情報に基づく状態に設定するための要求を前記デバイスドライバーに送信する初期化設定要求ステップと、を備えたことを特徴とするコントローラーの制御方法。
【請求項２】
前記初期化要求判別ステップにおける判別の結果、受信した前記初期化要求が前記最初の初期化要求ではない場合、当該初期化要求を前記デバイスドライバーに送信せず、前記デバイスドライバーの状態に応じて、前記アプリケーションに前記初期化要求に対する応答を返すことを特徴とする請求項１に記載のコントローラーの制御方法。
【請求項３】
アプリケーションとデバイスドライバーとの間に介在し、前記アプリケーションからの処理要求を前記デバイスドライバーに転送すると共に、前記デバイスドライバーからの前記処理要求に対する応答を前記アプリケーションに転送するためのソフトウェアモジュールであるコントローラーであって、
前記アプリケーションから前記処理要求を受信する処理要求受信手段と、
受信した前記処理要求が初期化要求である場合、当該初期化要求が前記アプリケーションの起動後における最初の初期化要求か否かを判別する初期化要求判別手段と、
前記初期化要求判別手段における判別の結果、前記初期化要求が前記最初の初期化要求である場合、前記デバイスドライバーへ当該最初の初期化要求を送信する初期化要求処理手段と、
前記最初の初期化要求に基づく前記デバイスドライバーの初期化処理後の状態を示す初期化設定情報を前記デバイスドライバーから取得する初期化設定情報取得手段と、
取得した前記初期化設定情報を記憶する初期化設定情報記憶手段と、
前記デバイスドライバーの状態を検出する状態検出手段と、
前記状態検出手段において、前記デバイスドライバーでエラーが発生したことを検出した場合、当該デバイスドライバーの状態に基づく復帰処理を実行する復帰処理手段と、
前記復帰処理により前記デバイスドライバーがエラーから復帰した場合、前記デバイスドライバーの状態を、記憶した前記初期化設定情報に基づく状態に設定するための要求を前記デバイスドライバーに送信する初期化設定要求手段と、を備えたことを特徴とするコントローラー。
【請求項４】
前記初期化要求処理手段は、
前記初期化要求判別手段における判別の結果、受信した前記初期化要求が前記最初の初期化要求ではない場合、当該初期化要求を前記デバイスドライバーに送信せず、前記デバイスドライバーの状態に応じて、前記アプリケーションに前記初期化要求に対する応答を返すことを特徴とする請求項３に記載のコントローラー。
【請求項５】
前記コントローラーの入出力インターフェイスは、前記デバイスドライバーの入出力インターフェイスと同一の仕様、および前記デバイスドライバーの入出力インターフェイスを拡張した仕様のいずれかであることを特徴とする請求項３または４に記載のコントローラー。
【請求項６】
前記処理要求は、複数の処理要求をまとめて定義したものであることを特徴とする請求項３ないし５のいずれかに記載のコントローラー。
【請求項７】
前記複数の処理要求は、マークアップ言語で定義されていることを特徴とする請求項６に記載のコントローラー。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションとデバイスドライバーとの間に介在し、デバイスドライバーを制御するためのソフトウェアモジュールとして機能するコントローラーの制御方法およびコントローラーに関するものである。
【背景技術】
【０００２】
従来、コンピューターに接続されたデバイス（例えば、プリンター等）を制御する場合、そのデバイスに対応するデバイスドライバーを用いて制御を行う（例えば、特許文献１参照）。一般的に、このようなデバイスドライバーは、対応するデバイスを制御するための数多くのインターフェイスを提供しており、アプリケーションプログラム（以下、アプリケーション）を開発する場合、このデバイスドライバーが提供するインターフェイスを利用してプログラムを作成することで、デバイスの基本的な動作制御をはじめ、デバイスの状態に応じた繊細なエラー処理を実行することができる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１１−２６５２６７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記のようにデバイスを制御する場合、一般的には、当該デバイスを制御するために非常に多数の関数と、デバイスに起因する多種類のエラー処理等が定義されているため、デバイスドライバーを利用して繊細なエラー処理を行う場合、アプリケーションの処理フローが複雑になるという問題がある。このため、アプリケーション開発にかかるコストが高くなる問題がある。
一方、アプリケーションの処理フローが複雑になることを避けるため一括処理等を行うようにし、エラーが発生した場合は、そのエラーの原因やデバイスドライバーの状態を無視し、常にデバイスドライバーを完全に初期化するというエラー処理を行う場合がある。しかしながら、一般的にデバイスドライバーの初期化処理には時間がかかるため、エラー処理として毎回初期化処理を行うことによりデバイスドライバーの処理パフォーマンスの低下を招くという問題がある。
【０００５】
本発明は、上記の問題に鑑み、アプリケーションの開発を簡素化でき、且つデバイスを制御するための処理パフォーマンスの向上を図ることができるコントローラーの制御方法およびコントローラーを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明のコントローラーの制御方法は、アプリケーションとデバイスドライバーとの間に介在し、アプリケーションからの処理要求をデバイスドライバーに転送すると共に、デバイスドライバーからの処理要求に対する応答をアプリケーションに転送するためのソフトウェアモジュールであるコントローラーの制御方法であって、アプリケーションから処理要求を受信する処理要求受信ステップと、受信した処理要求が初期化要求である場合、当該初期化要求がアプリケーションの起動後における最初の初期化要求か否かを判別する初期化要求判別ステップと、初期化要求判別ステップにおける判別の結果、初期化要求が最初の初期化要求である場合、デバイスドライバーへ当該最初の初期化要求を送信する初期化要求送信ステップと、最初の初期化要求に基づくデバイスドライバーの初期化処理後の状態を示す初期化設定情報をデバイスドライバーから取得し、当該初期化設定情報を記憶する初期化設定情報記憶ステップと、デバイスドライバーの状態を検出する状態検出ステップと、状態検出ステップにおいて、デバイスドライバーでエラーが発生したことを検出した場合、当該デバイスドライバーの状態に基づく復帰処理を実行する復帰処理ステップと、復帰処理によりデバイスドライバーがエラーから復帰した場合、デバイスドライバーの状態を、記憶した初期化設定情報に基づく状態に設定するための要求をデバイスドライバーに送信する初期化設定要求ステップと、を備えたことを特徴とする。
【０００７】
また、本発明のコントローラーは、アプリケーションとデバイスドライバーとの間に介在し、アプリケーションからの処理要求をデバイスドライバーに転送すると共に、デバイスドライバーからの処理要求に対する応答をアプリケーションに転送するためのソフトウェアモジュールであるコントローラーであって、アプリケーションから処理要求を受信する処理要求受信手段と、受信した処理要求が初期化要求である場合、当該初期化要求がアプリケーションの起動後における最初の初期化要求か否かを判別する初期化要求判別手段と、初期化要求判別手段における判別の結果、初期化要求が最初の初期化要求である場合、デバイスドライバーへ当該最初の初期化要求を送信する初期化要求処理手段と、最初の初期化要求に基づくデバイスドライバーの初期化処理後の状態を示す初期化設定情報をデバイスドライバーから取得する初期化設定情報取得手段と、取得した初期化設定情報を記憶する初期化設定情報記憶手段と、デバイスドライバーの状態を検出する状態検出手段と、状態検出手段において、デバイスドライバーでエラーが発生したことを検出した場合、当該デバイスドライバーの状態に基づく復帰処理を実行する復帰処理手段と、復帰処理によりデバイスドライバーがエラーから復帰した場合、デバイスドライバーの状態を、記憶した初期化設定情報に基づく状態に設定するための要求をデバイスドライバーに送信する初期化設定要求手段と、を備えたことを特徴とする。
【０００８】
これらの構成によれば、デバイスドライバーにエラーが発生した場合は、コントローラーにより、そのデバイスドライバーの状態に応じた（エラー内容に応じた）適切な復帰処理（エラー処理）を実行することができる。これにより、アプリケーション側では、繊細なエラー処理を行う必要がなくなるため、アプリケーションの処理フローを簡素化することができ、アプリケーション開発にかかるコストを低減させることができる。
また、コントローラー側で、最初の初期化処理後のデバイスドライバーの状態（初期化設定情報）を記憶しておき、デバイスドライバーがエラーから復帰した後、この初期化設定情報に基づいてデバイスドライバーの状態を初期化処理後と同等の状態にすることができる。これにより、通信やインスタンスの初期化など長時間を要する初期化処理を不要とすることができ、例えば、エラー処理で初期化処理を行うようなアプリケーションに本発明のコントローラーを導入することで処理パフォーマンスを向上することができる。
【０００９】
本発明のコントローラーの制御方法において、初期化要求判別ステップにおける判別の結果、受信した初期化要求が最初の初期化要求ではない場合、当該初期化要求をデバイスドライバーに送信せず、デバイスドライバーの状態に応じて、アプリケーションに初期化要求に対する応答を返すことが好ましい。
【００１０】
また、本発明のコントローラーにおいて、初期化要求処理手段は、初期化要求判別手段における判別の結果、受信した初期化要求が最初の初期化要求ではない場合、当該初期化要求をデバイスドライバーに送信せず、デバイスドライバーの状態に応じて、アプリケーションに初期化要求に対する応答を返すことが好ましい。
【００１１】
これらの構成によれば、コントローラーは、アプリケーションからの初期化要求をデバイスドライバーにブリッジせず、自身で当該初期化要求に対する応答を返す。つまり、デバイスドライバーが提供する初期化処理（通信やインスタンスを実際に初期化する処理）を実行しない。これにより、例えば、毎回同様のデバイス制御処理を実行するために所定のタイミングで初期化処理を要求するようなアプリケーションや、エラー処理で初期化処理を行うアプリケーションに対し、本発明のコントローラーを導入することで、処理パフォーマンスを向上させることができる。
【００１２】
本発明のコントローラーにおいて、コントローラーの入出力インターフェイスは、デバイスドライバーの入出力インターフェイスと同一の仕様、およびデバイスドライバーの入出力インターフェイスを拡張した仕様のいずれかであることが好ましい。
【００１３】
この構成によれば、コントローラーは、デバイスドライバーの入出力インターフェイスと同一仕様、あるいは拡張した仕様の入出力インターフェイスを提供する。これにより、アプリケーション開発者は、新たな仕様の入出力インターフェイスを覚える必要がなく、従来からあるデバイスドライバーにより提供されている入出力インターフェイスを利用するのと同様の感覚で開発を行うことができるため、アプリケーションの開発効率を低下させることない。
【００１４】
本発明のコントローラーにおいて、処理要求は、複数の処理要求をまとめて定義したものであることが好ましい。
【００１５】
また、本発明のコントローラーにおいて、複数の処理要求は、マークアップ言語で定義されていることが好ましい。
【００１６】
これらの構成によれば、例えば、ＸＭＬ（Extensible  Markup  Language）で複数の処理要求をまとめて定義し、一括処理するアプリケーションのように、エラー処理（エラーハンドリング）を繊細に行うことができないアプリケーションでも、本発明のコントローラーを導入することで適切なエラー処理を行うことができるため、このような一括処理を行うアプリケーションの実現が容易になる。
【図面の簡単な説明】
【００１７】
【図１】本実施形態にかかるコンポーネントモデルの構成を示すブロック図である。
【図２】コントローラーの機能ブロック図である。
【図３】大まかなエラー処理を行うアプリケーションを対象とした場合のコントローラーの処理の一例を説明するシーケンス図である。
【図４】エラー処理を行わないアプリケーションを対象とした場合のコントローラーの処理の一例を説明するシーケンス図である。
【図５】一定の処理毎にデバイスドライバーの初期化を行うアプリケーションを対象とした場合のコントローラーの処理の一例を説明するシーケンス図である。
【発明を実施するための形態】
【００１８】
以下、添付の図面を参照して、本発明のコントローラーを含むコンポーネントモデルについて説明する。図１は本実施形態のコンポーネントモデルＣＭの構成を示すブロック図である。同図に示すように、コンポーネントモデルＣＭは、アプリケーション１と、コントローラー２と、デバイスドライバー３とにより構成されている。なお、これらアプリケーション１、コントローラー２およびデバイスドライバー３は、コンピューターに搭載されたＯＳ（Operating  System）上で動作するソフトウェアモジュール（プログラム）として実現される。
【００１９】
アプリケーション１は、コンピューターに接続されたデバイス（例えば、プリンター等，図示省略）に所定の動作を実行させるための処理要求や、デバイスドライバー３の処理でエラーが発生した場合のエラー処理に関する処理要求などを行うプログラムである。これら処理要求は、コントローラー２が提供する入出力インターフェイス（第１入出力インターフェイス１１）を用いて定義されており、アプリケーション１は、コントローラー２に対して各処理要求を送信すると共に、コントローラー２から当該各処理要求に対する応答（処理の成功／失敗等）を受信する。
【００２０】
コントローラー２は、アプリケーション１とデバイスドライバー３との間に介在するソフトウェアモジュールであり、アプリケーション１からの処理要求をデバイスドライバー３に転送する（ブリッジする）と共に、デバイスドライバー３からの処理要求に対する応答をアプリケーション１に転送する（ブリッジする）ものである。具体的には、コントローラー２は、アプリケーション１に対して上記の第１入出力インターフェイス１１を提供しており、この第１入出力インターフェイス１１を利用することで、アプリケーション１からの処理要求の受信、およびアプリケーション１への処理要求に対する応答を行なう。また、コントローラー２は、デバイスドライバー３が提供する入出力インターフェイス（第２入出力インターフェイス１２）を用いて、アプリケーション１からの処理要求をデバイスドライバー３に転送、およびデバイスドライバー３から処理要求に対する応答を受信する。
【００２１】
デバイスドライバー３は、対象となるデバイスを制御するためのプログラムであり、各デバイスの仕様に基づいて作成される。デバイスドライバー３は、コントローラー２に対して、上記の第２入出力インターフェイス１２を提供しており、この第２入出力インターフェイス１２を利用して、コントローラー２からの処理要求を受信すると共に、コントローラー２に対して当該処理要求に対する応答を行う。
【００２２】
なお、コントローラー２が提供する第１入出力インターフェイス１１の仕様は、デバイスドライバー３が提供する第２入出力インターフェイス１２の仕様と同一、あるいは第２入出力インターフェイス１２を拡張した仕様（例えば、ＸＭＬに対応するように拡張した仕様）であることが好ましい。これにより、アプリケーション開発者は、新たな入出力インターフェイスの仕様を覚える必要がなく、従来からあるデバイスドライバー３により提供されている入出力インターフェイスを利用するのと同様の感覚で開発を行うことができるため、アプリケーション１の開発効率を低下させることない。
【００２３】
次に、図２の機能ブロック図を参照して、コントローラー２の機能構成について説明する。コントローラー２は、処理要求受信手段２１、要求処理手段２２、応答処理手段２３、初期化設定情報取得手段２４、初期化設定情報記憶手段２５、状態検出手段２６、復帰処理手段２７、および初期化設定要求手段２８を有している。
【００２４】
処理要求受信手段２１は、アプリケーション１から処理要求を受信する手段として機能する。要求処理手段２２は、アプリケーション１から受信した処理要求の内容およびデバイスドライバー３の状態に基づいて、適切な処理を行う手段として機能する。具体的には、アプリケーション１からの処理要求が初期化要求であった場合、当該初期化要求がアプリケーション１起動後の最初の初期化要求か否かを判別する（初期化要求判別手段）。この判別の結果、最初の初期化要求である場合、当該最初の初期化要求をデバイスドライバー３に送信する（初期化要求処理手段）。一方、最初の初期化要求で無い場合、当該初期化要求をデバイスドライバー３にブリッジ（送信）せず、デバイスドライバー３の状態に応じてアプリケーション１に初期化要求に対する応答を返す（初期化要求処理手段）。
【００２５】
また、処理要求が一連の処理を終了するための終了処理要求である場合、当該終了処理要求をデバイスドライバー３にブリッジせず、アプリケーション１に対して処理の成功を示す応答を返す。さらに、処理要求が上記初期化要求および終了処理要求以外のもの（以下、「通常処理要求」と称す。）の場合であって、デバイスドライバー３が正常動作している場合は、当該通常処理要求をデバイスドライバー３にブリッジし、デバイスドライバー３にエラーが発生している場合は、当該通常処理要求をデバイスドライバー３にブリッジせず、アプリケーション１に対して通常処理要求の失敗を示す応答を返す。
【００２６】
応答処理手段２３は、デバイスドライバー３から処理要求に対する応答を受信し、これをアプリケーション１に送信する手段として機能する。つまり、デバイスドライバー３からの応答をアプリケーション１にブリッジする手段として機能する。
【００２７】
初期化設定情報取得手段２４は、デバイスドライバー３から初期化設定情報を取得する手段として機能する。この初期化設定情報は、デバイスドライバー３がアプリケーション１からの最初の初期化要求により初期化処理（実際に通信やインスタンスの初期化をする処理）を実行した後の状態（以下、この状態を「初期化状態」と称す。）を示す情報である。初期化設定情報記憶手段２５は、取得した初期化設定情報を記憶（保存）する手段として機能する。
【００２８】
状態検出手段２６は、デバイスドライバー３の状態を検出する手段として機能するものであり、デバイスドライバー３からの処理要求に対する応答に基づいて自身（コントローラー２）の状態を設定し、この状態を確認することで、間接的にデバイスドライバー３の状態を検出する。具体的には、デバイスドライバー３からの処理要求に対する応答が処理の成功を示す応答であれば、自身の状態を正常状態に設定し、この状態（正常状態）を確認することでデバイスドライバー３は正常な状態であると検出する。一方、処理の失敗を示す応答であれば、自身の状態をエラー復帰待ち状態に設定し、この状態（エラー復帰待ち状態）を確認することでデバイスドライバー３にエラーが発生したことを検出する。
【００２９】
復帰処理手段２７は、上記の状態検出手段２６によりデバイスドライバー３にエラーが発生したことを検出した場合、デバイスドライバー３の状態（エラーの内容）に基づいて、適切な復帰処理（例えば、エラーを修復するためのコマンドを送る等）を行う手段として機能する。
【００３０】
初期化設定要求手段２８は、復帰処理手段２７によりデバイスドライバー３がエラーから復帰した場合、デバイスドライバー３の状態を、記憶した初期化設定情報に基づく状態に設定するための手段として機能する。これにより、実際に通信やインスタンスの初期化処理を行うことなく、デバイスドライバー３の状態を初期化状態（初期化処理後と同様の状態）に設定することができる。
【００３１】
ここで、図３ないし図５のシーケンス図を参照して、コントローラー２の処理について具体例を挙げて説明する。図３は、大まかなエラー処理を行うアプリケーション１を対象とした場合のコントローラー２の処理について説明するシーケンスの一例である。なお、大まかなエラー処理とは、デバイスドライバー３でエラーが発生した場合、アプリケーション１はエラーの内容やデバイスドライバー３の状態に関係なく終了処理要求および初期化要求を行う処理を言う。
【００３２】
まず、アプリケーション１は、コントローラー２に対して、デバイスドライバー３を初期化するための初期化要求を行う（Ｓ０１）。コントローラー２は、この初期化要求が、アプリケーション１起動後の最初の初期化要求か否か（つまり、アプリケーション１から受けた最初の初期化要求か否か）を判別する。ここでは、最初の初期化要求であるため、コントローラー２は、当該初期化要求をデバイスドライバー３へブリッジする（Ｓ０２）。初期化要求を受けたデバイスドライバー３は、当該初期化要求に基づいて初期化処理（通信やインスタンスの初期化）を実行し（Ｓ０３）、初期化処理が成功した旨を示す応答（以下、「成功応答」と称す。）をコントローラー２に返す（Ｓ０４）。
【００３３】
続いて、初期化要求に対する成功応答を受けたコントローラー２は、デバイスドライバー３の現在の状態、つまり初期化処理直後の状態を取得し、初期化設定情報として記憶する（Ｓ０５）。そして、コントローラー２は、デバイスドライバー３からの初期化要求に対する成功応答を、アプリケーション１にブリッジする（Ｓ０６）。
【００３４】
続いて、アプリケーション１は、コントローラー２に対して、デバイスドライバー３に所定の処理Ａを実行させるための処理要求（処理要求Ａ）を行う（Ｓ０７）。処理要求Ａを受けたコントローラー２は、自身の状態（正常状態かエラー復帰待ち状態か）を確認する。つまり、デバイスドライバー３にエラーが発生しているか否かを確認する。ここでは、自身の状態は正常状態であるため（つまり、デバイスドライバー３は正常動作しているため）、コントローラー２は、当該処理要求Ａをデバイスドライバー３にブリッジする（Ｓ０８）。
【００３５】
処理要求Ａを受けたデバイスドライバー３は、当該処理要求Ａに基づいて処理Ａを実行し（Ｓ０９）、処理Ａが成功した旨を示す成功応答をコントローラー２に返す（Ｓ１０）。そして、コントローラー２は、デバイスドライバー３からの処理要求Ａに対する成功応答を、アプリケーション１にブリッジする（Ｓ１１）。
【００３６】
続いて、アプリケーション１は、デバイスドライバー３に所定の処理Ｂを実行させるための処理要求（処理要求Ｂ）を行う（Ｓ１２）。処理要求Ｂを受けたコントローラー２は、自身の状態（正常状態かエラー復帰待ち状態か）を確認する。ここでは、自身の状態は正常状態であるため（つまり、デバイスドライバー３は正常動作しているため）、コントローラー２は、当該処理要求Ｂをデバイスドライバー３にブリッジする（Ｓ１３）。
【００３７】
処理要求Ｂを受けたデバイスドライバー３は、処理要求Ｂに基づいて処理Ｂを実行する（Ｓ１４）。この時、処理Ｂが失敗すると、デバイスドライバー３は、処理Ｂが失敗した旨を示す応答（以下、「失敗応答」と称す。）をコントローラー２に返す（Ｓ１５）。コントローラー２は、デバイスドライバー３から処理要求Ｂに対する失敗応答を受けると、これをトリガーとしてデバイスドライバー３でエラーが発生したことを検出すると共に、自身の状態をエラー復帰待ち状態に遷移する（Ｓ１６）。そして、コントローラー２は、処理要求Ｂに対する失敗応答をアプリケーション１にブリッジする（Ｓ１７）。
【００３８】
次に、コントローラー２は、デバイスドライバー３の状態（エラー内容）を確認し、この状態に基づいた復帰処理を実行する（例えば、デバイスドライバー３のエラー内容に応じた所定の復帰命令を出す；Ｓ１８）。
【００３９】
ここで、処理要求Ｂに対する失敗応答を受けたアプリケーション１が、エラー処理を行うべく、コントローラー２に対して、一連の処理を終了するための処理要求（終了処理要求）を行うと（Ｓ１９）、コントローラー２は、当該処理終了要求をデバイスドライバー３にブリッジせず、アプリケーション１に対して終了処理要求が成功した旨を示す成功応答を返す（Ｓ２０）。
【００４０】
続いて、Ｓ１８の復帰処理により、デバイスドライバー３がエラーから復帰すると、デバイスドライバー３は、コントローラー２に対してその旨（エラーから復帰した旨）を通知（エラー復帰通知）する（Ｓ２１）。エラー復帰通知を受けたコントローラー２は、デバイスドライバー３の状態を、記憶した初期化設定情報に基づく状態に設定するように要求する（Ｓ２２）。これにより、デバイスドライバー３は、自身の状態を初期化状態（Ｓ０３の初期化処理を実行した直後の状態と同様の状態）に設定する（Ｓ２３）。そして、コントローラー２は、デバイスドライバー３から当該設定が成功した旨を示す成功応答を受け（Ｓ２４）、自身の状態をエラー復帰待ち状態から正常状態に遷移する（Ｓ２５）。
【００４１】
ここで、アプリケーション１からエラー処理の一環として初期化要求が行われると（Ｓ２６）、コントローラー２は、当該初期化要求をデバイスドライバー３にブリッジすることなく、アプリケーション１に対して当該初期要求に対する成功応答を返す（Ｓ２７）。つまり、アプリケーション１からの初期化要求があっても、実際にはデバイスドライバー３の初期化処理を実行しない。そして、初期化要求に対する成功応答を受けたアプリケーション１は、デバイスドライバー３のエラー処理が完了したと判断し、処理要求Ａのリトライを行う（Ｓ２８）。
【００４２】
処理要求Ａを受けたコントローラー２は、自身の状態（正常状態かエラー復帰待ち状態か）を確認する。ここでは、自身の状態は正常状態であるため（つまり、デバイスドライバー３はエラーから復帰し、正常動作しているため）、コントローラー２は、当該処理要求Ａをデバイスドライバー３にブリッジする（Ｓ２９）。そして、処理要求Ａを受けたデバイスドライバー３は、処理要求Ａに基づいて処理Ａを実行し（Ｓ３０）、処理Ａが成功した旨を示す成功応答をコントローラー２に返す（Ｓ３１）。そして、コントローラー２は、デバイスドライバー３からの処理要求Ａに対する成功応答を、アプリケーション１にブリッジする（Ｓ３２）。以降、アプリケーション１は、処理要求Ａに続く処理要求（処理要求Ｂ）を行う。
【００４３】
このように、エラー処理として、デバイスドライバー３の状態やエラー内容にかかわらず初期化処理（初期化要求）をするアプリケーション１に対して本発明のコントローラー２を導入することにより、アプリケーション１がエラー処理として行う初期化要求に対してデバイスドライバー３の初期化処理行わないため、処理全体のパフォーマンスの向上を図ることができる。
【００４４】
次に、図４について説明する。図４は、エラー処理を行わないアプリケーション１を対象とした場合のコントローラー２の処理について説明するシーケンスの一例である。この図４のシーケンスは、アプリケーション１が、デバイスドライバー３のエラー発生時にエラー処理を行わず、処理要求のリトライを行う点で図３のシーケンスと異なる。以下、異なる部分について説明する。
【００４５】
アプリケーション１は、Ｓ５７の処理で、処理要求Ｂに対する失敗応答を受けると、コントローラー２に処理要求Ａのリトライを行う（Ｓ５９）。処理要求Ａを受けたコントローラー２は、自身の状態（正常状態かエラー復帰待ち状態か）を確認する（Ｓ６０）。ここでは、自身の状態はエラー復帰待ち状態であるため（つまり、デバイスドライバー３にエラーが発生しているため）、コントローラー２は、当該処理要求Ａをデバイスドライバー３にブリッジせず、アプリケーション１に対して処理要求Ｂの失敗応答を返す（Ｓ６１）。
【００４６】
つまり、コントローラー２は、Ｓ５８の復帰処理によりデバイスドライバー３がエラーから復帰するまでは（デバイスドライバー３にエラーが発生している間は）、アプリケーション１からの処理要求をデバイスドライバー３にブリッジすることなく、アプリケーション１に対して失敗応答を返す処理を行う。このように、コントローラー２側でエラー処理を行うため、処理要求が失敗した場合、繊細なエラー処理を行なわずに処理要求をリトライするようなアプリケーション１にも対応することできる。
【００４７】
次に、図５について説明する。図５は、一定の処理毎にデバイスドライバー３の初期化を行うアプリケーション１を対象とした場合のコントローラー２の処理について説明するシーケンスの一例である。ここでは、処理要求Ａ、処理要求Ｂ、終了処理要求および初期化要求を続けて行う処理を１セットとし、この処理セットを繰り返し行うアプリケーション１を例示する。なお、Ｓ８１からＳ８６までの処理は、図３のＳ０１からＳ０６までの処理と同様であるため、説明を省略する。
【００４８】
Ｓ８１からＳ８６の処理完了後、アプリケーション１は、コントローラー２に対して、デバイスドライバー３に所定の処理Ａを実行させるための処理要求（処理要求Ａ）を行う（Ｓ８７）。処理要求Ａを受けたコントローラー２は、デバイスドライバー３の状態を確認する。ここでは、デバイスドライバー３は正常動作しているため、コントローラー２は、処理要求Ａをデバイスドライバー３にブリッジする（Ｓ８８）。処理要求Ａを受けたデバイスドライバー３は、当該処理要求Ａに基づいて処理Ａを実行し（Ｓ８９）、処理Ａが成功した旨を示す成功応答をコントローラー２に返す（Ｓ９０）。そして、コントローラー２は、デバイスドライバー３からの処理要求Ａに対する成功応答を、アプリケーション１にブリッジする（Ｓ９１）。
【００４９】
続いて、アプリケーション１は、コントローラー２に対して、デバイスドライバー３に所定の処理Ｂを実行させるための処理要求（処理要求Ｂ）を行う（Ｓ９２）。処理要求Ｂを受けたコントローラー２は、デバイスドライバー３の状態を確認する。ここでは、デバイスドライバー３は正常動作しているため、コントローラー２は、当該処理要求Ｂをデバイスドライバー３にブリッジする（Ｓ９３）。処理要求Ｂを受けたデバイスドライバー３は、当該処理要求Ｂに基づいて処理Ｂを実行し（Ｓ９４）、処理Ｂが成功した旨を示す成功応答をコントローラー２に返す（Ｓ９５）。そして、コントローラー２は、デバイスドライバー３からの処理要求Ｂに対する成功応答を、アプリケーション１にブリッジする（Ｓ９６）。
【００５０】
続いて、アプリケーション１は、コントローラー２に対して、一連の処理を終了するための処理要求（終了処理要求）を行うと（Ｓ９７）、コントローラー２は、当該処理終了要求をデバイスドライバー３にブリッジせず、アプリケーション１に対して終了処理要求が成功した旨を示す成功応答を返す（Ｓ９８）。続いて、アプリケーション１は、コントローラー２に対して初期化要求を行うと（Ｓ９９）、コントローラー２は、当該初期化要求をデバイスドライバー３にブリッジせず、アプリケーション１に対して初期化要求が成功した旨を示す成功応答を返す（Ｓ１００）。この後、アプリケーション１は、Ｓ８７からＳ１００までの処理（一点鎖線で囲った範囲の処理）を繰り返す。
【００５１】
このように、本発明のコントローラー２は、アプリケーション１が一定の処理毎に（所定のタイミングで）初期化処理を要求したとしても、デバイスドライバー３に初期化要求をブリッジしない。つまり、デバイスドライバー３の初期化処理を実行しない。これにより、一定の処理毎に初期化処理を要求するようなアプリケーション１に対し、本発明のコントローラー２を導入することで、処理パフォーマンスを向上させることができる。
【００５２】
以上のように、本実施形態によれば、デバイスドライバー３にエラーが発生した場合は、コントローラー２がそのデバイスドライバー３の状態に応じた（エラー内容に応じた）適切な復帰処理（エラー処理）を実行する。これにより、アプリケーション１では、繊細なエラー処理を行う必要がなくなるため、アプリケーション１の処理フローを簡素化することができ、アプリケーション開発にかかるコストを低減させることができる。
【００５３】
また、コントローラー２で、最初の初期化処理後のデバイスドライバー３の状態（初期化設定情報）を記憶しておき、デバイスドライバー３がエラーから復帰した後、この初期化設定情報に基づいてデバイスドライバー３の状態を初期化処理後と同等の状態にすることができる。これにより、通信やインスタンスの初期化など長時間を要する初期化処理を不要とすることができ、処理パフォーマンスを向上することができる。
【００５４】
なお、アプリケーション１は、コントローラー２が提供する第１入出力インターフェイス１１を用いてデバイス制御を行うものであれば良く、例えば、処理要求毎にその処理が成功したか失敗したかを判断し、判断結果に基づいて次の処理要求を確定する逐次処理を行うものであっても良いし、複数の処理要求をまとめて実行した後、処理の成功／失敗を判断し、この判断結果に基づいて次の処理要求を確定する一括処理を行うものであっても良い。
【００５５】
後者の例として、例えば、マークアップ言語の一種であるＸＭＬで複数の処理要求をまとめて定義し、一括処理するアプリケーション１が考えられる。このアプリケーション１のように、一括処理するがために、エラー処理（エラーハンドリング）を繊細に行うことができないアプリケーション１であっても、本発明のコントローラー２を導入することで適切なエラー処理を行うことができるため、このような一括処理を行うアプリケーション１の実現が容易になる。
【００５６】
また、本実施形態のコントローラー２は、ＵＰＯＳ（Unified  POS）の規格に則った仕様を実現するデバイスドライバー３（ＵＰＯＳ準拠ドライバー）にも適用することができる。この場合、コントローラー２とＵＰＯＳ準拠ドライバーとの間の入出力インターフェイス（第２入出力インターフェイス１２）を、ＵＰＯＳの仕様に準拠した入出力インターフェイスとすることで実現することができる。
【符号の説明】
【００５７】
１…アプリケーション  ２…コントローラー  ３…デバイスドライバー  ２１…処理要求受信手段  ２２…要求処理手段  ２３…応答処理手段  ２４…初期化設定情報取得手段  ２５…初期化設定情報記憶手段  ２６…状態検出手段  ２７…復帰処理手段  ２８…初期化設定要求手段  ＣＭ…コンポーネントモデル
【図１】
2010277293.tif 000003
【図２】
2010277293.tif 000004
【図３】
2010277293.tif 000005
【図４】
2010277293.tif 000006
【図５】
2010277293.tif 000007