USB 充電器をサポートする USB フィルター ドライバー
機能コントローラーがインボックスの Synopsys ドライバーと ChipIdea ドライバーを使用する場合は、充電器の検出をサポートするフィルター ドライバーを作成します。 独自の関数コントローラー用のクライアント ドライバーを作成する場合、充電器/接続検出は、EVT_UFX_DEVICE_PROPRIETARY_CHARGER_SET_PROPERTY、EVT_UFX_DEVICE_PROPRIETARY_CHARGER_RESET、および EVT_UFX_DEVICE_DETECT_PROPRIETARY_CHARGER を実装することによって、クライアント ドライバーに統合されます。
USB 関数スタックを使用すると、USB Battery Charging (BC) 1.2 仕様で定義されているホストおよび USB 充電器に接続したときに、電話やタブレットなどのデバイスを充電できます。
デバイスが充電に使用できるポートは 2 種類あります。 デバイスは、デバイスに付属している充電器の専用充電ポート (DCP) から充電できます。 あるいは、デバイスが PC に接続されている場合、デバイスは標準のダウンストリーム ポートから、またはダウンストリーム ポートから充電できます。 どちらの場合も、USB BC 1.2 仕様に準拠しています。
一部の充電器は仕様に従っていません。 USB 関数スタックを使用すると、デバイスは独自の USB 充電器から充電できます。
仕様に準拠した独自の充電器をサポートするには、これらの操作が必要です。
- デバイスは、USB ホストまたは充電器が取り付けられているか、または取り外されているかを検出できます。
- このデバイスは、BC 1.2 仕様で定義されているさまざまな USB 充電ポートを検出できます。
- BC 1.2 仕様で定義されている USB 充電器の場合、デバイスは BC 1.2 仕様で許可されている最大電流量で充電されます。
- このデバイスは、独自の USB 充電器を検出できます。
- 独自の USB 充電器の場合は、デバイスが消費できる最大電流量を決定します。
- 接続されている USB ポートの種類についてオペレーティング システムに通知します。
- USB ホストが接続されており、デバイス自体がホストで構成されている場合でも、OS でデバイスが USB 経由で電流を引き込まないようにします。
これらの操作は、USB 関数クラス拡張 (UFX)/クライアント ドライバーのペアと、USB 関数デバイス スタックの下位フィルターとして読み込まれるフィルター ドライバーによって処理されます。 ドライバーは、USB ポートの検出から始まり、充電を開始できる時期とデバイスが消費できる最大電流量をバッテリー スタックに通知するまで、USB 充電を管理します。
デバイス スタックのアーキテクチャ表現を次に示します。
USB ポートがデバイスに接続されている場合、クライアント ドライバーは下位フィルター ドライバーまたは割り込みによって通知を受け取ります。 現時点では、クライアント ドライバーは USB ハードウェアと通信してポート検出を実行し、ポートの種類を UFX に報告します。 または、フィルター ドライバーを要求できます。 その場合、フィルター ドライバーは USB ハードウェアと連携して USB ポート検出を実行し、検出されたポート タイプをクライアント ドライバーに返し、クライアント ドライバーはそれを UFX に渡します。
ポートの種類に基づいて、UFX はデバイスが消費できる最大電流量を決定し、その情報を Charging Aggregation Driver (CAD) に送信します。 CAD は情報を検証します。 電流が有効な場合、CAD はバッテリー クラス ドライバーに要求を送信し、指定された最大電流まで充電を開始します。 バッテリー クラス ドライバーは、充電要求をバッテリー ミニクラス ドライバーに転送して処理します。 充電要求で独自の充電器が接続されていることが指定されており、バッテリー ミニクラスが独自の充電器を処理する場合、ミニクラス ドライバーは、適切であると判断した最大電流で充電を試みることができます。 それ以外の場合、バッテリー ミニクラスは CAD で指定された最大電流までしか充電できません。