Delen via


De verbindingstopologie in kaart brengen

Om de BDA-ondersteuningsbibliotheek eigenschappen en methoden te bieden aan toepassingen in Ring 3 namens een BDA minidriver, moet de BDA minidriver een toewijzing van de verbindingstopologie aan de BDA-ondersteuningsbibliotheek bieden. De BDA minidriver biedt deze toewijzing in een matrix van BDA_TEMPLATE_CONNECTION structuren. De BDA minidriver geeft deze BDA_TEMPLATE_CONNECTION matrix door in een matrix van KSTOPOLOGY_CONNECTION structuren wanneer deze de BdaCreateFilterFactory ondersteuningsfunctie aanroept. Zie Een BDA Minidriver starten voor meer informatie. Deze matrix biedt een weergave van alle mogelijke verbindingen tussen knooppunt- en pintypen die kunnen worden gemaakt binnen een filter of tussen een filter en aangrenzende filters.

Het netwerkproviderfilter kan vervolgens een aanvraag voor de eigenschap KSPROPERTY_BDA_TEMPLATE_CONNECTIONS indienen van de KSPROPSETID_BdaTopology-eigenschap die is ingesteld op een filterexemplaar van de BDA-minidriver om de verbindingstopologie van de minidriver op te halen. De BDA minidriver roept op zijn beurt de BdaPropertyTemplateConnections ondersteuningsfunctie aan, die de lijst met sjabloonverbindingen (BDA_TEMPLATE_CONNECTION structuren) van het filter retourneert in een matrix van KSTOPOLOGY_CONNECTION structuren. De leden van een BDA_TEMPLATE_CONNECTION structuur identificeren de volgende paren knooppunten en speldtypen van een verbinding:

  • knooppunt- en speldtypen waar de verbinding begint

  • knooppunt- en speldtypen waar de verbinding eindigt

Als u het knooppunttype instelt op een waarde van −1, wordt aangegeven dat de verbinding begint of eindigt bij een speld van respectievelijk een upstream- of downstreamfilter. Anders komt de waarde van het knooppunttype overeen met de index van het element in de op nul gebaseerde matrix van interne knooppunttypen. Deze matrix is een matrix van KSNODE_DESCRIPTOR structuren. De waarde van het speldtype komt overeen met de index van het element in de op nul gebaseerde matrix van speldtypen die beschikbaar zijn in de sjabloonfilterdescriptor voor de BDA minidriver. Deze matrix is een matrix van KSPIN_DESCRIPTOR_EX structuren.

In het volgende codefragment ziet u voorbeeldmatrices van knooppunttypen en speldtypen die beschikbaar zijn in de sjabloonfilterdescriptor voor de BDA minidriver:

//
//  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
    }
};

In het volgende codefragment ziet u voorbeelden van matrices van sjabloonverbindingen en verbindingen:

//
//  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.
};