📄 device.h
字号:
// Digital functions
void resetDigitalFrequency(BOOLEAN bState) { _reset_digital_frequency = bState;}
BOOLEAN getDigitalFrequencyState() { return _reset_digital_frequency; }
void setBdaTunerPowerUpState(BOOLEAN bState) { _bda_tuner_power_up_pending = bState;}
BOOLEAN getBdaTunerPowerUpState() { return _bda_tuner_power_up_pending; }
NTSTATUS setI2CSpeedMode(BYTE i2c_speed);
BOOL createAnalogTunerProperties(DWORD _tuner_type, I2cIF *_p_i2c);
NTSTATUS setUSBConfiguration(DWORD pin_input_type);
NTSTATUS setVideoAlternateSetting(BOOLEAN bISO);
NTSTATUS setAudioAlternateSetting(BOOLEAN bISO);
NTSTATUS setTS1AlternateSetting(BOOLEAN bISO);
NTSTATUS setTS2AlternateSetting(BOOLEAN bISO);
NTSTATUS setVANCAlternateSetting(BOOLEAN bISO);
NTSTATUS setHANCAlternateSetting(BOOLEAN bISO);
NTSTATUS initialize_CIR();
USHORT getRevID();
BYTE getBoardCapability();
BOOLEAN Is_Analog_TS_Supported();
BYTE getMaxConfigurationNum();
BYTE getUSBSpeed() { return _usb_speed;}
BYTE getUSBType() {return _usb_type;}
AV_MODE getPowerMode() {return _power_mode;}
private:
VOID stopStream(DWORD stream_to_stop);
VOID startStream(DWORD stream_to_start);
NTSTATUS init(PCM_RESOURCE_LIST p_resource_list);
VOID unInit();
NTSTATUS initObjects();
NTSTATUS createFilterFactories();
NTSTATUS RegisterTuner(PWCHAR p_string);
static VOID static_initializationThread(Device* p_device);
NTSTATUS startInitializationThread();
VOID powerDown();
VOID powerUp();
VOID GetBoardAndChipType();
NTSTATUS EnableEepromI2C();
// BOOL createTunerDemodObj();
STDMETHODIMP_(NTSTATUS) createBDAFilterFactories(PKSDEVICE p_ks_device);
NTSTATUS RegisterPnpInterface();
NTSTATUS EnablePnpInterface(BOOLEAN bEnable);
BOOLEAN IsConfigToBeChanged(DWORD pin_input_type);
VOID PreCrossbarChange(DWORD pin_input_type);
VOID PostCrossbarChange();
BOOLEAN IsPinStreaming(PIN_TYPES pin_type);
VOID powerUpModule(AV_MODE power_mode);
private:
PKSDEVICE _p_ks_dev;
PcbConfig *_p_current_config;
DirectIF *_p_DIF;
PolarisGPIOPin *_p_GPIOPin;
CUsbInterface *_p_usb;
PolarisUsbInterface *_p_usb_firmware;
DWORD _running_streams;
DWORD _disable_VBI;
DWORD _disable_audio_out_pin;
DWORD _enable_hanc_audio;
DWORD _vbi_pin_index;
IVideoDecoder *_p_decoder;
Merlin *_p_audio;
CxCopyProtectProp *_p_copy_protect;
CrossbarProperties *_p_crossbar_properties;
ITunerProperties *_p_tuner_properties;
DriverI2C *_p_i2c_0;
DriverI2C *_p_i2c_1;
DriverI2C *_p_i2c_2;
ExtI2CInterface *_p_DigitalI2C;
ExtI2CInterface *_p_AnalogI2C;
Colibri *_p_colibri;
Flatrion *_p_flatrion;
IDataTransfer *_p_video_transfer;
IDataTransfer *_p_audio_transfer;
IDataTransfer *_p_vbi_transfer;
IDataTransfer *_p_sliced_cc_transfer;
IDataTransfer *_p_ts1_transfer;
IDataTransfer *_p_ts2_transfer;
////////////////////////////////////////////////////////////////////////////////
IR_Control *_p_ir_control;
BOOL _inited;
DEVICE_POWER_STATE _power_state;
KMUTEX _stream_control_mutex;
PKSFILTERFACTORY _p_capture_filter_factory;
DWORD _medium_instance_id;
PVOID _initialization_thread_object;
SyncRegIo *_p_sync_registers;
BasePin *_p_pins_with_resources[PIN_TYPE_MAX_NUM];
// I2C interfaces for BDA tuner, Demodulator and Crossbar
UsbI2cInterface *_p_usb_i2c_interface;
BYTE _usb_speed;
DWORD _current_config_num; // store current config_num, used in bus-power
////////////////////////////////////////////////////////////
DWORD _sample_rate;
BOOL _fwload_thread_active;
DWORD _bda_demod_tuner_type;
GRAPH_MODE _current_graph_mode;
BOOL _device_closing;
KMUTEX _tuner_mutex;
TUNER_MODE _tuner_mode; // TUNER_MODE_ANALOG or TUNER_MODE_DIGITAL
IBdaTuner *_p_bda_tuner;
PVOID _p_filter_template;
BOOL _bSurpriseRemoval;
KEVENT _hw_init_event;
ULONG _tuner_instance;
// BDA Tuner
BOOLEAN _reset_digital_frequency;
BOOLEAN _bda_tuner_power_up_pending;
BYTE _i2c_speed; //1M, 400K, 100K
BOOLEAN _enable_bda;
BOOLEAN _enable_soft_encoder;
UNICODE_STRING _dev_pnp_interface_name;
UCHAR _current_video_alt;
UCHAR _current_audio_alt;
UCHAR _current_VANC_alt;
UCHAR _current_HANC_alt;
UCHAR _current_TS1_alt;
UCHAR _current_TS2_alt;
USHORT _polaris_rev_id;
USHORT _config_changed;
BOOLEAN _is_TS_configuration;
BYTE _usb_type; //BusPowered or SelfPowered
AV_MODE _power_mode;
};
extern const KSDEVICE_DISPATCH CaptureDeviceDispatch;
inline Merlin* Device::getAudDec()
{
return _p_audio;
}
inline IVideoDecoder* Device::getVidDec()
{
return _p_decoder;
}
inline CrossbarProperties* Device::getCrossbarProperties()
{
return _p_crossbar_properties;
}
inline SyncRegIo* Device::getSyncRegIo()
{
return _p_sync_registers;
}
inline IR_Control* Device::getIR_Control()
{
return _p_ir_control;
}
inline PolarisUsbInterface* Device::getPolarisUsbInterface()
{
return _p_usb_firmware;
}
inline CUsbInterface* Device::getUsb()
{
return _p_usb;
}
inline PDEVICE_OBJECT Device::getPdo()
{
return _p_ks_dev->PhysicalDeviceObject;
}
inline DWORD Device::getMediumId()
{
return _medium_instance_id;
}
inline VOID Device::lockDeviceState()
{
KeWaitForMutexObject(
&_stream_control_mutex,
Executive,
KernelMode,
FALSE,
NULL);
}
inline VOID Device::unlockDeviceState()
{
KeReleaseMutex(
&_stream_control_mutex,
FALSE);
}
inline BOOLEAN Device::isRunning()
{
return (_running_streams != 0);
}
inline DWORD Device::getVbiPinIndex()
{
return _vbi_pin_index;
}
inline PcbConfig* Device::getPcbConfig()
{
return _p_current_config;
}
inline VOID Device::setSamplerate(DWORD rate)
{
_sample_rate = rate;
}
inline DWORD Device::getSamplerate()
{
return _sample_rate;
}
inline DWORD Device::getCurrentConfig()
{
return _current_config_num;
}
inline VOID Device::setCurrentConfig(DWORD config_num)
{
_current_config_num = config_num;
}
inline VOID Device::acquireTunerMutex()
{
KeWaitForMutexObject(
&_tuner_mutex,
Executive,
KernelMode,
FALSE,
NULL);
}
inline VOID Device::releaseTunerMutex()
{
KeReleaseMutex(
&_tuner_mutex,
FALSE);
}
inline ITunerProperties* Device::getTunerProperties()
{
return _p_tuner_properties;
}
inline Colibri* Device::getColobri()
{
return _p_colibri;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -