📄 bdatuner.h
字号:
//
STDMETHODIMP_(NTSTATUS)
InitializeHW(
);
STDMETHODIMP_(NTSTATUS)
GetStatus(
PBDATUNER_DEVICE_STATUS pDeviceStatus
);
STDMETHODIMP_(NTSTATUS)
GetImplementationGUID(
GUID * pguidImplementation
)
{
if (pguidImplementation)
{
*pguidImplementation = m_guidImplemenation;
return STATUS_SUCCESS;
}
else
{
return STATUS_INVALID_PARAMETER;
}
}
STDMETHODIMP_(NTSTATUS)
GetDeviceInstance(
ULONG * pulDeviceInstance
)
{
if (pulDeviceInstance)
{
*pulDeviceInstance = m_ulDeviceInstance;
return STATUS_SUCCESS;
}
else
{
return STATUS_INVALID_PARAMETER;
}
}
NTSTATUS
AcquireResources(
PBDATUNER_DEVICE_RESOURCE pNewResource,
PULONG pulAcquiredResourceID
);
NTSTATUS
UpdateResources(
PBDATUNER_DEVICE_RESOURCE pNewResource,
ULONG ulResourceID
);
NTSTATUS
ReleaseResources(
ULONG ulResourceID
);
private:
PKSDEVICE m_pKSDevice;
GUID m_guidImplemenation;
ULONG m_ulDeviceInstance;
BDATUNER_DEVICE_RESOURCE m_CurResource;
ULONG m_ulCurResourceID;
ULONG m_ulcResourceUsers;
};
//
// Define the Input-pin class.
//
class CAntennaPin {
public:
//
// Define the AVStream Pin Dispatch Functions
// Network provider and AVStream use these functions
// to create or remove a pin instance or to change the pin's
// state after the minidriver receives a connection state
// property 'set' IOCTL.
//
static
STDMETHODIMP_(NTSTATUS)
PinCreate(
IN OUT PKSPIN Pin,
IN PIRP Irp
);
static
STDMETHODIMP_(NTSTATUS)
PinClose(
IN OUT PKSPIN Pin,
IN PIRP Irp
);
static
STDMETHODIMP_(NTSTATUS)
PinSetDeviceState(
IN PKSPIN Pin,
IN KSSTATE ToState,
IN KSSTATE FromState
);
//
// Define a data intersection handler function for the
// pin (KSPIN_DESCRIPTOR_EX structure).
// Network provider and AVStream use this function
// to connect the input pin with an upstream filter.
//
static
STDMETHODIMP_(NTSTATUS)
IntersectDataFormat(
IN PVOID pContext,
IN PIRP pIrp,
IN PKSP_PIN Pin,
IN PKSDATARANGE DataRange,
IN PKSDATARANGE MatchingDataRange,
IN ULONG DataBufferSize,
OUT PVOID Data OPTIONAL,
OUT PULONG DataSize
);
//
// Network provider and AVStream use these functions
// to set and get properties of nodes that are controlled
// by the input pin.
//
static
STDMETHODIMP_(NTSTATUS)
GetCenterFrequency(
IN PIRP Irp,
IN PKSPROPERTY pKSProperty,
IN PULONG pulProperty
);
static
STDMETHODIMP_(NTSTATUS)
PutCenterFrequency(
IN PIRP Irp,
IN PKSPROPERTY pKSProperty,
IN PULONG pulProperty
);
static
STDMETHODIMP_(NTSTATUS)
GetSignalStatus(
IN PIRP Irp,
IN PKSPROPERTY pKSProperty,
IN PULONG pulProperty
);
//
// Utility functions for the pin
//
STDMETHODIMP_(class CFilter *)
GetFilter() { return m_pFilter;};
STDMETHODIMP_(void)
SetFilter(class CFilter * pFilter) { m_pFilter = pFilter;};
private:
class CFilter* m_pFilter;
ULONG ulReserved;
KSSTATE m_KsState;
// Node Properties
//
BOOLEAN m_fResourceChanged;
ULONG m_ulCurrentFrequency;
ULONG m_ulPendingFrequency;
};
//
// Define the Output-pin class.
//
class CTransportPin{
public:
//
// Define the AVStream Pin Dispatch Functions
// Network provider and AVStream use these functions
// to create or remove a pin instance or to change the pin's
// state after the minidriver receives a connection state
// property 'set' IOCTL.
//
static
STDMETHODIMP_(NTSTATUS)
PinCreate(
IN OUT PKSPIN Pin,
IN PIRP Irp
);
static
STDMETHODIMP_(NTSTATUS)
PinClose(
IN OUT PKSPIN Pin,
IN PIRP Irp
);
//
// Define a data intersection handler function for the
// pin (KSPIN_DESCRIPTOR_EX structure).
// Network provider and AVStream use this function
// to connect the output pin with a downstream filter.
//
static
STDMETHODIMP_(NTSTATUS)
IntersectDataFormat(
IN PVOID pContext,
IN PIRP pIrp,
IN PKSP_PIN Pin,
IN PKSDATARANGE DataRange,
IN PKSDATARANGE MatchingDataRange,
IN ULONG DataBufferSize,
OUT PVOID Data OPTIONAL,
OUT PULONG DataSize
);
//
// BDA Signal Properties
//
static
STDMETHODIMP_(NTSTATUS)
GetSignalStatus(
IN PIRP Irp,
IN PKSPROPERTY pKSProperty,
IN PULONG pulProperty
);
static
STDMETHODIMP_(NTSTATUS)
PutAutoDemodProperty(
IN PIRP Irp,
IN PKSPROPERTY pKSProperty,
IN PULONG pulProperty
);
#if !ATSC_RECEIVER
static
STDMETHODIMP_(NTSTATUS)
GetDigitalDemodProperty(
IN PIRP Irp,
IN PKSPROPERTY pKSProperty,
IN PULONG pulProperty
);
static
STDMETHODIMP_(NTSTATUS)
PutDigitalDemodProperty(
IN PIRP Irp,
IN PKSPROPERTY pKSProperty,
IN PULONG pulProperty
);
#endif // !ATSC_RECEIVER
static
STDMETHODIMP_(NTSTATUS)
GetExtensionProperties(
IN PIRP Irp,
IN PKSPROPERTY pKSProperty,
IN PULONG pulProperty
);
static
STDMETHODIMP_(NTSTATUS)
PutExtensionProperties(
IN PIRP Irp,
IN PKSPROPERTY pKSProperty,
IN PULONG pulProperty
);
STDMETHODIMP_(class CFilter *)
GetFilter() { return m_pFilter;};
STDMETHODIMP_(void)
SetFilter(class CFilter * pFilter) { m_pFilter = pFilter;};
private:
class CFilter* m_pFilter;
ULONG ulReserved;
KSSTATE m_KsState;
// Node Properties
//
BOOLEAN m_fResourceChanged;
ULONG m_ulCurrentProperty1;
ULONG m_ulPendingProperty1;
ULONG m_ulCurrentProperty2;
ULONG m_ulCurrentProperty3;
ULONG m_ulPendingProperty3;
};
//
// Topology Constants
//
typedef enum {
PIN_TYPE_ANTENNA = 0,
PIN_TYPE_TRANSPORT
} FilterPinTypes;
typedef enum {
INITIAL_ANNTENNA_PIN_ID = 0
} InitialPinIDs;
//
// Data declarations
//
extern const BDA_FILTER_TEMPLATE BdaFilterTemplate;
extern const KSFILTER_DESCRIPTOR InitialFilterDescriptor;
extern const KSFILTER_DESCRIPTOR TemplateFilterDescriptor;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -