Partilhar via


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 é:

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