JP2005317019A - 汎用usbドライバ - Google Patents

汎用usbドライバ Download PDF

Info

Publication number
JP2005317019A
JP2005317019A JP2005129812A JP2005129812A JP2005317019A JP 2005317019 A JP2005317019 A JP 2005317019A JP 2005129812 A JP2005129812 A JP 2005129812A JP 2005129812 A JP2005129812 A JP 2005129812A JP 2005317019 A JP2005317019 A JP 2005317019A
Authority
JP
Japan
Prior art keywords
generic
winusb
driver
usb
user
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2005129812A
Other languages
English (en)
Other versions
JP5021180B2 (ja
Inventor
Firdsh K Bhesania
ケー.べサニア フィルドシュ
Randall E Aull
イー.オール ランダール
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2005317019A publication Critical patent/JP2005317019A/ja
Application granted granted Critical
Publication of JP5021180B2 publication Critical patent/JP5021180B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • AHUMAN NECESSITIES
    • A47FURNITURE; DOMESTIC ARTICLES OR APPLIANCES; COFFEE MILLS; SPICE MILLS; SUCTION CLEANERS IN GENERAL
    • A47JKITCHEN EQUIPMENT; COFFEE MILLS; SPICE MILLS; APPARATUS FOR MAKING BEVERAGES
    • A47J27/00Cooking-vessels
    • A47J27/08Pressure-cookers; Lids or locking devices specially adapted therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers
    • AHUMAN NECESSITIES
    • A47FURNITURE; DOMESTIC ARTICLES OR APPLIANCES; COFFEE MILLS; SPICE MILLS; SUCTION CLEANERS IN GENERAL
    • A47JKITCHEN EQUIPMENT; COFFEE MILLS; SPICE MILLS; APPARATUS FOR MAKING BEVERAGES
    • A47J27/00Cooking-vessels
    • A47J27/004Cooking-vessels with integral electrical heating means
    • AHUMAN NECESSITIES
    • A47FURNITURE; DOMESTIC ARTICLES OR APPLIANCES; COFFEE MILLS; SPICE MILLS; SUCTION CLEANERS IN GENERAL
    • A47JKITCHEN EQUIPMENT; COFFEE MILLS; SPICE MILLS; APPARATUS FOR MAKING BEVERAGES
    • A47J36/00Parts, details or accessories of cooking-vessels
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S220/00Receptacles
    • Y10S220/912Cookware, i.e. pots and pans

Abstract

【課題】 汎用USBドライバを提供するための技術を開示すること。
【解決手段】 より詳細には、汎用USBのデバイスドライバのアーキテクチャを説明し、このアーキテクチャは、汎用のカーネルモードのドライバにアクセスする、ユーザモードのUSBライブラリを通じた開発を可能にする。説明する実施態様では、方法は、装置のプラグインのイベントに応答して、カーネルモードの汎用デバイスドライバをロードすることを含む。ユーザのソフトウェアコンポーネントは、汎用デバイスドライバと通信する汎用のユーザモードのライブラリ(例えば、ダイナミックリンクライブラリ(DLL))によって提供されたルーチンを利用することによって、装置にアクセスする。
【選択図】 図1

Description

本発明は、一般には、デジタル通信に関し、より詳細には、汎用ユニバーサルシリアルバス(USB)ドライバに関する。
本特許文献の開示の一部は、著作権保護を受ける材料を含む。著作権所有者は、本特許文献または本特許開示のいかなる者による複製に対しても、それが特許商標庁の特許ファイルまたは記録において現れるときには、異議を唱えないが、そうでない場合、何であれすべての著作権を留保する。(著作権)Microsoft Corporation。著作権所有。
コンピュータがより一般的になるにつれて、単一のコンピュータシステムに組み込まれる機能の数は増え続けている。機能追加を、外部装置をコンピュータシステムに接続することによって提供することが多い。また、外部装置はコンピュータシステムと通信して、機能追加を提供する。
ユニバーサルシリアルバス(USB)は、外部装置をコンピュータシステムに接続するための標準的な通信チャネルとなっている。USBは、いくつかの装置を同じコンピュータシステムに同時に接続することを可能にするが、比較的高い帯域幅を提供する。例えば、最新の一般に入手可能なバージョンのUSB(例えば、USB2.0)は、最大480Mbps(メガビット毎秒)まで転送することができる。
USBデバイスを提供するベンダは一般に、これらの装置にアクセスすることを可能にするためのデバイスドライバを提供することが求められる。一般に、デバイスドライバは、プログラム、および、コンピュータシステムが装置にアクセスすること(例えば、データを装置から読み取ること、データを装置に書き込むこと、コマンドを装置に送信すること、および、状態データを装置から受信すること)を可能にするデータのセットである。
現在、大部分のUSBデバイスのベンダは、それらの装置用のカーネルモードのデバイスドライバを提供することが求められる。一般に、カーネルはオペレーティングシステム(OS)の中心部であり、OSの実行中にアクティブなまま存続し、コンピュータシステムをコントロールする。例えば、カーネルは、必要なサービス(メモリおよびプロセス管理など)をコンピュータシステムに提供する。結果として、カーネルモードのドライバは、最小の誤動作(またはバグ)の場合に復旧不可能なシステム全体のクラッシュを容易に引き起こす可能性がある。加えて、USBドライバをカーネルモードで実装するには、カーネルモードのドライバをテストするために必要な余分のハードウェアまたはソフトウェアに加えて、複雑なカーネルモードのドライバのプログラミングへの時間およびエネルギーの投資が必要となる。さらに、OSのアップグレード時に、互換性のない、または旧式のカーネルモードのデバイスドライバがクラッシュを引き起こし、システムのアップグレードの成功を妨げる場合がある。
汎用USBドライバを提供するための技術を開示する。より詳細には、汎用USBデバイスドライバのアーキテクチャを説明し、このアーキテクチャは、汎用カーネルモードのドライバと通信する、ユーザモードのUSBライブラリを通じた開発を可能にする。
説明する実施態様では、方法は、装置のプラグインのイベントに応答して、カーネルモードの汎用デバイスドライバをロードすることを含む。ユーザのソフトウェアコンポーネントは、汎用デバイスドライバと通信する汎用的なユーザモードのライブラリ(例えば、ダイナミックリンクライブラリ(DLL))によって提供されたルーチンを利用することによって、装置にアクセスする。
もう1つの実施態様では、分離した汎用デバイスドライバは、プラグインされた装置毎に、または装置によってサポートされた機能毎にロードされる。
いくつかの実施態様では、製造品がコンピュータプログラム製品として提供される。コンピュータプログラム製品の1つの実施態様は、コンピュータシステムによって読取可能であり、コンピュータプログラムをエンコードする、コンピュータプログラム記憶媒体を提供する。コンピュータプログラム製品のもう1つの実施態様は、コンピューティングシステムにより搬送波において組み立てられ、コンピュータプログラムをエンコードする、コンピュータのデータ信号において提供することができる。
また、コンピュータプログラム製品は、コンピュータ処理をコンピュータシステム上で実行するためのコンピュータプログラムをエンコードする。コンピュータ処理は、装置のプラグインのイベント(プラグアンドプレイのモジュールによって検出することができる)に応答して、カーネルモードの汎用デバイスドライバをロードする。ユーザのソフトウェアコンポーネントは、汎用的なユーザモードのライブラリ(例えば、ダイナミックリンクライブラリ(DLL))によって提供されたルーチンを利用することによって、装置にアクセスする。
他の実施態様もまた、本明細書で説明および列挙する。
詳細な説明を、添付の図面を参照して説明する。図面では、参照符号の一番左の数字は、その参照符号が最初に現れる図を識別する。異なる図における同じ参照符号の使用は、類似または等しい項目を指示する。
以下の開示は、汎用デバイスドライバのアーキテクチャを提供するための技術を説明する。より具体的には、汎用USBドライバを提供するための技術を開示する。より詳細には、アーキテクチャは、汎用のカーネルモードドライバにアクセスするユーザモードのUSBライブラリを利用する。アーキテクチャは、部分的には、デバイスドライバの開発時間を短縮し、エンドユーザの体験を改善し(例えば、通常のオペレーション中であるか、アップグレード処理中であるかにかかわらず、システム全体のクラッシュを制限することによる)、テストおよびデバッグを集中させる。アーキテクチャをまた、入出力(I/O)処理、セキュリティおよび電源管理を改善するために利用することもでき、これをさらに本明細書で論じる。また、本明細書で説明する技術を、ソフトウェア、ファームウェア、ハードウェアおよび/またはそれらの組合せとして実装することができる。
(汎用ドライバの概観)
図1は、汎用デバイスドライバのための例示的システム100を例示する。本明細書の図1および2における矢印の方向は、一実施態様によるデータの流れの方向を指示する。システム100には、カーネルモード環境102およびユーザモード環境104が含まれる。カーネルモード環境102にはUSBのコアスタック106が含まれ、USBのコアスタック106はOSの一部である場合があり、USBデバイスとの通信をハードウェアレベルで可能にする。USBのコアスタック106はハブ機能を促進することができ、これをさらに、図2を参照して説明する。USBのコアスタック106は、汎用USBドライバ108に結合される。汎用USBドライバ108はUSBデバイスのI/Oを管理し、より一般には、USBデバイスをユーザモード環境104に接続する。
ユーザモード環境104には、汎用USBのユーザモードのライブラリ110およびユーザのソフトウェアコンポーネント112が含まれる。したがって、ユーザのソフトウェアコンポーネント112は、一実施態様ではユーザモードのソフトウェアコンポーネントである。汎用USBのユーザモードのライブラリ110はルーチン(またはアプリケーションプログラミングインターフェース(API))を提供し、APIをUSBユーザのソフトウェアコンポーネント112によって利用して、USBデバイスと通信するか、あるいはUSBデバイスをコントロールすることができる。一実施態様では、汎用USBのユーザモードのライブラリ110はDLLである。したがって、USBユーザのソフトウェアコンポーネント112は、ルーチンをカーネルモードではなくユーザモードで呼び出すことによって、USBデバイスをユーザモード環境104から管理することができる。いくつかの例示的APIを、以下で同一見出しの下でさらに論じる。
このような実施態様は、システム全体のクラッシュを減らすために想定され、理由は、USBユーザのソフトウェアコンポーネント112(または、汎用USBのユーザモードのライブラリ110によって提供されたルーチン)がクラッシュする場合、カーネルのオペレーションは影響を受けないままであるからである。加えて、このようなシステム(100)は、デバイスドライバの開発時間を短縮し、テストおよびデバッグを集中させる(部分的には、ただ1つのコンピュータシステムのみが、USBインターフェースをテストするために必要とされ、すなわち、ユーザモードのソフトウェアコンポーネントがクラッシュするときでさえ、システムは作動可能のままであるからである)。
一実施態様では、USBのコアスタック106と汎用USBドライバ108との間の通信インターフェースに対応するデータは、USBユーザのソフトウェアコンポーネント112と汎用USBのユーザモードのライブラリ110との間のインターフェースに関する情報も同様に、開発者に公開され、またはそうでない場合は公に入手可能である。一実施態様では、汎用USBドライバ108と汎用USBのユーザモードのライブラリ110との間のインターフェースに関する情報を、公開する必要はない。
(複数の装置のための汎用ドライバ)
図2は、複数の装置のための汎用デバイスドライバが複数の場合の、例示的システム200を例示する。システム200には、カーネルモード環境102、ユーザモード環境104、USBのコアスタック106、汎用USBのユーザモードのライブラリ110、および、USBユーザのソフトウェアコンポーネント112が含まれる。
システム200には、データを通信するためのUSBバス202が含まれる(以下に、図6を参照してさらに論じる)。しかし、USBバスは一例であり、他のタイプのデータ通信バス(有線または無線通信バス、例えば、ブルートゥース、small computer system interface(SCSI)など)を、システム200において利用することができる。
図2に例示するように、USBバス202はUSBのコアスタック106に結合される(図1に関して説明したように)。USBのコアスタック106は、次に、USBハブ206との通信を容易にするために、物理デバイスオブジェクト(PDO)に結合される。USBハブ206は、複数のUSBデバイスがカーネルモード環境102内で処理されることを可能にする。したがって、汎用USBドライバ(108)を、カーネルモード環境102とユーザモード環境104との間で結合することができることが想定される。
図2に例示するように、複数のPDOを、様々なドライバ(例えば、汎用USBドライバ108およびUSB複合ドライバ(USB composite driver)208)との通信を容易にするために利用することができる。ユーザ環境104は、各汎用USBドライバ(108)と、グローバル一意識別子(GUID)210によって発見および/または識別された機能を通じて通信することができる。各GUID210は、USBインターフェース/機能を一意に識別する。1つの例示的実施態様では、ワシントン州レドモンドのMicrosoft Corporationを通じて入手可能なWindows(登録商標)OSなど、OSレジストリファイルおよび/またはドライバファイル(例えば、情報ファイル(INF))内のGUIDキーのためのフォーマットは、以下の通りである。
HKR,,DeviceInterfaceGUID,,"{058815B2-9805-47d3-B7D5-ABC464D3CA06}"
したがって、各GUID210は、対応する装置によってサポートされた機能を識別し、これらの機能を、USBのユーザモードのソフトウェアコンポーネント112によって利用することができる。例えば、ユーザモードのソフトウェアコンポーネントは、それらの重要なGUIDを接続するいかなるドライバをも検索して、所望の機能性をサポートする装置を発見するようになる。USBのユーザモードのソフトウェアコンポーネント112は次いでUSBデバイスと、図1を参照して説明したように汎用USBのユーザモードのライブラリ110を通じて通信することができる。
複数のUSBハブ(206)を利用して、複数のUSBデバイス、または、単一のUSBデバイス内に組み込まれた機能との通信を可能にすることができることが想定される。例えば、USBハブ(206)を利用して、キーストロークボタンまたは統合されたポインティングデバイス(例えば、ジョイスティックおよびまたはタッチパッド)に加えて、マルチメディアのコマンドボタンを有するキーボード内の異なる機能へのアクセスを可能にすることができる。
(汎用デバイスドライバの操作)
図3は、汎用デバイスドライバを利用するための例示的方法300を例示する。プラグアンドプレイ(PNP)モジュール(例えば、OS内に常駐する)によって検出することができる、プラグインのイベントが発生すると(302)、コアスタック(例えば、図1および2の106)は、プラグインされた装置に対応するデバイスIDを抽出する。抽出されたデバイスIDは、PNPモジュールによって提供または検出され(306)、PNPモジュールは、抽出されたデバイスIDを汎用ドライバ(例えば、図2の108)と突き合わせる(308)。
突き合わせた汎用ドライバ(例えば、図1および2の108)がロードされて(310)、ステージ310のロードされたデバイスドライバとユーザのソフトウェアコンポーネント(例えば、図1および2の112)との間の通信を促進する。ステージ312で、一意のIDが登録される(図2の210を参照して説明したものなど)。最後に、プラグインされた装置に、ユーザのソフトウェアコンポーネントによって、汎用デバイスドライバを通じてアクセスすることができる(314)。
一実施態様では、PNPモジュールが、別のデバイスIDではなく、抽出されたデバイスIDを汎用デバイスドライバと突き合わせる(例えば、汎用デバイスドライバが、プラグインされた装置と互換性がある場合)ことが想定される。これは、いかなる追加のドライバをロードする必要性をも除く。したがって、一実施態様では、カーネルモードの汎用デバイスドライバは、装置のプラグインイベントに応答してロードされ、ユーザのソフトウェアコンポーネントは、汎用のユーザモードのライブラリによって提供されたルーチンを利用することによって、装置にアクセスする。汎用のユーザモードのライブラリを、汎用デバイスドライバに結合して通信可能にする。ルーチンをAPIとして実装することができる(これを以下で、「例示的API」という見出しの下でさらに説明する)。さらに、分離した汎用デバイスドライバを、プラグインされた装置(または、装置によってサポートされた機能)毎にロードすることができる。
(汎用デバイスドライバにおけるI/O処理)
図4は、汎用デバイスドライバにおけるI/Oを処理するための例示的方法400を例示する。一実施態様では、方法400では、ユーザのソフトウェアコンポーネント(例えば、図1および2の112)は、少数のルーチンをコールすることによって、ハードウェア特定のI/O処理を汎用デバイスドライバ(例えば、図1および2の108)に任せることを可能にする。例えば、ユーザのソフトウェアコンポーネントは単に、汎用USBのユーザモードのライブラリ(例えば、図1の110)を通じて提供された初期化、読み取り/書き込み、およびコマンドの解放を発行し、特定のデータ長の処理(consideration)、データの断片化、および/またはデータの再アセンブリを汎用デバイスドライバに任せることができる。
例えば、初期化は汎用USBのデバイスドライバの状態およびビヘイビア(behavior)をデフォルトにリセットし、さらなる操作を処理するために汎用USBデバイスドライバを準備することができる。読み取りは、対応する装置上の特定のエンドポイントからデータを読み取ることができ、書き込みは、対応する装置上の特定のエンドポイントにデータを書き込むことができる。解放は、初期化により開始されたセッション中に要求されたすべてのリソースをクリーンアップすることができる。
データ長の処理に関して、USB入力(すなわち、装置から、図5を参照して論じるホストまたはコンピューティングシステムへのデータ)のエンドポイントは、0バイトからそのエンドポイントの指定された最大パケットサイズまでのいかなるサイズでも一度に転送することができるので、ホストシステム上のソフトウェアによって、転送内のパケット毎にこの最大サイズまでを受信するように準備する必要がある(ただし、転送が複数のパケットで構成される場合)。ユーザモードのソフトウェアコンポーネント(例えば、図1および2の112)は、転送がこの最大パケットサイズの倍数ではない、転送を要求する場合、汎用USBのデバイスドライバは、自動的にこの転送のサイズを調整することができる。したがって、ユーザのソフトウェアコンポーネントが、装置からすべての可能なデータ転送サイズを処理するために不十分な長さを有するデータ転送を要求する場合、データ転送の長さを増大する。これは、クライアントの(クライアントは、ユーザモードのソフトウェアコンポーネントである)バッファを少なくとも2つに分離した転送に分割することによって、実施することができる(これはまた「セグメンテーション」とも呼ばれる)。第1の転送サイズは、クライアントの要求した転送サイズよりも小さい、最大パケットサイズ(以下で「MaxPacket」)の最大倍数にすることができる。この第1の転送のためのバッファは、クライアントのバッファの第1のN*MaxPacket(ただし、この値は、この第1の下位転送のサイズである)であるので、メモリコピーを必要としない。第2の転送は、MaxPacketバイトである。この第2の転送のためのバッファは、一実施態様では新たに割り振られたバッファである。両方の転送が完了した後、第2の転送からのデータは、クライアントバッファを埋めるか、あるいはショートパケットに到達するまで、クライアントのバッファに戻すようにコピーされる。いずれかのデータが、コピーの後に第2の転送から残される場合、そのエンドポイントのためのパイプのポリシーに基づいて、このデータを次の転送要求のために保存しても保存しなくてもよい。第1の転送内にショートパケットがある場合、第2の転送は決して発行されない場合があることも想定される。
また、USBホストコントローラは、USBのコアスタック(例えば、図1および2の106)と共に、特定のサイズまでの転送バッファのみを処理する場合が多い。このサイズは、異なるホストコントローラの実装によって異なる場合がある。汎用USBのデバイスドライバはこれらのサイズ制限を考慮に入れ、クライアントの転送要求がこの制限を越える場合、転送は2つ以上の転送に分割され、すべての転送はこの制限以下である。一実施態様では、これを実装するために必要とされるバッファコピーはなく、理由は、各下位転送のバッファが単にクライアントの元のバッファの一部であるからである。
図4に例示するように、方法400はステージ402では、例えば、装置にアクセスするために利用されるデータ構造体を定義することによって、初期化する。初期化ステージは、ポリシー設定をデフォルト値にリセットすることができる(以下で、WinUsb_Initializeなど、例示的APIを参照してさらに説明する)。初期化ステージは、一実施態様では、汎用のユーザモードのライブラリ(例えば、図1および2の110に関連付けられたDLL)が実行することを可能にする。
方法400はパイプのポリシーを定義し(404)、パイプのポリシーは、汎用デバイスドライバのビヘイビアを定義することができ、ビヘイビアには例えば、タイムアウト、パケットの終了、エラーからの自動復旧、パケットの終了のガイドライン、ショートパケットの処理、転送されるべきデータの量を予想するために実際のデータに先立ってヘッダを読み取るために使用されるなどの部分的読み取り、重要ではない余分なデータの廃棄、および/または生データの処理(ユーザのソフトウェアコンポーネントが適切なデータ処理を保証中であることを指示する)が含まれ、これを以下で、WinUsb_SetPipePolicyなど、例示的APIを参照してさらに説明する。一実施態様では、各エンドポイントは、個別に構成可能である汎用USBドライバにおいてパイプを有することができる。
これらの例示的なパイプのビヘイビアの設定のいくつかを以下で、様々な実施態様によってさらに説明する。
・ タイムアウト−このパイプのポリシーを特定のエンドポイントについて設定することができ、結果として、そのエンドポイントに関して、指定された合計時間内で完了しないいかなる転送をキャンセルする。
・ パケットの終了のガイダンス−いくつかのUSBデバイスのプロトコルでは、ホストコンピューティングシステムが(ホストから装置への)出力転送の終了時に、ショートパケット(エンドポイントで指定された、しきい値の最大パケットサイズより小さいパケット)によりマークを付けることを必要とする。クライアントの転送がその最大パケットサイズの倍数である場合、ゼロの長さのパケットが送信される。これは、ユーザのソフトウェアコンポーネント(またはクライアント)に対して自動的に行うことができ、クライアントが最大パケットサイズについて、または、転送がこのサイズの倍数であるかどうかを心配する必要がないようにする。
・ エラーからの自動復旧−特定のエンドポイント上の特定の転送のためにUSBバス上に転送エラーがある場合、自動復旧メカニズムを使用可能にして、エラー状態をクリアするように試みることができ、さらなる転送が発行されることが可能になるようにする。また、エラー状態が復旧不可能である場合がある(すなわち、さらなる転送は発生しないようになる)ことも想定される。
・ ショートパケットの処理−一般に、ショートパケットがUSBデバイス上の特定のエンドポイントから受信される場合、転送は、USBのコアスタック(例えば、図1および2の106)によって完了される。ユーザのソフトウェアコンポーネントは、転送の完了を引き起こすように意図しないこともあれば、むしろ、指定されたバイト数が受信されるまで、装置からの読み取りを続けるようになることもある。一実施態様では、ショートパケットを、このようなイベントを無視してデータを読み取り続けるように汎用USBのデバイスドライバを構成することによって、処理することができる。この処理を、最後に受信されたバイトの1バイト過ぎ示すバッファを用いて、早まって完了された転送を再発行することによって実装することができる。
・ 部分的読み取り−いくつかのデバイスプロトコルには転送の開始でヘッダが含まれ、ヘッダは、サイズ情報、転送の型などを含む、データについての情報を含む。いくつかのクライアントは、転送の残りを処理する方法を決定する前に、このヘッダのみを読み取ることを望む場合がある。このようなシナリオに対処するために、クライアントは対応するパイプ(転送がターゲットとされるパイプ)のためのビヘイビアを設定して、クライアントがヘッダのみを読み取ることを可能にすることができ、次いで、汎用USBのデバイスドライバは、そのパケット内のヘッダの後に受信された、いかなる追加のデータをも保存して、この追加のデータがクライアントの後続の転送の開始に追加されるようにすることができる。
・ 余分なデータの廃棄−装置が、パケット内でクライアントが要求したよりも多いデータを送信する場合、クライアントは、エンドポイントのための汎用USBのデバイスドライバのビヘイビアを、その余分なデータを廃棄するように、あるいはその余分なデータが後続の転送の開始に追加されるように、構成することができる。
・ 生データ−いくつかのクライアントは、汎用USBのデバイスドライバの自動的なビヘイビアの訂正を迂回するために、例えば特定の装置の特徴に関して性能を改善するために、クライアント自体で転送制限を管理する方がよい。これらのクライアントは、特定のエンドポイントに関する汎用USBのデバイスドライバのビヘイビアを構成することができ、クライアントのビヘイビアを訂正するのではなく、その代わりに正しいクライアントのビヘイビアを要求するようにする。したがって、この手法は、すべて正しいビヘイビアのクライアント要求がコアのUSBスタックに直接渡されることを可能にする。
一実施態様では、ユーザのソフトウェアコンポーネントは次いで、先入れ先出し(FIFO)のバッファのポリシーを定義することができ(406)(例えば、特定のパイプ(エンドポイント)のため)、装置からFIFOを埋め始めることができ(408)、これを以下で、WinUsb_SetFifoPolicyおよびWinUsb_StartFifoなど、例示的APIを参照してさらに説明する。次いで、FIFOを読み取ることができる(例えば、後述のWinUsb_ReadFifo APIをコールすることによる)。一実施態様では、1つのFIFOがパイプ毎に提供される。また、WinUsb_ReadPipeを使用することによってデータを読み取ることができることも、想定される。したがって、FIFOはデータを読み取るために必要とされない。しかし、FIFOを、任意の時間でデータを生成することができる、あるいは例えば、常にデータをストリームする、特定のクラスの装置のために使用することができる。
次いでステージ410で、パイプが読み取られ、あるいは書き込まれる。また、以下で詳述するように、他のAPIがI/O処理のために使用可能であり、これらの他のAPIは、ユーザのソフトウェアコンポーネントがI/O関数をより細かく制御することを可能にする。例えば、一実施態様では、装置が、クライアントバッファにとって大きすぎるパケットにより応答する場合、データは次の転送の開始で追加される(このオプションを、例えば、Allow_Partial_Readsによって使用可能にする場合)。
(例示的API)
1つまたは複数の例示的APIを以下で例示し、これらのAPIをMicrosoftのWindows(登録商標)環境内で利用して、図1および2を参照して説明したルーチンを提供することができる。例えば、ルーチン(例えば、図1および2の汎用USBのユーザモードのライブラリ110の中にある)は、以下の動作(以下でさらに説明する)をサポートすることができる。
・ USB記述子の装置、構成、インターフェースおよび文字列について問い合わせること、
・ GUIDのデバイスインターフェースのクラスに関連付けられたUSBのデバイスインターフェースを列挙し、ベンダにより供給されたコールバックのルーチンを用いて、これらのインターフェースをフィルタリングすること、
・ USBデバイスのいくつかのインターフェースを選択的に起動状態にし、他のインターフェースを使用しない状態のままにすること、
・ 標準のコントロール転送の要求を生成すること、および/または
・ コントロール、バルク、割り込み、および等時性のデータを伝送すること。
後述の例示的APIは、それらがMicrosoftのWindows(登録商標)OSに関する汎用USBのデバイスドライバに対応することを示すために、「WinUSB」によって始められる。他の名前付け規則が利用される場合があることは想定される。また、各APIのためのサンプルのコール、パラメータ、および戻り値を以下で強調する。
(1.WinUsb_Initialize)
WinUsb_Initializeの関数は、WinUsbのデータ構造体を初期化する。この関数がコールされる場合、ポリシー設定はデフォルト値にリセットされることに留意されたい。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_Initialize(
IN HANDLE DeviceHandle,
OUT PWINUSB_INTERFACE_HANDLE InterfaceHandle
);
(パラメータ)
(DeviceHandle)
ファイルを作成するためのルーチン(例えば、CreateFile)によって戻された装置へのハンドル。WinUsbはオーバーラップされたI/Oを使用して、フラッグ(例えば、FILE_FLAG_OVERLAPPED)がCreateFileコールにおいて指定されるべきであるようにする。
(InterfaceHandle)
これは、他のすべてのWinUSBのAPI関数コールのために使用することができる、インターフェースのハンドルである。これは、WinUSBによって生成される不透明なハンドル(opaque handle)である。
(戻り値)
この関数は、成功した場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(2.WinUsb_Free)
WinUsb_Freeの関数は、WinUsb_Initializeによって割り振られたすべてのリソースを解放する。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_Free(
IN WINUSB_INTERFACE_HANDLE InterfaceHandle
);
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeによって戻されたインターフェースのハンドルである。
(戻り値)
この関数は、成功した場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(3.WinUsb_QueryAlternateInterface)
WinUsb_QueryAlternateInterfaceの関数は、特定のインターフェースのハンドルのための第1の代替のインターフェースの記述子を戻す。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_QueryAlternateInterface(
IN WINUSB_INTERFACE_HANDLE InterfaceHandle,
IN UCHAR AlternateInterfaceNumber,
OUT PUSB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor
);
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeによって戻されたインターフェースのハンドルである。
(AlternateInterfaceNumber)
これは、戻すべき代替のインターフェースを指示する値である。0の値は、第1の代替のインターフェースを指示し、1の値は、第2の代替のインターフェースを指示する、などとなる。
(UsbAltInterfaceDescriptor)
コール側によって割り振られたUSB_INTERFACE_DESCRIPTORの構造体へのポインタ。
(戻り値)
この関数は、成功し、構造体をポピュレート(populate)した場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(4.WinUsb_QueryDeviceinformation)
WinUsb_QueryDeviceinformationの関数は、WINUSBインターフェースに関連付けられる物理デバイスについての情報を戻す。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_QueryDeviceInformation(
IN WINUSB_INTERFACE_HANDLE InterfaceHandle,
IN ULONG InformationType,
IN OUT PULONG BufferLength,
OUT PVOID Buffer
);
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeによって戻されたインターフェースのハンドルである。
(InformationType)
これは、どのインターフェースの情報の値を検索するべきであるかを指定する値である。
(BufferLength)
これは、バイト単位のBufferの長さ、すなわち、読み取るべき最大のバイト数である。このパラメータを、Bufferにコピーされた実際のバイトの数に設定することができる。
(Buffer)
これは、要求された値を受信する、コール側によって割り振られたバッファである。
(戻り値)
この関数は、成功し、構造をポピュレートした場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(注記)
以下のリストは、可能性のあるInformationTypeの値を説明する。
(DEVICE_SPEED(0x01))
この要求は、以下の値のうち1つを、装置の速度に基づいて戻すようになる。
LowSpeed(0x01)
FullSpeed(0x02)
HighSpeed(0x03)
(PHYSICAL_DEVICE_ID(0x02))
この値は、装置の物理デバイスの識別子を含む。
(5.WinUsb_GetDescriptor)
WinUsb_GetDescriptorの関数は、要求された記述子を戻す。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_GetDescriptor(
IN WINUSB_INTERFACE_HANDLE InterfaceHandle,
IN UCHAR DescriptorType,
IN UCHAR Index,
IN USHORT LanguageID,
OUT PUCHAR Buffer,
IN ULONG BufferLength,
OUT PULONG LengthTransferred
);
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeによって戻されたインターフェースのハンドルである。
(DescriptorType)
これは、戻すべき記述子のタイプを指定する値である。標準の値については、非特許文献1のUSB仕様を参照することができる。
(Index)
これは記述子インデックスであり、非特許文献1のUSB仕様において文書化されている。
(LanguageID)
要求された記述子が文字列の記述子である場合、これは言語の識別子を指定する値である。
(Buffer)
これは、要求された記述子を受信する、コール側によって割り振られたバッファである。
(BufferLength)
これは、バイト単位のBufferの長さ、すなわち、読み取るべき最大のバイト数である。
(LengthTransferred)
これは、Bufferにコピーされた実際のバイトの数を受信する。
(戻り値)
この関数は、成功し、構造をポピュレートした場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
http://www.usb.orgで入手可能であるUSB仕様 (6.WinUsb_SetCurrentAlternateInterface) WinUsb_SetCurrentAlternateInterfaceの関数は、インターフェースのための指定された代替のインターフェースの設定を選択する。このAPIをコールするための例示的メソッドは以下の通りである。 BOOL_stdcall WinUsb_SetCurrentAlternateInterface( IN WINUSB_INTERFACE_HANDLE InterfaceHandle, IN UCHAR InterfaceNumber );
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeによって戻されたインターフェースのハンドルである。
(InterfaceNumber)
これは、PUSB_INTERFACE_DESCRIPTORの構造体のbInterfaceNumberメンバに含まれた値であり、WinUsb_QueryAlternateInterfaceによってポピュレートされたものである。
(戻り値)
この関数は、成功し、構造体をポピュレートした場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(7.WinUsb_GetCurrentAlternateInterface)
WinUsb_GetCurrentAlternateInterface関数は、インターフェースのための現在の代替のインターフェースの設定を得る。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_GetCurrentAlternateInterface(
IN WINUSB_INTERFACE_HANDLE InterfaceHandle,
OUT PUCHAR InterfaceNumber
);
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeから戻されたインターフェースのハンドルである。
(InterfaceNumber)
これは、現在選択された代替のインターフェースを受信するようになる、UCHARへのポインタである。
(戻り値)
この関数は、関数が成功し、構造体をポピュレートする場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorへのコールによって検索することができる。
(8.WinUsb_QueryPipe)
WinUsb_QueryPipeの関数は、インターフェースに関連付けられる、指定されたパイプについてのパイプの情報を戻す。デフォルトのコントロールのパイプは戻されない場合があることに留意されたい。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_QueryPipe(
IN WINUSB_INTERFACE_HANDLE InterfaceHandle,
IN UCHAR AlternateInterfaceNumber,
IN UCHAR PipeIndex,
OUT PWINUSB_PIPE_INFORMATION PipeInformation
);
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeによって戻されたインターフェースのハンドルである。
(AlternateInterfaceNumber)
これは、情報が戻されるべき先の代替のインターフェースを指定する値である。
(PipeIndex)
これは、情報が戻されるべき先のパイプを指定する値である。この値は、一実施態様では、PipeIdと同じではない。そうではなく、この値は、インターフェースのリストにおけるパイプを表現する。0の値は第1のパイプを示し、1の値は第2のパイプを示す、などとなる。この値は、インターフェースの記述子におけるbNumEndpointsより小さくなるべきである。
(PipeInformation)
これは、コール側によって割り振られたWINUSB_PIPE_INFORMATIONの構造体へのポインタである。
(戻り値)
この関数は、成功し、構造体をポピュレートした場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(注記)
WINUSB_PIPE_INFORMATIONの構造体の定義を、以下のようにすることができる。
typedef struct_WINUSB_PIPE_INFORMATION {
USBD_PIPE_TYPE PipeType;
UCHAR PipeId;
USHORT MaximumPacketSize;
UCHAR Interval;
} WINUSB_PIPE_INFORMATION, *PWINUSB_PIPE_INFORMATION;
PipeIdのメンバは、USBの8ビット(16進)のエンドポイントアドレスであり、このアドレスは7ビットアドレスおよび符号ビット(direction bit)からなる。
(9.WinUsb_SetPipePolicy)
WinUsb_SetPipePolicyの関数は、特定のパイプ(エンドポイント)のポリシーを設定する。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_SetPipePolicy(
IN WINUSB_INTERFACE_HANDLE InterfaceHandle,
IN UCHAR PipeID,
IN ULONG PolicyType,
IN ULONG ValueLength,
IN ULONG_PTR Value
);
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeによって戻されたインターフェースのハンドルである。
(PipeID)
これは、パイプのポリシーを設定するためのパイプに属するパイプの識別子である。
(PolicyType)
これは、変更するべきポリシーパラメータを指定する値である。
(ValueLength)
これは、Valueが指すバッファの、バイト単位の長さであり、あるいは、Valueがバッファを指さない場合、ゼロである。
(Value)
PolicyTypeによって指定されるポリシーのパラメータのための新しい値。
(戻り値)
この関数は、成功し、構造体をポピュレートした場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(注記)
以下のリストは、可能性のあるPolicyType値を説明する。
(SHORT_PACKET_TERMINATE(0x01))
ValueがTRUEである(ゼロではない)場合、エンドポイントのための最大パケットサイズの倍数であるあらゆるWRITE(OUT)要求は、ゼロの長さのパケットにより終了される。デフォルトはFALSEである。
(AUTO_CLEAR_STALL(0x02))
ValueがTRUEである(ゼロではない)場合、停止のPIDは無視されるようになり、先入れ先出し(FIFO)のバッファリングが使用中でない限り、エラーが戻されるようになる。この場合、しかし、パイプは停止されないようになり、データは流れ続けるようになる。このパラメータはCONTROLのパイプに影響を及ぼさない。ホストが自動的に装置の停止状態をクリアすることに留意されたい。デフォルトはFALSEである。
(PIPE_TRANSFER_TIMEOUT(0x03))
Valueは、転送が後にキャンセルされるべきである、ミリ秒単位の合計時間である。ゼロの値は、無限大の合計時間を示す。デフォルトは無限大の合計時間である。
(IGNORE_SHORT_PACKETS(0x04))
ValueがTRUEである(ゼロではない)場合、読み取り操作は、ショートパケットを受信する場合、完了しないようになる。その代わりに、この操作は、指定されたバイト数が読み取られる場合のみ完了するようになる。ValueがFALSEである場合、読み取り操作は、指定されたバイト数が読み取られるか、あるいはショートパケットを受信する場合、完了するようになる。デフォルトはFALSEである。
(ALLOW_PARTIAL_READS(0x05))
ValueがFALSE(ゼロ)である場合、読み取り要求は、装置が要求されたよりも多くのデータを戻す場合、失敗するようになる。ValueがTRUEである場合、余分なデータが保存され、この余分なデータは、次に来る読み取り要求のためのデータの開始で戻される。デフォルトはTRUEである。
(AUTO_FLUSH(0x06))
ValueがFALSE(ゼロ)であり、装置が要求されたよりも多くのデータを戻す場合、残りのデータは廃棄されるようになる。ValueがTRUEである場合、ビヘイビアは、ALLOW_PARTIAL_READSの値によって決まる。データは保存され、次いで次に来る読み取り要求のためのデータの開始で戻されるようになるか、あるいは、要求は失敗するようになる。デフォルトはFALSEである。
(Raw_IO(0x07))
これは、ユーザのソフトウェアコンポーネント(図1〜2の112など)が適切なデータ処理を保証することを可能にする。ユーザのソフトウェアコンポーネントによって提供されたデータが不適切なフォーマットである場合、データはフラッシュ(flush)される場合がある。
(10.WinUsb_GetPipePolicy)
WinUsb_GetPipePolicyの関数は、特定のパイプ(エンドポイント)のポリシーを得る。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_GetPipePolicy(
IN WINUSB_INTERFACE_HANDLE InterfaceHandle,
IN UCHAR PipeID,
IN ULONG PolicyType,
IN OUT PULONG ValueLength,
OUT PVOID Value
);
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeによって戻されたインターフェースのハンドルである。
(PipeID)
これは、パイプのポリシーを得るためのパイプに属するパイプの識別子である。
(PolicyType)
これは、得るべきポリシーのパラメータを指定する値である。
(ValueLength)
これは、Valueが指すバッファの長さへのポインタである。出力で、このパラメータは、Valueのバッファにコピーされたデータの長さを受信する。
(Value)
これは、指定されたパイプのポリシーを受信するバッファへのポインタである。
(戻り値)
この関数は、成功し、構造体をポピュレートした場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(11.WinUsb_SetFifoPolicy)
WinUsb_SetFifoPolicyの関数は、特定のパイプ(エンドポイント)のポリシーを設定する。このAPIをコールするための例示的メソッドは以下の通りである。
B00L_stdcall
WinUsb_SetFifoPolicy(
IN WINUSB_INTERFACE_HANDLE InterfaceHandle,
IN UCHAR PipeID,
IN ULONG PolicyType,
IN ULONG ValueLength,
IN ULONG_PTR Value
) ;
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeによって戻されたインターフェースのハンドルである。
(PipeID)
これは、パイプのポリシーを設定するためのパイプに属するパイプの識別子である。
(PolicyType)
これは、変更するべきポリシーのパラメータを指定する値である。
(ValueLength)
これは、Valueが指すバッファのバイト単位の長さであり、あるいは、Valueがバッファを指さない場合、ゼロである。
(Value)
これは、PolicyTypeによって指定されるポリシーのパラメータのための新しい値である。
(戻り値)
この関数は、成功し、構造体をポピュレートした場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(注記)
以下のリストは、可能性のあるPolicyTypeの値を説明する。
(FIFO_SIZE(0x01))
Valueは、FIFOの入力バッファの、バイト単位のサイズである。デフォルト値は16×MaxPacketSizeである。この制限に到達する場合、データは失われるようになる。
(NOTIFICATION_THRESHOLD(0x03))
Valueは、コールバックの関数がコールされる前にFIFOのバッファ内に存在するべきであるバイト数である。IGNORE_SHORT_PACKETSがFALSEであり、ショートパケットを受信する場合、いずれにしてもコールバックの関数がコールされるようになる。
(12.WinUsb_GetFifoPolicy)
WinUsb_GetFifoPolicyの関数は、特定のパイプ(エンドポイント)のポリシーを得る。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_GetFifoPolicy(
IN WINUSB_INTERFACE_HANDLE InterfaceHandle,
IN UCHAR PipeID,
IN ULONG PolicyType,
IN OUT PULONG ValueLength,
OUT PVOID Value
) ;
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeによって戻されたインターフェースのハンドルである。
(PipeID)
これは、パイプのポリシーを得るためのパイプに属するパイプの識別子である。
(PolicyType)
これは、得るべきポリシーのパラメータを指定する値である。
(ValueLength)
これは、Valueが指すバッファの長さへのポインタである。出力で、このパラメータは、Valueバッファにコピーされたデータの長さを受信する。
(Value)
これは、指定されたFIFOのポリシーのパラメータを受信するバッファへのポインタである。
(戻り値)
この関数は、成功し、構造体をポピュレートした場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(13.WinUsb_StartFifo)
WinUsb_StartFifoの関数は、データを装置からFIFOのバッファに読み込む自動的な読み込みのメカニズムを起動する。データがこのバッファに追加されるとき、FifoDataNotificationの関数がコールされ、この関数は、クライアントにデータの存在を通知する。クライアントは次いで、データをFIFOのバッファから読み取るための要求を発行することができる。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_StartFifo(
IN WINUSB_INTERFACE_HANDLE InterfaceHandle,
IN UCHAR PipeID,
IN PWINUSB_NOTIFICATION_CALLBACK FifoDataNotification,
IN PVOID FifoDataNotificationContext
);
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeによって戻されたインターフェースのハンドルである。
(PipeID)
これは、影響を及ぼすべきパイプに属するパイプの識別子である。
(FifoDataNotification)
これは、通知のしきい値に到達する場合にコールされるべき、オプションのコールバックの関数である。
(FifoDataNotificationContext)
これは、FifoDataNotificationのコールバックの関数に渡されるべき、オプションのコンテキストである。
(戻り値)
この関数は、成功し、構造体をポピュレートした場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(注記)
PWINUSB_NOTIFICATION_CALLBACKの型宣言は、以下の通りである。
typedef
VOID
(*PWINUSB_NOTIFICATION_CALLBACK)(
WINUSB_INTERFACE_HANDLE InterfaceHandle,
UCHAR PipeID,
ULONG NotificationType,
PVOID NotificationParameter,
PVOID Context
);
NotificationTypeのメンバに対する1つの可能な値は、FifoDataAvailable(0x01)である。この値は、FIFOのバッファが、NOTIFICATION_THRESHOLDバイトのReadFifoの要求が即時に完了するために十分なデータを含むことを、指示する。したがって、NotificationParameterのメンバを無視することができる。
(14.WinUsb_StopFifo)
WinUsb_StopFifoの関数は、自動的な読み込みのメカニズムを停止させる。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_StopFifo(
IN WINUSB_INTERFACE_HANDLE InterfaceHandle,
IN UCHAR PipeID
);
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeによって戻されたインターフェースのハンドルである。
(PipeID)
これは、影響を及ぼすべきパイプに属するパイプの識別子である。
(戻り値)
この関数は、成功し、構造体をポピュレートした場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(15.WinUsb_ReadFifo)
WinUsb_ReadFifoの関数は、データをパイプのFIFOのバッファから読み取る。USBのパケットサイズは、読み取り要求のための転送を考慮に入れないことに留意されたい。装置が、クライアントのバッファに対して大きすぎるパケットにより応答する場合、ALLOW_PARTIAL_READSがTRUEである場合は、データは次の転送の開始で追加される。ALLOW_PARTIAL_READSがFALSEである場合、読み取り要求は失敗するようになる。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_ReadFifo(
IN WINUSB_INTERFACE_HANDLE InterfaceHandle,
IN UCHAR PipeID,
OUT PUCHAR Buffer,
IN ULONG BufferLength,
OUT PULONG LengthTransferred,
IN LPOVERLAPPED Overlapped
);
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeによって戻されたインターフェースのハンドルである。
(PipeID)
これは、バッファから読み取るべきパイプの識別子である。
(Buffer)
これは、データを読み込むべき、コール側によって割り振られたバッファである。
(BufferLength)
これは、バイト単位のBufferの長さ、すなわち、読み取るべき最大のバイト数である。
(LengthTransferred)
これは、Bufferにコピーされた実際のバイト数を受信する、ULONGへのポインタである。
(Overlapped)
これは、OVERLAPPEDの構造体へのオプションのポインタであり、非同期の操作のために使用される。このパラメータが指定される場合、この関数は即時に戻るようになり、操作が完了するとき、イベントを信号で伝える。
(戻り値)
この関数は、成功し、構造体をポピュレートした場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(16.WinUsb_ReadPipe)
WinUsb_ReadPipeの関数は、データをパイプから読み取る。USBのパケットサイズは、読み取り要求のための転送を考慮に入れないことに留意されたい。装置が、クライアントバッファに対して大きすぎるパケットにより応答する場合、ALLOW_PARTIAL_READSがTRUEである場合は、データは次の転送の開始で追加される。ALLOW_PARTIAL_READSがFALSEである場合、読み取り要求は失敗するようになる。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_ReadPipe(
IN WINUSB_INTERFACE_HANDLE InterfaceHandle,
IN UCHAR PipeID,
IN PUCHAR Buffer,
IN ULONG BufferLength,
OUT PULONG LengthTransferred,
IN LPOVERLAPPED Overlapped
);
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeによって戻されたインターフェースのハンドルである。
(PipeID)
これは、パイプから読み取るべきパイプの識別子である。
(Buffer)
これは、データを読み込むべき、コール側によって割り振られたバッファである。
(BufferLength)
これは、バイト単位のBufferの長さ、すなわち、読み取るべき最大のバイト数である。
(LengthTransferred)
これは、Bufferにコピーされた実際のバイト数を受信する、ULONGへのポインタである。
(Overlapped)
これは、OVERLAPPEDの構造体へのオプションのポインタであり、非同期の操作のために使用される。このパラメータが指定される場合、この関数は即時に戻るようになり、操作が完了するとき、イベントを信号で伝える。
(戻り値)
この関数は、成功し、構造体をポピュレートした場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(17.WinUsb_WritePipe)
WinUsb_WritePipeの関数は、データをパイプに書き込む。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_WritePipe(
IN WINUSB_INTERFACE_HANDLE InterfaceHandle,
IN UCHAR PipeID,
IN PUCHAR Buffer,
IN ULONG BufferLength,
OUT PULONG LengthTransferred,
IN LPOVERLAPPED Overlapped
);
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeによって戻されたインターフェースのハンドルである。
(PipeID)
これは、書き込むべきパイプの識別子である。
(Buffer)
これは、書き込むべきデータを含む、コール側によって割り振られたバッファである。
(BufferLength)
これは、書き込むべきバイト数である。
(LengthTransferred)
これは、パイプに書き込まれた実際のバイト数を受信する、ULONGへのポインタである。
(Overlapped)
これは、OVERLAPPEDの構造体へのオプションのポインタであり、非同期の操作のために使用される。このパラメータが指定される場合、この関数は戻るようになり、操作が完了するとき、イベントを信号で伝える。
(戻り値)
この関数は、成功し、構造体をポピュレートした場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(18.WinUsb_ControlTransfer)
WinUsb_ControlTransferの関数は、データを、デフォルトのコントロールのエンドポイントを介して送信する。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_ControlTransfer(
IN WINUSB_INTERFACE_HANDLE InterfaceHandle,
IN WINUSB_SETUP_PACKET SetupPacket,
IN PUCHAR Buffer,
IN ULONG BufferLength,
OUT PULONG LengthTransferred,
IN LPOVERLAPPED Overlapped
);
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeによって戻されたインターフェースのハンドルである。
(SetupPacket)
これは、8バイトのセットアップのパケットである。
(Buffer)
これは、転送するべきデータを含む、コール側によって割り振られたバッファである。
(BufferLength)
これは、転送するべきバイト数であり、セットアップのパケットを含まない。
(LengthTransferred)
これは、転送された実際のバイト数を受信する、ULONGへのポインタである。
(Overlapped)
これは、OVERLAPPEDの構造体へのオプションのポインタであり、非同期の操作のために使用される。このパラメータが指定される場合、この関数は即時に戻るようになり、操作が完了するとき、イベントを信号で伝える。
(戻り値)
この関数は、成功し、構造体をポピュレートした場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(注記)
WINUSB_SETUP_PACKETの構造体宣言は、以下の通りである。
typedef struct_WINUSB_SETUP_PACKET {
UCHAR RequestType;
UCHAR Request;
USHORT Value;
USHORT Index;
USHORT Length;
} WINUSB_SETUP_PACKET, *PWINUSB_SETUP_PACKET;
(19.WinUsb_ResetPipe)
WinUsb_ResetPipeの関数は、データのトグルをリセットし、パイプ上の停止状態をクリアする。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_ResetPipe(
IN WINUSB_INTERFACE_HANDLE InterfaceHandle,
IN UCHAR PipeID
);
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeによって戻されたインターフェースのハンドルである。
(PipeID)
これは、コントロールのパイプの識別子である。
(戻り値)
この関数は、成功し、構造体をポピュレートした場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(20.WinUsb_AbortPipe)
WinUsb_AbortPipeの関数は、パイプに対して保留中の転送をすべてアボートする。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_AbortPipe(
IN WINUSB_INTERFACE_HANDLE InterfaceHandle,
IN UCHAR PipeID
);
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeによって戻されたインターフェースのハンドルである。
(PipeID)
これは、コントロールのパイプの識別子である。
(戻り値)
この関数は、成功し、構造体をポピュレートした場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(21.WinUsb_FlushPipe)
WinUsb_FlushPipeの関数は、クライアントが要求したよりも多くのデータを装置が戻す結果として、保存されたいかなるデータをも廃棄する。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_FlushPipe(
IN WINUSB_INTERFACE_HANDLE InterfaceHandle,
IN UCHAR PipeID
);
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeによって戻されたインターフェースのハンドルである。
(PipeID)
これは、コントロールのパイプの識別子である。
(戻り値)
この関数は、成功し、構造体をポピュレートした場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(電源管理)
図5は、汎用デバイスドライバにおける電源管理を提供するための例示的方法500を例示する。一実施態様では、方法500は、コンピューティングシステム(図6を参照して説明するものなど)が、装置(図1〜4を参照して説明したものなど)をコンピューティングシステムに接続する間に、低電力状態に入ることを可能にする。
電源管理のポリシーは、接続された装置について、例えば汎用USBのユーザモードのライブラリ(例えば、図1の110)を通じて定義される(502)。電源のポリシーには、自動休止を許可するかどうか、装置が自動復帰可能かどうか、および/または、装置を休止するために、最小の遅延のしきい値を設定するかどうかについての項目(provision)が含まれる場合がある(WinUsb_SetInterfacePowerPolicyなど、例示的APIを参照してさらに説明する)。
より具体的には、自動休止は、装置が「アイドル」になっている場合を検出することを含む場合があり、これは場合によっては、指定された合計時間において転送がなかったことを意味し、この時点で汎用USBドライバ(例えば、図1および2の108)は装置を休止して節電することができる。一実施態様では、汎用USBドライバは自動的に、装置が予備の電源を入れる必要がある場合を検出するようになり、適切な時間でそのように行うようになる。
自動的にコンピューティングシステムを復帰することに関して、クライアント(図1および2の112など)は、汎用USBのデバイスドライバのビヘイビアを、装置がコンピューティングシステムを低電力状態(例えば、スタンバイまたはハイバネーション)から復帰させることを可能にするように、構成することができる。一実施態様では、汎用USBのデバイスドライバは、装置およびコンピューティングシステムをこの機能のために準備するために必要とされた、すべての操作を処理するようになる。
さらに、遅延のしきい値の周期を設定することができ、クライアント(図1および2の112など)が、最後の転送の後から装置を休止する前までに経過するように、汎用USBのデバイスドライバが保証する必要のある合計時間を、指定することができるようにする。したがって、遅延のしきい値は、データ転送の後の周期を指定することができ、コンピューティングシステムは、この周期を、データ転送の後から装置が休止モードに入る前までに経過するよう待機する。
休止モードに入るための条件が満たされた後(例えば、実際には電源のポリシーによって)(504)、装置は低電力状態に入る(506)。これは、装置が接続されるコンピューティングシステム(上述のように、配線を通じるか無線かにかかわらず)が低電力状態に入ることを可能にする(508)。
方法500は、本明細書で説明した汎用デバイスドライバによって提供された機能を利用することによって、複数の装置がコンピューティングシステムに接続される状況においても、節電を可能にすることが想定される。すなわち、汎用デバイスドライバの構成がないと、コンピューティングシステムに接続された複数の装置は同時に、あるいは、コンピューティングシステムによって、有効で全体的な節電を可能にするために十分な周期に渡って、それらの休止モードに入ることができない可能性がある。
様々な実施態様では、以下のリストは、電源管理の状態にわたるビヘイビアを要約する。
・ すべてのパイプのハンドル、インターフェースのハンドル、ロックおよび代替設定は、電源管理のイベントに渡って保持される。
・ 進行中であるいかなる転送も、低電力状態中に休止され、これらの転送は、システムが動作中であるときに再開される。クライアント(すなわち、ユーザのソフトウェアコンポーネント112)がFIFOのバッファを使用中である場合、そのバッファは、電源管理のコールバック後にリスタートされる。
・ 装置特定の構成がリストアされるべきである場合、クライアント(すなわち、ユーザのソフトウェアコンポーネント112)は、システムが動作に戻る場合、そのようにするべきである。これを、WM_POWERBROADCASTのメッセージから決定することができる。
・ クライアント(すなわち、ユーザのソフトウェアコンポーネント112)は、選択的な休止をサポートするために、WINUSB_SetInterfaceIdleをコールすることによって、インターフェースがアイドルであることを指示することができる。コール側は、装置がアイドルの間にリモートの復帰のために使用可能にされるべきであると指定することができる。直接的な動作は、このコールによって示唆されない。
また、以下で詳述するように、電源管理を処理するために他のAPIが使用可能であり、これらのAPIは、ユーザのソフトウェアコンポーネントが電源管理の関数をより細かく制御することを可能にする。
(1.WinUsb_SetInterfacePowerPolicy)
WinUsb_SetInterfacePowerPolicyの関数は、装置の電源のポリシーを設定する。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_SetInterfacePowerPolicy(
WINUSB_INTERFACE_HANDLE InterfaceHandle,
ULONG PolicyType,
ULONG ValueLength,
ULONG_PTR Value
);
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeによって戻されたインターフェースのハンドルである。
(PolicyType)
これは、変更するべきポリシーのパラメータを指定する値である。
(ValueLength)
これは、Valueが指すバッファのバイト単位の長さであり、あるいは、Valueがバッファを指さない場合、ゼロである。
(Value)
これは、PolicyTypeによって指定されるポリシーのパラメータのための新しい値である。
(戻り値)
この関数は、成功し、構造体をポピュレートした場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(注記)
以下のリストは、可能性のあるPolicyType値を説明する。
(AUTO_SUSPEND(0x01))
ValueがTRUEである(ゼロではない)場合、装置は、転送が保留中でない場合、休止されるようになる。デフォルトはTRUEである。
(ENABLE_WAKE(0x02))
装置がWAKEをサポートする場合、ValueをTRUEに設定する。デフォルトはFALSEである。
(SUSPEND_DELAY(0x03))
VALUEは、いずれかの転送の後から装置を休止することができるようになる前までに、ドライバが待機するべきである、ミリ秒単位の最小の合計時間である。デフォルトは5秒である。
(2.WinUsb_GetInferfacePowerPolicy)
WinUsb_GetInferfacePowerPolicyの関数は、装置の電源のポリシーを得る。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_GetInterfacePowerPolicy(
IN WINUSB_INTERFACE_HANDLE InterfaceHandle,
IN ULONG PolicyType,
IN OUT PULONG ValueLength,
OUT PVOLD Value
);
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeによって戻されたインターフェースのハンドルである。
(PolicyType)
これは、得るべきポリシーのパラメータを指定する値である。
(ValueLength)
これは、Valueが指すバッファの長さへのポインタである。出力で、このパラメータは、Valueのバッファにコピーされたデータの長さを受信する。
(Value)
これは、指定された電源のポリシーを受信するバッファへのポインタである。
(戻り値)
この関数は、成功し、構造体をポピュレートした場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(3.WinUsb_EnableInterfaceIdle)
WinUsb_EnableInterfaceIdleの関数は、インターフェースがアイドルであり、オペレーティングシステムが装置の電源を落とすことができること(USBの休止)を指示する。これは、ユーザモードのクライアントが選択的な休止をどのようにサポートするかである。パイプの1つへのいかなるアクセス(読み取りまたは書き込み)も、自動的にインターフェースをアイドル状態から引き出し、アイドル状態のクエリが提供されないようにする。この関数をコールすることは、装置が休止されるようになることを保証せず、装置がUSBの休止状態を現在サポートすることができるという提案でしかない。FIFOのバッファが実行中である場合、装置が実際に休止されるまで、FIFOのバッファは実行し続けるようになる。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_EnableInterfaceIdle(
WINUSB_INTERFACE_HANDLE InterfaceHandle
);
(パラメータ)
(InterfaceHandle)
これは、WinUsb_Initializeによって戻されたインターフェースのハンドルである。
(戻り値)
この関数は、成功し、構造体をポピュレートした場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(4.WinUsb_DisableInterfaceIdle)
WinUsb_DisableInterfaceIdleの関数は、装置が休止されることを防止するか、あるいは、装置がすでに休止されている場合、装置を復帰する。このAPIをコールするための例示的メソッドは以下の通りである。
BOOL_stdcall
WinUsb_DisableInterfaceIdle(
WINUSB_INTERFACE_HANDLE InterfaceHandle
);
(パラメータ)
(InterfaceHandle)
WinUsb_Initializeによって戻されたインターフェースのハンドル。
(戻り値)
この関数は、成功し、構造体をポピュレートした場合、TRUEを戻す。そうでない場合、この関数はFALSEを戻し、エラーログは、GetLastErrorをコールすることによって検索することができる。
(セキュリティ)
一実施態様では、セキュリティは、汎用デバイスドライバ108におけるIoRegisterDeviceInterfaceによって作成された名前付きデバイスオブジェクトを通じて提供される。セキュリティの属性をこのシンボリックリンクについて指定し、それを開くことができるものを制限することができる。
このような一実施態様では、ただ1つのユーザのソフトウェアコンポーネント(例えば、112)は、いずれかの所与の時間に開かれたリンクを有することができ、そのため、ソフトウェアコンポーネントがリンクを開くとき、他のソフトウェアコンポーネントは、そのソフトウェアコンポーネントが実際のハンドルを得ない限り、インターフェースにアクセスすることができない。
物理デバイスのためのコントロールのパイプを、複数のインターフェースの間で共有することができ(例えば、装置によってサポートされた異なる機能のため)、ユーザのソフトウェアコンポーネントがコントロールのコマンドを別のインターフェースに送信可能にすることができることが想定される。これは一実施態様では、コントロールの転送における所定の制約を必要とする場合がある。加えて、シンボリックリンク上のセキュリティのアクセスを、セキュリティの属性をPDO(204)上に設定することによって、処理することができる。
(汎用コンピューティング環境)
図6は、本明細書で説明する技術を実装するために使用することができる、汎用コンピュータ環境600を例示する。例えば、コンピュータ環境600を利用して、汎用デバイスドライバ(108)、汎用のユーザモードのライブラリ(110)および/またはユーザのソフトウェアコンポーネント(112)を含む、OSを実行することができる。汎用コンピュータ環境600はコンピューティング環境の一実施例でしかなく、コンピュータおよびネットワークアーキテクチャの使用または機能の範囲についてのいかなる限定をも示唆するように意図されない。汎用コンピュータ環境600はまた、例示的コンピュータ環境600において例示した構成要素のいずれか1つまたは組合せに関係する、いかなる依存性または要件をも有するものとして、解釈されるべきではない。
コンピュータ環境600には、コンピュータ602の形態における汎用コンピューティングデバイスが含まれる。コンピュータ602の構成要素には、限定はされないが、1つまたは複数のプロセッサまたは処理装置604(オプションで、暗号プロセッサまたはコプロセッサを含む)、システムメモリ606、および、プロセッサ604を含む様々なシステム構成要素をシステムメモリ606に結合するシステムバス608を含むことができる。
システムバス608は、いくつかの種類のバス構造のいずれかの1つまたは複数を表現し、これらのバス構造には、メモリバスまたはメモリコントローラ、周辺バス、accelerated graphics port(AGP)、および様々なバスアーキテクチャのいずれかを使用する、プロセッサまたはローカルバスが含まれる。例として、このようなアーキテクチャには、業界標準アーキテクチャ(ISA)バス、マイクロチャネルアーキテクチャ(MCA)バス、拡張ISA(EISA)バス、Video Electronics Standards Association(VESA)ローカルバス、および、メザニンバスとしても知られるPeripheral Component Interconnect(PCI)バスが含まれる場合がある。
コンピュータ602には通常、様々なコンピュータ読取可能な媒体が含まれる。このような媒体は、コンピュータ602によってアクセス可能であるいかなる使用可能な媒体にすることもでき、揮発性および不揮発性の媒体、取り外し可能および固定の媒体が含まれる。
システムメモリ606には、ランダムアクセスメモリ(RAM)610など、揮発性メモリの形態、および/または、読み取り専用メモリ(ROM)612など、不揮発性メモリの形態における、コンピュータ読取可能な媒体が含まれる。基本入出力システム(BIOS)614は、起動中など、コンピュータ602内の要素の間で情報を転送する助けとなる基本ルーチンを含み、ROM612に格納される。RAM610は通常、処理装置604によって即時アクセス可能および/または現在操作されるデータおよび/またはプログラムモジュールを含む。
コンピュータ602にはまた、他の取り外し可能/固定、揮発性/不揮発性のコンピュータ記憶媒体が含まれる場合もある。例として、図6は、固定、不揮発性の磁気媒体(図示せず)に対する読み取りおよび書き込みを行うためのハードディスクドライブ616、取り外し可能、不揮発性の磁気ディスク620(例えば、「フロッピー(登録商標)ディスク」)に対する読み取りおよび書き込みを行うための磁気ディスクドライブ618、および、CD−ROM、DVD−ROMまたは他の光媒体など、取り外し可能、不揮発性の光ディスク624に対する読み取りおよび/または書き込みを行うための光ディスクドライブ622を例示する。ハードディスクドライブ616、磁気ディスクドライブ618および光ディスクドライブ622は、システムバス608に、1つまたは複数のデータ媒体のインターフェース626によってそれぞれ接続される。代替として、ハードディスクドライブ616、磁気ディスクドライブ618および光ディスクドライブ622を、システムバス608に、1つまたは複数のインターフェース(図示せず)によって接続することができる。
ディスクドライブおよびそれらの関連付けられたコンピュータ読取可能な媒体は、コンピュータ602用のコンピュータ読取可能な命令、データ構造、プログラムモジュールおよび他のデータの不揮発性の記憶装置を提供する。この実施例は、ハードディスク616、取り外し可能な磁気ディスク620、および取り外し可能な光ディスク624を例示するが、コンピュータによってアクセス可能であるデータを格納することができる、他の種類のコンピュータ読取可能な媒体もまた、例示的コンピューティングシステムおよび環境を実施するために利用することができ、これらのコンピュータ読取可能な媒体は、磁気カセットもしくは他の磁気記憶装置、フラッシュメモリカード、CD−ROM、デジタル多用途ディスク(DVD)もしくは他の光記憶装置、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、電気的に消去可能なプログラム可能読み取り専用メモリ(EEPROM)などであることを理解されたい。
いかなる数のプログラムモジュールも、ハードディスク616、磁気ディスク620、光ディスク624、ROM612および/またはRAM610上で格納することができ、これらのプログラムモジュールには、例として、オペレーティングシステム626、1つまたは複数のアプリケーションプログラム628、他のプログラムモジュール630およびプログラムデータ632が含まれる。このようなオペレーティングシステム626、1つまたは複数のアプリケーションプログラム628、他のプログラムモジュール630およびプログラムデータ632の各々(または、それらのある組合せ)は、分散ファイルシステムをサポートする常駐の構成要素の全部または一部を実装することができる。
ユーザはコマンドおよび情報をコンピュータ602へ、キーボード634およびポインティングデバイス636(例えば「マウス」)などの入力装置を介して入力することができる。他の入力装置638(特に図示せず)には、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、シリアルポート、スキャナおよび/または同種のものが含まれる場合がある。これらおよび他の入力装置は処理装置604へ、システムバス608に結合される入出力インターフェース640を介して接続されるが、パラレルポート、ゲームポートまたはUSB(図1および2を参照して説明したものなど)など、他のインターフェースおよびバス構造によって接続される場合がある。USBポートを利用して、カメラ、携帯情報端末(PDA)、MP3デバイス、ビデオキャプチャデバイス、フラッシュカードリーダーなどをコンピュータ環境600に接続することができる。
モニタ642または他の種類の表示装置もまたシステムバス608に、ビデオアダプタ644などのインターフェースを介して接続することができる。モニタ642に加えて、他の周辺出力装置には、スピーカ(図示せず)およびプリンタ646など、コンピュータ602に入出力インターフェース640を介して接続することができる構成要素が含まれる場合がある。
コンピュータ602はネットワーク環境において、リモートコンピューティング装置648など、1つまたは複数のリモートコンピュータへの論理接続を使用して操作することができる。例として、リモートコンピューティング装置648は、パーソナルコンピュータ、ポータブルコンピュータ、サーバ、ルータ、ネットワークコンピュータ、ピアデバイスまたは他の共通ネットワークノード、ゲームコンソールなどにすることができる。リモートコンピューティング装置648を、本明細書でコンピュータ602に関連して説明した要素および特徴の多数またはすべてを含むことができる、ポータブルコンピュータとして例示する。
コンピュータ602とリモートコンピュータ648との間の論理接続を、ローカルエリアネットワーク(LAN)650および汎用的なワイドエリアネットワーク(WAN)652として示す。このようなネットワーキング環境は、オフィス、企業全体のコンピュータネットワーク、イントラネットおよびインターネットにおいて一般的である。
LANのネットワーキング環境において実装される場合、コンピュータ602はローカルネットワーク650に、ネットワークインターフェースまたはアダプタ654を介して接続される。WANのネットワーキング環境において実装される場合、コンピュータ602は通常、モデム656、または、ワイドネットワーク652を介して通信を確立するための他の手段を含む。モデム656は、コンピュータ602の内部または外部とすることができ、システムバス608に、入出力インターフェース640または他の適切なメカニズムを介して接続することができる。例示のネットワーク接続は例示的であり、複数のコンピュータ602と648との間で通信リンクを確立する他の手段を使用することができることは理解されよう。
コンピューティング環境600により例示したものなど、ネットワーク環境では、コンピュータ602に関連して示したプログラムモジュールまたはその一部を、リモートメモリ記憶装置に格納することができる。例として、リモートアプリケーションプログラム658は、リモートコンピュータ648のメモリ装置上に存在する。例示のため、アプリケーションプログラム、および、オペレーティングシステムなどの他の実行可能なプログラムのコンポーネントを本明細書で離散的なブロックとして例示するが、このようなプログラムおよびコンポーネントは様々な時間にコンピューティング装置602の異なる記憶装置の構成要素内に存在し、コンピュータのデータプロセッサによって実行されることを理解されたい。
様々なモジュールおよび技術を本明細書で一般に、1つまたは複数のコンピュータまたは他の装置によって実行される、プログラムモジュールなどのコンピュータ実行可能命令に関連して説明することができる。一般に、プログラムモジュールには、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれ、これらは特定のタスクを実行するか、あるいは特定の抽象データ型を実装する。通常、プログラムモジュールの機能を、様々な実施態様において望まれるように結合または分散することができる。
これらのモジュールおよび技術の一実施態様を、所定の形態のコンピュータ読取可能な媒体上に格納することができ、あるいはこれを介して送信することができる。コンピュータ読取可能な媒体を、コンピュータによってアクセスすることができるいかなる使用可能な媒体にすることもできる。例として、限定ではなく、コンピュータ読取可能な媒体には、「コンピュータ記憶媒体」および「通信媒体」が含まれる場合がある。
「コンピュータ記憶媒体」には、揮発性および不揮発性、取り外し可能および固定の媒体が含まれ、これらの媒体は、コンピュータ読取可能な命令、データ構造、プログラムモジュールまたは他のデータなど、情報の格納のためのいずれかの方法または技術において実装される。コンピュータ記憶媒体には、限定はされないが、RAM、ROM、EEPROM、フラッシュメモリもしくは他のメモリ技術、CD−ROM、デジタル多用途ディスク(DVD)もしくは他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶装置、または、所望の情報を格納するために使用することができ、コンピュータによってアクセスすることができる他のいかなる媒体もが含まれる。
「通信媒体」には通常、搬送波もしくは他の伝送メカニズムなどの変調データ信号における、コンピュータ読取可能な命令、データ構造、プログラムモジュールまたは他のデータが含まれる。通信媒体にはまた、いかなる情報配信媒体もが含まれる。「変調データ信号」という用語は、信号における情報をエンコードするような方法でその特性集合の1つまたは複数が設定または変更されている信号を意味する。例として、限定ではなく、通信媒体には、有線ネットワークまたは直接有線接続などの有線媒体、ならびに、音響、無線周波数(RF)、赤外線、Wi−Fi、セルラー、ブルートゥース対応、および他の無線媒体などの無線媒体が含まれる。上記のいずれの組合せもまた、コンピュータ読取可能な媒体の範囲内に含まれる。
一実施態様では、情報がアクセスされるハードウェア装置(図1および2を参照して説明したものなど)を、汎用コンピュータ環境600の構成要素(処理装置604など)に結合されたいかなる装置にすることもできる。また、ハードウェア装置を、汎用コンピュータ環境600の周辺装置(マウス636、キーボード634、プリンタ646等など)にすることもできる。
(結論)
このように、本発明を、構造的特徴および/または方法論的動作に特有の言語で説明したが、付属の特許請求の範囲において定義された本発明は、説明した特定の特徴または動作に必ずしも限定されるとは限らないことを理解されたい。例えば、本明細書で説明した技術を、有線または無線通信チャネル(ブルートゥース、small computer system interface(SCSI)など)に適用することができる。したがって、特定の特徴および動作は、主張された本発明を実装する例示的形態として開示される。
汎用デバイスドライバのための例示的システムを例示する図である。 複数の装置のための汎用デバイスドライバの複数の場合の例示的システムを例示する図である。 汎用デバイスドライバを利用するための例示的方法を例示する図である。 汎用デバイスドライバにおけるI/O処理を行うための例示的方法を例示する図である。 汎用デバイスドライバにおける電源管理を提供するための例示的方法を例示する図である。 本明細書で説明する技術を実装するために使用することができる、汎用のコンピュータ環境を例示する図である。

Claims (29)

  1. 装置のプラグインのイベントに応答して、カーネルモードの汎用デバイスドライバをロードするステップと、
    ユーザのソフトウェアコンポーネントが、前記汎用デバイスドライバと結合して通信可能な、汎用のユーザモードのライブラリによって提供された複数のルーチンを利用することによって、前記装置にアクセスするステップと
    を備え、分離した汎用デバイスドライバは、プラグインされた装置毎に、または前記装置によってサポートされる機能毎にロードされることを特徴とする方法。
  2. 前記複数のルーチンは、アプリケーションプログラミングインターフェース(API)として実装されることを特徴とする請求項1に記載の方法。
  3. 前記装置は、ユニバーサルシリアルバス(USB)デバイスであることを特徴とする請求項1に記載の方法。
  4. 前記プラグインのイベントは、プラグアンドプレイ(PNP)のモジュールによって検出されることを特徴とする請求項1に記載の方法。
  5. 前記プラグインされた装置に対応して、抽出されたデバイスIDに対応するデバイスドライバをロードするステップをさらに備え、前記抽出されたデバイスIDは前記プラグインされたデバイスに対応し、前記汎用デバイスドライバは、前記ロードされたデバイスドライバと前記ユーザのソフトウェアコンポーネントとの間の通信を容易にすることを特徴とする請求項1に記載の方法。
  6. 前記デバイスIDは、データ通信バスを通じて前記プラグインされた装置に結合されたコアスタックによって抽出されることを特徴とする請求項5に記載の方法。
  7. プラグインのイベントに応答してデバイスIDを抽出するステップと、
    前記抽出されたデバイスIDに対応するデバイスドライバをロードするステップと、
    汎用デバイスドライバをロードして、前記ロードされたデバイスドライバとユーザのソフトウェアコンポーネントとの間の通信を容易にするステップと
    を備えたことを特徴とする方法。
  8. 個々の汎用デバイスドライバは、デバイスID毎に、または、前記デバイスIDに対応する装置によってサポートされた機能毎にロードされることを特徴とする請求項7に記載の方法。
  9. 前記デバイスIDによって、ユニバーサルシリアルバス(USB)デバイスが識別されることを特徴とする請求項7に記載の方法。
  10. 前記抽出するステップは、コアスタックによって実行されることを特徴とする請求項7に記載の方法。
  11. 前記抽出するステップは、コアスタックによって実行され、および前記コアスタックが、データ通信バスに結合して複数の装置と通信することを特徴とする請求項7に記載の方法。
  12. 前記抽出するステップは、コアスタックによって実行され、少なくとも1つのユーザのソフトウェアコンポーネントは、前記コアスタックに結合されたハブを通じて複数の装置と通信することを特徴とする請求項7に記載の方法。
  13. 前記汎用デバイスドライバは、カーネルモードでロードされることを特徴とする請求項7に記載の方法。
  14. 前記ユーザのソフトウェアコンポーネントは、ユーザモードで常駐することを特徴とする請求項7に記載の方法。
  15. 前記プラグインのイベントは、プラグアンドプレイ(PNP)のモジュールによって検出されることを特徴とする請求項7に記載の方法。
  16. 前記プラグインのイベントは、プラグアンドプレイ(PNP)のモジュールによって検出され、および前記PNPモジュールは、前記抽出されたデバイスIDを前記デバイスドライバと突き合わせることを特徴とする請求項7に記載の方法。
  17. 前記抽出されたデバイスIDに対応する一意のIDを登録するステップをさらに備えたことを特徴とする請求項7に記載の方法。
  18. 前記抽出されたデバイスIDに対応する装置にアクセスするステップをさらに備えたことを特徴とする請求項7に記載の方法。
  19. 前記ユーザのソフトウェアコンポーネントが、汎用のユーザモードのライブラリを通じて前記汎用デバイスドライバと通信するステップをさらに備えたことを特徴とする請求項7に記載の方法。
  20. 前記ユーザのソフトウェアコンポーネントが、前記装置IDに対応する装置との通信を容易にするための複数のルーチンを含む、汎用のユーザモードのライブラリを通じて前記汎用デバイスドライバと通信するステップをさらに備えたことを特徴とする請求項7に記載の方法。
  21. 前記ルーチンは、アプリケーションプログラミングインターフェース(API)として実装されることを特徴とする請求項20に記載の方法。
  22. コンピューティング装置と、
    前記コンピューティング装置に結合された装置と
    を備え、カーネルモードの汎用デバイスドライバが、前記装置を前記コンピューティング装置に結合することに応答してロードされ、ユーザのソフトウェアコンポーネントが、前記汎用デバイスドライバと結合して通信可能な汎用のユーザモードのライブラリにより提供された複数のルーチンを利用することによって前記装置にアクセスし、および個々の汎用デバイスドライバが、装置毎に、または前記装置によってサポートされる機能毎にロードされることを特徴とする装置。
  23. 前記複数のルーチンは、アプリケーションプログラミングインターフェース(API)として実装されることを特徴とする請求項22に記載の装置。
  24. 前記装置は、ユニバーサルシリアルバス(USB)デバイスであることを特徴とする請求項22に記載の装置。
  25. 命令を格納する1つまたは複数のコンピュータ読取可能な媒体であって、実行されると、前記動作命令は、マシンに、
    装置のプラグインのイベントに応答して、カーネルモードの汎用デバイスドライバをロードする動作と、
    ユーザのソフトウェアコンポーネントが、前記汎用デバイスドライバと結合して通信可能な汎用のユーザモードのライブラリによって提供された複数のルーチンを利用することによって前記装置にアクセスする動作と
    を備え、個々の汎用デバイスドライバは、プラグインされた装置毎に、または前記装置によってサポートされる機能毎にロードされることを特徴とする1つまたは複数のコンピュータ読取可能な媒体。
  26. 前記複数のルーチンは、アプリケーションプログラミングインターフェース(API)として実装されることを特徴とする請求項25に記載の1つまたは複数のコンピュータ読取可能な媒体。
  27. 前記装置は、ユニバーサルシリアルバス(USB)デバイスであることを特徴とする請求項25に記載の1つまたは複数のコンピュータ読取可能な媒体。
  28. 前記プラグインのイベントは、プラグアンドプレイ(PNP)のモジュールによって検出されることを特徴とする請求項25に記載の1つまたは複数のコンピュータ読取可能な媒体。
  29. 前記プラグインされた装置に対応して、抽出されたデバイスIDに対応するデバイスドライバをロードする動作をさらに備え、前記汎用デバイスドライバは、前記ロードされたデバイスドライバと前記ユーザのソフトウェアコンポーネントとの間の通信を容易にすることを特徴とする請求項25に記載の1つまたは複数のコンピュータ読取可能な媒体。
JP2005129812A 2004-04-29 2005-04-27 汎用usbドライバ Expired - Fee Related JP5021180B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/837,444 2004-04-29
US10/837,444 US7802022B2 (en) 2004-04-29 2004-04-29 Generic USB drivers

Related Child Applications (2)

Application Number Title Priority Date Filing Date
JP2012015732A Division JP5209125B2 (ja) 2004-04-29 2012-01-27 汎用usbドライバ
JP2012015734A Division JP5289592B2 (ja) 2004-04-29 2012-01-27 汎用usbドライバ

Publications (2)

Publication Number Publication Date
JP2005317019A true JP2005317019A (ja) 2005-11-10
JP5021180B2 JP5021180B2 (ja) 2012-09-05

Family

ID=34939567

Family Applications (3)

Application Number Title Priority Date Filing Date
JP2005129812A Expired - Fee Related JP5021180B2 (ja) 2004-04-29 2005-04-27 汎用usbドライバ
JP2012015732A Expired - Fee Related JP5209125B2 (ja) 2004-04-29 2012-01-27 汎用usbドライバ
JP2012015734A Expired - Fee Related JP5289592B2 (ja) 2004-04-29 2012-01-27 汎用usbドライバ

Family Applications After (2)

Application Number Title Priority Date Filing Date
JP2012015732A Expired - Fee Related JP5209125B2 (ja) 2004-04-29 2012-01-27 汎用usbドライバ
JP2012015734A Expired - Fee Related JP5289592B2 (ja) 2004-04-29 2012-01-27 汎用usbドライバ

Country Status (5)

Country Link
US (3) US7802022B2 (ja)
EP (1) EP1591891A3 (ja)
JP (3) JP5021180B2 (ja)
KR (1) KR101130474B1 (ja)
CN (1) CN100565484C (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013514576A (ja) * 2009-12-16 2013-04-25 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ ユニバーサル医療デバイスドライバアダプタ
JP2015162214A (ja) * 2014-02-28 2015-09-07 富士通株式会社 端末装置、外部周辺機器、サーバ装置、デバイスドライバプログラム及び外部周辺機器制御方法

Families Citing this family (98)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW595127B (en) * 2003-04-09 2004-06-21 Wistron Neweb Corp Method and apparatus for power management of electronic device
US20060004929A1 (en) * 2004-06-30 2006-01-05 International Business Machines Corporation Method and apparatus for recovering from inefficient behavior of devices on I/O buses
US8341649B2 (en) * 2004-07-06 2012-12-25 Wontok, Inc. System and method for handling an event in a computer system
US7765558B2 (en) * 2004-07-06 2010-07-27 Authentium, Inc. System and method for handling an event in a computer system
EP1851664A4 (en) * 2005-02-08 2008-11-12 Eliezer Kantorowitz AMBIENTOUS SOFTWARE
JP4966505B2 (ja) * 2005-03-24 2012-07-04 ブラザー工業株式会社 パケット通信システム
JP2006344159A (ja) * 2005-06-10 2006-12-21 Toshiba Information Systems (Japan) Corp 共通バス接続デバイス用通信制御装置
KR100775210B1 (ko) * 2005-11-22 2007-11-12 엘지전자 주식회사 범용 시리얼 버스 통신 장치 프로그램 업데이트 방법
KR100757229B1 (ko) * 2005-12-05 2007-09-10 한국전자통신연구원 리눅스 시스템상에서 usb 디바이스 드라이버 개발을지원하는 운영체제 자원 진단 장치 및 방법
KR100740252B1 (ko) * 2006-01-06 2007-07-18 (주)하이비젼시스템 동일 브이아이디/피아이디를 이용한 유에스비인터페이스방법
US8882561B2 (en) * 2006-04-07 2014-11-11 Mattel, Inc. Multifunction removable memory device with ornamental housing
US8146163B2 (en) * 2006-11-09 2012-03-27 International Business Machines Corporation Method and system for securing personal computing devices from unauthorized data copying and removal
US8316138B2 (en) * 2006-11-24 2012-11-20 Awind Inc. Plug-and-show USB portable disk
EP2102753A4 (en) * 2006-12-22 2013-01-02 Elektrobit Wireless Comm Oy ELECTRONIC DEVICE AND COMPUTER PROGRAM
US8347354B2 (en) 2007-03-16 2013-01-01 Research In Motion Limited Restricting access to hardware for which a driver is installed on a computer
EP1970832B1 (en) * 2007-03-16 2013-08-21 Research In Motion Limited Restricting access to hardware for which a driver is installed on a computer
US8035401B2 (en) * 2007-04-18 2011-10-11 Cypress Semiconductor Corporation Self-calibrating driver for charging a capacitive load to a desired voltage
US20080288709A1 (en) * 2007-05-15 2008-11-20 Imagestream Internet Solutions Wide area network connection platform
TW200915058A (en) * 2007-09-19 2009-04-01 Asustek Comp Inc A computer, a power saving method and a method for reducing output current
US8365201B2 (en) * 2007-12-14 2013-01-29 Microsoft Corporation Multi-function device ID with unique identifier
GB2456019A (en) * 2007-12-31 2009-07-01 Symbian Software Ltd Loading dynamic link libraries in response to an event
US8027671B2 (en) * 2008-01-14 2011-09-27 Penthera Partners, Inc. Delivering files to a mobile device
US8365202B2 (en) * 2008-02-04 2013-01-29 Microsoft Corporation Framework for computing device with auxiliary display
JP4482044B2 (ja) * 2008-03-18 2010-06-16 株式会社東芝 情報処理装置およびデバイスコントローラの駆動制御方法
WO2009151888A2 (en) * 2008-05-19 2009-12-17 Authentium, Inc. Secure virtualization system software
US9081902B2 (en) * 2008-06-20 2015-07-14 Microsoft Technology Licensing, Llc. Generalized architecture to support representation of multi-transport devices
JP5163950B2 (ja) * 2008-07-11 2013-03-13 株式会社リコー 情報処理装置、クラスモジュール起動制御方法及びプログラム
US8385599B2 (en) * 2008-10-10 2013-02-26 Sri International System and method of detecting objects
JP2010094942A (ja) * 2008-10-20 2010-04-30 Canon Inc インクジェット記録システム及びインクジェット記録装置
US20100199290A1 (en) * 2009-02-02 2010-08-05 Richard Thomas Kavanaugh System and method for multifunction device enumeration
WO2011008199A1 (en) * 2009-07-14 2011-01-20 Penthera Partners, Inc. Delivering files to a mobile device
JP2011048503A (ja) * 2009-08-25 2011-03-10 Kyocera Mita Corp 画像形成装置
US8452995B1 (en) * 2009-12-29 2013-05-28 Amazon Technologies, Inc. Universal serial bus low power idle mode
JP5556171B2 (ja) * 2009-12-29 2014-07-23 セイコーエプソン株式会社 制御装置、制御システム、及び、制御方法
US8200853B2 (en) 2010-01-14 2012-06-12 Microsoft Corporation Extensions for USB driver interface functions
TWM393937U (en) * 2010-01-22 2010-12-01 Tenx Technology Inc Plug-and-play audio device
CN101835290B (zh) * 2010-04-08 2015-06-03 中兴通讯股份有限公司 一种路由器及共用无线终端上网的系统、方法
US8166211B2 (en) 2010-06-07 2012-04-24 Vmware, Inc. Safely sharing USB devices
GB201010674D0 (en) * 2010-06-24 2010-08-11 Avin Electronics Ltd Power control module
CN102385435A (zh) * 2010-08-27 2012-03-21 宏达国际电子股份有限公司 动态调整电子装置运作模式的方法及电子装置
CN102081581B (zh) * 2010-10-01 2013-10-30 威盛电子股份有限公司 电源管理系统及方法
KR101761126B1 (ko) * 2011-08-12 2017-07-25 삼성전자 주식회사 Usb 장치, 및 그것을 포함하는 usb 시스템
US9716743B2 (en) 2011-09-02 2017-07-25 Microsoft Technology Licensing, Llc Accessing hardware devices using web server abstractions
CN102339265B (zh) * 2011-10-17 2017-08-11 中兴通讯股份有限公司 一种无线通信终端及其驱动方法
US9354748B2 (en) 2012-02-13 2016-05-31 Microsoft Technology Licensing, Llc Optical stylus interaction
US9298236B2 (en) 2012-03-02 2016-03-29 Microsoft Technology Licensing, Llc Multi-stage power adapter configured to provide a first power level upon initial connection of the power adapter to the host device and a second power level thereafter upon notification from the host device to the power adapter
US9870066B2 (en) 2012-03-02 2018-01-16 Microsoft Technology Licensing, Llc Method of manufacturing an input device
US9360893B2 (en) 2012-03-02 2016-06-07 Microsoft Technology Licensing, Llc Input device writing surface
USRE48963E1 (en) 2012-03-02 2022-03-08 Microsoft Technology Licensing, Llc Connection device for computing devices
US9075566B2 (en) 2012-03-02 2015-07-07 Microsoft Technoogy Licensing, LLC Flexible hinge spine
US8873227B2 (en) 2012-03-02 2014-10-28 Microsoft Corporation Flexible hinge support layer
US9064654B2 (en) 2012-03-02 2015-06-23 Microsoft Technology Licensing, Llc Method of manufacturing an input device
US9426905B2 (en) 2012-03-02 2016-08-23 Microsoft Technology Licensing, Llc Connection device for computing devices
US9460029B2 (en) 2012-03-02 2016-10-04 Microsoft Technology Licensing, Llc Pressure sensitive keys
US20130300590A1 (en) * 2012-05-14 2013-11-14 Paul Henry Dietz Audio Feedback
US10031556B2 (en) 2012-06-08 2018-07-24 Microsoft Technology Licensing, Llc User experience adaptation
US9019615B2 (en) 2012-06-12 2015-04-28 Microsoft Technology Licensing, Llc Wide field-of-view virtual image projector
US9684382B2 (en) 2012-06-13 2017-06-20 Microsoft Technology Licensing, Llc Input device configuration having capacitive and pressure sensors
US9459160B2 (en) 2012-06-13 2016-10-04 Microsoft Technology Licensing, Llc Input device sensor configuration
US9477255B2 (en) 2012-07-09 2016-10-25 Apple Inc. Systems and methods for suspending idle devices based on idle policies for the devices
US9069572B2 (en) 2012-07-27 2015-06-30 Prolific Technology Inc. Replacement of inbox driver with third party driver
US8964379B2 (en) 2012-08-20 2015-02-24 Microsoft Corporation Switchable magnetic lock
TWI486786B (zh) * 2012-10-05 2015-06-01 Faraday Tech Corp 隨著使用情境進行資料傳輸動態調整之方法與裝置及計算機程式產品
US8654030B1 (en) 2012-10-16 2014-02-18 Microsoft Corporation Antenna placement
CN104870123B (zh) 2012-10-17 2016-12-14 微软技术许可有限责任公司 金属合金注射成型突起
US8786767B2 (en) 2012-11-02 2014-07-22 Microsoft Corporation Rapid synchronized lighting and shuttering
US9176538B2 (en) 2013-02-05 2015-11-03 Microsoft Technology Licensing, Llc Input device configurations
US10578499B2 (en) 2013-02-17 2020-03-03 Microsoft Technology Licensing, Llc Piezo-actuated virtual buttons for touch surfaces
US9304549B2 (en) 2013-03-28 2016-04-05 Microsoft Technology Licensing, Llc Hinge mechanism for rotatable component attachment
KR20140140438A (ko) * 2013-05-29 2014-12-09 삼성전자주식회사 Usb 유휴 상태 대기 시간을 동적으로 조절하는 usb 시스템 및 그 동작방법
JP2015049600A (ja) * 2013-08-30 2015-03-16 Necソリューションイノベータ株式会社 周辺機器制御装置、周辺機器制御方法および周辺機器制御プログラム
US9448631B2 (en) 2013-12-31 2016-09-20 Microsoft Technology Licensing, Llc Input device haptics and pressure sensing
US9317072B2 (en) 2014-01-28 2016-04-19 Microsoft Technology Licensing, Llc Hinge mechanism with preset positions
US9759854B2 (en) 2014-02-17 2017-09-12 Microsoft Technology Licensing, Llc Input device outer layer and backlighting
US10120420B2 (en) 2014-03-21 2018-11-06 Microsoft Technology Licensing, Llc Lockable display and techniques enabling use of lockable displays
US9311504B2 (en) 2014-06-23 2016-04-12 Ivo Welch Anti-identity-theft method and hardware database device
US10324733B2 (en) 2014-07-30 2019-06-18 Microsoft Technology Licensing, Llc Shutdown notifications
CN104156329B (zh) * 2014-08-01 2017-02-15 无锡中微爱芯电子有限公司 在动态链接库中实现usb设备插拔识别的方法
US9424048B2 (en) 2014-09-15 2016-08-23 Microsoft Technology Licensing, Llc Inductive peripheral retention device
US9447620B2 (en) 2014-09-30 2016-09-20 Microsoft Technology Licensing, Llc Hinge mechanism with multiple preset positions
US10437742B2 (en) 2014-10-10 2019-10-08 Microsoft Technology Licensing, Llc Vendor-specific peripheral device class identifiers
CN104461963B (zh) * 2014-11-27 2018-05-01 深圳市国微电子有限公司 一种高速串行存储控制方法及装置
US10416799B2 (en) 2015-06-03 2019-09-17 Microsoft Technology Licensing, Llc Force sensing and inadvertent input control of an input device
US10222889B2 (en) 2015-06-03 2019-03-05 Microsoft Technology Licensing, Llc Force inputs and cursor control
US9752361B2 (en) 2015-06-18 2017-09-05 Microsoft Technology Licensing, Llc Multistage hinge
US9864415B2 (en) 2015-06-30 2018-01-09 Microsoft Technology Licensing, Llc Multistage friction hinge
US10061385B2 (en) 2016-01-22 2018-08-28 Microsoft Technology Licensing, Llc Haptic feedback for a touch input device
US9898354B2 (en) * 2016-03-21 2018-02-20 Microsoft Technology Licensing, Llc Operating system layering
US10344797B2 (en) 2016-04-05 2019-07-09 Microsoft Technology Licensing, Llc Hinge with multiple preset positions
US10684906B2 (en) 2016-06-15 2020-06-16 Microsoft Technology Licensing, Llc Monitoring peripheral transactions
CN106201747B (zh) * 2016-07-22 2019-04-23 浪潮软件集团有限公司 一种windows系统受限用户下访问智能密码设备的方法
US10380051B1 (en) 2016-08-11 2019-08-13 Kimberly-Clark Worldwide, Inc. USB baiting method and design
US10037057B2 (en) 2016-09-22 2018-07-31 Microsoft Technology Licensing, Llc Friction hinge
US11032136B2 (en) * 2018-02-01 2021-06-08 Microsoft Technology Licensing, Llc Discovery of network camera devices
CN108388788B (zh) * 2018-03-12 2019-11-26 山东渔翁信息技术股份有限公司 一种调用usb key底层库的方法及装置
US10831712B2 (en) 2018-04-27 2020-11-10 Crowdstrike, Inc. Identifying and correlating physical devices across disconnected device stacks
US11237988B2 (en) * 2019-09-26 2022-02-01 Dell Products L.P. Blocking individual interfaces of USB composite devices
KR20210096917A (ko) * 2020-01-29 2021-08-06 삼성전자주식회사 외부 전자 장치의 리소스를 인식하는 방법 및 이를 지원하는 전자 장치

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001222412A (ja) * 2000-02-07 2001-08-17 Sony Corp データ処理装置
JP2004046587A (ja) * 2002-07-12 2004-02-12 Fujitsu Ltd デバイスドライバ組込プログラム及びデバイスドライバ組込装置
JP2004062397A (ja) * 2002-07-26 2004-02-26 Canon Inc 情報処理装置、制御方法、制御プログラム

Family Cites Families (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5129064A (en) 1988-02-01 1992-07-07 International Business Machines Corporation System and method for simulating the I/O of a processing system
US5910180A (en) * 1995-11-21 1999-06-08 Diamond Multimedia Systems, Inc. Context virtualizing device driver architecture
US5784628A (en) 1996-03-12 1998-07-21 Microsoft Corporation Method and system for controlling power consumption in a computer system
US6643712B1 (en) * 1997-04-04 2003-11-04 Microsoft Corporation Validating the creation of and routing of messages to file objects
US5931935A (en) * 1997-04-15 1999-08-03 Microsoft Corporation File system primitive allowing reprocessing of I/O requests by multiple drivers in a layered driver I/O system
US5905900A (en) 1997-04-30 1999-05-18 International Business Machines Corporation Mobile client computer and power management architecture
JP3045985B2 (ja) 1997-08-07 2000-05-29 インターナショナル・ビジネス・マシーンズ・コーポレイション 接続確立方法、通信方法、状態変化伝達方法、状態変化実行方法、無線装置、無線デバイス、及びコンピュータ
US5926775A (en) * 1997-10-08 1999-07-20 National Instruments Corporation Mini driver software architecture for a data acquisition system
AU2570399A (en) 1998-01-30 1999-08-16 3Com Corporation Software architecture for providing low level hardware device drivers from the user mode under multi-tasking operating systems
US6378005B1 (en) 1998-06-12 2002-04-23 Microsoft Corporation Method, computer program product, and system for separating connection management functionality from a connection-oriented device driver
US6243753B1 (en) 1998-06-12 2001-06-05 Microsoft Corporation Method, system, and computer program product for creating a raw data channel form an integrating component to a series of kernel mode filters
US6760784B1 (en) * 1998-10-08 2004-07-06 International Business Machines Corporation Generic virtual device driver
US6343260B1 (en) 1999-01-19 2002-01-29 Sun Microsystems, Inc. Universal serial bus test system
US6651171B1 (en) 1999-04-06 2003-11-18 Microsoft Corporation Secure execution of program code
US6463465B1 (en) 1999-05-07 2002-10-08 Sun Microsystems, Inc. System for facilitating remote access to parallel file system in a network using priviliged kernel mode and unpriviliged user mode to avoid processing failure
US6809830B1 (en) * 1999-06-01 2004-10-26 Microsoft Corporation Method and system for enabling a printing program to communicate with a printer
US6598169B1 (en) 1999-07-26 2003-07-22 Microsoft Corporation System and method for accessing information made available by a kernel mode driver
US6678773B2 (en) 2000-01-13 2004-01-13 Motorola, Inc. Bus protocol independent method and structure for managing transaction priority, ordering and deadlocks in a multi-processing system
US6647473B1 (en) 2000-02-16 2003-11-11 Microsoft Corporation Kernel-based crash-consistency coordinator
US7047534B2 (en) * 2000-03-17 2006-05-16 Microsoft Corporation Simplified device drivers for hardware devices of a computer system
AU2002258358A1 (en) 2000-10-27 2002-09-04 Softconnex Technologies Automatic embedded host configuration system and method
US7574346B2 (en) 2000-10-30 2009-08-11 Microsoft Corporation Kernel emulator for non-native program modules
US7032228B1 (en) * 2001-03-01 2006-04-18 Emc Corporation Common device interface
EP1248179A1 (en) 2001-04-03 2002-10-09 Hewlett-Packard Company Selective activation and deactivation of peripheral devices connected to a USB system
US7228551B2 (en) 2001-06-11 2007-06-05 Microsoft Corporation Web garden application pools having a plurality of user-mode web applications
TW518502B (en) * 2001-07-13 2003-01-21 Prolific Technology Inc USB compound device and the realization method thereof
EP1286270A1 (en) * 2001-07-24 2003-02-26 Deutsche Thomson-Brandt Gmbh An integrated circuit having a generic communication interface
US7007138B2 (en) 2002-04-17 2006-02-28 Matsushita Electric Industiral Co., Ltd. Apparatus, method, and computer program for resource request arbitration
JP3866611B2 (ja) 2002-05-08 2007-01-10 株式会社東芝 記録停止処理方法及びデータ記録装置
US20030227641A1 (en) 2002-06-07 2003-12-11 Xerox Corporation Mobile USB printer driver
US20040003135A1 (en) * 2002-06-27 2004-01-01 Moore Terrill M. Technique for driver installation
US7460551B2 (en) * 2002-06-28 2008-12-02 Harris Corporation Data-driven interface control circuit
US7739693B2 (en) * 2002-11-25 2010-06-15 Sap Ag Generic application program interface for native drivers
JP2005122470A (ja) * 2003-10-16 2005-05-12 Matsushita Electric Ind Co Ltd 自律型デバイスドライバ
US7188195B2 (en) 2003-11-14 2007-03-06 Hewlett-Packard Development Company, L.P. DMA slot allocation
US7418716B2 (en) 2003-12-19 2008-08-26 Intel Corporation Method, apparatus, system, and article of manufacture for interfacing a device

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001222412A (ja) * 2000-02-07 2001-08-17 Sony Corp データ処理装置
JP2004046587A (ja) * 2002-07-12 2004-02-12 Fujitsu Ltd デバイスドライバ組込プログラム及びデバイスドライバ組込装置
JP2004062397A (ja) * 2002-07-26 2004-02-26 Canon Inc 情報処理装置、制御方法、制御プログラム

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013514576A (ja) * 2009-12-16 2013-04-25 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ ユニバーサル医療デバイスドライバアダプタ
JP2015162214A (ja) * 2014-02-28 2015-09-07 富士通株式会社 端末装置、外部周辺機器、サーバ装置、デバイスドライバプログラム及び外部周辺機器制御方法
US10275368B2 (en) 2014-02-28 2019-04-30 Fujitsu Limited Terminal device, external peripheral device and external peripheral device control method

Also Published As

Publication number Publication date
EP1591891A2 (en) 2005-11-02
US7802022B2 (en) 2010-09-21
CN1716225A (zh) 2006-01-04
US7577765B2 (en) 2009-08-18
JP5021180B2 (ja) 2012-09-05
JP5289592B2 (ja) 2013-09-11
KR20060047644A (ko) 2006-05-18
US7650436B2 (en) 2010-01-19
US20050246723A1 (en) 2005-11-03
EP1591891A3 (en) 2007-11-21
KR101130474B1 (ko) 2012-03-27
US20050246564A1 (en) 2005-11-03
JP2012099145A (ja) 2012-05-24
JP5209125B2 (ja) 2013-06-12
JP2012128865A (ja) 2012-07-05
CN100565484C (zh) 2009-12-02
US20050246455A1 (en) 2005-11-03

Similar Documents

Publication Publication Date Title
JP5209125B2 (ja) 汎用usbドライバ
US10445258B1 (en) Method for creation of device drivers and device objects for peripheral devices
KR101512252B1 (ko) 운영 시스템(os)이 없는 서비스 환경에서 펌웨어를 프로비저닝하는 방법
US8659505B2 (en) Auxiliary display device driver interface
US7673131B2 (en) Booting an operating system in discrete stages
US8806502B2 (en) Batching resource requests in a portable computing device
KR101620655B1 (ko) 메모리 세그먼테이션 및 acpi 기반 컨텍스트 전환을 사용하는 운영 시스템 로딩
JP5004963B2 (ja) 複数の中断された実行時イメージを伝達する方法及びシステム
US8631414B2 (en) Distributed resource management in a portable computing device
JP2004310775A (ja) 同じものをロードするためのポータブルオペレーティングシステムおよび方法
EP1983432A1 (en) Booting system, boot program, and method therefor
EP1717700A2 (en) Multimedia devices with enhanced functionality
JP2008539484A (ja) ユニバーサル・シリアル・バス機能のデリゲーション
TW201229908A (en) Method and apparatus for integrating driver(s) of a portable device into the portable device
US20180349297A1 (en) Virtual host controller for a data processing system
WO2022143295A1 (zh) 固件升级方法和相关设备
US10394571B2 (en) Passing data from a host-based utility to a service processor
US20100169069A1 (en) Composite device emulation
JP6050528B2 (ja) セキュリティ・コプロセッサ・ブート性能
JP2003330873A (ja) 情報処理装置及び入出力方法並びにプログラム
WO2024037482A1 (zh) 一种中断消息处理方法及装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080328

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20101112

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101119

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110221

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110927

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20111227

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20120105

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120127

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120608

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120614

R150 Certificate of patent or registration of utility model

Ref document number: 5021180

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150622

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees