⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 device.h

📁 完整的基于Conxant平台的USB电视棒的WIN驱动程序。
💻 H
📖 第 1 页 / 共 2 页
字号:
    // 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 + -