Determinando a topologia do dispositivo BDA

Uma topologia de dispositivo BDA é composta por uma rede conectada de nós, cada um dos quais representa alguma transformação em um sinal. Os nós podem ser agrupados arbitrariamente entre diferentes filtros. Esse agrupamento arbitrário fornece aos fornecedores de hardware uma certa liberdade em como eles implementam seu hardware e drivers para que esses drivers e hardware trabalhem de maneira genérica com os provedores de rede para os diferentes tipos de redes que desejam dar suporte.

Para que essa arquitetura de agrupamento arbitrário funcione, o provedor de rede deve ser capaz de consultar filtros sobre que tipo de transformações esses filtros executam em um sinal (ou seja, quais tipos de redes de nós o filtro pode dar suporte). O minidriver anel 0 subjacente para um filtro transmite uma imagem de suas redes de nós com suporte para o provedor de rede por meio do conjunto de propriedades KSPROPSETID_BdaTopology .

Ao determinar a topologia de modelo para um filtro, o provedor de rede itera listas de tipos de nó e tipos de pino e consulta cada nó e fixa seus recursos. O provedor de rede usa as seguintes propriedades de KSPROPSETID_BdaTopology para determinar a topologia de modelo para o filtro:

  • KSPROPERTY_BDA_NODE_TYPES

    Os tipos de nó representam possíveis nós funcionais dentro do filtro. A propriedade KSPROPERTY_BDA_NODE_TYPES retorna uma lista de todos os tipos de nó fornecidos por uma instância de filtro do minidriver BDA. O minidriver atribui valores arbitrários para identificar tipos de nó. Normalmente, o minidriver usa o índice de cada elemento na lista dos tipos de nó do minidriver como o valor para cada tipo de nó. O minidriver BDA atribui a cada nó um GUID de descrição de nó. GuiDs de descrição para tipos de nó aos quais o provedor de rede atualmente dá suporte são definidos em bdamedia.h. Essa descrição do nó indica ao provedor de rede o que o nó faz. Em uma topologia de modelo, um tipo de nó pode ocorrer apenas uma vez. No entanto, mais de um nó de um tipo específico pode ter o mesmo GUID de descrição do nó. Isso permite que uma transformação de sinal específica ocorra em mais de um lugar na topologia do filtro, permitindo que o provedor de rede identifique um único nó de topologia de forma inequívoca.

  • KSPROPERTY_BDA_PIN_TYPES

    Os tipos de pin representam possíveis conexões com outros filtros no grafo. A propriedade KSPROPERTY_BDA_PIN_TYPES retorna uma lista de todos os tipos de pino que podem ser criados no filtro. Em uma topologia de modelo, um tipo de pino pode ocorrer apenas uma vez.

  • KSPROPERTY_BDA_TEMPLATE_CONNECTIONS

    A propriedade KSPROPERTY_BDA_TEMPLATE_CONNECTIONS retorna uma matriz que representa todas as conexões possíveis entre tipos de nó e tipos de pino que podem ser configurados no filtro. Consulte Topologia de conexão de mapeamento para obter mais informações.

Quando uma instância de filtro é criada pela primeira vez e adicionada ao grafo, ela normalmente tem pinos de entrada, mas nenhum pino de saída. Para criar pinos de saída, o provedor de rede primeiro usa as propriedades KSPROPSETID_BdaTopology para determinar quais operações o filtro pode executar. Nessas propriedades, o provedor de rede determina quais operações ele requer que o filtro execute para um grafo de filtro específico. Em seguida, o provedor de rede usa o método KSMETHODSETID_BdaDeviceConfiguration definido para criar pinos de saída correspondentes a um tipo de pino específico e criar a topologia interna, que é o caminho de hardware real, entre esses pinos e os pinos de entrada. Consulte Configurando um filtro BDA para obter mais informações.

O snippet de código a seguir mostra como definir funções exportadas pela biblioteca de suporte do BDA como rotinas de expedição para o conjunto de propriedades KSPROPSETID_BdaTopology:

//
//  KSPROPSETID_BdaTopology property set
//
//  Defines the dispatch routines for the filter level
//  topology properties
//
DEFINE_KSPROPERTY_TABLE(FilterTopologyProperties)
{
    DEFINE_KSPROPERTY_ITEM_BDA_NODE_TYPES(
        BdaPropertyNodeTypes,
        NULL
        ),
    DEFINE_KSPROPERTY_ITEM_BDA_PIN_TYPES(
        BdaPropertyPinTypes,
        NULL
        ),
    DEFINE_KSPROPERTY_ITEM_BDA_TEMPLATE_CONNECTIONS(
        BdaPropertyTemplateConnections,
        NULL
        ),
    DEFINE_KSPROPERTY_ITEM_BDA_CONTROLLING_PIN_ID(
        BdaPropertyGetControllingPinId,
        NULL
        )
};