Compartilhar via


Driver de miniporta de topologia

Um driver de miniporta de topologia gerencia os vários controles de hardware (por exemplo, volume e mudo) nos circuitos de mixer do adaptador de áudio. Esse driver enumera os controles como nós na topologia do mixer, permitindo que os clientes descubram as interconexões entre nós e consultem e definam os parâmetros de controle em cada nó.

O driver do sistema SysAudio examina a topologia do adaptador quando ele cria um grafo de filtro de áudio. A API do mixer (descrita na seção multimídia do Windows da documentação do SDK do Microsoft Windows) representa os nós de topologia como controles de linha de mixer e os expõe a aplicativos de modo de usuário, como SndVol32. Para obter mais informações, consulte SysTray e SndVol32.

Um driver de miniporta de topologia deve implementar uma interface de miniporta de topologia, que o driver de porta usa para inicializar o driver de miniporto. A interface de miniport, IMiniportTopology, herda os métodos na interface IMiniport ; não fornece métodos adicionais. Um driver de adaptador de áudio forma um filtro de topologia associando a interface IMiniportTopology de um objeto miniport à interface IPortTopology de um objeto de porta.

Normalmente, um filtro de topologia abrange a maioria dos nós de topologia de um adaptador, embora outros dispositivos dentro do adaptador possam conter nós de topologia adicionais. Por exemplo, um dispositivo de onda, que é representado como um filtro de onda, pode conter nós DAC (KSNODETYPE_DAC) e ADC (KSNODETYPE_ADC).

A consulta e a configuração de parâmetros de controle em nós de topologia são realizadas por meio de solicitações de propriedade. Cada tipo de nó é associado a uma propriedade ou conjunto específico de propriedades. Um nó pode dar suporte a apenas um valor de controle. Por exemplo, um nó de volume (KSNODETYPE_VOLUME) tem um valor que indica sua configuração de volume atual. Outros nós podem dar suporte a vários valores de controle. Por exemplo, um nó 3D (KSNODETYPE_3D_EFFECTS) dá suporte a várias propriedades de buffer 3D e ouvinte 3D. Um nó de soma (KSNODETYPE_SUM), por outro lado, não tem valores de controle.

Um driver de miniporto de topologia usa um descritor de conexão (PCCONNECTION_DESCRIPTOR) para descrever uma conexão entre dois nós de topologia. Cada conexão é direcionada e especifica um do nó e um para o nó. Um nó pode ter vários pinos e a função executada por um pino pode ser diferente da dos outros pinos. Para distinguir um pino de outro, o driver de miniporta numera os pinos em um nó. Esses números de pino aparecem nos descritores de conexão. Por exemplo, um filtro de variável de estado pode ter três pinos de saída – um para as frequências alta, intermediária e baixa – numerados como 1, 2 e 3. A numeração de pinos permite que os clientes do driver de miniporto determinem quais conexões estão associadas a quais pinos.

Um descritor de conexão usa um identificador de nó distinto, PCFILTER_NODE, para distinguir um pino no filtro de um pino em um nó dentro do filtro. Cada uma das conexões de disco rígido do circuito de mixer para a renderização de áudio e capturar dispositivos no adaptador de áudio é representada como um pino no filtro de topologia. Outros pinos de filtro de topologia representam conexões físicas externas, como uma tomada de lineout no adaptador cartão. Os pinos em um filtro de topologia representam conexões físicas e embutidas no hardware do adaptador. Portanto, os pinos não podem fornecer controle explícito sobre se uma conexão é feita e não podem ser usados para gerenciar o fluxo de dados sobre essa conexão.

Um único descritor de conexão pode descrever uma conexão entre dois tipos de pino em uma topologia. Os pinos nos dois lados de uma conexão podem ser pinos no filtro ou pinos em nós dentro do filtro ou a conexão pode ter um pino de filtro em um lado e um pino de nó no outro. Um driver de miniporto especifica sua topologia como uma matriz de descritores de conexão. Um único pino pode ter mais de uma conexão, o que significa que o mesmo pino pode aparecer em mais de um descritor de conexão na matriz.

A descrição da topologia que um cliente obtém de um driver de miniporto não foi projetada para dar suporte à descoberta aberta de como interpretar tipos de nó desconhecidos para o cliente. A numeração de pinos de nó por si só não fornece ao cliente as informações necessárias para descobrir as funções dos pinos. Embora o driver de miniporta identifique o tipo de um nó (por meio de um GUID), ele não fornece nenhuma lista padronizada de parâmetros para descrever o tipo de nó ou os pinos compatíveis com o tipo de nó.

Por exemplo, se um cliente enumerar um nó que usa o GUID do tipo nó KSNODETYPE_VOLUME para se identificar, o cliente poderá usar o nó somente se souber as convenções para lidar com nós de volume. Por convenção, um nó de volume, por exemplo, dá suporte à propriedade KSPROPERTY_AUDIO_VOLUMELEVEL e atribui números de pino de nó 0 e 1 ao pino de saída (origem) e ao pino de entrada (coletor), respectivamente. Além disso, um cliente que é capaz de controlar um nó de volume geralmente executa uma pesquisa direcionada que limita sua exploração a um número relativamente pequeno de tipos de nó (nós de volume e mudo, por exemplo). O cliente normalmente explora apenas partes de um grafo de filtro que provavelmente conterão nós de volume (por exemplo, linhas de mixer).

A interface de miniporta dá suporte à entrega de alterações de valor de controle não solicitadas do driver de miniporto para o driver de porta. Esse recurso acomoda dispositivos com botões de controle, controles deslizantes ou comutadores que podem ser manipulados fisicamente pelo usuário. Sempre que o usuário altera o valor de controle de um nó, uma interrupção de hardware notifica o driver de porta de que ocorreu um evento de hardware .