Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este tópico discute circuitos ACX. Para obter uma visão geral do ACX e uma lista de termos do ACX, consulte Visão geral das extensões de classe de áudio ACX.
Conforme descrito em Resumo de objetos ACX, um objeto AcxCircuit representa um caminho de áudio parcial ou total para um dispositivo de áudio percebido pelo usuário (alto-falantes, microfone, etc.). Um AcxCircuit tem pelo menos um pino de entrada e um pino de saída (ACXPIN), e pode agregar um ou mais objetos semelhantes a AcxElements. O circuito representa um ponto final existente e suas capacidades.
E o ACX Stream é um componente de driver criado para representar um fluxo de áudio, criado por um circuito. O Fluxo é composto por uma lista de Elementos que foram criados com base nos Elementos do Circuito pai. Um Stream Circuit é um circuito em uma arquitetura multi-stack (caminho de áudio parcial) que interage diretamente com o serviço de streaming de modo de usuário superior. Um Circuito Principal é um circuito em uma arquitetura multi-stack (caminho de áudio parcial) que dá a identidade do dispositivo de ponto final de áudio.
Identificação do circuito ACX
Cada circuito ACX tem um identificador de circuito. O ACX define o seguinte:
Nome (str), identifica de forma única este tipo de dispositivo de áudio de circuito. Ele é usado para localizar a configuração do INF e faz parte do link simbólico usado para acessar esse circuito a partir de um dispositivo remoto. Exemplo: "Render0", "Render1" ou "Capture0".
Ligação simbólica. Uma ligação simbólica está associada a todos os circuitos expostos. Os clientes usam este link simbólico para abrir um caminho de comunicação com o dispositivo/circuito.
ID do componente do circuito (GUID). Identifica exclusivamente a instância do circuito (específica do fornecedor). Ele não pode ser usado nas ligações AcxCircuitTemplate se o URI do circuito foi especificado.
URI do componente do circuito (str). Identifica exclusivamente a instância do circuito (específica do fornecedor). Isto não pode ser usado nas associações AcxCircuitTemplate se o ID do Circuito tiver sido especificado.
ID do componente (guid) da Circuit Factory. Identifica exclusivamente a instância de fábrica de circuitos (específica do fornecedor). Ele não pode ser usado nas associações AcxCircuitTemplate se o URI da fábrica do circuito foi especificado.
URI do componente da Fábrica de Circuitos (str). Identifica exclusivamente a instância de fábrica do circuito (específica do fornecedor). Ele não pode ser usado nas ligações AcxCircuitTemplate se o ID de fábrica do circuito foi especificado.
AcxCircuitCriar
A função AcxCircuitCreate é usada para criar um ACXCIRCUIT. Uma estrutura ACXCIRCUIT_INIT opaca que é usada pela função AcxCircuitCreate. AcxCircuitInitAllocate é usado para inicializar a estrutura ACXCIRCUIT_INIT.
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 .
Composição do circuito ACX
ACX liga circuitos juntos até que eles formem um caminho de áudio completo. O ACX usa ligações de áudio para conectar circuitos de áudio. Para obter mais informações, consulte Composição multicircuito ACX.
Criação dinâmica de circuitos ACX (a qualquer momento)
ACX pode criar um circuito dinâmico sob demanda. Para fazer isso, o driver aloca uma estrutura WDFDEVICE_INIT chamando WdfPdoInitAllocate. Em seguida, o driver especifica quaisquer retornos de chamada PnP/energia que deseja receber e, depois, cria o dispositivo. O driver instancia o novo dispositivo/circuito chamando AcxDeviceAddCircuitDevice. Para obter mais informações, consulte Enumeração de dispositivos ACX.
Remoção dinâmica do circuito ACX
O driver invoca AcxDeviceRemoveCircuitDevice para remover o dispositivo de áudio da lista de dispositivos. Isso aciona a sequência de desligamento no dispositivo/entidade de circuito ACX. O dispositivo de circuito/o circuito é removido de forma assíncrona. Para obter mais informações, consulte Enumeração de dispositivos ACX.
AcxDeviceRemoveCircuit e AcxDeviceDetachCircuit
Há duas maneiras comuns de gerenciar a terminação do circuito. AcxDeviceDetachCircuit ou AcxDeviceRemoveCircuit.
Se o chamador invocar o AcxDeviceDetachCircuit , ele não deverá chamar AcxDeviceRemoveCircuit. Se o driver de chamada quiser excluir o circuito após AcxDeviceDetachCircuit, ele deve usar WdfObjectDelete.
Ao chamar AcxDeviceRemoveCircuit, o driver de chamada diz ao ACX para remover esse circuito e removê-lo/excluí-lo do dispositivo. Neste caso, não há necessidade de chamar WdfObjectDelete no circuito.
Em resumo, AcxDeviceDetachCircuit significa que o motorista possui o gerenciamento do tempo de vida dos objetos do circuito, AcxDeviceRemoveCircuit significa que o circuito será removido e excluído.
Para obter informações gerais sobre o gerenciamento do tempo de vida do objeto WDF, consulte Framework Object Life Cycle.
AcxDeviceRemoveCircuitDevice
Diferente da terminação de circuito discutida acima, AcxDeviceRemoveCircuitDevice é usado pelo driver de áudio para remover um endpoint de áudio existente e pode ser chamado a qualquer momento durante o ciclo de vida do driver.
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).
Função de callback EvtAcxCircuitReleaseHardware (EVT_ACX_CIRCUIT_RELEASE_HARDWARE)
Se um driver tiver registado uma função de retorno de chamada EvtAcxCircuitReleaseHardware, a estrutura de software a chamará durante as seguintes transições:
- Reequilíbrio de recursos
- Remoção ordenada
- Remoção surpresa
A estrutura ACX chama a função de retorno de chamada EvtAcxCircuitReleaseHardware depois que a estrutura WDF parou de enviar solicitações de E/S para o dispositivo, todas as interrupções atribuídas ao dispositivo foram desativadas e desconectadas e o dispositivo foi desligado.
A estrutura ACX chama a função de retorno de chamada EvtAcxCircuitReleaseHardware antes da estrutura WDF chamar a função de retorno de chamada EvtDeviceReleaseHardware do driver.
Quando o framework chama a função EvtAcxCircuitReleaseHardware, o PDO do dispositivo ainda existe e pode ser consultado para obter informações do dispositivo que estão disponíveis no estado desligado, como o estado de configuração PCI.
Além disso, os recursos de hardware traduzidos que a estrutura fornece para EvtDeviceReleaseHardware ainda são atribuídos ao dispositivo. O objetivo principal dessa função de retorno de chamada é liberar esses recursos e, em particular, desmapear quaisquer recursos de memória mapeados pela função de retorno de chamada EvtAcxCircuitPrepareHardware do driver. O driver também pode usar esse retorno de chamada para executar qualquer outra atividade de gerenciamento ACXCIRCUIT que possa ser necessária no estado desligado. Normalmente, todas as outras operações de desligamento de hardware devem ocorrer na função callback EvtDeviceD0Exit do driver.
A estrutura ACX sempre chama a função de retorno de chamada EvtAcxCircuitReleaseHardware do driver se a função de retorno de chamada EvtAcxCircuitPrepareHardware do driver tiver sido chamada, a menos que o EvtAcxCircuitPrepareHardware retorne um código de falha.
Para obter mais informações sobre recursos de hardware, consulte Introdução aos recursos de hardware.
Função de retorno de chamada EvtAcxFactoryCircuitReleaseHardware (EVT_ACX_FACTORY_CIRCUIT_RELEASE_HARDWARE)
Quando o framework chama o EvtAcxFactoryCircuitReleaseHardware, o PDO para o dispositivo ainda existe e pode ser consultado para obter informações do dispositivo que estão disponíveis no estado desligado, por exemplo, o estado de configuração PCI.
Além disso, os recursos de hardware traduzidos que a estrutura fornece para EvtDeviceReleaseHardware ainda são atribuídos ao dispositivo. O objetivo principal dessa função de retorno de chamada é liberar esses recursos e, em particular, desmapear quaisquer recursos de memória mapeados pela função de retorno de chamada EvtAcxCircuitPrepareHardware do driver. O driver também pode usar esse retorno de chamada para executar qualquer outra atividade de gerenciamento ACXCIRCUIT que possa ser necessária no estado desligado. Normalmente, todas as outras operações de desligamento de hardware devem ocorrer na função de retorno de chamada EvtDeviceD0Exit do driver.
A estrutura ACX sempre chama a função de retorno de chamada EvtAcxFactoryCircuitReleaseHardware do driver se a função de retorno de chamada EvtAcxFactoryCircuitPrepareHardware do driver tiver sido chamada, a menos que o EvtAcxFactoryCircuitPrepareHardware retorne um código de falha.
Para obter mais informações sobre como gerenciar WDF e objetos de circuito, consulte ACX WDF Driver Lifetime Management.
Ver também
Visão geral das extensões de classe de áudio ACX
Comunicações entre controladores de multicamadas ACX