Enumeração de dispositivo ACX
Este tópico discute a enumeração de dispositivos ACX, inicialização e desligamento e reequilíbrio de dispositivos. Para uma visão geral das extensões de classe de áudio ACX, consulte . Para obter informações sobre o gerenciamento de energia ACX e PnP, consulte gerenciamento de energia ACX.
Enumeração e inicialização de dispositivos ACX para dispositivos de áudio estático
Para saber mais sobre como a inicialização do ACX funciona, o cenário a seguir será descrito.
- Um dispositivo de áudio é representado por um único circuito.
- A vida útil de um áudio/circuito está ligada à vida útil do dispositivo PnP.
- Um único dispositivo pode criar vários circuitos para diferentes dispositivos de áudio.
- Ambiente de modo kernel do KMDF.
A sequência de arranque é:
WDM DriverEntry. Escopo do driver. DriverEntry para a rotina de drivers WDF
- Início do rastreamento.
- Opcionalmente, registe-se para descarga.
- Crie WDFDRIVER.
- Ligue para o ACX para realizar qualquer inicialização de driver.
- Opcionalmente, realize qualquer inicialização do driver.
WDF DeviceAdd. Escopo do dispositivo. função de retorno de chamada EVT_WDF_DRIVER_DEVICE_ADD
- Chame o ACX para iniciar o contexto de inicialização do dispositivo -
ACX_DEVICEINIT_CONFIG_INIT(&devInitCfg)
ACX_DEVICEINIT_CONFIG_INIT função - Registrar retornos de chamada WDF PnP Power -
WDF_PNPPOWER_EVENT_CALLBACKS_INIT(&pnpPowerCallbacks);
- Criar dispositivo usando AcxDeviceInitialize
- Ligue para a ACX para realizar qualquer inicialização pós-dispositivo.
- Opcionalmente, realize quaisquer passos após a inicialização do dispositivo.
- Chame o ACX para iniciar o contexto de inicialização do dispositivo -
WDF PrepareHardware. Escopo do dispositivo. Função de retorno de chamada EVT_WDF_DEVICE_PREPARE_HARDWARE.
Crie e inicie recursos de hardware (para interrupções e threads, registre-os no ACX).
Crie um ou mais circuitos (criação única).
- Crie um contexto AcxCircuitInit.
- Adicione retornos de chamada.
- Crie um AcxCircuit.
- Opcionalmente, faça qualquer inicialização pós-circuito.
- Registe o circuito com AcxDeviceAddCircuitDevice.
Callback de entrada do dispositivo WDF para D0. Escopo do dispositivo. EVT_WDF_DEVICE_D0_ENTRY função de retorno de chamada.
O ACX invoca o retorno de chamada EvtAcxCircuitPowerUp em todos os circuitos. Escopo do circuito.
ACX Move os fluxos de dados (se houver) para o estado anterior antes do dispositivo ser desligado. Escopo de instância de fluxo.
As filas WDF são reiniciadas.
EVT_WDF_DEVICE_SELF_MANAGED_IO_INIT função de retorno de chamada. Escopo do dispositivo.
Função de retorno de chamada EVT_WDF_DEVICE_SELF_MANAGED_IO_RESTART. Escopo do dispositivo. - Init após cada power up a partir de Dx.
Adicionar ACX Stream
- ACX Stream Add (instância) no circuito ACX (retorno de chamada ACX em circuitos ACX) – invocado a qualquer momento após a inicialização ou reinicialização de E/S autogerenciada do WDF ter sido invocada e o dispositivo estar em D0. Circuito delimitado.
- Entrada: contexto AcxStreamInit, ACXCIRCUIT.
- Adicione retornos de chamada.
- Crie um AcxStream (instância).
- Opcionalmente, faça qualquer inicialização de instância pós-transmissão.
- Ao retornar, o ACX ativa esta instância de fluxo e, como neste cenário é a única no caminho de áudio, permite que as mensagens de fluxo passem.
Enumeração e inicialização de dispositivos ACX para dispositivos de áudio dinâmico
Neste cenário, assume-se o seguinte.
- Suporte de áudio dinâmico (criar/excluir dispositivos de áudio em tempo de execução).
- A vida útil do dispositivo não está ligada à vida útil do circuito.
- Um único dispositivo pode criar vários circuitos para diferentes dispositivos de áudio.
- Adota o padrão estático simples descrito acima, adicionando apenas os elementos específicos ao padrão dinâmico.
- Faz uso de PDOs crus infantis.
- Ambiente de modo kernel KMDF.
A sequência de arranque para este cenário é:
WDM DriverEntry. Vinculado ao driver.
- Iniciar rastreamento.
- Opcionalmente, registe-se para descarga.
- Crie WDFDRIVER.
- Ligue para o ACX para realizar qualquer inicialização do driver de postagem.
- Opcionalmente, execute qualquer inicialização de driver.
WDF DeviceAdd. Relacionado ao dispositivo.
- Chame o ACX para iniciar o contexto de inicialização do dispositivo.
- Criar dispositivo.
- Chame o ACX para realizar qualquer inicialização pós-dispositivo.
- Opcionalmente, realize qualquer tarefa pós-inicialização do dispositivo.
WDF PrepareHardware. Limitado ao dispositivo.
- Crie e inicie recursos de hardware (para interrupções e threads, registre-os no ACX).
Função de retorno de chamada de entrada do dispositivo WDF D0. Limitado ao dispositivo.
As filas WDF são reiniciadas.
WDF DeviceSelfManagedIoInit. Escopo do dispositivo.
WDF DeviceSelfManagedIoRestart (Reinício Gerido pelo Dispositivo) Escopo do dispositivo.
- Iniciar após cada arranque a partir de Dx.
Criação dinâmica de circuitos (a qualquer momento)
- Driver aloca uma estrutura WDFDEVICE_INIT ao chamar WdfPdoInitAllocate. O driver é responsável por invocar o WdfDeviceInitFree se encontrar alguma falha antes de criar um dispositivo com êxito.
- Driver especifica quaisquer retornos de chamada PnP/power que deseja receber.
- Driver cria um dispositivo.
- O driver instancia o novo dispositivo/circuito chamando AcxDeviceAddCircuitDevice.
- WDF/PnP assume o comando e o padrão simples de enum/inicialização descrito na seção anterior entra em ação.
AcxFactoryCircuit
Um driver ACX também pode criar objetos AcxFactoryCircuit (provedores de circuito) durante a sequência de ativação, utilizando a função AcxFactoryCircuitCreate e a função AcxDeviceAddFactoryCircuit .
Como o driver ACX se registou como fábrica de circuitos na ACX, a estrutura ACX utiliza a fábrica registada para solicitar ao driver que crie um novo circuito.
AcxFactoryCircuitCreate(Device, &attributes, &factoryInit, &factory);
AcxDeviceAddFactoryCircuit(Device, factory);
Reequilíbrio do dispositivo ACX
O rebalanceamento é feito quando o uso de recursos do sistema requer que o sistema operacional reequilibre os recursos entre dispositivos. Para obter informações gerais sobre reequilíbrio, consulte Implementar reequilíbrio PnP para drivers de áudio PortCls.
O ACX suporta o reequilíbrio do dispositivo da seguinte forma:
Na sequência WDF/ACX de desativação, o driver liberta todos os recursos de streaming (EvtAcxStreamPowerDown, EvtAcxStreamReleaseHardware), recursos de circuito (EvtAcxCircuitPowerDown, EvtAcxCircuitReleaseHardware) e recursos de dispositivo (EvtDeviceReleaseHardware).
Todas as solicitações são pendentes e os identificadores são deixados abertos.
Na sequência de ativação WDF/ACX, o driver certifica-se de que os novos recursos são compatíveis com os atuais e faz todos os ajustes permitidos em suas configurações. Se os recursos não forem compatíveis com a inicialização atual do dispositivo/circuito, o driver deve excluir os circuitos atuais e criar novos. Veja abaixo mais informações.
Na sequência de ativação, o WDF invoca seus EvtDevicePrepareHardware e a entrada EvtDeviceD0, e o ACX invoca os correspondentes EvtAcxCircuitPrepareHardware e EvtAcxCircuitPowerUp, e move todos os fluxos para seus estados pré-existentes.
Assim que as filas passarem para o estado de ativação/execução, o fluxo de entrada/saída retomará.
O ACX não permite a remoção (falha na execução da consulta para remoção) ou o reequilíbrio (falha na execução da consulta para parada) se houver fluxos no estado ativo (RUN).
Os drivers podem também optar por destruir e recriar sempre os dispositivos de áudio durante o reequilíbrio. Este é o mesmo cenário acima, quando o dispositivo deteta que as novas configurações não são compatíveis com as antigas. A eliminação do circuito deve ser feita nas callbacks EvtDevicePrepareHardware/EvtDeviceReleaseHardware, e o novo circuito é recriado em EvtDevicePrepareHardware. O driver exclui um circuito cancelando o registro do circuito (usando AcxDeviceRemoveCircuit). Os circuitos de fábrica normalmente não devem ser removidos durante o reequilíbrio.
Manipuladores de ficheiros em modo de utilizador
ACX não espera que os identificadores de arquivo do modo de usuário sejam fechados para recriar novos circuitos. A vida útil dos manipuladores do sistema de arquivos não está vinculada à vida útil dos recursos de hardware utilizados pelo dispositivo ou circuitos. É da responsabilidade dos clientes detetar a chegada e remoção da interface e fechar e reabrir os identificadores de ficheiros.
Os identificadores de arquivo antigos são marcados como obsoletos e o ACX falha em todas as solicitações de E/S associadas a eles.
Ver também
Visão geral das extensões de classe de áudio ACX
Documentação de referência do ACX
Sequências de retorno de chamada PnP e Gerenciamento de Energia