source.c
来自「很难得的最好的rtd3523系列原厂源码LCD驱动开发」· C语言 代码 · 共 656 行 · 第 1/2 页
C
656 行
else if(CSourceScanInputPortDVI(_DE_ONLY_ON))
SET_INPUTSIGNAL_AVAILABLE(stSystemData.InputSource);
#endif
else
CLR_INPUTSIGNAL_AVAILABLE(stSystemData.InputSource);
break;
case _DVI_I_A0_PORT:
if(CSourceScanInputPortDVI(_DE_ONLY_OFF))
SET_INPUTSIGNAL_AVAILABLE(stSystemData.InputSource);
#if(_DVI_DE_ONLY_SUPPORT == _ON)
else if(CSourceScanInputPortDVI(_DE_ONLY_ON))
SET_INPUTSIGNAL_AVAILABLE(stSystemData.InputSource);
#endif
else if(CSourceScanInputPortVGA(_ANALOG_SOURCE_0))
{
if((bit)CScalerGetBit(_SYNC_SELECT_47, _BIT4))
SET_INPUT_HS_SELECTION(stSystemData.InputSource);
else
CLR_INPUT_HS_SELECTION(stSystemData.InputSource);
SET_INPUTSIGNAL_AVAILABLE(stSystemData.InputSource);
}
else
CLR_INPUTSIGNAL_AVAILABLE(stSystemData.InputSource);
break;
case _DVI_I_A1_PORT:
if(CSourceScanInputPortDVI(_DE_ONLY_OFF))
SET_INPUTSIGNAL_AVAILABLE(stSystemData.InputSource);
#if(_DVI_DE_ONLY_SUPPORT == _ON)
else if(CSourceScanInputPortDVI(_DE_ONLY_ON))
SET_INPUTSIGNAL_AVAILABLE(stSystemData.InputSource);
#endif
else if(CSourceScanInputPortVGA(_ANALOG_SOURCE_1))
{
if((bit)CScalerGetBit(_SYNC_SELECT_47, _BIT4))
SET_INPUT_HS_SELECTION(stSystemData.InputSource);
else
CLR_INPUT_HS_SELECTION(stSystemData.InputSource);
SET_INPUTSIGNAL_AVAILABLE(stSystemData.InputSource);
}
else
CLR_INPUTSIGNAL_AVAILABLE(stSystemData.InputSource);
break;
#endif
#if (_VIDEO_SUPPORT == _ON)
case _VIDEO_AV_PORT:
case _VIDEO_AV2_PORT:
case _VIDEO_SV_PORT:
if (GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_AV_PORT)
channel = _AV_CHANNEL;
else if (GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_AV2_PORT)
channel = _AV2_CHANNEL;
else if (GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_SV_PORT)
channel = _SV_CHANNEL;
CVideoPowerState(_VIDEO_NORMAL);
CVideoDataEnable(_ENABLE);
if(CVideoIsExist(channel))
SET_INPUTSIGNAL_AVAILABLE(stSystemData.InputSource);
else
CLR_INPUTSIGNAL_AVAILABLE(stSystemData.InputSource);
break;
#endif // end of #if (_VIDEO_SUPPORT == _ON)
}
#endif //end of #if (_SOURCE_AUTOCHANGE_ENABLE == _TRUE)
}
/*
//--------------------------------------------------
// Description : Scan VGA input port to obtain if the signal is available
// Input Value : Select analog source 0 or 1
// Output Value : Return _TRUE if the signal is available
//--------------------------------------------------
bit CSourceScanInputPortVGA(BYTE ucAnalogSource)
{
BYTE cnt, synctypetemp = _NO_SYNC_STATE;
CScalerSetBit(_SYNC_SELECT_47, ~_BIT4, 0x00);
if(ucAnalogSource == _ANALOG_SOURCE_0)
{
CScalerSetBit(_SYNC_SELECT_47, ~(_BIT3 | _BIT2), 0x00);
CScalerSetBit(_ADC_RGB_CTRL_DC, ~_BIT3, 0x00);
}
else if(ucAnalogSource == _ANALOG_SOURCE_1)
{
CScalerSetBit(_SYNC_SELECT_47, ~(_BIT3 | _BIT2), (_BIT3 | _BIT2));
CScalerSetBit(_ADC_RGB_CTRL_DC, ~_BIT3, _BIT3);
}
for(cnt=0;cnt<2;cnt++)
{
synctypetemp = CSyncGetSyncTypeStep1VGA();
if(synctypetemp == _CS_STATE && ((bit)CScalerGetBit(_SYNC_SELECT_47, _BIT4)))
{
if((bit)CScalerGetBit(_DETECT_HSYNC_PERIOD_LSB_4B, _BIT7))
CScalerSetBit(_SYNC_SELECT_47, ~_BIT6, _BIT6);
CScalerSetBit(_SYNC_SELECT_47, ~_BIT0, 0x00);
CAdjustSyncProcessorMeasureStart();
if(CTimerPollingEventProc(60, CMiscModeMeasurePollingEvent))
{
if(CModeMeasureData())
{
CScalerSetBit(_STABLE_COUNT_4F, ~_BIT4, _BIT4);
CScalerRead(_STABLE_PERIOD_H_50, 2, pData, _AUTOINC);
((WORD *)pData)[1] = ((pData[0] & 0x07) << 8) | pData[1];
if(((stModeInfo.IHSyncPulseCount * 7 / stModeInfo.IHCount) != 0)
|| (stModeInfo.IHSyncPulseCount < 4)
|| (abs(stModeInfo.IHCount - ((WORD *)pData)[1]) > 4))
{
return _FALSE;
}
}
else
{
return _FALSE;
}
}
else
{
return _FALSE;
}
}
if(synctypetemp != _NO_SYNC_STATE)
{
return _TRUE;
}
CScalerSetBit(_SYNC_SELECT_47, ~_BIT4, CScalerGetBit(_SYNC_SELECT_47, _BIT4) ^ _BIT4);
}
return _FALSE;
}
*/
//version 200D
//--------------------------------------------------
// Description : Scan VGA input port to obtain if the signal is available
// Input Value : Select analog source 0 or 1
// Output Value : Return _TRUE if the signal is available
//--------------------------------------------------
bit CSourceScanInputPortVGA(BYTE ucAnalogSource)
{
BYTE cnt, synctypetemp = _NO_SYNC_STATE;
CScalerSetBit(_SYNC_SELECT_47, ~_BIT4, 0x00);
if(ucAnalogSource == _ANALOG_SOURCE_0)
{
CScalerSetBit(_SYNC_SELECT_47, ~(_BIT3 | _BIT2), 0x00);
CScalerSetBit(_ADC_RGB_CTRL_DC, ~_BIT3, 0x00);
}
else if(ucAnalogSource == _ANALOG_SOURCE_1)
{
CScalerSetBit(_SYNC_SELECT_47, ~(_BIT3 | _BIT2), (_BIT3 | _BIT2));
CScalerSetBit(_ADC_RGB_CTRL_DC, ~_BIT3, _BIT3);
}
for(cnt=0;cnt<2;cnt++)
{
synctypetemp = CSyncGetSyncTypeStep1VGA();
if(((synctypetemp == _CS_STATE) || (synctypetemp == _SOY_STATE)) && ((bit)CScalerGetBit(_SYNC_SELECT_47, _BIT4)))
{
if((bit)CScalerGetBit(_DETECT_HSYNC_PERIOD_LSB_4B, _BIT7))
CScalerSetBit(_SYNC_SELECT_47, ~_BIT6, _BIT6);
CScalerSetBit(_SYNC_SELECT_47, ~_BIT0, 0x00);
CAdjustSyncProcessorMeasureStart();
if(CTimerPollingEventProc(60, CMiscModeMeasurePollingEvent))
{
if(CModeMeasureData())
{
CScalerSetBit(_STABLE_COUNT_4F, ~_BIT4, _BIT4);
CScalerRead(_STABLE_PERIOD_H_50, 2, pData, _AUTOINC);
((WORD *)pData)[1] = ((pData[0] & 0x07) << 8) | pData[1];
if(((stModeInfo.IHSyncPulseCount * 7 / stModeInfo.IHCount) != 0)
|| (stModeInfo.IHSyncPulseCount < 4)
|| (abs(stModeInfo.IHCount - ((WORD *)pData)[1]) > 4))
{
return _FALSE;
}
}
else
{
return _FALSE;
}
}
else
{
return _FALSE;
}
}
if(synctypetemp != _NO_SYNC_STATE)
{
return _TRUE;
}
CScalerSetBit(_SYNC_SELECT_47, ~_BIT4, CScalerGetBit(_SYNC_SELECT_47, _BIT4) ^ _BIT4);
}
return _FALSE;
}
#if(_TMDS_SUPPORT == _ON)
//--------------------------------------------------
// Description : Scan DVI input port to obtain if the signal is available
// Input Value : _DE_ONLY_OFF or _DE_ONLY_ON
// Output Value : Return _TRUE if the signal is available
//--------------------------------------------------
bit CSourceScanInputPortDVI(BYTE ucPar) //Update by Realtek at 20050617
{
BYTE cnt0, cnt1;
if(ucPar == _DE_ONLY_ON)
CScalerSetBit(_POWER_ON_OFF_CTRL_C2, ~_BIT7, _BIT7);
else
CScalerSetBit(_POWER_ON_OFF_CTRL_C2, ~_BIT7, 0x00);
CScalerRead(_UP_DOWN_CTRL1_D2, 1, pData, _NON_AUTOINC);
pData[0] &= 0x0f;
if((pData[0] == 0x0e) | (pData[0] == 0x08) | (pData[0] == 0x06) | (pData[0] == 0x01))
CScalerSetByte(_RGB_PLL_SETTING_C9, 0x24);
else if((pData[0] == 0x04) | (pData[0] == 0x03))
CScalerSetByte(_RGB_PLL_SETTING_C9, 0x2b);
else
CScalerSetByte(_RGB_PLL_SETTING_C9, 0x24);
CScalerSetBit(_TMDS_MEAS_RESULT0_BD, ~(_BIT2 | _BIT1), 0x00);
CScalerSetBit(_ANALOG_COMMON_CTRL2_C6, 0x9f, 0x70);
for(cnt0=0;cnt0<2;cnt0++)
{
for(cnt1=0;cnt1<2;cnt1++)
{
CScalerSetByte(_TMDS_CTRL_BF, 0x00);
CTimerDelayXms(25);
CScalerRead(_TMDS_CTRL_BF, 1, pData, _NON_AUTOINC);
if((pData[0] & 0xf8) == 0xf8)
{
CScalerRead(_UP_DOWN_CTRL1_D2, 1, pData, _NON_AUTOINC);
pData[0] &= 0x0f;
if((pData[0] == 0x0e) | (pData[0] == 0x08) | (pData[0] == 0x06) | (pData[0] == 0x04) | (pData[0] == 0x03))
return _TRUE;
}
CScalerSetBit(_TMDS_MEAS_RESULT0_BD, ~(_BIT2 | _BIT1), _BIT1);
}
CScalerSetBit(_ANALOG_COMMON_CTRL2_C6, 0x9f, 0x10);
CScalerSetBit(_TMDS_MEAS_RESULT0_BD, ~(_BIT2 | _BIT1), 0x00);
}
return _FALSE;
}
#endif // End of #if(_TMDS_SUPPORT == _ON)
//--------------------------------------------------
// Description : Set active input port
// Input Value : ucSelect --> Active port which we want to use
// Output Value : None
//--------------------------------------------------
void CSourceSwitchInputPort(BYTE ucSelect)
{
BYTE cnt;
for(cnt=_INPUT_PORT_0;cnt<_INPUT_PORT_MAX;cnt++)
{
if(cnt == ucSelect)
SET_INPUTPORT_SELECT(cnt);
else
CLR_INPUTPORT_SELECT(cnt);
}
}
//--------------------------------------------------
// Description : Select the active input port or we can do auto-source-selection to decide the active port
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CSourceSelectInputPort(void)
{
#if (_SOURCE_AUTOCHANGE_ENABLE == _TRUE)
BYTE cnt;
if(GET_INPUTSIGNAL_AVAILABLE(stSystemData.InputSource))
{
CSourceSwitchInputPort(stSystemData.InputSource);
return;
}
if(GET_SOURCE_AUTOCHANGE() == _TRUE)
{
for(cnt=_INPUT_PORT_0;cnt<_INPUT_PORT_MAX;cnt++)
{
if(GET_INPUTSIGNAL_AVAILABLE(cnt))
{
CSourceSwitchInputPort(cnt);
return;
}
}
}
CSourceSwitchInputPort(_INPUT_PORT_MAX);
#else
if (stSystemData.InputSource >= _INPUT_PORT_MAX) {
stSystemData.InputSource = _INPUT_PORT_0;
CEepromSaveSystemData();
}
CSourceSwitchInputPort(stSystemData.InputSource);
#endif
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?