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

📄 pcbconfig.h

📁 完整的基于Conxant平台的USB电视棒的WIN驱动程序。
💻 H
字号:
/*+++ *******************************************************************\ 
* 
*  Copyright and Disclaimer: 
*  
*     --------------------------------------------------------------- 
*     This software is provided "AS IS" without warranty of any kind, 
*     either expressed or implied, including but not limited to the 
*     implied warranties of noninfringement, merchantability and/or 
*     fitness for a particular purpose.
*     --------------------------------------------------------------- 
*   
*     Copyright (c) 2008 Conexant Systems, Inc. 
*     All rights reserved. 
*
\******************************************************************* ---*/ 

#ifndef _PCB_CONFIG_H_
#define _PCB_CONFIG_H_

extern "C" 
{
    #include <wdm.h>
}

#include <windef.h>

class PolarisUsbInterface;
class CUsbInterface;

#define SPEED_MASK      0x1
    typedef enum{
        FULL_SPEED      = 0x0,  //0: full speed
        HIGH_SPEED      = 0x1   //1: high speed
    }USB_SPEED;

#define TS_MASK         0x6
    typedef enum{
        NO_TS_PORT      = 0x0,  //2'b00: Neither port used. PCB not a Hybrid, only offers Analog TV or Video
        TS1_PORT        = 0x4,  //2'b10: TS1 Input (Hybrid mode : Digital or External Analog/Compressed source)
        TS1_TS2_PORT    = 0x6,  //2'b11: TS1 & TS2 Inputs (Dual inputs from Digital and/or External Analog/Compressed sources)
        TS1_EXT_CLOCK   = 0x6,  //2'b11: TS1 & TS2 as selector to external clock
        TS1VIP_TS2_PORT = 0x2   //2'b01: TS1 used as 656/VIP Output, TS2 Input (from Compressor)
    }TS_PORT;

#define EAVP_MASK       0x8
    typedef enum{
        NO_EXTERNAL_AV  = 0x0,  //0: No External A/V inputs (no need for Flatiron), Analog Tuner must be present
        EXTERNAL_AV     = 0x8   //1: External A/V inputs present (requires Flatiron)
    }EAV_PRESENT;

#define ATM_MASK        0x30
    typedef enum{
        DIF_TUNER       = 0x30, //2'b11: IF Tuner (requires use of DIF)
        BASEBAND_SOUND  = 0x20, //2'b10: Baseband Composite & Sound-IF Signals present
        NO_TUNER        = 0x10   //2'b0x: No Analog Tuner present
    }AT_MODE;

#define PWR_SEL_MASK    0x40
    typedef enum{
        SELF_POWER      = 0x0,  //0: self power
        BUS_POWER       = 0x40  //1: bus power
    }POWE_TYPE;

    typedef enum{
        USB_SELF_POWER = 0,
        USB_BUS_POWER
    }USB_POWE_TYPE;

#define BO_0_MASK       0x80
    typedef enum{
        AVDEC_DISABLE   = 0x0,   //0: A/V Decoder Disabled
        AVDEC_ENABLE    = 0x80   //1: A/V Decoder Enabled
    }AVDEC_STATUS;

#define BO_1_MASK       0x100
    typedef enum{
        HAMMERHEAD_ONLY = 0x0,  //0:Hammerhead Only
        HAMMERHEAD_SC   = 0x100 //1:Hammerhead and SC
    }HAMMERHEAD__STATUS;

#define BUSPOWER_MASK   0xC4  //for Polaris spec 0.8
#define SELFPOWER_MASK  0x86

////////////////////////////////////////
#define NOT_DECIDE_YET  0xFE
#define NOT_SUPPORTED   0xFF
///for mod field use////////////////////
#define MOD_DIGITAL     0x1
#define MOD_ANALOG      0x2
#define MOD_DIF         0x4
#define MOD_EXTERNAL    0x8
#define CAP_ALL_MOD     0x0f

////////////////////////////////////////
//source define
#define SOURCE_DIGITAL          0x1
#define SOURCE_ANALOG           0x2
#define SOURCE_DIF              0x4
#define SOURCE_EXTERNAL         0x8
#define SOURCE_TS_BDA			0x10
#define SOURCE_TS_ENCODE		0x20
#define SOURCE_TS_EXTERNAL   	0x40

/////////////////////////////////////////////////////////////////////////////
//interface information define
typedef struct _INTERFACE_INFO
{
    BYTE interrupt_index;
    BYTE ts1_index;
    BYTE ts2_index;
    BYTE audio_index;
    BYTE video_index;
    BYTE vanc_index; // VBI
    BYTE hanc_index; //Sliced CC
    BYTE ir_index;
}INTERFACE_INFO,*PINTERFACE_INFO;

typedef enum{
    INDEX_INTERRUPT = 0x0,
    INDEX_TS1,
    INDEX_TS2,
    INDEX_AUDIO,
    INDEX_VIDEO,
    INDEX_VANC,
    INDEX_HANC,
    INDEX_IR,
}INDEX_INTERFACE_INFO;

