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

📄 pcbconfig.cpp

📁 完整的基于Conxant平台的USB电视棒的WIN驱动程序。
💻 CPP
📖 第 1 页 / 共 5 页
字号:
            {NOT_SUPPORTED,{NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED}}
        },
        //full-speed
        {
            {
                0,   //config index
                {
                    0,                  //interrupt ep index = 2
                    1,                  //ts1 index
                    NOT_SUPPORTED,      //TS2 index
                    NOT_SUPPORTED,      //AUDIO
                    NOT_SUPPORTED,      //VIDEO
                    NOT_SUPPORTED,      //VANC
                    NOT_SUPPORTED,      //HANC
                    NOT_SUPPORTED       //ir_index
                }
            },
            {NOT_SUPPORTED,{NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED}},
            {NOT_SUPPORTED,{NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED}}
        }	
    },
		
    {
        INDEX_BUSPOWER_ANALOG_ONLY,   //index
        USB_BUS_POWER,     // power_type
        0,   //speed , not decide yet
        MOD_ANALOG,        //mode ,analog tv AND DIGITAL path
        NOT_SUPPORTED,     //ts1_source, disable
        NOT_SUPPORTED,     //ts2_source
        SOURCE_ANALOG,     //analog source--analog
        0,   //digital_index 
        0,   //analog index
        0,   //dif_index
        0,   //external_index
        1,   //only one configuration
        {
            {
                0,   //config index
                {
                    0,                  //interrupt ep index
                    NOT_SUPPORTED,      //ts1 index
                    NOT_SUPPORTED,      //TS2 index
                    1,                  //AUDIO
                    2,                  //VIDEO
                    3,                  //VANC
                    4,                  //HANC
                    NOT_SUPPORTED       //ir_index
                }
            },
            {NOT_SUPPORTED,{NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED}},
            {NOT_SUPPORTED,{NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED}}
        },
        //full-speed
        {
            {
                0,   //config index
                {
                    0,                  //interrupt ep index
                    NOT_SUPPORTED,      //ts1 index
                    NOT_SUPPORTED,      //TS2 index
                    1,                  //AUDIO
                    2,                  //VIDEO
                    NOT_SUPPORTED,      //VANC
                    NOT_SUPPORTED,      //HANC
                    NOT_SUPPORTED       //ir_index
                }
            },
            {NOT_SUPPORTED,{NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED}},
            {NOT_SUPPORTED,{NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED}}
        }	
    },

    {
        INDEX_BUSPOWER_DIF_ONLY,   //index
        USB_BUS_POWER,     // power_type
        0,   //speed , not decide yet
        MOD_DIF|MOD_ANALOG|MOD_DIGITAL|MOD_EXTERNAL,   //mode ,analog tv AND DIGITAL path
        SOURCE_TS_BDA,     //ts1_source, disable
        NOT_SUPPORTED,     //ts2_source
        SOURCE_DIF|SOURCE_ANALOG|SOURCE_EXTERNAL,      // analog source, dif
        0,   //digital_index 
        0,   //analog index
        0,   //dif_index
        0,   //external_index
        1,   //only one configuration
        {
            {
                0,   //config index
                {
                    0,              //interrupt ep index
                    1,              //ts1 index
                    NOT_SUPPORTED,  //TS2 index
                    2,              //AUDIO
                    3,              //VIDEO
                    4,              //VANC
                    5,              //HANC
                    NOT_SUPPORTED   //ir_index
                }
            },
            {NOT_SUPPORTED,{NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED}},
            {NOT_SUPPORTED,{NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED}}
        },
        //full speed
        {
            {
                0,   //config index
                {
                    0,              //interrupt ep index
                    1,              //ts1 index
                    NOT_SUPPORTED,  //TS2 index
                    2,              //AUDIO
                    3,              //VIDEO
                    NOT_SUPPORTED,  //VANC
                    NOT_SUPPORTED,  //HANC
                    NOT_SUPPORTED   //ir_index
                }
            },
            {NOT_SUPPORTED,{NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED}},
            {NOT_SUPPORTED,{NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED,NOT_SUPPORTED}}
        }
    },	

};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

PcbConfig::PcbConfig(PDEVICE_OBJECT pdo,
                           CUsbInterface* p_usb, 
                           PolarisUsbInterface* p_usb_firmware):
_p_usb(p_usb),
_p_usb_firmware(p_usb_firmware),
_pdo(pdo)
{
    DbgLogInfo(("PcbConfig::PcbConfig constructor\n"));
    _pcurrent_pcb_config = new PCB_CONFIG;
    KeInitializeMutex( &_mutex, 0 );
}

PcbConfig::~PcbConfig()
{
    delete _pcurrent_pcb_config;
    _pcurrent_pcb_config = NULL;
}


VOID PcbConfig::lock()
{
    KeWaitForSingleObject(&_mutex, Executive, KernelMode, FALSE, NULL );
}


