Registro e cancelamento de registro de subdispositivos dinâmicos
Os dispositivos que dão suporte a alguma forma de detecção de presença de jack são chamados de dispositivos dinâmicos, e seus conectores devem dar suporte à 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 do dispositivo de áudio é carregado:
O driver usa a detecção de presença de tomada para determinar se 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.
A pilha de áudio é notificada quando a interface KSCATEGORY_AUDIO é criada e o AudioEndpoint Builder cria e inicializa um ponto de extremidade associado e define seu estado como ativo.
O driver registra um filtro de onda com Portcls e a pilha de áudio é notificada.
O driver chama PcRegisterPhysicalConnection para conectar o filtro de onda com o filtro de topologia. Essa conexão física é então registrada com Portcls.
O driver define o membro IsConnected da estrutura KSJACK_DESCRIPTION como TRUE para indicar que há um dispositivo conectado à tomada.
Nota Se o dispositivo de áudio não tiver detecção de presença de tomada, o membro IsConnected sempre deverá ser TRUE. Para confirmar se o dispositivo dá suporte à detecção de presença de jack, um aplicativo cliente pode chamar IKsJackDescription2::GetJackDescription2 para ler o sinalizador JackCapabilities da estrutura KSJACK_DESCRIPTION2 . Se esse sinalizador tiver o JACKDESC2_PRESENCE_DETECT_CAPABILITY bit definido, ele indicará que o ponto de extremidade dá suporte à detecção de presença de jack. Nesse caso, o valor retornado do membro IsConnected pode ser interpretado como um reflexo preciso do status de inserção da tomada.
As etapas a seguir explicam o que acontece se não houver nenhum dispositivo de áudio conectado à tomada quando o driver for carregado:
O driver usa a detecção de presença de tomada para determinar que não há nenhum dispositivo conectado à tomada. Mas ele registra um filtro de topologia com Portcls para a tomada e uma interface KSCATEGORY_AUDIO é criada.
A pilha de áudio é notificada quando a interface KSCATEGORY_AUDIO é criada. O AudioEndpointBuilder consulta o driver de miniporto para determinar da propriedade KSJACK_DESCRIPTION se deseja definir o estado do ponto de extremidade como desconectado.
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 Construtor de Ponto de Extremidade de Áudio.
Para cumprir a descrição anterior dos processos de registro e cancelamento de registro de subdispositivos, os drivers de dispositivos que dão suporte à detecção de presença de tomada devem reagir da seguinte maneira, em resposta à inserção e remoção de plugues:
Resposta do driver de dispositivo a uma inserção de plug-ins
O driver deve chamar PcRegisterSubdevice para registrar um filtro de onda com Portcls. Nota O driver já chamado PcRegisterSubdevice no filtro de topologia quando o driver foi carregado sem nenhum dispositivo conectado à tomada.
O driver deve chamar PcRegisterPhysicalConnection para registrar a conexão "filtro de onda para topologia" com Portcls.
O driver deve definir o membro IsConnected da estrutura KSJACK_DESCRIPTION como TRUE.
Resposta do driver de dispositivo a uma remoção de plugue
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.
O driver deve chamar IUnregisterSubdevice::UnregisterSubdevice para cancelar o registro do filtro de onda.
O driver deve definir o membro IsConnected da estrutura KSJACK_DESCRIPTIONFALSE.