/*++ Copyright (c) 1999 Microsoft Corporation Module Name: ObjDesc.cpp Abstract: Static object description data structures. This file includes initial descriptors for all filter, pin, and node objects exposed by this driver. It also include descriptors for the properties, methods, and events on those objects. --*/ #include "PhilTune.h" #ifdef ALLOC_DATA_PRAGMA #pragma const_seg("PAGECONST") #endif // ALLOC_DATA_PRAGMA #ifdef ALLOC_PRAGMA #pragma code_seg("PAGE") #endif // ALLOC_PRAGMA //=========================================================================== // // Node definitions // // Nodes are special in that, though they are defined at the filter level, // they are actually associated with a pin type. The filter's node // descriptor list is actually a list of node types. // // You will notice that the dispatch routines actually point to // pin specific methods. This is because the context data associated with // a node is stored in the pin context. // // Node properties and methods should only be used on the appropriate // pin. // //=========================================================================== //=========================================================================== // // RF Tuner Node definitions // // This structure defines the Properties, Methods, and Events // available on the BDA RF Tuner Node. // // The properties are used to set the center frequency and frequency range // as well as to report signal strength. // // This node is associated with an antenna input pin and thus the node // properties should be set/put using the antenna input pin. // //=========================================================================== // // BDA RF Tune Frequency Filter // // Defines the dispatch routines for the Frequency Filter Properties // on the RF Tuner Node // DEFINE_KSPROPERTY_TABLE(RFNodeFrequencyProperties) { DEFINE_KSPROPERTY_ITEM_BDA_RF_TUNER_FREQUENCY( CAntennaPin::GetCenterFrequency, CAntennaPin::PutCenterFrequency ), DEFINE_KSPROPERTY_ITEM_BDA_RF_TUNER_POLARITY( NULL, NULL ), DEFINE_KSPROPERTY_ITEM_BDA_RF_TUNER_RANGE( NULL, NULL ), DEFINE_KSPROPERTY_ITEM_BDA_RF_TUNER_TRANSPONDER( NULL, NULL ), }; // // RF Tuner Node Property Sets supported // // This table defines all property sets supported by the // RF Tuner Node associated with the antenna input pin. // DEFINE_KSPROPERTY_SET_TABLE(RFNodePropertySets) { DEFINE_KSPROPERTY_SET ( &KSPROPSETID_BdaFrequencyFilter, // Set SIZEOF_ARRAY(RFNodeFrequencyProperties), // PropertiesCount RFNodeFrequencyProperties, // PropertyItems 0, // FastIoCount NULL // FastIoTable ) }; // // Radio Frequency Tuner Node Automation Table // // DEFINE_KSAUTOMATION_TABLE(RFTunerNodeAutomation) { DEFINE_KSAUTOMATION_PROPERTIES( RFNodePropertySets), DEFINE_KSAUTOMATION_METHODS_NULL, DEFINE_KSAUTOMATION_EVENTS_NULL }; //=========================================================================== // // QAM Demodulator Node definitions // // This structure defines the Properties, Methods, and Events // available on the BDA QAM Demodulator Node. // // This node is associated with a transport output pin and thus the node // properties should be set/put using the transport output pin. // //=========================================================================== // // QAM Demodulator Node Automation Table // // This structure defines the Properties, Methods, and Events // available on the BDA QAM Demodulator Node. // These are used to set the symbol rate, and Viterbi rate, // as well as to report signal lock and signal quality. // DEFINE_KSAUTOMATION_TABLE(QAMDemodulatorNodeAutomation) { DEFINE_KSAUTOMATION_PROPERTIES_NULL, DEFINE_KSAUTOMATION_METHODS_NULL, DEFINE_KSAUTOMATION_EVENTS_NULL }; //=========================================================================== // // 8VSB Demodulator Node definitions // // This structure defines the Properties, Methods, and Events // available on the BDA 8VSB Demodulator Node. // // This node is associated with a transport output pin and thus the node // properties should be set/put using the transport output pin. // //=========================================================================== // // 8VSB BDA Autodemodulate Properties // // Defines the dispatch routines for the Autodemodulate // on the 8VSB demodulator node. // DEFINE_KSPROPERTY_TABLE(VSB8NodeAutoDemodProperties) { DEFINE_KSPROPERTY_ITEM_BDA_AUTODEMODULATE_START( NULL, CTransportPin::StartDemodulation ), DEFINE_KSPROPERTY_ITEM_BDA_AUTODEMODULATE_STOP( NULL, CTransportPin::StopDemodulation ) }; // Define VSB property Table // // This is a private property set associated with the 8VSB node. // In this example it is used as a filter property set. // DEFINE_KSPROPERTY_TABLE (VSBProperties) { DEFINE_KSPROPERTY_ITEM ( KSPROPERTY_VSB_CAP, // 1 CFilter::GetVsbCapabilitiesProperty, // GetSupported or Handler sizeof(KSPROPERTY), // MinProperty sizeof(KSPROPERTY_VSB_CAP_S), // MinData CFilter::SetVsbCapabilitiesProperty, // SetSupported or Handler NULL, // Values 0, // RelationsCount NULL, // Relations NULL, // SupportHandler 0 // SerializedSize ), DEFINE_KSPROPERTY_ITEM ( KSPROPERTY_VSB_REG_CTRL, // 2 CFilter::GetVsbRegisterProperty, // GetSupported or Handler sizeof(KSPROPERTY), // MinProperty sizeof(KSPROPERTY_VSB_REG_CTRL_S), // MinData CFilter::SetVsbRegisterProperty, // SetSupported or Handler NULL, // Values 0, // RelationsCount NULL, // Relations NULL, // SupportHandler 0 // SerializedSize ), DEFINE_KSPROPERTY_ITEM ( KSPROPERTY_VSB_COEFF_CTRL, // 3 CFilter::GetVsbCoefficientProperty, // GetSupported or Handler sizeof(KSPROPERTY), // MinProperty sizeof(KSPROPERTY_VSB_COEFF_CTRL_S), // MinData CFilter::SetVsbCoefficientProperty, // SetSupported or Handler NULL, // Values 0, // RelationsCount NULL, // Relations NULL, // SupportHandler 0 // SerializedSize ), DEFINE_KSPROPERTY_ITEM ( KSPROPERTY_VSB_RESET_CTRL, // 4 FALSE, // GetSupported or Handler sizeof(KSPROPERTY), // MinProperty sizeof(KSPROPERTY_VSB_CTRL_S), // MinData CFilter::SetVsbResetProperty, // SetSupported or Handler NULL, // Values 0, // RelationsCount NULL, // Relations NULL, // SupportHandler 0 // SerializedSize ), DEFINE_KSPROPERTY_ITEM ( KSPROPERTY_VSB_DIAG_CTRL, // 5 CFilter::GetVsbDiagControlProperty, // GetSupported or Handler sizeof(KSPROPERTY), // MinProperty sizeof(KSPROPERTY_VSB_DIAG_CTRL_S), // MinData CFilter::SetVsbDiagControlProperty, // SetSupported or Handler NULL, // Values 0, // RelationsCount NULL, // Relations NULL, // SupportHandler 0 // SerializedSize ), DEFINE_KSPROPERTY_ITEM ( KSPROPERTY_VSB_QUALITY_CTRL, // 6 FALSE, // GetSupported or Handler sizeof(KSPROPERTY), // MinProperty sizeof(KSPROPERTY_VSB_CTRL_S), // MinData CFilter::SetVsbQualityControlProperty,// SetSupported or Handler NULL, // Values 0, // RelationsCount NULL, // Relations NULL, // SupportHandler 0 // SerializedSize ), }; // // 8VSB Demodulator Node Property Sets supported // // This table defines all property sets supported by the // 8VSB Demodulator Node associated with the transport output pin. // DEFINE_KSPROPERTY_SET_TABLE(VSB8NodePropertySets) { DEFINE_KSPROPERTY_SET ( &KSPROPSETID_BdaAutodemodulate, // Set SIZEOF_ARRAY(VSB8NodeAutoDemodProperties), // PropertiesCount VSB8NodeAutoDemodProperties, // PropertyItems 0, // FastIoCount NULL // FastIoTable )}; // // VSB8 Demodulator Node Automation Table // // This structure defines the Properties, Methods, and Events // available on the BDA 8VSB Demodulator Node. // These are used to set the symbol rate, and Viterbi rate, // as well as to report signal lock and signal quality. // DEFINE_KSAUTOMATION_TABLE(VSB8DemodulatorNodeAutomation) { DEFINE_KSAUTOMATION_PROPERTIES( VSB8NodePropertySets), DEFINE_KSAUTOMATION_METHODS_NULL, DEFINE_KSAUTOMATION_EVENTS_NULL }; //=========================================================================== // // Antenna Pin Definitions // //=========================================================================== // // Antenna Pin Property Sets supported // // This table defines all property sets supported by the // antenna input pin exposed by this filter. // DEFINE_KSPROPERTY_SET_TABLE(AntennaPropertySets) { DEFINE_KSPROPERTY_SET ( &KSPROPSETID_BdaFrequencyFilter, // Set SIZEOF_ARRAY(RFNodeFrequencyProperties), // PropertiesCount RFNodeFrequencyProperties, // PropertyItems 0, // FastIoCount NULL // FastIoTable ) }; // // Antenna Pin Automation Table // // Lists all Property, Method, and Event Set tables for the antenna pin // DEFINE_KSAUTOMATION_TABLE(AntennaAutomation) { DEFINE_KSAUTOMATION_PROPERTIES(AntennaPropertySets), DEFINE_KSAUTOMATION_METHODS_NULL, DEFINE_KSAUTOMATION_EVENTS_NULL }; // // Dispatch Table for the Antenna Input Pin // // This pin does not process any data. A connection // on this pin enables the driver to determine which // Tuning Space is connected to the input. This information // may then be used to select a physical antenna jack // on the card. // const KSPIN_DISPATCH AntennaPinDispatch = { CAntennaPin::PinCreate, // Create CAntennaPin::PinClose, // Close NULL, // Process NULL, // Reset NULL, // SetDataFormat CAntennaPin::PinSetDeviceState, // SetDeviceState NULL, // Connect NULL, // Disconnect NULL, // Clock NULL // Allocator }; // // Format of an Antenna Connection // // Used when connecting the antenna input pin to the Network Provider. // const KS_DATARANGE_BDA_ANTENNA AntennaPinRange = { // KSDATARANGE { sizeof( KS_DATARANGE_BDA_ANTENNA), // FormatSize 0, // Flags - (N/A) 0, // SampleSize - (N/A) 0, // Reserved { STATIC_KSDATAFORMAT_TYPE_BDA_ANTENNA }, // MajorFormat { STATIC_KSDATAFORMAT_SUBTYPE_NONE }, // SubFormat { STATIC_KSDATAFORMAT_SPECIFIER_NONE } // Specifier } }; // Format Ranges of Antenna Input Pin. // static PKSDATAFORMAT AntennaPinRanges[] = { (PKSDATAFORMAT) &AntennaPinRange, // Add more formats here if additional antenna signal formats are supported. // }; //=========================================================================== // // Tranport Pin Definitions // //=========================================================================== // // Transport Pin Automation Table // // Lists all Property, Method, and Event Set tables for the transport pin // DEFINE_KSAUTOMATION_TABLE(TransportAutomation) { DEFINE_KSAUTOMATION_PROPERTIES_NULL, DEFINE_KSAUTOMATION_METHODS_NULL, DEFINE_KSAUTOMATION_EVENTS_NULL }; // // Dispatch Table for the ATSC transport Output pin. // // Since data on the transport is actually delivered to the // PCI bridge in hardware, this pin does not need to process // data. // // Connection of, and state transitions on, this pin help the // driver to determine when to allocate hardware resources for // the tuner and demodulator. // const KSPIN_DISPATCH TransportPinDispatch = { CTransportPin::PinCreate, // Create NULL, // Close NULL, // Process NULL, // Reset NULL, // SetDataFormat PinSetDeviceState, // SetDeviceState NULL, // Connect NULL, // Disconnect NULL, // Clock NULL // Allocator }; // // Format of an ATSC Transport Stream Connection // // Used to connect the Transport Stream output pin to the // Capture Filter. // #ifdef NEW_BDA_TRANSPORT_FORMAT const KS_DATARANGE_BDA_TRANSPORT TransportPinRange = { // KSDATARANGE { sizeof( KS_DATARANGE_BDA_TRANSPORT), // FormatSize 0, // Flags - (N/A) 0, // SampleSize - (N/A) 0, // Reserved { STATIC_KSDATAFORMAT_TYPE_STREAM }, // MajorFormat { STATIC_KSDATAFORMAT_TYPE_MPEG2_TRANSPORT }, // SubFormat { STATIC_KSDATAFORMAT_SPECIFIER_BDA_TRANSPORT } // Specifier }, // BDA_TRANSPORT_INFO { 188, // ulcbPhyiscalPacket 312 * 188, // ulcbPhyiscalFrame 0, // ulcbPhyiscalFrameAlignment (no requirement) 0 // AvgTimePerFrame (not known) } }; #else const KS_DATARANGE_ANALOGVIDEO TransportPinRange = { // KS_DATARANGE_ANALOGVIDEO { sizeof (KS_DATARANGE_ANALOGVIDEO), // FormatSize 0, // Flags sizeof (KS_TVTUNER_CHANGE_INFO), // SampleSize 0, // Reserved STATIC_KSDATAFORMAT_TYPE_ANALOGVIDEO, // aka MEDIATYPE_AnalogVideo STATIC_KSDATAFORMAT_SUBTYPE_NONE, STATIC_KSDATAFORMAT_SPECIFIER_ANALOGVIDEO, // aka FORMAT_AnalogVideo }, // KS_ANALOGVIDEOINFO { 0, 0, 720, 480, // rcSource; 0, 0, 720, 480, // rcTarget; 720, // dwActiveWidth; 480, // dwActiveHeight; 0, // REFERENCE_TIME AvgTimePerFrame; } }; #endif // NEW_BDA_TRANSPORT_FORMAT // Format Ranges of Transport Output Pin. // static PKSDATAFORMAT TransportPinRanges[] = { (PKSDATAFORMAT) &TransportPinRange, // Add more formats here if additional transport formats are supported. // }; // Medium GUIDs for the Transport Output Pin. // // This insures contection to the correct Capture Filter pin. // const KSPIN_MEDIUM TransportPinMedium = { GUID_7146XPIN, 0, 0 }; //=========================================================================== // // Filter definitions // //=========================================================================== // // Template Node Descriptors // // This array describes all Node Types available in the template // topology of the filter. // const KSNODE_DESCRIPTOR NodeDescriptors[] = { { &RFTunerNodeAutomation, // PKSAUTOMATION_TABLE AutomationTable; &KSNODE_BDA_RF_TUNER, // Type NULL // Name }, { &VSB8DemodulatorNodeAutomation, // PKSAUTOMATION_TABLE AutomationTable; &KSNODE_BDA_8VSB_DEMODULATOR, // Type NULL // Name } }; // // Initial Pin Descriptors // // This data structure defines the pins that will appear on the filer // when it is first created. // const KSPIN_DESCRIPTOR_EX InitialPinDescriptors[] = { // Antenna Pin // { &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 } }; // // Template Pin Descriptors // // This data structure defines the pin types available in the filters // template topology. These structures will be used to create a // KDPinFactory for a pin type when BdaCreatePin is called. // const KSPIN_DESCRIPTOR_EX TemplatePinDescriptors[] = { // Antenna Pin // { &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 }, // Tranport Pin // { &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 Device Topology Property Set // // Defines the dispatch routines for the filter level // topology properties // DEFINE_KSPROPERTY_TABLE(FilterTopologyProperties) { DEFINE_KSPROPERTY_ITEM_BDA_NODE_TYPES( BdaPropertyNodeTypes, NULL ), DEFINE_KSPROPERTY_ITEM_BDA_PIN_TYPES( BdaPropertyPinTypes, NULL ), DEFINE_KSPROPERTY_ITEM_BDA_TEMPLATE_CONNECTIONS( BdaPropertyTemplateConnections, NULL ), DEFINE_KSPROPERTY_ITEM_BDA_CONTROLLING_PIN_ID( BdaPropertyGetControllingPinId, NULL ) }; // // Filter Level Property Sets supported // // This table defines all property sets supported by the // tuner filter exposed by this driver. // DEFINE_KSPROPERTY_SET_TABLE(FilterPropertySets) { DEFINE_KSPROPERTY_SET ( &KSPROPSETID_BdaTopology, // Set SIZEOF_ARRAY(FilterTopologyProperties), // PropertiesCount FilterTopologyProperties, // PropertyItems 0, // FastIoCount NULL // FastIoTable ), //$REVIEW // // This property set should be moved to the 8VSB node. It works // here for a filter that only has one 8VSB demodulator. It works // for now because you only have one 8VSB demodulator on the board. // // - TCP // DEFINE_KSPROPERTY_SET ( &PROPSETID_VSB, // Set SIZEOF_ARRAY(VSBProperties), // PropertiesCount VSBProperties, // PropertyItems 0, // FastIoCount NULL // FastIoTable ), }; // // BDA Change Sync Method Set // // Defines the dispatch routines for the filter level // Change Sync methods // DEFINE_KSMETHOD_TABLE(BdaChangeSyncMethods) { DEFINE_KSMETHOD_ITEM_BDA_START_CHANGES( CFilter::StartChanges, NULL ), DEFINE_KSMETHOD_ITEM_BDA_CHECK_CHANGES( CFilter::CheckChanges, NULL ), DEFINE_KSMETHOD_ITEM_BDA_COMMIT_CHANGES( CFilter::CommitChanges, NULL ), DEFINE_KSMETHOD_ITEM_BDA_GET_CHANGE_STATE( CFilter::GetChangeState, NULL ) }; // // BDA Device Configuration Method Set // // Defines the dispatch routines for the filter level // Topology Configuration methods // DEFINE_KSMETHOD_TABLE(BdaDeviceConfigurationMethods) { DEFINE_KSMETHOD_ITEM_BDA_CREATE_PIN_FACTORY( BdaMethodCreatePin, NULL ), DEFINE_KSMETHOD_ITEM_BDA_DELETE_PIN_FACTORY( BdaMethodDeletePin, NULL ), DEFINE_KSMETHOD_ITEM_BDA_CREATE_TOPOLOGY( CFilter::CreateTopology, NULL ) }; // // Filter Level Method Sets supported // // This table defines all method sets supported by the // tuner filter exposed by this driver. // DEFINE_KSMETHOD_SET_TABLE(FilterMethodSets) { DEFINE_KSMETHOD_SET ( &KSMETHODSETID_BdaChangeSync, // Set SIZEOF_ARRAY(BdaChangeSyncMethods), // PropertiesCount BdaChangeSyncMethods, // PropertyItems 0, // FastIoCount NULL // FastIoTable ), DEFINE_KSMETHOD_SET ( &KSMETHODSETID_BdaDeviceConfiguration, // Set SIZEOF_ARRAY(BdaDeviceConfigurationMethods),// PropertiesCount BdaDeviceConfigurationMethods, // PropertyItems 0, // FastIoCount NULL // FastIoTable ) }; // // Filter Automation Table // // Lists all Property, Method, and Event Set tables for the filter // DEFINE_KSAUTOMATION_TABLE(FilterAutomation) { DEFINE_KSAUTOMATION_PROPERTIES(FilterPropertySets), DEFINE_KSAUTOMATION_METHODS(FilterMethodSets), DEFINE_KSAUTOMATION_EVENTS_NULL }; // // Filter Dispatch Table // // Lists the dispatch routines for major events at the filter // level. // const KSFILTER_DISPATCH FilterDispatch = { CFilter::Create, // Create CFilter::FilterClose, // Close NULL, // Process NULL // Reset }; // // Filter Factory Descriptor for the tuner filter // // This structure brings together all of the structures that define // the tuner filter as it appears when it is first instanciated. // Note that not all of the template pin and node types may be exposed as // pin and node factories when the filter is first instanciated. // DEFINE_KSFILTER_DESCRIPTOR(InitialTunerFilterDescriptor) { &FilterDispatch, // Dispatch &FilterAutomation, // AutomationTable KSFILTER_DESCRIPTOR_VERSION, // Version 0, // Flags &KSNAME_Filter, // ReferenceGuid DEFINE_KSFILTER_PIN_DESCRIPTORS(InitialPinDescriptors), // PinDescriptorsCount // PinDescriptorSize // PinDescriptors DEFINE_KSFILTER_CATEGORY(KSCATEGORY_BDA_RECEIVER_COMPONENT),// CategoriesCount // Categories DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL, // NodeDescriptorsCount // NodeDescriptorSize // NodeDescriptors DEFINE_KSFILTER_DEFAULT_CONNECTIONS, // ConnectionsCount // Connections NULL // ComponentId }; //=========================================================================== // // Filter Template Topology definitions // //=========================================================================== // // BDA Template Topology Connections // // Lists the Connections that are possible between pin types and // node types. This, together with the Template Filter Descriptor, and // the Pin Pairings, describe how topologies can be created in the filter. // const KSTOPOLOGY_CONNECTION TemplateTunerConnections[] = { { -1, 0, 0, 0}, { 0, 1, 1, 0}, { 1, 1, -1, 1}, }; // // Template Joints between the Antenna and Transport Pin Types. // // Lists the template joints between the Antenna Input Pin Type and // the Transport Output Pin Type. // // In this case the RF Node is considered to belong to the antennea input // pin and the 8VSB Demodulator Node is considered to belong to the // tranport stream output pin. // const ULONG AntennaTransportJoints[] = { 1 }; // // Template Pin Parings. // // These are indexes into the template connections structure that // are used to determine which nodes get duplicated when more than // one output pin type is connected to a single input pin type or when // more that one input pin type is connected to a single output pin // type. // const BDA_PIN_PAIRING TemplateTunerPinPairings[] = { // Antenna to Transport Topology Joints // { 0, // ulInputPin 1, // ulOutputPin 1, // ulcMaxInputsPerOutput 1, // ulcMinInputsPerOutput 1, // ulcMaxOutputsPerInput 1, // ulcMinOutputsPerInput SIZEOF_ARRAY(AntennaTransportJoints), // ulcTopologyJoints AntennaTransportJoints // pTopologyJoints } }; // // Filter Factory Descriptor for the tuner filter template topology // // This structure brings together all of the structures that define // the topologies that the tuner filter can assume as a result of // pin factory and topology creation methods. // Note that not all of the template pin and node types may be exposed as // pin and node factories when the filter is first instanciated. // DEFINE_KSFILTER_DESCRIPTOR(TemplateTunerFilterDescriptor) { &FilterDispatch, // Dispatch &FilterAutomation, // AutomationTable KSFILTER_DESCRIPTOR_VERSION, // Version 0, // Flags &KSNAME_Filter, // ReferenceGuid DEFINE_KSFILTER_PIN_DESCRIPTORS(TemplatePinDescriptors),// PinDescriptorsCount // PinDescriptorSize // PinDescriptors DEFINE_KSFILTER_CATEGORY(KSCATEGORY_BDA_RECEIVER_COMPONENT),// CategoriesCount // Categories DEFINE_KSFILTER_NODE_DESCRIPTORS(NodeDescriptors), // NodeDescriptorsCount // NodeDescriptorSize // NodeDescriptors DEFINE_KSFILTER_CONNECTIONS(TemplateTunerConnections), // ConnectionsCount // Connections NULL // ComponentId }; // // BDA Template Topology Descriptor for the filter. // // This structure define the pin and node types that may be created // on the filter. // const BDA_FILTER_TEMPLATE TunerBdaFilterTemplate = { &TemplateTunerFilterDescriptor, SIZEOF_ARRAY(TemplateTunerPinPairings), TemplateTunerPinPairings }; //=========================================================================== // // Device definitions // //=========================================================================== // // Array containing descriptors for all of the filter factories // that are available on the device. // // Note! This only used when dynamic topology is not desired. // (i.e. filters and pins are fixed, usually there is also no // network provider in this case) // DEFINE_KSFILTER_DESCRIPTOR_TABLE(FilterDescriptors) { &TemplateTunerFilterDescriptor }; // // Device Dispatch Table // // Lists the dispatch routines for the major events in the life // of the underlying device. // extern const KSDEVICE_DISPATCH DeviceDispatch = { CDevice::Create, // Add CDevice::Start, // Start NULL, // PostStart NULL, // QueryStop NULL, // CancelStop NULL, // Stop NULL, // QueryRemove NULL, // CancelRemove NULL, // Remove NULL, // QueryCapabilities NULL, // SurpriseRemoval NULL, // QueryPower NULL // SetPower }; // // Device Descriptor // // Brings together all data structures that define the device and // the intial filter factories that can be created on it. // Note that this structure does not include the template topology // structures as they are specific to BDA. // extern const KSDEVICE_DESCRIPTOR DeviceDescriptor = { &DeviceDispatch, // Dispatch #ifdef DYNAMIC_TOPOLOGY 0, // SIZEOF_ARRAY( FilterDescriptors), // FilterDescriptorsCount NULL, // FilterDescriptors // FilterDescriptors #else SIZEOF_ARRAY( FilterDescriptors), // FilterDescriptorsCount FilterDescriptors // FilterDescriptors #endif // DYNAMIC_TOPOLOGY };