/////////////////////////////////////////////////////////////////////////////////////////
VOID PcbConfig::unlock()
{
    KeReleaseMutex(&_mutex, FALSE);
}

NTSTATUS PcbConfig::initialize_T0()
{
    DbgLogInfo(("PcbConfig::initialize \n"));
    NTSTATUS	ntStatus;
    DWORD config_info=0;
    PCB_CONFIG* p_pcb_info;
    BYTE usb_speed = HIGH_SPEED; //from register,1--HS, 0--FS
    BYTE data[4];
    DWORD reg_val = 0;
    DWORD ts1_source=0;
    DWORD ts2_source=0;
    DWORD analog_source = 0;
//////////////////////////////////////////////////////////////
    RtlZeroMemory(data,4);
    ts1_source = SOURCE_TS_BDA;
    ts2_source = SOURCE_TS_BDA;
    _p_usb_firmware->getPolarisRegister(BOARD_CFG_STAT,data,4);  
    config_info = *((DWORD *)data);
    
    switch( config_info & (TS_MASK|EAVP_MASK|ATM_MASK|PWR_SEL_MASK|BO_0_MASK)) 
    {
    case TS1_PORT|SELF_POWER:
        _current_scenario_idx=INDEX_SELFPOWER_DIGITAL_ONLY;        
        p_pcb_info = &Polaris_Scenario_T0[INDEX_SELFPOWER_DIGITAL_ONLY];
        break;
    case TS1_TS2_PORT|SELF_POWER:
        _current_scenario_idx=INDEX_SELFPOWER_DUAL_DIGITAL;        
        p_pcb_info = &Polaris_Scenario_T0[INDEX_SELFPOWER_DUAL_DIGITAL];
        break;
    case AVDEC_ENABLE|SELF_POWER:
        _current_scenario_idx=INDEX_SELFPOWER_ANALOG_ONLY;        
        p_pcb_info = &Polaris_Scenario_T0[INDEX_SELFPOWER_ANALOG_ONLY];
        break;
    case AVDEC_ENABLE|TS1_PORT|SELF_POWER:
        _current_scenario_idx=INDEX_SELFPOWER_DUAL;        
        p_pcb_info = &Polaris_Scenario_T0[INDEX_SELFPOWER_DUAL];
        break;
    case AVDEC_ENABLE|DIF_TUNER|EXTERNAL_AV|TS1_TS2_PORT|SELF_POWER:
        _current_scenario_idx=INDEX_SELFPOWER_TRIPLE;        
        p_pcb_info = &Polaris_Scenario_T0[INDEX_SELFPOWER_TRIPLE];
        break;
    case AVDEC_ENABLE|TS1VIP_TS2_PORT|SELF_POWER:
        _current_scenario_idx=INDEX_SELFPOWER_COMPRESSOR;        
        p_pcb_info = &Polaris_Scenario_T0[INDEX_SELFPOWER_COMPRESSOR];
        break;
    case AVDEC_ENABLE|BASEBAND_SOUND|BUS_POWER:
        _current_scenario_idx=INDEX_BUSPOWER_ANALOG_ONLY;        
        p_pcb_info = &Polaris_Scenario_T0[INDEX_BUSPOWER_ANALOG_ONLY];
        break;
    case AVDEC_ENABLE|DIF_TUNER|BUS_POWER:
        _current_scenario_idx=INDEX_BUSPOWER_DIF_ONLY;
        p_pcb_info = &Polaris_Scenario_T0[INDEX_BUSPOWER_DIF_ONLY];
        break;
    case AVDEC_ENABLE|EXTERNAL_AV|BUS_POWER:
    case NO_TUNER|AVDEC_ENABLE|EXTERNAL_AV|BUS_POWER:
        _current_scenario_idx=INDEX_BUSPOWER_EXTERNAL_ONLY;
        p_pcb_info = &Polaris_Scenario_T0[INDEX_BUSPOWER_EXTERNAL_ONLY];
        break;
    case AVDEC_ENABLE|BASEBAND_SOUND|EXTERNAL_AV|BUS_POWER:
        _current_scenario_idx=INDEX_BUSPOWER_EXTERNAL_ANALOG;        
        p_pcb_info = &Polaris_Scenario_T0[INDEX_BUSPOWER_EXTERNAL_ANALOG];
        break;
    case AVDEC_ENABLE|DIF_TUNER|EXTERNAL_AV|BUS_POWER:
        _current_scenario_idx=INDEX_BUSPOWER_EXTERNAL_DIF;        
        p_pcb_info = &Polaris_Scenario_T0[INDEX_BUSPOWER_EXTERNAL_DIF];
        break;
    case AVDEC_ENABLE|EXTERNAL_AV|TS1_PORT|BUS_POWER:
    case AVDEC_ENABLE|NO_TUNER|EXTERNAL_AV|TS1_PORT|BUS_POWER:
        _current_scenario_idx=INDEX_BUSPOWER_EXTERNAL_DIGITAL;
        p_pcb_info = &Polaris_Scenario_T0[INDEX_BUSPOWER_EXTERNAL_DIGITAL];
        break;
    case AVDEC_ENABLE|BASEBAND_SOUND|TS1_PORT|BUS_POWER:
        _current_scenario_idx=INDEX_BUSPOWER_DIGITAL_ANALOG;
        p_pcb_info = &Polaris_Scenario_T0[INDEX_BUSPOWER_DIGITAL_ANALOG];
        break;
    case AVDEC_ENABLE|DIF_TUNER|TS1_PORT|BUS_POWER:
        _current_scenario_idx=INDEX_BUSPOWER_DIGITAL_DIF;        
        p_pcb_info = &Polaris_Scenario_T0[INDEX_BUSPOWER_DIGITAL_DIF];
        break;
    case AVDEC_ENABLE|BASEBAND_SOUND|EXTERNAL_AV|TS1_PORT|BUS_POWER:
        _current_scenario_idx=INDEX_BUSPOWER_DIGITAL_ANALOG_EXTERNAL;        
        p_pcb_info = &Polaris_Scenario_T0[INDEX_BUSPOWER_DIGITAL_ANALOG_EXTERNAL];
        break;
    case AVDEC_ENABLE|DIF_TUNER|EXTERNAL_AV|TS1_PORT|BUS_POWER:
    case AVDEC_ENABLE|DIF_TUNER|EXTERNAL_AV|TS1_PORT|BUS_POWER|TS1_EXT_CLOCK://when Buspower, TS2 using as clock select
        _current_scenario_idx=INDEX_BUSPOWER_DIGITAL_DIF_EXTERNAL;        
        p_pcb_info = &Polaris_Scenario_T0[INDEX_BUSPOWER_DIGITAL_DIF_EXTERNAL];
        break;

    default:
        _current_scenario_idx=INDEX_BUSPOWER_DIGITAL_ONLY;        
        p_pcb_info = &Polaris_Scenario_T0[INDEX_BUSPOWER_DIGITAL_ONLY];
        break;
    }

    //TODO, update all member from register(speed, TS1/2 source, analog source)
    p_pcb_info->speed = (BYTE)(config_info&SPEED_MASK);

    DbgLogInfo(("copy senario!!!!!!\n"));
    RtlCopyMemory(_pcurrent_pcb_config, p_pcb_info, sizeof(PCB_CONFIG));
//////////////////////////////////////////////////////////////////	 
    BYTE tmp =0;
     tmp =(_pcurrent_pcb_config->index)+1;
     DbgLogInfo(("scenario %d\n", tmp));
     DbgLogInfo(("type=%x\n",_pcurrent_pcb_config->type));
     DbgLogInfo(("mode=%x\n", _pcurrent_pcb_config->mode));							
     DbgLogInfo(("speed=%x\n",_pcurrent_pcb_config->speed));
     DbgLogInfo(("ts1_source=%x\n", _pcurrent_pcb_config->ts1_source));
     DbgLogInfo(("ts2_source=%x\n", _pcurrent_pcb_config->ts2_source));
     DbgLogInfo(("analog_source=%x\n", _pcurrent_pcb_config->analog_source));
     DbgLogInfo(("for bus_power used\n\n"));
     DbgLogInfo(("analog_index=%x\n",_pcurrent_pcb_config->analog_index));	                                         
     DbgLogInfo(("digital_index=%x\n",_pcurrent_pcb_config->digital_index));
     DbgLogInfo(("dif_index=%x\n",_pcurrent_pcb_config->dif_index));
     DbgLogInfo(("external_index=%x\n",_pcurrent_pcb_config->external_index));
     DbgLogInfo(("config_num=%x\n", _pcurrent_pcb_config->config_num));

//////////////////////////////////////////////////////////////////	
	 
    return (STATUS_SUCCESS);

}

NTSTATUS PcbConfig::initialize_A0()
{

    DbgLogInfo(("PcbConfig::initialize \n"));
    NTSTATUS ntStatus;
    DWORD config_info=0;
    PCB_CONFIG* p_pcb_info;
    BYTE usb_speed = 1; //from register,1--HS, 0--FS
    BYTE data[4];
    DWORD reg_val = 0;
    DWORD ts1_source=0;
    DWORD ts2_source=0;
    DWORD analog_source = 0;
//////////////////////////////////////////////////////////////
    RtlZeroMemory(data,4);
    ts1_source = SOURCE_TS_BDA;
    ts2_source = SOURCE_TS_BDA;
    _p_usb_firmware->getPolarisRegister(BOARD_CFG_STAT,data,4);  
    config_info = *((DWORD *)data);
    DbgLogInfo(("SC(0x00) register = %x\n", config_info));
    usb_speed = (BYTE)(config_info&0x1);
    if(config_info & BUS_POWER)	                       //bus-power
    {
        switch(config_info & BUSPOWER_MASK)

⌨️ 快捷键说明

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