📄 pcbconfig.cpp
字号:
{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 + -