/////////////////////////////////////////////////////////////////////////////
//configuration information define
typedef struct _CONFIG_INFO
{
    BYTE config_index;
    INTERFACE_INFO interface_info;
}CONFIG_INFO,*PCONFIG_INFO;

typedef struct _PCB_CONFIG
{
    BYTE index;
    BYTE type;   //bus power or self power, self power--0, bus_power--1
    BYTE speed;   //usb speed, 2.0--1, 1.1--0
    BYTE mode;   //digital , anlog, dif or external A/V
    DWORD ts1_source; //three source -- BDA,External,encode
    DWORD ts2_source;
    DWORD analog_source;
    BYTE digital_index; //bus-power used
    BYTE analog_index;   //bus-power used
    BYTE dif_index;      //bus-power used
    BYTE external_index;  //bus-power used
    BYTE config_num; //current config num, 0,1,2, for self-power, always 0
    CONFIG_INFO hs_config_info[3];
    CONFIG_INFO fs_config_info[3];
}PCB_CONFIG,*PPCB_CONFIG;

typedef enum{
    INDEX_SELFPOWER_DIGITAL_ONLY = 0x0,
    INDEX_SELFPOWER_DUAL_DIGITAL,
    INDEX_SELFPOWER_ANALOG_ONLY,
    INDEX_SELFPOWER_DUAL,
    INDEX_SELFPOWER_TRIPLE,
    INDEX_SELFPOWER_COMPRESSOR,
    INDEX_BUSPOWER_DIGITAL_ONLY,
    INDEX_BUSPOWER_ANALOG_ONLY,
    INDEX_BUSPOWER_DIF_ONLY,
    INDEX_BUSPOWER_EXTERNAL_ONLY,
    INDEX_BUSPOWER_EXTERNAL_ANALOG,
    INDEX_BUSPOWER_EXTERNAL_DIF,
    INDEX_BUSPOWER_EXTERNAL_DIGITAL,
    INDEX_BUSPOWER_DIGITAL_ANALOG,
    INDEX_BUSPOWER_DIGITAL_DIF,
    INDEX_BUSPOWER_DIGITAL_ANALOG_EXTERNAL,
    INDEX_BUSPOWER_DIGITAL_DIF_EXTERNAL,
}INDEX_PCB_CONFIG;
///////////////////////////////////////////////////////////////////////////////////////////

class PcbConfig
{
public:
    PcbConfig(PDEVICE_OBJECT pdo,CUsbInterface* p_usb,PolarisUsbInterface* p_usb_firmware);
    ~PcbConfig();
    VOID lock();
    VOID unlock();
    NTSTATUS initialize_T0();
    NTSTATUS initialize_A0();
    PPCB_CONFIG getCurrentPcb();
    PCONFIG_INFO getCurrentConfig(BYTE index);
    BOOLEAN Ts1_Enable();
    BOOLEAN Ts2_Enable();
    DWORD Ts1_source();
    DWORD Ts2_source();
    BYTE getPcbMode(); //get source type
    BYTE getPowertype();
    BYTE getUsbSpeed();
    BYTE getIndex();
    BOOLEAN Is_Analog_TS_Supported();    

protected:
  
private:
    PDEVICE_OBJECT  _pdo;
    CUsbInterface*  _p_usb;
    PolarisUsbInterface*    _p_usb_firmware;	
    KMUTEX          _mutex;
    PPCB_CONFIG     _pcurrent_pcb_config;
    BYTE            _current_scenario_idx;    
};
inline PPCB_CONFIG PcbConfig::getCurrentPcb()
{
    return _pcurrent_pcb_config;
}
inline PCONFIG_INFO PcbConfig::getCurrentConfig(BYTE index)
{
    if(_pcurrent_pcb_config->speed) //high speed
    {
        return  &_pcurrent_pcb_config->hs_config_info[index];
    }
    else
    {
        return  &_pcurrent_pcb_config->fs_config_info[index];
    }

}
inline BOOLEAN PcbConfig::Ts1_Enable()
{
    return (_pcurrent_pcb_config->ts1_source != NOT_SUPPORTED);
}
inline BOOLEAN PcbConfig::Ts2_Enable()
{
    return (_pcurrent_pcb_config->ts2_source != NOT_SUPPORTED);
}
inline DWORD PcbConfig::Ts1_source()
{
    return _pcurrent_pcb_config->ts1_source;
}
inline DWORD PcbConfig::Ts2_source()
{
    return _pcurrent_pcb_config->ts2_source;
}
inline BYTE PcbConfig::getPcbMode()
{
    return _pcurrent_pcb_config->mode;
}
inline BYTE PcbConfig::getPowertype()
{
    return _pcurrent_pcb_config->type;
}
inline BYTE PcbConfig::getUsbSpeed()
{
    return _pcurrent_pcb_config->speed;
}
inline BYTE PcbConfig::getIndex()
{
    return _pcurrent_pcb_config->index;
}

#endif




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -