Topologie de connexion de mappage
Pour que la bibliothèque de prise en charge BDA fournisse des propriétés et des méthodes aux applications de l’anneau 3 pour le compte d’un minidriver BDA, le minidriver BDA doit fournir un mappage de sa topologie de connexion à la bibliothèque de prise en charge BDA. Le minidriver BDA fournit ce mappage dans un tableau de structures BDA_TEMPLATE_CONNECTION . Le minidriver BDA transmet ce tableau BDA_TEMPLATE_CONNECTION dans un tableau de structures KSTOPOLOGY_CONNECTION lorsqu’il appelle la fonction de support BdaCreateFilterFactory . Pour plus d’informations, consultez Démarrage d’un minidriver BDA . Ce tableau fournit une représentation de toutes les connexions possibles entre les types de nœud et de broche qui peuvent être effectuées dans un filtre ou entre un filtre et des filtres adjacents.
Le filtre du fournisseur de réseau peut ensuite effectuer une demande de propriété KSPROPERTY_BDA_TEMPLATE_CONNECTIONS de la propriété KSPROPSETID_BdaTopology définie sur un filtre instance du minidriver BDA pour récupérer la topologie de connexion du minidriver. Le minidriver BDA appelle à son tour la fonction de prise en charge BdaPropertyTemplateConnections , qui retourne la liste des connexions de modèle du filtre (BDA_TEMPLATE_CONNECTION structures) dans un tableau de structures KSTOPOLOGY_CONNECTION. Les membres d’une structure de BDA_TEMPLATE_CONNECTION identifient les paires suivantes de types de nœud et de broche d’une connexion :
types de nœuds et de broches où la connexion commence
types de nœuds et de broches où la connexion se termine
La définition du type de nœud sur une valeur de −1 indique que la connexion commence ou se termine à une broche d’un filtre amont ou en aval, respectivement. Sinon, la valeur du type de nœud correspond à l’index de l’élément dans le tableau de base zéro des types de nœuds internes. Ce tableau est un tableau de structures KSNODE_DESCRIPTOR . La valeur du type de broche correspond à l’index de l’élément dans le tableau de base zéro de types de broches disponibles dans le descripteur de filtre de modèle pour le minidriver BDA. Ce tableau est un tableau de structures KSPIN_DESCRIPTOR_EX .
L’extrait de code suivant montre des exemples de tableaux de types de nœuds et de types de broches disponibles dans le descripteur de filtre de modèle pour le 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
}
};
L’extrait de code suivant montre des exemples de tableaux de connexions et de jointures de modèle :
//
// 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.
};