Поделиться через


Топология подключения для сопоставления

Чтобы библиотека поддержки BDA предоставляла свойства и методы приложениям в круге 3 от имени мини-драйвера BDA, мини-накопитель BDA должен предоставлять сопоставление топологии подключения с библиотекой поддержки BDA. Мини-накопитель BDA предоставляет это сопоставление в массиве BDA_TEMPLATE_CONNECTION структур. Мини-диск BDA передает этот BDA_TEMPLATE_CONNECTION массив в массив KSTOPOLOGY_CONNECTION структур при вызове функции поддержки BdaCreateFilterFactory . Дополнительные сведения см. в статье Запуск мини-драйвера BDA . Этот массив представляет все возможные соединения между типами узлов и контактов, которые можно установить в пределах фильтра или между фильтром и прилегающими фильтрами.

Фильтр поставщика сети может впоследствии выполнить запрос свойства KSPROPERTY_BDA_TEMPLATE_CONNECTIONS свойства KSPROPSETID_BdaTopology , заданного в экземпляре фильтра мини-driver BDA, чтобы получить топологию подключения мини-драйвера. Мини-накопитель BDA, в свою очередь, вызывает функцию поддержки BdaPropertyTemplateConnections , которая возвращает список подключений шаблона фильтра (BDA_TEMPLATE_CONNECTION структур) в массиве KSTOPOLOGY_CONNECTION структур. Члены структуры BDA_TEMPLATE_CONNECTION идентифицируют следующие пары типов узлов и контактов соединения:

  • типы узлов и контактов, в которых начинается соединение

  • типы узлов и контактов, в которых заканчивается подключение

Установка для типа узла значения -1 означает, что соединение начинается или заканчивается при закреплении вышестоящий или нисходящего фильтра соответственно. В противном случае значение типа узла соответствует индексу элемента в отсчитываемом от нуля массиве внутренних типов узлов. Этот массив представляет собой массив KSNODE_DESCRIPTOR структур. Значение типа закрепления соответствует индексу элемента в массиве типов контактов, отсчитываемых от нуля, доступных в дескрипторе фильтра шаблона для мини-драйвера BDA. Этот массив представляет собой массив KSPIN_DESCRIPTOR_EX структур.

В следующем фрагменте кода показаны примеры массивов типов узлов и типов контактов, доступных в дескрипторе фильтра шаблона для мини-драйвера 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
    }
};

В следующем фрагменте кода показаны примеры массивов шаблонных соединений и соединений:

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