Mapping della topologia di connessione
Affinché la libreria di supporto BDA fornisca proprietà e metodi alle applicazioni nel circuito 3 per conto di un minidriver BDA, il minidriver BDA deve fornire un mapping della topologia di connessione alla libreria di supporto BDA. Il minidriver BDA fornisce questo mapping in una matrice di strutture BDA_TEMPLATE_CONNECTION . Il minidriver BDA passa questa matrice BDA_TEMPLATE_CONNECTION in una matrice di strutture KSTOPOLOGY_CONNECTION quando chiama la funzione di supporto BdaCreateFilterFactory . Per altre informazioni, vedere Avvio di un minidriver BDA . Questa matrice fornisce una rappresentazione di tutte le possibili connessioni tra i tipi di nodo e pin che possono essere eseguiti all'interno di un filtro o tra un filtro e filtri adiacenti.
Il filtro del provider di rete può successivamente effettuare una richiesta di proprietà KSPROPERTY_BDA_TEMPLATE_CONNECTIONS della proprietà KSPROPSETID_BdaTopology impostata su un'istanza di filtro del minidriver BDA per recuperare la topologia di connessione del minidriver. Il minidriver BDA chiama a sua volta la funzione di supporto BdaPropertyTemplateConnections , che restituisce l'elenco delle connessioni modello del filtro (BDA_TEMPLATE_CONNECTION strutture) in una matrice di strutture KSTOPOLOGY_CONNECTION. I membri di una struttura BDA_TEMPLATE_CONNECTION identificano le coppie di nodi e tipi di pin seguenti di una connessione:
tipi di nodo e pin in cui inizia la connessione
tipi di nodo e pin in cui termina la connessione
L'impostazione del tipo di nodo su un valore di −1 indica che la connessione inizia o termina rispettivamente a un pin di un filtro upstream o downstream. In caso contrario, il valore del tipo di nodo corrisponde all'indice dell'elemento nella matrice in base zero di tipi di nodo interni. Questa matrice è una matrice di strutture KSNODE_DESCRIPTOR . Il valore del tipo pin corrisponde all'indice dell'elemento nella matrice in base zero di tipi di pin disponibili nel descrittore di filtro modello per il minidriver BDA. Questa matrice è una matrice di strutture KSPIN_DESCRIPTOR_EX .
Il frammento di codice seguente mostra matrici di esempi di tipi di nodo e tipi di pin disponibili nel descrittore di filtro modello per il minidriver 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
}
};
Il frammento di codice seguente mostra esempi di matrici di connessioni e articolazioni del modello:
//
// 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.
};