Topología de conexión de asignación
Para que la biblioteca de compatibilidad de BDA proporcione propiedades y métodos a las aplicaciones en anillo 3 en nombre de un minidriver BDA, el minidriver BDA debe proporcionar una asignación de su topología de conexión a la biblioteca de soporte técnico de BDA. El minidriver BDA proporciona esta asignación en una matriz de estructuras de BDA_TEMPLATE_CONNECTION . El minidriver BDA pasa esta matriz BDA_TEMPLATE_CONNECTION en una matriz de estructuras de KSTOPOLOGY_CONNECTION cuando llama a la función de compatibilidad BdaCreateFilterFactory . Consulte Inicio de un minidriver BDA para obtener más información. Esta matriz proporciona una representación de todas las posibles conexiones entre los tipos de nodos y patillas que se pueden realizar dentro de un filtro o entre un filtro y filtros adyacentes.
Posteriormente, el filtro del proveedor de red puede realizar una solicitud de propiedad KSPROPERTY_BDA_TEMPLATE_CONNECTIONS de la propiedad KSPROPSETID_BdaTopology establecida en una instancia de filtro del minidriver BDA para recuperar la topología de conexión del minidriver. A su vez, el minidriver BDA llama a la función de compatibilidad BdaPropertyTemplateConnections , que devuelve la lista de conexiones de plantilla del filtro (BDA_TEMPLATE_CONNECTION estructuras) en una matriz de estructuras de KSTOPOLOGY_CONNECTION. Los miembros de una estructura de BDA_TEMPLATE_CONNECTION identifican los siguientes pares de tipos de nodo y patilla de una conexión:
tipos de nodo y anclaje donde comienza la conexión
tipos de nodo y anclaje donde finaliza la conexión
Establecer el tipo de nodo en un valor de -1 indica que la conexión comienza o termina en una patilla de un filtro ascendente o descendente, respectivamente. De lo contrario, el valor del tipo de nodo corresponde al índice del elemento de la matriz de base cero de tipos de nodo internos. Esta matriz es una matriz de estructuras KSNODE_DESCRIPTOR . El valor del tipo de patilla corresponde al índice del elemento en la matriz de base cero de tipos de patillas que están disponibles en el descriptor de filtro de plantilla para el minidriver BDA. Esta matriz es una matriz de estructuras de KSPIN_DESCRIPTOR_EX .
En el fragmento de código siguiente se muestran matrices de ejemplo de tipos de nodo y tipos de patillas que están disponibles en el descriptor de filtro de plantilla para el minidriver de BDA:
//
// Template Node Descriptors
//
// This array describes all Node Types available in the template
// topology of the filter.
//
const
KSNODE_DESCRIPTOR
NodeDescriptors[] =
{
{ // 0 node type
&RFTunerNodeAutomation,// PKSAUTOMATION_TABLE AutomationTable;
&KSNODE_BDA_RF_TUNER, // Type
NULL // Name
},
{ // 1 node type
&VSB8DemodulatorNodeAutomation, // PKSAUTOMATION_TABLE
// AutomationTable;
&KSNODE_BDA_8VSB_DEMODULATOR, // Type
NULL // Name
}
};
//
// Template Pin Descriptors
//
// This data structure defines the pin types available in the filters
// template topology. These structures will be used to create a
// pin factory ID for a pin type when BdaMethodCreatePin is called.
//
const
KSPIN_DESCRIPTOR_EX
TemplatePinDescriptors[] =
{
// Antenna Pin
// 0 pin type
{
&AntennaPinDispatch,
&AntennaAutomation, // AntennaPinAutomation
{
0, // Interfaces
NULL,
0, // Mediums
NULL,
SIZEOF_ARRAY(AntennaPinRanges),
AntennaPinRanges,
KSPIN_DATAFLOW_IN,
KSPIN_COMMUNICATION_BOTH,
NULL, // Name
NULL, // Category
0
},
KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT |
KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING |
KSPIN_FLAG_FIXED_FORMAT,
1, // InstancesPossible
0, // InstancesNecessary
NULL, // Allocator Framing
NULL // PinIntersectHandler
},
// Transport Pin
// 1 pin type
{
&TransportPinDispatch,
&TransportAutomation, // TransportPinAutomation
{
0, // Interfaces
NULL,
1, // Mediums
&TransportPinMedium,
SIZEOF_ARRAY(TransportPinRanges),
TransportPinRanges,
KSPIN_DATAFLOW_OUT,
KSPIN_COMMUNICATION_BOTH,
(GUID *) &PINNAME_BDA_TRANSPORT, // Name
(GUID *) &PINNAME_BDA_TRANSPORT, // Category
0
},
KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT |
KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING |
KSPIN_FLAG_FIXED_FORMAT,
1,
1, // InstancesNecessary
NULL, // Allocator Framing
NULL // PinIntersectHandler
}
};
En el fragmento de código siguiente se muestran ejemplos de matrices de conexiones y articulaciones de plantilla:
//
// BDA Template Topology Connections
//
// Lists the possible connections between pin types and
// node types. This structure along with the BDA_FILTER_TEMPLATE,
// KSFILTER_DESCRIPTOR, and BDA_PIN_PAIRING structures
// describe how topologies are created in the filter.
//
const
KSTOPOLOGY_CONNECTION TemplateTunerConnections[] =
{
{ -1, 0, 0, 0}, // from upstream filter to 0 pin of 0 node
{ 0, 1, 1, 0}, // from 1 pin of 0 node to 0 pin of 1 node
{ 1, 1, -1, 1}, // from 1 pin of 1 node to downstream filter
};
//
// Lists the template joints between antenna (input) and transport
// (output) pin types. Values given to joints correspond to indexes
// of elements in the preceding KSTOPOLOGY_CONNECTION array.
//
// For this template topology, the RF node (0) belongs to the antenna
// pin and the 8VSB demodulator node (1) belongs to the transport pin
//
const
ULONG AntennaTransportJoints[] =
{
1 // Second element in the preceding KSTOPOLOGY_CONNECTION array.
};