動的サブデバイスの登録と登録解除

何らかの形式のジャック プレゼンス検出をサポートするデバイスは動的デバイスと呼ばれ、ジャックは KSPROPERTY_JACK_DESCRIPTION プロパティをサポートする必要があります。 次の手順は、動的デバイスのドライバーが、これらの動的デバイスに関連付けられているサブデバイスを作成、登録、または登録解除するために使用するアルゴリズムを示しています。 サブデバイスはフィルターの形式で作成されます。

次の手順では、オーディオ デバイス ドライバーが読み込まれるときにオーディオ デバイスがジャックに接続されている場合の動作を示します。

  1. ドライバーは、ジャックのプレゼンス検出を使用して、ジャックに接続されているデバイスがあることを確認します。 ドライバーは 、PcRegisterSubdevice を呼び出して 、トポロジ フィルターを Portcls に登録します。 KSCATEGORY_AUDIO インターフェイスは、トポロジ フィルター登録の結果として作成されます。

  2. オーディオ スタックは、 KSCATEGORY_AUDIO インターフェイスが作成されると通知され、 AudioEndpoint Builder によって関連付けられたエンドポイントが作成および初期化され、その状態がアクティブに設定されます。

  3. ドライバーは、Portcls とウェーブ フィルターを登録し、オーディオ スタックが通知されます。

  4. ドライバーは、トポロジ フィルターとウェーブ フィルターを接続する PcRegisterPhysicalConnection を呼び出します。 その後、この物理接続は Portcls に登録されます。

  5. ドライバーは、ジャックに接続されているデバイスがあることを示すために、 KSJACK_DESCRIPTION 構造体の IsConnected メンバーを TRUE に設定します。

注意 オーディオデバイスにジャックプレゼンス検出がない場合、IsConnected メンバーは常に TRUE でなければなりません。 デバイスがジャック プレゼンス検出をサポートしているかどうかを確認するために、クライアント アプリケーションは IKsJackDescription2::GetJackDescription2 を呼び出して 、KSJACK_DESCRIPTION2 構造体の JackCapabilities フラグを読み取ることができます。 このフラグに JACKDESC2_PRESENCE_DETECT_CAPABILITY ビットが設定されている場合は、エンドポイントがジャック プレゼンス検出をサポートしていることを示します。 その場合、 IsConnected メンバーの戻り値は、ジャックの挿入状態の正確なリフレクションとして解釈できます。

次の手順では、ドライバーの読み込み時にオーディオ デバイスがジャックに接続されていない場合の動作について説明します。

  1. ドライバーは、ジャックプレゼンス検出を使用して、ジャックに接続されているデバイスがないことを確認します。 ただし、ジャックに関しては、Portcls にトポロジフィルターが登録され、KSCATEGORY_AUDIO インターフェイスが作成されます。

  2. KSCATEGORY_AUDIO インターフェイスが作成されると、オーディオ スタックに通知されます。 AudioEndpointBuilder は、ミニポート ドライバーを照会して 、KSJACK_DESCRIPTION プロパティからエンドポイントの状態を取り外し済みとして設定するかどうかを判断します。

  3. ドライバーは、ジャックに接続されているデバイスがないことを示すために、KSJACK_DESCRIPTION構造体の IsConnected メンバーを FALSE に設定します。

オーディオ エンドポイントのさまざまな状態の詳細については、「 オーディオ エンドポイント ビルダー アルゴリズム」を参照してください。

サブデバイス登録および登録解除プロセスの前述の説明に従うには、ジャックプレゼンス検出をサポートするデバイス ドライバーが、プラグの挿入と削除に応じて、次の方法で対応する必要があります。

プラグ挿入に対するデバイス ドライバーの応答

  1. ドライバーは、Wave フィルターを Portcls に登録する PcRegisterSubdevice を呼び出す必要があります。 注意 ドライバーは、ジャックにデバイスが接続されていない状態でドライバーが読み込まれたときに、トポロジフィルターで既にPcRegisterSubdeviceを呼び出しました。

  2. ドライバーはPcRegisterPhysicalConnectionを呼び出して、"wave to topology filter" 接続を Portcls に登録しなければなりません。

  3. ドライバーは、KSJACK_DESCRIPTION構造体の IsConnected メンバーを TRUE に設定する必要があります。

プラグの取り外しに対するデバイス ドライバーの応答

  1. ドライバーは、ウェーブ フィルターとトポロジ フィルターの間の物理接続の登録を解除するには、 IUnregisterPhysicalConnection::UnregisterPhysicalConnection を呼び出す必要があります。

  2. ドライバーは、ウェーブ フィルターの登録を 解除するために IUnregisterSubdevice::UnregisterSubdevice を呼び出す必要があります。

  3. ドライバーは、KSJACK_DESCRIPTION構造体 FALSEIsConnected メンバーを設定する必要があります。