(57)【要約】【課題】  オペレーティングシステムによってサポートされていないデバイスのためのプラグアンドプレイ（ＰｎＰ）機能を提供する。【解決手段】  サポートされていないデバイスのインストールに応答して、オペレーティングシステムは、ユーザモードコードで常駐するデバイスマネージャアプリケーションにイベントを送る。イベントを受け取ると、デバイスマネージャアプリケーションは、サポートのための構成エントリおよびソフトウェアを自動的にインストールする。イベントは、共通コントロールライブラリ（ＣＣＬ）を介してアプリケーションに公開される。ライブラリは、デバイスにアクセスするためのジェネリックインターフェースを提供することを目的とする。登録が行われたアプリケーションは、ＣＣＬを使用して、デバイスに関連するイベントを受け取ることができる。【選択図】  図２
2006012128.tif 000002
【特許請求の範囲】
【請求項１】
オペレーティングシステムにサポートされていないデバイスのためのプラグアンドプレイ（ＰｎＰ）機能を提供するための方法であって、
デバイスに関連するイベントを決定すること、
前記デバイスのＩＤを決定すること、
前記デバイスに関連するオペレーティングシステムによって前記デバイスがサポートされていないとき、前記デバイスを、ユーザモードコードで実装されるサービスオブジェクトにマップすること、および、
アプリケーションが、ジェネリックインターフェースを介して前記デバイスにアクセスすることをできるように、前記ジェネリックインターフェースを前記アプリケーションに公開することを含むことを特徴とする方法。
【請求項２】
前記イベントは、プラグアンドプレイ（ＰｎＰ）イベントであることを特徴とする請求項１に記載の方法。
【請求項３】
前記デバイスは、小売業向けデバイスであることを特徴とする請求項１に記載の方法。
【請求項４】
前記小売業向けデバイスは、バンプバー、自動釣り銭機、キャッシュドロワー、ＣＡＴ、コインディスペンサ、フィスカルプリンタ、ハードトータル、キーロック、バーコードスキャナ、トーンインジケータ、動作検出器、ラインディスプレイ、磁気インクリーダ、磁気ストライプリーダ、ＰＩＮパッド、ポイントカード機、ＰＯＳキーボード、ＰＯＳプリンタ、リモートオーダーディスプレイ、秤、シグニチャキャプチャ、および、チェックイメージスキャナのうち少なくとも１つから選択されることを特徴とする請求項３に記載の方法。
【請求項５】
前記イベントが、前記デバイスがインストールされたことを示すとき、前記デバイスを構成することをさらに含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記ジェネリックインターフェースを公開することは、前記デバイスに関連するプロパティ、メソッド、およびイベントを、前記アプリケーションに提供することをさらに含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記デバイスに関連するオペレーティングシステムにより前記デバイスがサポートされていないとき、前記デバイスを、ユーザモードコードで実装される前記サービスオブジェクトにマップすることは、前記デバイスがレガシデバイスであるとき、および、前記デバイスがＰｎＰデバイスであるときを決定することをさらに含むことを特徴とする請求項１に記載の方法。
【請求項８】
オペレーティングシステムによってサポートされていないデバイスのためのプラグアンドプレイ（ＰｎＰ）機能を提供するためのシステムであって、
前記オペレーティングシステムのカーネルモードで動作するイベントマネージャを含むオペレーティングシステムであって、
前記オペレーティングシステムによってサポートされていないデバイスに関連するイベントを検出し、
ユーザモードで常駐するデバイスマネージャアプリケーションに、前記イベントを提供するように構成されたオペレーティングシステムと、
前記デバイスがレガシデバイスであるとき、および、前記デバイスがＰｎＰデバイスであるときを決定するように構成され、前記デバイスに関連するプロパティ、メソッド、およびイベントを前記デバイスに提供するように構成された共通コントロールライブラリ（ＣＣＬ）を含む、前記デバイスマネージャアプリケーションと、
前記ＣＣＬを介して前記デバイスマネージャアプリケーションと対話し、前記デバイスに関連する前記プロパティ、メソッド、およびイベントを受け取るように構成されたアプリケーションとを含むことを特徴とするシステム。
【請求項９】
前記オペレーティングシステムは、デバイスＩＤを前記デバイスマネージャアプリケーションに提供するようにさらに構成され、前記デバイスマネージャアプリケーションは、前記デバイスＩＤを受け取り、前記ＩＤに応答して、前記デバイスをインストールし、前記デバイスを、ユーザモードコードで実装されるサービスオブジェクトにマップするようにさらに構成されることを特徴とする請求項８に記載のシステム。
【請求項１０】
前記デバイスは、バンプバー、自動釣り銭機、キャッシュドロワー、ＣＡＴ、コインディスペンサ、フィスカルプリンタ、ハードトータル、キーロック、バーコードスキャナ、トーンインジケータ、動作検出器、ラインディスプレイ、磁気インクリーダ、磁気ストライプリーダ、ＰＩＮパッド、ポイントカード機、ＰＯＳキーボード、ＰＯＳプリンタ、リモートオーダーディスプレイ、秤、シグニチャキャプチャ、および、チェックイメージスキャナのうち少なくとも１つから選択される小売業向けデバイスであることを特徴とする請求項９に記載のシステム。
【請求項１１】
前記デバイスマネージャアプリケーションは、レガシデバイスが前記ＣＣＬを介して前記アプリケーションによって使用されることを可能にするように構成されたレガシ相互運用層をさらに含むことを特徴とする請求項８に記載のシステム。
【請求項１２】
前記デバイスマネージャアプリケーションは、前記オペレーティングシステムによってサポートされていないデバイスに関連するイベントを受け取ることを前記オペレーティングシステムに登録するようにさらに構成されることを特徴とする請求項８に記載のシステム。
【請求項１３】
オペレーティングシステムによってサポートされていないデバイスのためのプラグアンドプレイ（ＰｎＰ）機能を提供するためのコンピュータ実行可能命令を有するコンピュータ可読媒体であって、
デバイスに関連するイベントを提供するように構成されたオペレーティングシステムのカーネルモードで常駐する第１のコンポーネントと、
前記第１のコンポーネントによって提供された前記イベントを受け取り、
アプリケーションが前記デバイスにアクセスしジェネリックインターフェースを介して前記イベントを受け取ることができるように、前記ジェネリックインターフェースを前記アプリケーションに公開するように構成された、前記オペレーティングシステムの、ユーザモードで常駐する第２のコンポーネントとを含むことを特徴とするコンピュータ可読媒体。
【請求項１４】
前記イベントは、プラグアンドプレイ（ＰｎＰ）イベントに関係することを特徴とする請求項１３に記載のコンピュータ可読媒体。
【請求項１５】
前記ジェネリックインターフェースは、ＰｎＰデバイスおよびレガシデバイスと対話するための統一された方法を前記アプリケーションに提供するようにさらに構成されることを特徴とする請求項１４に記載のコンピュータ可読媒体。
【請求項１６】
前記デバイスは、バンプバー、自動釣り銭機、キャッシュドロワー、ＣＡＴ、コインディスペンサ、フィスカルプリンタ、ハードトータル、キーロック、バーコードスキャナ、トーンインジケータ、動作検出器、ラインディスプレイ、磁気インクリーダ、磁気ストライプリーダ、ＰＩＮパッド、ポイントカード機、ＰＯＳキーボード、ＰＯＳプリンタ、リモートオーダーディスプレイ、秤、シグニチャキャプチャ、および、チェックイメージスキャナのうち少なくとも１つから選択される小売業向けデバイスであることを特徴とする請求項１４に記載のコンピュータ可読媒体。
【請求項１７】
前記第２のコンポーネントは、前記デバイスがインストールされることを前記イベントが示すとき、前記デバイスをインストールするようにさらに構成されることを特徴とする請求項１３に記載のコンピュータ可読媒体。
【請求項１８】
前記ジェネリックインターフェースを公開することは、
前記デバイスに関連するプロパティ、メソッド、およびイベントを、前記アプリケーションに提供することをさらに含むことを特徴とする請求項１３に記載のコンピュータ可読媒体。
【請求項１９】
前記第２のコンポーネントは、前記デバイスが前記オペレーティングシステムによってサポートされていないとき、前記デバイスを、ユーザモードコードで実装されるサービスオブジェクトにマップするようにさらに構成されることを特徴とする請求項１８に記載のコンピュータ可読媒体。
【請求項２０】
前記第１のコンポーネントは、デバイスＩＤを、前記第２のコンポーネントに提供するようにさらに構成され、前記第２のコンポーネントは、インストールされた前記デバイスのタイプを決定し、構成ファイルに基づいて前記デバイスを構成するようにさらに構成されることを特徴とする請求項１８に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オペレーティングシステムにサポートされていないデバイスのためのプラグアンドプレイ（ＰｎＰ）機能を提供することに関する。
【背景技術】
【０００２】
過去数十年間、小売業でデバイスを使用する方法は、ほとんど変化していない。今日における小売業向けデバイスをインストールする経験は、プラグアンドプレイ（ｐｌｕｇ  ａｎｄ  ｐｌａｙ）の出現以前におけるＰＣにデバイスをインストールする経験と同様である。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
デバイスをインストールしようとするとき、デバイスのポートが、ネットワークカード、モデム、マウス、および他のネットワークカードの間で競合することがよくある。小売業者が、「箱を開き、デバイスを配置し、ジャンパ（ｊｕｍｐｅｒ）設定を変更する」か、または何らかのユーザに分かりにくい同様の処置を行わなければならないことが大変に多い。これらのデバイスのインストールは、困難で時間がかかるものとなり得る。
【課題を解決するための手段】
【０００４】
簡潔に述べると、本発明は、オペレーティングシステムにサポートされていないデバイスのためのプラグアンドプレイ（ＰｎＰ）機能を提供することに関する。
【０００５】
本発明の一態様では、サポートされていないデバイスは、インストールされるときにオペレーティングシステムに検出される。このインストールに応答して、オペレーティングシステムは、このイベントを、ユーザモードで常駐しているデバイスマネージャアプリケーションに送る。インストールイベントを受け取ると、デバイスマネージャアプリケーションは、追加されたデバイスを決定し、サポートのための構成エントリおよびソフトウェアを自動的にインストールする。例えば、デバイスマネージャアプリケーションは、自動的に、レジストリを更新し、そのデバイスに対するサポートバイナリ（ｓｕｐｐｏｒｔ  ｂｉｎａｒｙ）をインストールする。デバイスがインストールされた後、小売業向けデバイスは、どんなプログラミング変更も必要とせずに、アプリケーションからアクセスすることができる。
【０００６】
本発明の他の態様では、ＰｎＰイベントは、共通コントロールライブラリ（ｃｏｍｍｏｎ  ｃｏｎｔｒｏｌ  ｌｉｂｒａｒｙ）（ＣＣＬ）を介して、小売業向けアプリケーションに公開される。このライブラリは、ドライバにアクセスするためのジェネリックインターフェースを提供することを目的としている。登録されたアプリケーションは、ＣＣＬを使用して、デバイスに関連するイベントを受け取ることができる。
【０００７】
本発明のさらに別の態様では、小売業向けデバイスの制御に使用されるＣＣＬは、カーネルモードではなくユーザモードにおいて動作する。
【発明を実施するための最良の形態】
【０００８】
本発明は、オペレーティングシステムによってサポートされていない小売業向けデバイスならびに他のデバイスのユーザが、「プラグアンドプレイ」と同様の体験をできるようにすることを目的とする、サポートされていないデバイスがインストールされるとき、オペレーティングシステムは、ユーザモードで稼動しているデバイスマネージャアプリケーションに、ＰｎＰイベントなどのイベントを送り、それにより、共通制御ライブラリ（ＣＣＬ）を介してアプリケーションがデバイスにアクセスすることを可能にする。ＣＣＬライブラリは、サポートされていないデバイスのためのアプリケーションおよびサービスオブジェクトを書くことを著しく単純化し、製品の互換性および品質を改善し、コストを削減することを目的としている。
【０００９】
本発明の一実施形態では、ＵＰＯＳ（ＰＯＳ統一規格（Ｕｎｉｆｉｅｄ  Ｐｏｉｎｔ  ｏｆ  Ｓｅｒｖｉｃｅ））Ｖ１．８の仕様書で定義された小売業向けデバイスの分類法に従う。その仕様書については、ウェブサイトから入手することができる（www.nrf-arts.org）。ＵＰＯＳによってサポートされる小売業向けデバイスのうちには、バンプバー（ｂｕｍｐ  ｂａｒ）、自動釣り銭機（ｃａｓｈ  ｃｈａｎｇｅｒ）、キャッシュドロワー（ｃａｓｈ  ｄｒａｗｅｒ）、ＣＡＴ（ｃｒｅｄｉｔ  ａｕｔｈｏｒｉｚａｔｉｏｎ  ｔｅｒｍｉｎａｌ）、コインディスペンサ（ｃｏｉｎ  ｄｉｓｐｅｎｓｅｒ）、フィスカルプリンタ（ｆｉｓｃａｌ  ｐｒｉｎｔｅｒ）、ハードトータル（ｈａｒｄ  ｔｏｔａｌｓ）、キーロック（ｋｅｙｌｏｃｋ）、バーコードスキャナ（ｂａｒ  ｃｏｄｅ  ｓｃａｎｎｅｒ）、トーンインジケータ（ｔｏｎｅ  ｉｎｄｉｃａｔｏｒ）、動作検出器（ｍｏｔｉｏｎ  ｄｅｔｅｃｔｏｒｓ）、ラインディスプレイ（ｌｉｎｅ  ｄｉｓｐｌａｙ）、ＭＩＣＲ（磁気インクリーダ）（ｍａｇｎｅｔｉｃ  ｉｎｋ  ｃｈａｒａｃｔｅｒ  ｒｅｃｏｇｎｉｔｉｏｎ  ｒｅａｄｅｒ）、磁気ストライプリーダ（ｍａｇｎｅｔｉｃ  ｓｔｒｉｐｅ  ｒｅａｄｅｒ）、ＰＩＮパッド（ＰＩＮ  ｐａｄ）、ポイントカード機（ｐｏｉｎｔ  ｃａｒｄ）、ＰＯＳキーボード（ＰＯＳ  ｋｅｙｂｏａｒｄ）、ＰＯＳプリンタ（ＰＯＳ  ｐｒｉｎｔｅｒ）、リモートオーダーディスプレイ（ｒｅｍｏｔｅ  ｏｒｄｅｒ  ｄｉｓｐｌａｙ）、秤（ｓｃａｌｅ）、シグニチャキャプチャ（ｓｉｇｎａｔｕｒｅ  ｃａｐｔｕｒｅ）、および、チェックイメージスキャナ（ｃｈｅｃｋ  ｉｍａｇｅ  ｓｃａｎｎｅｒｓ）が含まれる。本発明は、小売業向けデバイスをサポートすることだけに限定されない。オペレーティングシステムのサポートされるＰｎＰデバイスのリストに含まれない任意のデバイスが、サポートされ得る。
【００１０】
本明細書を通して、以下の用語は、はっきりと文脈において異なる規定をしなければ、次のように定義されているものである。用語「ＯＰＯＳ」は、ＰＯＳ（販売またはサービス時点管理）のためのＯＬＥを指す。用語「ＵＰＯＳ」は、Ｕｎｉｆｉｅｄ  ＰＯＳ（ＰＯＳ統一規格）（ｔｈｅ  Ｕｎｉｆｉｅｄ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  ｆｏｒ  Ｐｏｉｎｔ  ｏｆ  Ｓａｌｅ  ｏｒ  Ｓｅｒｖｉｃｅ）を指す。用語「ＰＯＳクラス周辺機器（ＰＯＳ  Ｃｌａｓｓ  Ｐｅｒｉｐｈｅｒａｌ）」または「ＯＰＯＳデバイス」は、ＵＰＯＳ  Ｖ１．８仕様書で定義された２４の異なるデバイスの１つに該当するデバイスの集合体を指す。用語「デバイスクラス」は、整合的な１組のプロパティ、メソッド、およびイベントを共有するＰＯＳデバイスのカテゴリを意味する。例えば、キャッシュドロワーおよびＰＯＳプリンタがその例である。いくつかのデバイスは、２つ以上のデバイスクラスをサポートする。例えば、いくつかのＰＯＳプリンタは、キャッシュドロワーを含む。用語「コントロールオブジェクト（ＣＯ）」は、ある特定のデバイスクラスについて、アプリケーションに、１組のプロパティ、メソッド、およびイベントを公開するオブジェクトを指す。用語「サービスオブジェクト（ＳＯ）」は、ある特定のデバイスについて、ＣＯによって呼び出され、ＵＰＯＳ規定の機能を実装するオブジェクトである。ＳＯは、ネイティブコードを含むＣＬＲによってサポートされる任意の言語で実装することができる。用語「サポートされないデバイス」または「非サポートデバイス」は、基本オペレーティングシステムによってデフォルトでサポートされていない、任意のデバイスを指す。
【００１１】
例示的動作環境
図１を次に参照すると、本発明を実装するための例示的システムは、コンピューティングデバイス１００などのコンピューティングデバイスを含む。非常に基本的な構成では、一般に、コンピューティングデバイス１００は、少なくとも１つの処理装置１０２、およびシステムメモリ１０４を含む。コンピューティングデバイスの正確な構成および型に応じて、システムメモリ１０４は、揮発性（ＲＡＭなど）、または不揮発性（ＲＯＭ、フラッシュメモリなど）とすることができ、あるいは、この２つの何らかの組み合わせとすることもできる。システムメモリ１０４は、通常、オペレーティングシステム１０５、１つまたは複数のプログラムモジュール１０６を含み、プログラムデータ１０７を含むこともできる。小売業向けＰｎＰアプリケーション１２０は、小売業向けデバイスに対するＰｎＰ機能を提供することを目的とする。この基本的な構成が、破線１０８の範囲内のそのコンポーネントによって示されている。
【００１２】
コンピューティングデバイス１００は、さらに追加の特徴または機能を有することもできる。例えば、コンピューティングデバイス１００は、例えば、磁気ディスク、光ディスク、またはテープなど（リムーバルおよび／または非リムーバルの）追加のデータストレージを含むこともできる。このような追加のストレージは、図１では、リムーバルストレージ１０９、および非リムーバルストレージ１１０によって示されている。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報を格納するための任意の方法または技術で実装される、揮発性および不揮発性のリムーバルおよび非リムーバルの媒体を含むことができる。システムメモリ１０４、リムーバルストレージ１０９、および非リムーバルストレージ１１０は、コンピュータ記憶媒体すべての例である。コンピュータ記憶媒体は、これだけに限定しないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、または他のメモリ技術、あるいは、ＣＤＲＯＭ、ＤＶＤ（デジタル多用途ディスク）、または他の光ディスクストレージ、あるいは、磁気カセット、磁気テープ、磁気ディスクストレージ、または他の磁気ディスク記憶装置、あるいは、所望の情報を格納するために使用することができコンピュータ１１０によってアクセスすることができる他の任意の媒体を含む。このようなコンピュータ記憶媒体のいずれも、デバイス１００の一部分となり得る。コンピューティングデバイス１００はまた、小売業向けデバイス、キーボード、マウス、ペン、音声入力装置、およびタッチ入力装置などの入力装置１１２を有することもできる。表示装置、スピーカ、およびプリンタなどの出力装置１１４を含むこともできる。
【００１３】
コンピューティングデバイス１００はまた、ネットワークなどを介して他のコンピューティングデバイス１１８との通信を可能にする通信接続１１６を含む。通信接続１１６は、通信媒体の一例である。通信媒体は、通常、搬送波または他の移送メカニズムなどの変調されたデータ信号として、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを具体化し、また任意の情報送達媒体を含む。用語「変調されたデータ信号」は、信号として情報を符号化するようにセットまたは変更された１つまたは複数の信号特性を有する信号を意味する。限定ではなく例として挙げると、通信媒体は、有線ネットワークまたは直接配線接続などの有線媒体、ならびに、音響、ＲＦ、赤外線、および他の無線媒体などの無線媒体を含む。本明細書で使用される用語のコンピュータ可読媒体は、記憶媒体と通信媒体の両方を含む。
【００１４】
小売業向けデバイスのためのプラグアンドプレイ（ＰｎＰ）
図２は、本発明の態様による、小売業向けＰｎＰシステムの概略的系統図を示す。
【００１５】
小売業向けデバイスに対するＰｎＰサポートは、ＰＯＳデバイスのインストールおよび保守の作業を単純化する。例えば、エンドユーザは、ユーザのマシンをリブートまたは再構成する必要なしに、単純にＰＯＳデバイスのプラグを抜き、新しいＰＯＳデバイスのプラグを差し込むことによって、新しいデバイスと相互に作用することができる。
【００１６】
一般に、ユーザが、小売業向けデバイス２１０など非サポートのデバイスをインストールするとき、そのインストールは、オペレーティングシステム２２０によりＰｎＰイベントとして検出される。しかし、オペレーティングシステム２２０は、その小売業向けデバイスをサポートしておらず、そのデバイスをインストールするのに必要な知識を有していないため、そのデバイスのインストールを行わない。ＰｎＰイベントがあると、ＰｎＰマネージャ２２５は、そのイベントをデバイスマネージャアプリケーション２３０に送る。デバイスマネージャアプリケーション２３０は、オペレーティングシステムのカーネルモードではなくユーザモードで常駐するため、オペレーティングシステムに変更を加えることなく、デバイスマネージャ２３０を修正することができる。初期化の際、デバイスマネージャ２３０は、オペレーティングシステムから、他の入出力イベントと同様にＰｎＰイベントを受け取るために登録を行う。
【００１７】
オペレーティングシステム２２０によってデバイスマネージャアプリケーション２３０に送達されるＰｎＰイベントは、インストールされたデバイスのデバイスＩＤを含む。デバイスマネージャ２３０は、受け取ったデバイスＩＤからデバイスの識別を試みる。このデバイスが、デバイスマネージャ２３０によってサポートされている場合、デバイスＩＤは、コンポーネント、レジストリ設定、およびこのデバイスに関連する同様の構成オプションを記述するインストレーションＩＮＦファイルにマップを提供する。一実施形態では、デバイスに関連する構成の設定は、設定ファイル（２４５）に格納される。一実施形態では、構成ファイルは、ＸＭＬとして格納され、デバイスをどのように構成すべきかに関する命令を含む。この文脈における構成（ｃｏｎｆｉｇｕｒａｔｉｏｎ）は、どんなサービスオブジェクト（ＳＯ）が、どのデバイスにマップされるのかを示す識別情報を意味する。ＸＭＬファイルに含まれる情報は、デバイスＩＤ、デバイスクラス、ＩＨＶ名、ＳＯ名、ＳＯ  ＧＵＩＤ、デバイスの特殊プロパティ（ポート速度、マルチヘッド（ｍｕｌｔｉ−ｈｅａｄｅｄ）デバイスなど）、および、デバイス管理用のＵＩを立ち上げるためのエントリポイントなどを含む。デバイスの最終の既知の状態も、デバイス構成の一部として保存され得る。この最終の既知の状態は、デバイスのデバッグの際に役に立つことがある。
【００１８】
本発明の一実施形態では、サポートされていないデバイスクラスごとに、ソフトウェア開発キット（ＳＤＫ）の一部として、テンプレートＩＮＦファイルが提供される。テンプレートＩＮＦファイルの目的は、共通コントロールライブラリ（ＣＣＬ）をサポートするために必要な標準のレジストリおよび構成エレメント（ｃｏｎｆｉｇｕｒａｔｉｏｎ  ｅｌｅｍｅｎｔ）を識別することである。デバイスマネージャアプリケーション２３０が、管理されていないデバイスを小売業向けデバイスとして認識すると、ＣＣＬ２３５が、小売業向けデバイス２１０に関与するＰＯＳアプリケーション（２４０）に公開される。
【００１９】
オペレーティングシステムからイベントを受け取り、デバイスを識別すると、デバイスマネージャアプリケーション２３０は、自動的に、レジストリおよび関係する構成エントリを更新し、ユーザの干渉なしに、関連するＩＮＦファイルに基づいて、そのデバイスのためのサポートバイナリをインストールする。次いで、ＰＯＳアプリケーション２４０は、ＣＣＬ２３５内の関数を利用することにより、個々のデバイスに対するアクセスの特性について知る必要なく、小売業向けデバイス２１０にアクセスすることができる。
【００２０】
ＣＣＬ２３５は、サポートされているデバイスに関連するプロパティ、メソッド、および、イベントを、アプリケーションに提供することを目的とする。一実施形態では、ＣＣＬ２３５は、．ＮＥＴクラスライブラリを介して、ＵＰＯＳ第１．８版に指定のサポートされている各デバイスクラスごとに、ＵＰＯＳのプロパティ、メソッド、およびイベントを、マネージコード（ｍａｎａｇｅｄ  ｃｏｄｅ）として公開する。他のデバイスをサポートすることもできる。一般的に、オペレーティングシステムのＰｎＰシステムによってサポートされていない任意のデバイスを、デバイスマネージャアプリケーション２３０を介して、ユーザモードコードでサポートすることができる。
【００２１】
図３は、本発明の態様による、ＰｎＰシステムについての高レベルアーキテクチャの図を示す。図に示すように、このアーキテクチャ図は、（直線３３５より下に示す）カーネルモードでオペレーティングシステムにより提供される機能、および、（直線３３５より上に示す）ユーザモードで提供される機能を含む。
【００２２】
入出力システム３５０は、オペレーティングシステムのカーネルモードで動作し、入出力管理（３６５）、パワーマネジメント（３６０）、およびＰｎＰ管理（３５５）を提供する。入出力マネージャは、標準入出力管理を提供する。パワーマネージャ３６０は、オペレーティングシステムによって管理されない電力イベントを、デバイスマネージャアプリケーション３１０に送る。ＰｎＰマネージャ３５５は、ＰｎＰイベントを検出し、デバイスマネージャアプリケーション３１０に送る。ＰｎＰイベントマネージャ３２０は、どのイベントがデバイスマネージャ３１０によってサポートされるデバイスに関係するかを決定し、ＰＯＳアプリケーション３０５に、それが受け取ることを登録したどのイベントも提供する。
【００２３】
相互運用層（ｉｎｔｅｒｏｐｅｒａｂｉｌｉｔｙ  ｌａｙｅｒ）３１５は、レガシ（ｌｅｇａｃｙ）のＣＯＭベースの小売業向けデバイスを、ＣＣＬをターゲットとするアプリケーションによって使用できるようにするために用いられる。言い換えれば、相互運用層３１５は、同一のメソッドを使用して、ＰｎＰデバイスとレガシデバイスの両方にアクセスする統一された方法をＰＯＳアプリケーション３０５に提供することを目的とする。一般に、レガシのＯＰＯＳデバイスは、それ自体に関する情報を格納し、通信経路を識別して、構成データを持続させる。例えば、システムレジストリが、この情報を格納するために使用される。通常、各デバイスの製造元が、そのデバイスの構成を管理するためのカスタムアプリケーションを提供する。
【００２４】
図４は、本発明の態様によるＰｎＰシステムとＣＣＬの間の対話を示す。図に示すように、システム４００は、ＰＯＳアプリケーション４０５、公開ＡＰＩ（ＣＣＬ）４１５、列挙子（ｅｎｕｍｅｒａｔｏｒ）４２０、ＰｎＰシステム４３０、ＳＯリポジトリ（ｒｅｐｏｓｉｔｏｒｙ）４４０、構成マネージャ４５０、ならびに、．ＮＥＴフレームワークおよびＷｉｎ３２レベルを含む。
【００２５】
ＰＯＳアプリケーション４０５は、ＣＣＬがサポートするデバイスと対話するために、ＡＰＩ４１０と対話する。ＡＰＩ４１０は、ＰＯＳアプリケーション４０５に、このアプリケーションが受け取るように登録したＰｎＰイベントを提供する。
【００２６】
ルートクラス４１５は、公開ＡＰＩ４１０において公開され、すべての動作に対する単一のエントリポイントの役割をする。ＡＰＩ４１０は、インストールされたＰＯＳデバイスを列挙し、それらのデバイスに対するサービスオブジェクトをインスタンス化し、ＰＯＳデバイスの接続または切断が行われたときにプラグアンドプレイイベントを受け取る機能を、ＰＯＳアプリケーション４０５などのアプリケーションに提供する。
【００２７】
一実施形態では、ルートクラス４１５は、下記のメソッドを公開している。すなわち、マシンにインストールされたすべてのＰＯＳデバイスのコレクションを返すGetDevices()、マシンにインストールされた所与のタイプのＰＯＳデバイスのコレクションを返すGetDevices(string type)、所与のタイプのデフォルトデバイスに対するIDeviceインターフェースを返すGetDefaultDevice(string type)、および、要求されたサービスオブジェクトのインスタンス(IPOSControl interface)を返すOpenControl(IDevice device)を公開する。
【００２８】
ルートクラス４１５は、ＰＯＳアプリケーション５１０に、OnDeviceAddedとOnDeviceRemovedの２つのプラグアンドプレイイベントを公開する。これらのイベントは、ＰＯＳデバイスが、マシンに接続された／マシンから切断されたときに発行される。
【００２９】
ＯＰＯＳは、サービスオブジェクトが発行する５つのイベント、すなわち、OnDataEvent、OnDirectIOEvent、OnErrorEvent、OnOutputCompleteEvent、およびOnStatusUpdateEventを定義する。異なるそれぞれのデバイスクラスは、これらのイベントのすべてを発行するか、一部を発行するか、またはどのイベントも発行しない。これらのイベントは、IPOSControlインターフェースに追加される。ＯＰＯＳ標準がサポートしないデバイスクラスに対する各ＳＯは、これらのイベントの一部または全部を発行するか、あるいは、単にそれらのイベントを発行しない。
【００３０】
ルートクラスはまた、どんなサービスオブジェクトがマシンにインストールされたかを検出し、インストールされたＳＯ（４２０）の内部列挙子により返される列挙子を介して、そのオブジェクトの情報をアプリケーションに提示する。インストールされたサービスオブジェクトによりサポートされる物理デバイスが、現時点で接続／オンにされた場合、ハードウェアＩＤによって決定を行うために、ルートクラス４１０は、ブロック４２０を介して、オペレーティングシステムのプラグアンドプレイシステム４３０と結合する。
【００３１】
ブロック４２０では、．ＮＥＴサービスオブジェクトを探すために．ＮＥＴ  ＳＯリポジトリ４４０をスキャンする。一実施形態では、ブロック４２０で、HKLM＼SOFTWARE＼OLEforRetail.NET＼ControlAssembliesレジストリキーで指定されるディレクトリをスキャンする。このキーは、複数の文字列の値を、スキャンするディレクトリにつき１つ含むことができる。．ＮＥＴ  ＳＯは、特殊なカスタム属性を有するｄｌｌアセンブリである。ＳＯアセンブリ内のすべてのサービスオブジェクトクラスは、サービスオブジェクトのデバイスのクラス、名前、記述、およびバージョンを指定するPOSServiceObject属性を有する。例えば次のようなものである。
【００３２】
[POSServiceObjectAttribute("MSR","CommonMSR","Common service object for magnetic stripe reader","1.0.0")]
構成マネージャ４５０は、構成ファイルの読取りを行い、また、ＰｎＰハードウェアＩＤのレガシＳＯへのマッピング．ＮＥＴ  ＳＯメタデータに対する拡張、非ＰｎＰデバイスのＳＯへのマッピング、デバイスの無効化、および、セキュリティ設定のためのものである。
【００３３】
物理デバイスのハードウェアＩＤをＳＯにマップする、１つまたは複数のPOSHardwareId属性がある場合がある。このＩＤは、プラグアンドプレイサブシステムによっても使用されるハードウェアＩＤである。ハードウェアＩＤは、範囲の下端と上端のＩＤを指定することにより、その範囲が定義される。例えば、[POSHardwareId("USB＼Vid_05d9&Pid_a794&Rev_0000","USB＼Vid_05d9&Pid_a794&Rev_9999")]。
【００３４】
一実施形態では、レガシサービスオブジェクトについて、ルートクラス４１５が、HKLM＼SOFTWARE＼OLEforRetail＼ServiceOPOSレジストリキーを読み取る。すべての登録されたＯＰＯＳサービスオブジェクトのNameおよびProgrammatic IDは、デバイスのタイプによってグループ化されるキーに基づいて定義される。レガシＳＯでのハードウェアＩＤは、専用のフォルダに入れられる構成ＸＭＬファイルによって定義される。
【００３５】
上述のように、一実施形態によれば、ＣＣＬは、ＵＰＯＳ仕様書で定義されたサポートされるデバイスクラスごとに、ＵＰＯＳ  Ｖ１．８のプロパティ、メソッド、およびイベントをマネージコードとしてＰＯＳアプリケーションに公開する。
【００３６】
ＣＣＬ４１０は、各デバイスクラスごとのコントロールオブジェクト（ＣＯ）を表すアセンブリのコレクションである。ＣＣＬは、アプリケーションインターフェースを、ＰＯＳアプリケーションなどのアプリケーションに提供する。サービスオブジェクトは、ＡＰＩを実装し、ＣＯのクラスのデバイスをサポートする。次の表は、標準のプロパティ、メソッド、およびイベントの例示的リストである。
【００３７】
【表１】
2006012128.tif 000003
【００３８】
一実施形態では、ＵＰＯＳ  Ｖ１．８の定数が実装され、ＵＰＯＳによって規定された分類法および命名規則に従っている。一実施形態では、ＣＣＬは、ＵＰＯＳイベントを．ＮＥＴデリゲート（ｄｅｌｅｇａｔｅ）の形式で公開する。さらに、ライブラリは、ＰＯＳデバイスに関係するＰｎＰイベントを公開する。
【００３９】
ＣＣＬは、インターフェースおよびそのデバイスクラス名を定義する。このライブラリはまた、追加のデバイスクラスの定義を可能にする。
【００４０】
IPhysicalDeviceインターフェースは、接続または除去が行われている特定のデバイスに関するいくつかのプロパティ、例えば、そのインストール状態、ＰＯＳデバイスクラス、デバイスのフルパス、記述、および、ハードウェアＩＤなどを公開する。この情報は、アプリケーションがどのようにイベントを処理するか決定できるために必要なコンテキストを、アプリケーションに与える。
【００４１】
【表２】
2006012128.tif 000004
【００４２】
ＰｎＰサポートは、PhysicalDevicelnfoクラスで実装される。一実施形態では、PhysicalDevicelnfoクラスは、System.Windows.Forms.Formから継承するマネージクラスである。ネイティブのオペレーティングシステムのイベントは、ウィンドウメッセージを介してアプリケーションに公開され、*.Formは、ネイティブウィンドウをラップするため、PhysicalDeviceInfoクラスは、*.Formから継承を行う。ネイティブウィンドウは、ＯＳからのＰｎＰイベントを捕捉するために使用されるが表示されない。
【００４３】
PhysicalDeviceInfoクラスは、インスタンス化されるとき、すべてのデバイスインターフェースクラスからのＰｎＰイベントに対して登録を行い、したがって、（非ＰＯＳデバイスを含めて）ＰｎＰをサポートする任意のデバイスが、システムに追加されるかまたはシステムから除去されるとき、イベントを公開することができる。PhysicalDeviceInfoはまた、システムに現在知られているすべてのデバイスの内部リストを作成し、どのデバイスが現在接続され有効になっているかを決定する。このクラスはまた、デバイスの完全なリストを返し、特定のデバイスにその現在のインストール状態を照会するために、デバイスの列挙中にＣＣＯ．Ｎｅｔによって使用されるヘルパメソッド（ｈｅｌｐｅｒ  ｍｅｔｈｏｄ）を含む。デバイス列挙およびデバイス情報は、プラットフォーム呼出し形式のinterop(P-Invoke style interop)で作成されＷｉｎ３２ＡＰＩに対するネイティブＡＰＩコールを介して実行される。
【００４４】
PhysicalDeviceInfoクラスは、ネイティブのオペレーティングシステムのＰｎＰイベントを、ルートＣＣＯ．Ｎｅｔクラスにイベントとして公開する。これらのイベントは、IPhisicalDeviceインターフェースを実装するPhysicalDeviceオブジェクトを返す。PhysicalDeviceクラスは、単一のデバイスを表すクラスであり、そのデバイスに関するハードウェアＩＤや記述などいくつかのプロパティを公開する。これは、アプリケーションに最終的にはバブルアップ（ｂｕｂｂｌｅｄ  ｕｐ）される同じオブジェクトである。
【００４５】
メソッドおよびプロパティへのアクセス
ライブラリによりサポートされるデバイスにアクセスしようとするＰＯＳアプリケーション４０５などのアプリケーションは、他のメソッドを呼び出すのに先立ち、まずそのデバイスをオープンにすべきである。一実施形態では、正常にデバイスをオープンにする前にメソッドの呼出しを試みることは、OPOSClosedExceptionを発生させる。排他使用のデバイスにアクセスするアプリケーションは、たいていのメソッドを呼び出す前に、デバイスを要求し有効にすべきである。共有可能デバイスにアクセスするアプリケーションは、たいていのメソッドを呼び出す前にデバイスを有効にしなければならない。正常にデバイスをオープンにする前には、そのデバイスに関連するほとんどのプロパティ値は初期設定されない。デバイスに関するプロパティが初期設定された後は、それに続くデバイスに対する要求およびデバイスの有効化では、プロパティの再初期化は行わない。デバイスがクローズされるまで、これらのプロパティは、初期設定のままとなる。
【００４６】
デバイスマネージャアプリケーションが受け取ったデータは、DataEventとしてキューに入れられる。データを受け取ったとき、AutoDisableプロパティがTRUEに設定されている場合、コントロールが、自動的に、DeviceEnabledプロパティをFALSEにして、それ自体の設定を無効にする。このことは、コントロールがさらに入力をキューに入れることを禁止し、可能な場合は物理的にデバイスを無効にする。
【００４７】
アプリケーションが、デバイスから入力を受け取る準備ができている場合、アプリケーションは、DeviceEventEnabledプロパティをTRUEに設定する。次いで、（通常、ハードウェアの割り込みの結果として）入力を受け取ると、コントロールは、DataEventをキューに入れ、イベントを要求したアプリケーションにそれを送達する。データが既にキューに入っている場合、DataEventは送達されることになる。このイベントは、数値パラメータによる入力状況情報を含むことができる。コントロールは、イベントを発行する直前に、入力データおよび必要に応じ他のデータを、デバイス固有のプロパティに収納する。
【００４８】
イベントを送達する直前に、コントロールは、DataEventEnabledプロパティをFALSEに設定することにより、追加のデータイベントを無効にする。このことにより、アプリケーションが現在の入力および関連するプロパティを処理する間に、後続の入力データがコントロールによってキューに入れられるようになる。アプリケーションが現在の入力について終了し、後続のデータに対する準備ができると、アプリケーションは、DataEventEnabledをTRUEに設定することによりイベントを再び有効にする。
【００４９】
入力デバイスが排他的使用デバイスの場合、アプリケーションは、デバイスが読取り入力を開始する前に、デバイスを要求し使用可能にする。共有可能入力デバイスの場合、読取り入力を開始する前に、１つまたは複数のアプリケーションが、デバイスをオープンにし有効にする。コントロールが、DataEventを使用してデータをアプリケーションに送る前に、アプリケーションは、ClaimDeviceメソッドを呼び出して、そのデバイスに対する排他的アクセスを要求する。イベント駆動の入力が受け取られるが、アプリケーションがデバイスを要求していない場合、アプリケーションがデバイスを要求する（また、DataEventEnabledプロパティがTRUEとなる）まで、入力はバッファに入れられる。この挙動は、複数のアプリケーション間のデバイスの順序立った共有を可能にし、それらの間で効率的に入力フォーカスを受け渡すことをできるようにする。
【００５０】
コントロールは、イベント駆動入力を収集し処理する際にエラーに遭遇した場合、その状態をエラーに変更し、エラー状態をアプリケーションにアラート通知するために１つまたは複数のErrorEventをキューに入れる。この１つ（または複数）のイベントは、DataEventEnabledプロパティがTRUEになるまで送達されず、したがって、アプリケーションの秩序立った手順がもたらされる。一実施形態では、エラーイベントおよび例外は、以下の座(loci)を用いて送達される。
【００５１】
InputWithData(OPOS_EL_INPUT_DATA)−これは、１つまたは複数のDataEventがキューに入れられている間にエラーが発生した場合に、キューに入れられる。これは、すべてのDataEventに先立ってキューに入れられる。典型的な実装は、このイベントをイベントキューの先頭に配置する。このイベントは、アプリケーションが、入力を直ちにクリアするか、または、任意選択で、ユーザにエラーのアラート通知を出し、バッファされた入力を処理することを可能にする。後者の事例は、スキャナコントロール（Ｓｃａｎｎｅｒ  Ｃｏｎｔｒｏｌ）に役立つことがあり、つまり、ユーザが即座にエラーのアラート通知を受け、そのエラーが解決するまで次のアイテムはスキャンされないようにすることができる。したがって、エラー回復が実行されるのに先立ち、以前にスキャンしたどのアイテムも正常に処理することができる。
【００５２】
InputNoData (OPOS_EL_INPUT)−これは、エラーが発生し利用可能なデータがないときに送達される。典型的な実装は、これを、イベントキューの末尾に置く。エラーが発生したとき、ある入力データが既にキューに入れられている場合、座が「InputWithData」のErrorEventが、まずキューに入れられ送達され、次いで、すべてのDataEventが発行された後に、このエラーイベントが送達される。「InputWithData」のイベントが送達され、アプリケーションイベントハンドラが「Clear」で応答した場合、その「InputNoData」のイベントは送達されない。
【００５３】
コントロールは、以下のいずれかが行われたときにエラー状態を終了する。（１）アプリケーションが、InputNoDataのErrorEventから戻る。（２）アプリケーションが、OPOS_ER_CLEARによりInputWithDataのErrorEventから戻る。（３）アプリケーションが、ClearInputメソッドを呼び出す。
【００５４】
いくつかのコントロールでは、アプリケーションが、イベント駆動入力を開始するためにメソッドを呼び出す。入力がコントロールによって受け取られた後、通常、入力を再初期化するためにメソッドが再び呼び出されるまで、追加の入力は受け取られない。この例は、ＭＩＣＲデバイス、およびシグニチャキャプチャデバイスを含む。イベント駆動入力のこのような変形形態は、「非同期入力（ａｓｙｎｃｈｒｏｎｏｕｓ  ｉｎｐｕｔ）」と呼ばれることがある。
【００５５】
DataCountプロパティは、コントロールによりキューに入れられたDataEventの数を取得するために読み取られることがある。コントロールによりキューに入れられたすべての入力は、ClearInputメソッドを呼び出すことにより削除されることがある。ClearInputは、共有可能デバイスでは、Openの後に呼び出され、排他使用デバイスでは、ClaimDeviceの後に呼び出されることがある。
【００５６】
一般的なイベント駆動入力モデルは、入力データを直接返すメソッドまたはプロパティを含むデバイスクラスの定義を定めていない。いくつかのデバイスクラスは、より直観的または柔軟な動作のために、このようなメソッドおよびプロパティを定義する。この例は、キーロックデバイスである。このタイプの入力は、「同期入力」と呼ばれることがある。
【００５７】
出力
ＯＰＯＳ出力モデルは、同期および非同期の出力からなる。デバイスクラスは、この一方または両方のタイプをサポートすることも、どちらのタイプもサポートしないこともある。
【００５８】
同期出力
デバイス出力が迅速に実行し得るときには、同期出力が好ましい。その長所は、単純さである。アプリケーションは、クラス固有のメソッドを呼び出して出力を実行する。コントロールは、出力が完了してから戻る。このタイプの出力の間にエラーが発生したとき、OPOSExceptionが送出される。
【００５９】
非対称出力
非対称出力は、先入れ先出し法をベースに行われる。このタイプの出力は、デバイス出力が低速のハードウェアの対話を必要とするときに好ましい。デバイスが出力を実行している間にアプリケーションが他の処理を実行することができることから、その長所は応答性として捉えられる。アプリケーションは、出力を開始するためにクラス固有のメソッドを呼び出す。コントロールは、プログラムメモリ内の要求を物理デバイスが受け取り処理することができるようになり次第その要求を物理デバイスに送達するためにバッファし、OutputIDプロパティをこの要求に対する識別子に設定し、可能な限り早く戻る。デバイスが、この要求を正常に完了させたとき、ＯＰＯＳがOutputCompleteEventを発行する。このイベントのパラメータは、完了した要求のOutputIDを含む。
【００６０】
非同期の要求を実行しているときにエラーが発生した場合、ErrorEventが発行される。アプリケーションのイベントハンドラは、未処理の出力を再試行するかまたはクリアすることができる。コントロールは、ErrorEventの進行中にはエラー状態である。
【００６１】
非同期出力を含めて、バッファされたすべての出力データは、ClearOutputを呼び出すことによって削除することができる。クリアされた出力については、OutputCompleteEventは発行されない。このメソッドはまた、進行中であり得る任意の出力を（可能な場合に）停止させる。
【００６２】
エラー処理
ライブラリ内のエラー処理は、例外を介して実装される。エラーは、ＵＰＯＳ  Ｖ１．８に定義されているHRESULTコード（ResultCodeおよびResultCodeExtendedの値）に基づいている。POSExceptionクラスは、System.ApplicationExceptionから派生し、基底例外(base exception)クラスである。このクラスは、ＯＰＯＳエラーコードに関する定数を定義する。POSControlExceptionは、POSExceptionから派生し、サービスオブジェクトにより送出される。POSLibraryExceptionは、POSExceptionから発生し、ライブラリによって送出される。
【００６３】
一実施形態では、エラー処理は、System.ApplicationExceptionから派生する。この派生クラスは、ＵＰＯＳ仕様書によるResultCodeおよびResultCodeExtendedプロパティを実装する。
【００６４】
セキュリティ
ＣＣＬ、プラグアンドプレイ機能、およびデバイス列挙機能は、サービスオブジェクトにアクセスするためにロールベースセキュリティ（ｒｏｌｅ  ｂａｓｅｄ  ｓｅｃｕｒｉｔｙ）を使用する。デバイス管理は、サービスオブジェクトに関係するロールのＵＩおよび関係する構成の要件を含む。
【００６５】
システムに付加されて接続および構成されたデバイスの列挙するヘルパクラスが公開される。このクラスは、アプリケーション開発者が、どんなデバイスにアクセス可能であるかを決定するためにＣＣＬに照会することを可能にする公開メソッドを公開する。この列挙クラスはまた、（ＵＰＯＳ  Ｖ１．８仕様書に定義されている）Device Statistics（デバイス統計値）を照会する能力も含む。
【００６６】
サービスオブジェクト開発者および小売業者のためのセキュリティを単純化するために、Owner、Integrator、 Manager、およびCashierを含めた追加のユーザタイプが追加される。既定では、Ownerは管理者グループのメンバであり、IntegratorおよびManagerはパワーユーザであり、Cashierはユーザである。
【００６７】
適切なロール権限なしにコントロールにアクセスが試みられると、「Access not authorized（アクセスが許可されていない）」例外が送出される。エラーが発生したことを示す標準のエラーメッセージが識別される。アプリケーションがこの標準エラーメッセージを取り扱わない場合、このメッセージを表示しないという選択肢があるはずである。ロールベースセキュリティが使用され、アプリケーションがこのメッセージを取り扱わない場合は、この標準メッセージは阻止されないことになる。
【００６８】
一実施形態では、ＣＣＬは、ＵＰＯＳデバイスクラスによってグループ化された利用可能なＰＯＳデバイスの列挙子を公開する。そのライブラリは、サービスオブジェクトのインスタンスのインスタンス化のためのファクトリ（ｆａｃｔｏｒｙ）の役割をする。そのライブラリは、ＰＯＳアプリケーションのライタ（ｗｒｉｔｅｒ）を、特定のサービスオブジェクトの実装から分離するものであり、アプリケーションがＰＯＳデバイスと対話するための単一のエントリポイントである。
【００６９】
一実施形態では、エラーは、（例外を介して）標準の．ＮＥＴのやり方で報告される。ライブラリ例外は、論理的継承階層を有する。標準のＯＰＯＳエラーコードは、それが可能であり道理にかなっている場合に使用される。
【００７０】
図５は、本発明の態様による、レガシデバイスを小売業向けＰｎＰシステムに組み込むためのアーキテクチャを示す。
【００７１】
ＣＣＬ５１０は、マネージプロキシクラスにより、ＣＯＭベースのＳＯをラップ（ｗｒａｐ）する。このプロキシは、ＳＯのコントロールオブジェクトをリフレクション（ｒｅｆｌｅｃｔｉｏｎ）５３０を介してインスタンス化し、それにアプリケーションの呼出しを中継する。このプロキシは、実際のＳＯ（５７０）とは直接対話しない。代わりに、そのＣＯ（５６０）と対話する。
【００７２】
LegacyProxyクラスは、すべてのレガシプロキシに対する普遍的基底クラス（ｕｎｉｖｅｒｓａｌ  ｂａｓｅ  ｃｌａｓｓ）である。LegacyProxyクラスは、２４個の現在サポートされているＯＰＯＳデバイスクラス（ICashDrawer,、IMSR、IPOSPrinterなど）に対するインターフェースを実装し、したがって、そのインスタンスは、これらのインターフェースのいずれか１つにキャストすることができる。基本的に、LegacyProxyは、すべてのＯＰＯＳコントロールのスーパーセットである。LegacyProxyは、すべてのプラミング（ｐｌｕｍｂｉｎｇ）を取り扱う標準．ＮＥＴ−ＣＯＭ相互運用層を介して、ＣＯと対話し、実際の対話のためにIDispatchを使用する。IDispatchは、プロパティおよびメソッドを名前によって呼び出し、LegacyProxyクラスは、それらのプロパティおよびメソッドを、その基礎となるＣＯが実装している限り公開することができる。
【００７３】
一実施形態では、レガシコントロールからのイベントは、System.Runtime.InteropServicesネームスペースにあるUCOMIConnectionPointContainerおよびUCOMIConnectionPointインターフェースによってフック（ｈｏｏｋ  ｕｐ）される。イベントレシーバクラス（ＬｅｇａｃｙＰｒｏｘｙ）が、レガシコントロールの固有のイベントシンク（ｅｖｅｎｔ  ｓｉｎｋ）インターフェースを実装する場合、イベントハンドラは、UCOMIConnectionPointによって設定することができる。５つの標準ＯＰＯＳイベントだけしかなくても、イベントシンクインターフェースは、すべてのコントロールオブジェクトに対してすべて異なる（それらは異なるインターフェースＧＵＩＤを有する）。レガシコントロールオブジェクトのインスタンスごとにLegacyProxyクラスをインスタンス化するのではなく、ＣＯが想定するイベントシンクインターフェースを追加的に実装するLegacyProxyから派生する、動的なメモリ内のクラスが、生成される。インターフェースのＧＵＩＤは、レガシＣＯインスタンスのイベントコネクションポイントから（UCOMIConnectionPointを介して）取り出される。生成されたクラスは、イベントハンドラを中継して呼出しをLegacyProxyクラスに送り、LegacyProxyクラスは、それらの呼出しを変換しアプリケーションに発行する。
１．アプリケーションは、レガシＯＰＯＳコントロールについてRoot.OpenControlを呼び出す。
２．Root.OpenControlは、AssemblyFinder.OpenControlを呼び出す。
３．AssemblyFinder.OpenControlは、この要求がレガシコントロールに関するものであることを理解し、AssemblyFinder.GenerateLegacyProxyを呼び出す。
４．AssemblyFinder.GenerateLegacyProxyは、ＣＯＭクラスをインスタンス化し、次いで、UCOMIConnectionPointContainerおよびUCOMIConnectionPointを使用して、コネクションポイント（イベントシンク）インターフェースのＧＵＩＤを得る。
５．AssemblyFinder.GenerateLegacyProxyが、AssemblyFinder.EmitProxyを呼び出して、イベントシンクＧＵＩＤを有するインターフェースを実装するメモリ内プロキシクラスを生成する。
６．アプリケーションは、そのプロキシについてOpenを呼び出すことによってプロキシをオープンにする。
７．特にOpenメソッドにおいて、LegacyProxy（生成されたプロキシの親クラス）が、UCOMIConnectionPoint.Adviseを呼び出して、そのインスタンスをイベントハンドラとして設定する。
【００７４】
ＰＯＳアプリケーションのサポート
ＯＰＯＳ．ＮＥＴ  ＡＰＩ
ＣＣＬは、以下の中核的な３つのアセンブリからなる。（１）POS.Interfaces.dllは、インターフェース、列挙体(emum)、および定数を定義し、ＳＯとアプリケーションの両方から参照される。（２）POS.dllは、POS.Rootクラスを含み、アプリケーション（ＩＳＶ）が、インストールされたＰＯＳデバイスに対するサービスオブジェクトを、列挙し、インスタンス化するようにする。（３）GenericServiceObject.dllは、サービスオブジェクトの基底クラスである。サービスオブジェクトのライタ（ＩＨＶ）は、それから派生を行い、イベントキューやグローバルクレーム（ｇｌｏｂａｌ  ｃｌａｉｍ）などの基本ＳＯ機能のデフォルトの実装を利用することが推奨される。
【００７５】
これら３つのアセンブリは、ＰＯＳマシンハードドライブ上の複数の場所から参照されるので、これらのアセンブリは、Global Assembly Cacheにインストールされる。これは、それらのバイナリの１つのコピーだけをマシン全体にわたって使用すること、ならびに、それらのバイナリが１つの集中した場所でサービスされることが可能であることを保証するのに役立つ。
【００７６】
サービスオブジェクトインターフェース
いくつかのインターフェースは、マネージサービスオブジェクトを作成する目的で定義されている。これらのインターフェースは、ＰＯＳ１．８仕様書の規格をカプセル化し、また、（１）共通のＰＯＳ機能をモデリングするデバイスクラス独立インターフェースと（２）所与のデバイスクラスに固有の機能をモデリングするデバイス依存インターフェースの２つに分類される。
【００７７】
パブリックに公開されるＰＯＳインターフェース（共通かつデバイス依存のインターフェース）は、別個のアセンブリPOS.Interfaces.dllで定義される。これらのインターフェースは、．ＮＥＴサービスオブジェクトによって実装される。アプリケーションは、ＣＣＬから受け取ったＳＯインスタンスを、これらのインターフェースにキャストして、特定のデバイスクラスの固有機能にアクセスする。基底コントロールインターフェースは、POS.interface.Basicネームスペースで定義され、次のような階層を有する。IPOSControlは、．ＮＥＴサービスオブジェクトのための基底インターフェースである。ＳＯは、この基底インターフェースを直接または間接的に実装する。そのライブラリは、ＳＯに対するこのインターフェースに対してポインタを使用し、アプリケーションは、IMSR、IPOSPrinterなど追加の特定のデバイス依存インターフェースにＳＯをキャストする。IPOSEventInputは、イベント駆動入力デバイスのためのＳＯに対して３つのプロパティを追加することにより、IPOSControlを拡張する。IPOSAsyncOutputは、非同期出力をサポートするデバイス（例えばプリンタ）のためのＳＯに対するOutputIDを追加することにより、IPOSControlを拡張する。
【００７８】
標準ＯＰＯＳデバイスクラスに対するデバイス依存インターフェースは、POS.Interfaces.Specificネームスペースで定義される。これらのインターフェースは、上記の基底インターフェースのうち１つから派生し、それを、特定のデバイスクラスに固有の機能により拡張している。ＩＨＶは、これらのインターフェースから、それらのＳＯを実装するときに派生を行うべきである。インターフェースの例としては、キャッシュドロワーのためのICashDrawer、磁気ストライプリーダのためのIMSR、および、レシートプリンタのためのIPOSPrinterなどがある。
【００７９】
これらのインターフェースは、それぞれのＯＰＯＳインターフェースに緊密に合致する。同時に、ＣＯＭの制限のためＯＰＯＳがＵＰＯＳから逸脱するいくつかの事例では、元のＵＰＯＳインターフェースが使用される。例えば、ＯＰＯＳは、バイナリデータを受け渡しのためにＢＳＴＲ文字列を使用するが、このことにより、バイナリからＡＮＳＩへの変換に関して、いくらかの問題が生じる。ＣＣＬでは、バイナリデータにバイト配列が用いられる。
【００８０】
例として、ＭＳＲ（磁気ストライプリーダ）のためのＯＰＯＳおよびLibraryインターフェースがどのようなものであるかを次に示す。
【００８１】
【表３−１】
2006012128.tif 000005
【００８２】
【表３−２】
2006012128.tif 000006
【００８３】
【表３−３】
2006012128.tif 000007
【００８４】
【表３−４】
2006012128.tif 000008
【００８５】
【表３−５】
2006012128.tif 000009
【００８６】
【表３−６】
2006012128.tif 000010
【００８７】
【表３−７】
2006012128.tif 000011
【００８８】
【表３−８】
2006012128.tif 000012
【００８９】
これらのインターフェースは、その親／祖父母（ｇｒａｎｄｐａｒｅｎｔ）としてIPOSControlを有し、したがって、任意のＳＯを、IPOSControlインターフェースにキャストすることができる。これらのライブラリクラスは、IPOSControlインターフェースと動作し、アプリケーションは、ＳＯのインスタンスを、デバイス固有のインターフェースにキャストする。このことは、新しいデバイスクラスを、ライブラリを変更せずに導入することを可能にする。新しいデバイスクラスインターフェースがIPOSControlから派生する限り、そのライブラリは、新しいデバイスクラスに対するＳＯインスタンスを取り扱うことができる。
【００９０】
図６は、本発明の態様による、例示的ヘルパクラスおよびＳＯリポジトリを示す。
【００９１】
通常、ハードウェアベンダは、デバイス依存のサービスオブジェクト（ＳＯ）を実装し、このＳＯは、ＰＯＳ仕様書に記載のインターフェースを実装し、そのハードウェアと直接対話する。ＣＣＯ．Ｎｅｔライブラリは、サービスオブジェクトをマネージコードとして書くためのサポート、および、ほとんどのサービスオブジェクトに共通のＰＯＳ機能のジェネリック実装（ｇｅｎｅｒｉｃ  ｉｍｐｌｅｍｅｎｔａｔｉｏｎ）を含めた、ＳＯの高品位の実装を実現するための負担を軽減するいくつかの技術を含む。これは、デバイスを要求し／有効にすること、イベント通知（ｅｖｅｎｔｉｎｇ）、および、メッセージや統計値などをキューに入れることのためのインフラストラクチャを含む。ＩＨＶは、このオブジェクトを利用して、ＳＯのＰＯＳ固有の側面を実装するための負担の大半を軽減し、したがって、ＩＨＶが、デバイス固有の詳細、および、パフォーマンスカウンタやデバイス統計値などに対するヘルパクラスのセットに専念することが可能になる。
【００９２】
一実施形態では、サービスオブジェクトは、．ＮＥＴアセンブリとして書かれている。これらのアセンブリは、IPOSControlインターフェース、あるいは、IPOSControlから派生する定義されたデバイス固有インターフェースのうちの１つから派生する。これらのアセンブリは、デバイスクラス、ＰＯＳバージョン、および、サポートされているデバイスのハードウェアＩＤを記述する、アセンブリレベルおよびクラスレベルの属性を含む。ＣＣＯ．Ｎｅｔライブラリは、これらの属性を用いて、ＳＯが実装するデバイスクラス、および、それが制御するハードウェアを決定する。アセンブリの属性を使用することにより、ＳＯのインストールが大幅に単純化される。というのは、行う必要があるのは、ＣＣＯ．Ｎｅｔがそれを発見することができたディレクトリにアセンブリをコピーすることだけだからである。
【００９３】
ジェネリックサービスオブジェクトクラスは、すべてのデバイスクラスのサービスオブジェクトに必要とされるデフォルトの機能を実装する抽象基底クラスである。典型的なシナリオでは、ＩＨＶは、ジェネリックサービスオブジェクト、およびデバイス固有インターフェースのうち１つから派生を行う。このことにより、ＩＨＶは、ジェネリックサービスオブジェクトに依拠して、多くのＰＯＳ固有の詳細を取り扱うことができ、ＳＯのデバイス固有の側面に努力を集中することができる。
【００９４】
ジェネリックサービスオブジェクトクラスは、IPOSControlインターフェース上でのすべてのメソッドおよびプロパティのデフォルトの実装を含む。これは、イベントのキューイングと送達、デバイス状態管理（要求、有効化など）、および状態報告のためのメカニズムを含む。これは、抽象クラスのため、直接インスタンス化されず、もっぱら、ＩＨＶがそれらのＳＯの形態を派生するためのものである。すべてのメソッドおよびプロパティが仮想的にマーク付けされ、したがって、ＩＨＶは、デフォルトの実装を使用し、ＩＨＶが適切と見なす任意のメソッドにオーバーライドすることができる。
【００９５】
ジェネリックサービスオブジェクトは、ＰＯＳイベント送達の詳細を、イベントキュー、イベントキューワーカスレッド（ｗｏｒｋｅｒ  ｔｈｒｅａｄ）、および様々な同期オブジェクトの形態で実装する。高レベルでは、イベント通知は、ジェネリックサービスオブジェクトにより以下のように取り扱われる。  
１）スレッドがシグナル通知を受け、FreezeEventsプロパティがFALSEとなるまで待機する。  
２）スレッドが終了しようとしているかを確認し、その場合は、イベントキューをクリアにし、スレッドを終了させる。  
３）イベントキューから次のイベントを除去する。  
４）PreFireEvent(EventArgs posEvent)を呼び出す。  
５）ステップ４でPreFireEvent()がTRUEを返した場合、イベントをアプリケーションに発行する。  
６）ステップ１に戻る。
【００９６】
QueueEvent(EventArgs posEvent)とPreFireEvent(EventArgs posEvent)の２つのヘルパメソッドが、イベント通知を駆動するために提供される。QueueEvent(EventArgs posEvent)は、イベントキューにイベントを追加し、新しいイベントが到着したことをイベントスレッドにシグナル通知するために使用される。PreFireEvent(EventArgs posEvent)は、イベントが発行される直前にジェネリックＳＯにより呼び出される。このメソッドは、特定のイベントが発行されるのに先立ち、ＳＯの内部状態を更新する機会を与えるために提供される。
【００９７】
Open()メソッドが呼び出されるとき、イベントキューデータ構造体（ｅｖｅｎｔ  ｑｕｅｕｉｎｇ  ｄａｔａ  ｓｔｒｕｃｔｕｒｅ）が作成され初期化される。Close()メソッドは、デバイスを解放し、イベントスレッドを終了し、内部オブジェクトをクリーンアップする。ＩＨＶが、パフォーマンスカウンタおよびデバイス統計値を、単純かつ整合的に実装するのを支援するために、ヘルパクラスのセットが提供される。
【００９８】
デバイス統計値は、（１）デバイス統計情報（ｄｅｖｉｃｅ  ｉｎｆｏｒｍａｔｉｏｎ  ｓｔａｔｉｓｔｉｃｓ）と、（２）デバイス統計値の２つのカテゴリに分類することができる。デバイス統計情報は、デバイスの名前、製造元、およびバージョンなどデバイスのプロパティである。デバイス統計値は、一般に、例えば電源が入れられていた時間数などデバイスの使用情報を反映する。ＵＰＯＳ１．８は、すべてのデバイスがサポートすべき一連の統計値を定義し、また、デバイスクラスごとの統計値を定義する。ＵＰＯＳはまた、デバイスが、製造元固有のデバイス統計値をサポートすることができることを規定している。
【００９９】
DeviceStatisticsヘルパクラスは、ＵＰＯＳ仕様書第１．８版に定義されるようにデバイス統計値を実装する負担を軽減する。それには、GenericSOの実装が含まれ、したがって、GenericSOから派生するＳＯは、統計値をサポートするために最低限の分量のコードしか書く必要がない。一般に、顧客が書く必要があるコードだけが、与えられた統計値を適切な時間に増分するためにIncrementStatistic(string Name)メソッドを呼び出す。GenericSOは、残りの詳細を取り扱う。
【０１００】
DeviceStatisticsクラスは、ハードウェアまたはソフトウェアに格納された統計値をサポートする。ソフトウェアベースの統計値は、アプリケーションが定義可能な間隔で、自動的にＸＭＬファイルに保存され、デバイスが要求したとき自動的にこのファイルからロードされる。DeviceStatisticsは、３つの各メソッド（resetStatistics、retrieveStatistics、およびupdateStatistics）、ならびに２つのプロパティ（CapStatisticsReporting、およびCapUpdateStatistics）を実装する。それはまた、統計値の作成、統計値の実装、および統計値のディスクからのロード／ディスクへの保存のための公開ヘルパメソッドを含む。デバイスそれ自体に格納される統計値をサポートするために、ＳＯによって統計値を返すコールバック機能が指定される。DeviceStatisticsクラスは、クライアントアプリケーションがその統計値を要求する度にこの機能を呼び出す。
【０１０１】
ＩＨＶは、必要な場合デバイスドライバと一緒にそのサービスオブジェクトをインストールするためのＩＮＦファイルを提供する。選択された１組のＩＮＦファイルがプレインストールされ、したがって、オペレーティングシステムは、新しいデバイスが接続されたとき、それらをインストールすることができる。
【０１０２】
サービスオブジェクトのインストール
一実施形態では、．ＮＥＴサービスオブジェクトは、そのアセンブリを、HKLM＼SOFTWARE＼OLEforRetail.NET＼ControlAssembliesレジストリキーで指定されるフォルダにコピーすることによりインストールされる。．ＮＥＴ  ＳＯは、それ自体を物理デバイスにマップするのに必要な情報をそのアセンブリメタデータ内に有するので、単純な事例では、その他の情報は必要とされないことになる。追加のすべての設定は、ＸＭＬ設定ファイルを介して与えられる。この追加の設定の例は、既存のサービスオブジェクトにマップされる追加ハードウェアＩＤ、１つのクラスの複数のデバイスが接続される場合のためのデフォルトサービスオブジェクト、および、シリアルポートなどの非プラグアンドプレイデバイスに対する設定などの項目を含む。
【０１０３】
上述のように、グローバル設定は、ＸＭＬ構成ファイルで保持される。それぞれのＳＯ設定は、定義済みのフォルダに置かれる別個のＸＭＬファイル内にある。ライブラリは、インストールされたサービスオブジェクトを列挙するとき、メイン構成ファイルと、定義済みフォルダにある構成ファイルの双方を読み取る。
【０１０４】
ＩＨＶは、そのデバイスについてのＩＮＦファイルを有し、このファイルにより、そのドライバをインストールするとともに、ＳＯアセンブリ、およびオプションのＸＭＬ構成ファイルをそれぞれのフォルダにコピーする。ＩＳＶおよび管理者は、ＸＭＬ構成ファイルを編集することにより、これらの設定をカスタマイズすることができる。
【０１０５】
ＣＣＬは、共通機能をデフォルトで実装する基底クラスを提供することにより、．ＮＥＴベースのサービスオブジェクトを書くことを単純化する。ＩＨＶは、基底クラスから派生を行い、必要な場合は提供された実装をオーバーライドし、デバイス固有の特徴を追加することを推奨される。新しい．ＮＥＴサービスオブジェクトは、ライブラリによって定義されるデバイスクラスインターフェースを実装する．ＮＥＴクラスである。ＣＣＬは、これらのサービスオブジェクトの基底クラスとして使用することができるジェネリックサービスオブジェクトクラスを提供する。このクラスは、ＳＯを書くことを単純化するために、できるだけ多くのデバイス独立機能を実装する。
【０１０６】
ＣＣＬは、複数のベンダにより必要とされることが見込まれる機能に対するヘルパクラスのセットを提供する。これは、．ＮＥＴ  ＳＯを書くことを単純にすることを目的とする。
【０１０７】
一実施形態では、ライブラリは、．ＮＥＴサービスオブジェクトのドラッグアンドドロップ形式でのインストールをサポートする。ＳＯアセンブリは、充分なメタデータ情報を含み、したがって、ＣＣＬは、追加の構成を必要とせずに、ＳＯアセンブリを使用することができる。追加のＸＭＬ構成ファイルが、アセンブリメタデータを拡張するために定義されることもある。
【０１０８】
図７は、本発明の態様による、システムに接続されたＰＯＳデバイスに関する情報を提供するための例示的表示を示す。
【０１０９】
各デバイスは、有効または無効にすることが可能である。デバイスを無効／有効にするために、ドロップダウンリスト７２０が使用されても、アプリケーションがＣＣＬを呼び出してもよい。無効にされたデバイスは、ＣＣＬによりアクセスすることができない。デバイスにアクセスを試みるのに先立ち、アプリケーションは、デバイスを有効にしなければならない。
【０１１０】
各ＳＯプロバイダは、このようなタイプの管理情報をそれぞれのデバイスごとに提供する。
【０１１１】
全般タブおよびドライバタブは、デバイスに関する情報、すなわち、デバイスの名前および記述、（プラグアンドプレイデバイスについての）ハードウェアＩＤおよびパス、．ＮＥＴまたはレガシのサービスオブジェクト、（．ＮＥＴオブジェクトについての）アセンブリパス、フルネーム、バージョン、およびクラス名、ならびに、レジストリのProgId、ClsId、バイナリパス、バージョン、およびconfigパラメータを示す。
【０１１２】
デバイスの状態（７１０）も、デバイスに関する表示を行う。
【０１１３】
図８は、本発明の態様による、インストールされたＰＯＳデバイスの例示的スクリーンショットを示す。図示のように、販売デバイスのインストールポイントがペイン８１０に示されている。
【０１１４】
ペイン８１０は、マシンに現在接続されているデバイスクラスおよびデバイス、かつてマシンに接続されていたデバイスクラスおよびデバイス、インストールされた．ＮＥＴのサービスオブジェクトのアセンブリ、クラス、およびそれらがコントロールする物理デバイス、インストールされたレガシサービスオブジェクトおよびそれらがコントロールする物理デバイス、ならびに、グローバルライブラリ構成などの項目を含む、インストールされたデバイスおよび構成についてのマルチビュー（ｍｕｌｔｉｐｌｅ  ｖｉｅｗ）を示す。このインターフェースは、管理者が、例えば、どんなバイナリがどのサービスオブジェクトを実装しているかや、デバイスがインストールされている場所、バージョンについてなどの、デバイスに関する低レベルの詳細について掘り下げるのを支援することを目的とする。
【０１１５】
別のペイン（８２０）は、選択されたツリー表示のノードに対する一連のコンテキスト依存コントロールをホストする。このペインは、選択されたノードに関する詳細情報を示し、選択可能な操作を提供する。例えば、プリンタについて、Open、Claim、Enable、PrintNormal、CutReceiptなどのメソッドを呼び出すためのコントロールがある場合がある。デバイスからのイベントを視覚化するためのコントロールがある場合もある。このタブは、管理者が、実際のＰＯＳアプリケーションを実行せずに、接続されたハードウェアを速やかに検査することを可能にする。
【０１１６】
セキュリティ設定も選択することができる。例えば、ある特定のサービスオブジェクトおよび／またはハードウェアのみをシステムがアプリケーションに使用可能にするように、デバイスをロックダウン（ｌｏｃｋ  ｄｏｗｎ）することを可能にするグローバルセキュリティ設定を公開することができる。また、統計値は、デバイス統計値に対する迅速な読取り／リセットアクセスを可能にする。
【０１１７】
以上の詳細な説明、例、およびデータは、本発明の構成の製造品および使用の完全な説明を提供する。本発明の多数の実施形態は、本発明の趣旨および範囲から逸脱することなく構成することができることから、本発明は、添付の特許請求の範囲に属する。
【図面の簡単な説明】
【０１１８】
【図１】一動作環境を示す図である。
【図２】小売業向けＰｎＰシステムを示す概略的系統図である。
【図３】ＰｎＰシステムのための高水準のアーキテクチャを示す図である。
【図４】ＰｎＰシステムとＣＣＬの間の対話を示す図である。
【図５】レガシデバイスを、小売業向けＰｎＰシステムに組み込むためのアーキテクチャを示す図である。
【図６】例示的ヘルパクラスおよびＳＯリポジトリを示す図である。
【図７】システムに付加されたＰＯＳデバイスに関する情報を提供するための例示的表示の集約を示す図である。
【図８】本発明の諸態様による、インストールされたＰＯＳデバイスの例示的スクリーンショットを示す図である。
【図１】
2006012128.tif 000013
【図２】
2006012128.tif 000014
【図３】
2006012128.tif 000015
【図４】
2006012128.tif 000016
【図５】
2006012128.tif 000017
【図６】
2006012128.tif 000018
【図７】
2006012128.tif 000019
【図８】
2006012128.tif 000020
【外国語明細書】
2006012128000001.pdf