Determinar la topología de dispositivos BDA

Una topología de dispositivo BDA se compone de una red conectada de nodos, cada una de las cuales representa alguna transformación en una señal. Los nodos se pueden agrupar arbitrariamente entre distintos filtros. Esta agrupación arbitraria proporciona a los proveedores de hardware una cierta libertad en la forma en que implementan su hardware y controladores para que dichos controladores y hardware funcionen de forma genérica con los proveedores de red para los diferentes tipos de redes que desean admitir.

Para que esta arquitectura de agrupación arbitraria funcione, el proveedor de red debe poder consultar filtros sobre qué tipo de transformaciones realizan esos filtros en una señal (es decir, qué tipos de redes de nodos puede admitir el filtro). El minidriver ring 0 subyacente para un filtro transmite una imagen de sus redes de nodos admitidas al proveedor de red a través del conjunto de propiedades KSPROPSETID_BdaTopology .

Al determinar la topología de plantilla para un filtro, el proveedor de red recorre en iteración listas de tipos de nodo y tipos de patillas y consulta cada nodo y ancla para sus funcionalidades. El proveedor de red usa las siguientes propiedades de KSPROPSETID_BdaTopology para determinar la topología de plantilla para el filtro:

  • KSPROPERTY_BDA_NODE_TYPES

    Los tipos de nodo representan posibles nodos funcionales dentro del filtro. La propiedad KSPROPERTY_BDA_NODE_TYPES devuelve una lista de todos los tipos de nodo proporcionados por una instancia de filtro del minidriver BDA. El minidriver asigna valores arbitrarios para identificar los tipos de nodo. Normalmente, el minidriver usa el índice de cada elemento de la lista de tipos de nodo del minidriver como valor para cada tipo de nodo. El minidriver BDA asigna cada tipo de nodo un GUID de descripción de nodo. Descripción Los GUID de los tipos de nodo que admite el proveedor de red actualmente se definen en bdamedia.h. Esta descripción del nodo indica al proveedor de red lo que hace el nodo. En una topología de plantilla, un tipo de nodo solo puede producirse una vez. Sin embargo, más de un nodo de un tipo específico puede tener el mismo GUID de descripción del nodo. Esto permite que se produzca una transformación de señal específica en más de un lugar en la topología del filtro, al tiempo que permite al proveedor de red identificar un único nodo de topología de forma inequívoca.

  • KSPROPERTY_BDA_PIN_TYPES

    Los tipos de anclaje representan posibles conexiones a otros filtros del gráfico. La propiedad KSPROPERTY_BDA_PIN_TYPES devuelve una lista de todos los tipos de patillas que se pueden crear en el filtro. En una topología de plantilla, un tipo de patilla solo puede producirse una vez.

  • KSPROPERTY_BDA_TEMPLATE_CONNECTIONS

    La propiedad KSPROPERTY_BDA_TEMPLATE_CONNECTIONS devuelve una matriz que representa todas las posibles conexiones entre los tipos de nodo y los tipos de patillas que se pueden configurar en el filtro. Consulte Topología de conexión de asignación para obtener más información.

Cuando se crea por primera vez una instancia de filtro y se agrega al grafo, normalmente tiene patillas de entrada, pero no pins de salida. Para crear patillas de salida, el proveedor de red usa primero las propiedades de KSPROPSETID_BdaTopology para determinar qué operaciones puede realizar el filtro. A partir de estas propiedades, el proveedor de red determina qué operaciones requiere que el filtro realice para un gráfico de filtros determinado. A continuación, el proveedor de red usa el método KSMETHODSETID_BdaDeviceConfiguration establecido para crear patillas de salida que coincidan con un tipo de pin determinado y cree la topología interna, que es la ruta de acceso de hardware real, entre esos patillas y los patillas de entrada. Consulte Configuración de un filtro BDA para obtener más información.

El siguiente fragmento de código muestra cómo definir las funciones exportadas por la biblioteca de compatibilidad de BDA como rutinas de envío para el conjunto de propiedades de 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
        )
};