Registo e Cancelamento de Registo de Subdispositivos Dinâmicos

Os dispositivos que suportam alguma forma de deteção de presença de jack são chamados de dispositivos dinâmicos, e os seus respetivos jacks devem suportar a propriedade KSPROPERTY_JACK_DESCRIPTION. As etapas a seguir mostram o algoritmo usado pelo driver de um dispositivo dinâmico para criar, registrar ou cancelar o registro dos subdispositivos associados para esses dispositivos dinâmicos. Os subdispositivos são criados na forma de filtros.

As etapas a seguir mostram o que acontece quando há um dispositivo de áudio conectado à tomada quando o driver de dispositivo de áudio é carregado:

  1. O driver usa a deteção de presença da tomada para determinar que há um dispositivo conectado à tomada. O driver chama PcRegisterSubdevice para registrar um filtro de topologia com Portcls. Uma interface KSCATEGORY_AUDIO é criada como resultado do registro do filtro de topologia.

  2. A pilha de áudio é notificada quando a interface KSCATEGORY_AUDIO é criada e o AudioEndpoint Builder cria e inicializa um ponto de extremidade associado e, em seguida, define seu estado como ativo.

  3. O driver registra um filtro de onda com Portcls e a pilha de áudio é notificada.

  4. O driver chama PcRegisterPhysicalConnection para conectar o filtro de onda com o filtro de topologia. Essa conexão física é então registrada no Portcls.

  5. O driver define o membro IsConnected da estrutura KSJACK_DESCRIPTION como TRUE para indicar que há um dispositivo conectado ao conector.

Observação Se o dispositivo de áudio não tiver deteção de presença de jack, o membro IsConnected deve ser sempre TRUE. Para confirmar se o dispositivo suporta deteção de presença de jack, uma aplicação cliente pode chamar IKsJackDescription2::GetJackDescription2 para ler o indicador JackCapabilities da estrutura KSJACK_DESCRIPTION2. Se esse sinalizador tiver o JACKDESC2_PRESENCE_DETECT_CAPABILITY bit definido, ele indica que o ponto de extremidade suporta a deteção de presença de jack. Nesse caso, o valor de retorno do membro IsConnected pode ser interpretado como um reflexo preciso do status de inserção do jack.

As etapas a seguir explicam o que acontece se não houver nenhum dispositivo de áudio conectado à tomada quando o driver é carregado:

  1. O driver utiliza a deteção de presença do conector para determinar que não há nenhum dispositivo ligado ao conector. Mas ele registra um filtro de topologia com Portcls para o jack e uma interface KSCATEGORY_AUDIO é criada.

  2. A pilha de áudio é notificada quando a interface KSCATEGORY_AUDIO é criada. O AudioEndpointBuilder consulta o driver de miniporta para determinar a partir da propriedade KSJACK_DESCRIPTION se deve definir o estado do ponto de extremidade como desconectado.

  3. O driver define o membro IsConnected da estrutura KSJACK_DESCRIPTION como FALSE para indicar que não há nenhum dispositivo conectado à tomada.

Para obter mais informações sobre os diferentes estados de um ponto de extremidade de áudio, consulte Algoritmo do Audio Endpoint Builder.

Para cumprir com a descrição anterior dos processos de registro e cancelamento de registro de subdispositivos, os drivers de dispositivos que suportam a deteção de presença de tomada devem reagir da seguinte maneira, em resposta à inserção e remoção de plugue:

Resposta do driver de dispositivo a uma inserção de plugue

  1. Driver deve chamar PcRegisterSubdevice para registrar um filtro de onda com Portcls. Observação O driver já chamou PcRegisterSubdevice no filtro de topologia quando o driver foi carregado sem nenhum dispositivo conectado à tomada.

  2. O driver deve chamar PcRegisterPhysicalConnection para registrar a conexão "wave to topology filter" com Portcls.

  3. O driver deve definir o membro IsConnected da estrutura KSJACK_DESCRIPTION como TRUE.

Resposta do driver de dispositivo a uma remoção de plugue

  1. O driver deve chamar IUnregisterPhysicalConnection::UnregisterPhysicalConnection para cancelar o registro da conexão física entre o filtro de onda e o filtro de topologia.

  2. O driver deve chamar IUnregisterSubdevice::UnregisterSubdevice para anular o registo do filtro de onda.

  3. Driver deve definir o membro IsConnected da estrutura KSJACK_DESCRIPTIONFALSE.