📄 mode.c
字号:
acceptivemode = _MODE_1152x900_66HZ;
else if(stModeInfo.IVFreq < 760)
{
if(stModeInfo.IHSyncPulseCount > 26)
//*********************ryan 081209 change 1600*900 to 1440*900**********************
#if(1)
acceptivemode = _MODE_1440x900_75HZ;
#else
acceptivemode = _MODE_1600x900_75HZ;
#endif
//*********************ryan 081209 change 1600*900 to 1440*900**********************
else
acceptivemode = _MODE_1152x900_76HZ;
}
else if(stModeInfo.IVFreq < 790)
acceptivemode = _MODE_1152x900_76HZ;
}
else if(stModeInfo.IVTotal < 1010) // 1280x960 Mode : 975 <= Vertical Line < 1040
{
if(stModeInfo.IVFreq < 650)
acceptivemode = _MODE_1280x960_60HZ;
else if(stModeInfo.IVFreq < 800)
acceptivemode = _MODE_1280x960_75HZ;
else
acceptivemode = _MODE_1280x960_85HZ;
}
else if(stModeInfo.IVTotal < 1048) // 1600x1000 Mode : 975 <= Vertical Line < 1040
{
if(stModeInfo.IVFreq < 650)
{
if(stModeInfo.IHSyncPulseCount < 24)
acceptivemode = _MODE_1600x1000_60HZ_RB;
else
acceptivemode = _MODE_1600x1000_60HZ;
}
else if(stModeInfo.IVFreq < 800)
acceptivemode = _MODE_1600x1000_75HZ;
}
else if(stModeInfo.IVTotal < 1085) // 1280x1024 Mode : 1040 <= Vertical Line < 1087
{
if(stModeInfo.IVFreq < 650)
{
if(stModeInfo.IHSyncPulseCount < 15)
acceptivemode = _MODE_1680x1050_60HZ_RB;
else
{
if(stModeInfo.IVTotal < 1073)
acceptivemode = _MODE_1280x1024_60HZ;
else
acceptivemode = _MODE_1680x1050_60HZ;
}
}
else if(stModeInfo.IVFreq < 710)
acceptivemode = _MODE_1280x1024_70HZ;
else if(stModeInfo.IVFreq < 730)
acceptivemode = _MODE_1280x1024_72HZ;
else if(stModeInfo.IVFreq < 780)
{
if(stModeInfo.IHSyncPulseCount > 24)
acceptivemode = _MODE_1280x1024_75HZ;
else
acceptivemode = _MODE_1280x1024_76HZ;
}
else
acceptivemode = _MODE_1280x1024_85HZ;
}
else if(stModeInfo.IVTotal < 1107) // 1680x1050 Mode : 1087 <= Vertical Line < 1107
{
if(stModeInfo.IVFreq < 640)
{
if((stModeInfo.IHSyncPulseCount < 20) && (stModeInfo.IVTotal > 1090 ))
{
if(stModeInfo.IHSyncPulseCount < 11)
acceptivemode=_MODE_1920x1080_60HZ_RB;
else
acceptivemode=_MODE_1680x1050_60Hz_TVBOX;
}
else
{
if(stModeInfo.IHSyncPulseCount < 20)
acceptivemode=_MODE_1680x1050_60HZ_RB;
else
acceptivemode=_MODE_1680x1050_60HZ;
}
}
else
acceptivemode = _MODE_1680x1050_75HZ;
}
else if(stModeInfo.IVTotal < 1200) // 1920x1080 Mode : 1110 <= Vertical Line < 1200
{
if(stModeInfo.IVFreq < 630)
{
if(stModeInfo.IVTotal < 1123)
{
if(stModeInfo.IHSyncPulseCount < 11)
acceptivemode=_MODE_1920x1080_60HZ_RB;
else if(stModeInfo.IHSyncPulseCount < 15)
acceptivemode=_MODE_1920x1080_60HZ_DMT;
else
acceptivemode = _MODE_1920x1080_60HZ;
}
else if(stModeInfo.IVTotal < 1135)
acceptivemode=_MODE_1920x1080_60HZ_DMT;
else
{
if(stModeInfo.IHSyncPulseCount < 22)
acceptivemode=_MODE_2048x1152_60HZ_RB;
else
acceptivemode=_MODE_2048x1152_60HZ;
}
}
}
else if(stModeInfo.IVTotal < 1300) // 1600x1200 Mode : 1200 <= Vertical Line < 1300
{
if(stModeInfo.IVFreq < 630)
{
if(stModeInfo.IHSyncPulseCount < 12)
acceptivemode = _MODE_1920x1200_60HZ_RB;
else if(stModeInfo.IHSyncPulseCount < 33)
acceptivemode = _MODE_1920x1200_60HZ;
else
acceptivemode = _MODE_1600x1200_60HZ;
}
else if(stModeInfo.IVFreq < 680)
acceptivemode = _MODE_1600x1200_65HZ;
else if(stModeInfo.IVFreq < 720)
acceptivemode = _MODE_1600x1200_70HZ;
else if(stModeInfo.IVFreq < 780)
acceptivemode = _MODE_1600x1200_75HZ;
else
acceptivemode = _MODE_1600x1200_85HZ;
}
else if(stModeInfo.IVTotal < 1350) // 1600x1280 Mode : 1327 <= Vertical Line < 1350
{
if(stModeInfo.IVFreq < 630)
{
acceptivemode = _MODE_1600x1280_60HZ;
}
}
else if(stModeInfo.IVTotal < 1420) // 1792x1344 Mode : 1393 <= Vertical Line < 1420
{
if(stModeInfo.IVFreq < 630)
{
acceptivemode = _MODE_1792x1344_60HZ;
}
}
else if(stModeInfo.IVTotal < 1470) // 1856x1392 Mode : 1443 <= Vertical Line < 1470
{
if(stModeInfo.IVFreq < 630)
{
acceptivemode = _MODE_1856x1392_60HZ;
}
}
else if(stModeInfo.IVTotal < 1500) // 1920x1440 Mode : 1493 <= Vertical Line < 1500
{
if(stModeInfo.IVFreq < 630)
{
if(stModeInfo.IHSyncPulseCount < 15)
acceptivemode = _MODE_1920x1440_60HZ_RB;
else
acceptivemode = _MODE_1920x1440_60HZ;
}
}
else if(stModeInfo.IVTotal < 1600) // 2048x1536 Mode : 1493 <= Vertical Line < 1600
{
if(stModeInfo.IVFreq < 630)
{
acceptivemode = _MODE_2048x1536_60HZ_RB;
}
}
if(stModeInfo.IVFreq < 540)
{
if((acceptivemode != _MODE_720x576i_50HZ)
&& (acceptivemode != _MODE_720x576p_50HZ)
&& (acceptivemode != _MODE_1280x720p_50HZ)
&& (acceptivemode != _MODE_1440x576i_50HZ)
&& (acceptivemode != _MODE_1440x576p_50HZ)
&& (acceptivemode != _MODE_1920x1080i_50HZ)
&& (acceptivemode != _MODE_1920x1200_50HZ_RB))
{
acceptivemode = _MODE_NOSUPPORT;
}
}
return acceptivemode;
}
#if((_TMDS_SUPPORT == _ON) || (_HDMI_SUPPORT == _ON) ||(_DP_SUPPORT == _ON))
//--------------------------------------------------
// Description : Search mode for DVI and HDMI
// Input Value : None
// Output Value : Mode number
//--------------------------------------------------
BYTE CModeSearchModeDVI(void)
{
BYTE modecnt = 0 , temp = 0;
stModeInfo.IHTotal = 0;
stModeInfo.IVHeight = 0;
stModeInfo.IHWidth = 0;
CTimerDelayXms(50);
CScalerSetBit(_SYNC_SELECT_47, ~_BIT0, _BIT0);
CScalerPageSelect(_PAGE2);
CScalerRead( _P2_TMDS_DPC0_B4 , 1 ,&pData[3] , _NON_AUTOINC);
temp = pData[3] & 0x07;
if((temp == 0x05)||(temp == 0x06)||(temp == 0x07)) // deep color mode input
{
#if(_HDMI_SUPPORT == _ON)
CAdjustDeepColorMode();
#endif
CTimerDelayXms(20);
do
{
CScalerPageSelect(_PAGE2);
CScalerSetDataPortByte(_P2_HDMI_ADDR_PORT_C9, 0x82, 0x18);
CTimerDelayXms(100);
CScalerGetDataPortByte(_P2_HDMI_ADDR_PORT_C9, 0x82, 1, &pData[5], _NON_AUTOINC);
}while((pData[5] & 0x02) != 0);
SET_DEEPCOLORMODE();
#if((_SCALER_TYPE == _RTD2545LR) || (_SCALER_TYPE == _RTD247xRD) || (_SCALER_TYPE == _RTD248xRD))
CAdjustDither(tDITHER_SEQ_TABLE_0, tDITHER_TABLE_10_TO_8_I_DOMAIN, tDITHER_TEMPOFFSET_TABLE, _INPUT_DITHER); //I Domain Dithering
#endif
CScalerPageSelect(_PAGE2);
CScalerSetByte(_P2_UP_DOWN_CTRL0_B5,0xd8);
CAdjustSyncProcessorMeasureStart();
if(CTimerPollingEventProc(60, CMiscModeMeasurePollingEvent))
{
CScalerSetBit(_MEAS_HS_PERIOD_H_52, ~_BIT6, _BIT6);
CScalerSetBit(_MEAS_HS_VS_HI_SEL_58, ~_BIT0, 0x00);
CScalerRead(_MEAS_HS_PERIOD_H_52, 6, &pData[8], _AUTOINC);
((WORD *)pData)[0] = ((WORD)(pData[8] & 0x1f) << 8) | pData[9];
((WORD *)pData)[1] = ((WORD)(pData[10] & 0x1f) << 8) | pData[11];
((WORD *)pData)[2] = ((WORD)(pData[12] & 0xf0) << 4) | pData[13];
if((((WORD *)pData)[0] >= 0x1fff) || (((WORD *)pData)[1] >= 0x1fff) || (((WORD *)pData)[0] == 0) || (((WORD *)pData)[1] == 0) || (bit)(pData[10] & _BIT5))
{
modecnt = _MODE_NOSUPPORT;
}
else
{
// Save IH_TOTAL
stModeInfo.IHTotal = ((WORD *)pData)[0] + 1;
// Save input data enable width and height
stModeInfo.IVHeight = ((WORD *)pData)[1] + 1;
stModeInfo.IHWidth = ((WORD *)pData)[2] + 1;
for(modecnt=0;modecnt<_MAX_PRESET_MODE;modecnt++)
{
if(CModeCompareModeDVI(modecnt))
{
//*********************ryan 081209 change 1600*900 to 1440*900**********************
if((modecnt==_MODE_1440x900_60HZ)||(modecnt==_MODE_1440x900_60HZ_RB))
{
if(stModeInfo.IVTotal > 930)
modecnt = _MODE_1440x900_60HZ; // ATI card
else
modecnt = _MODE_1440x900_60HZ_RB;
}
//*********************ryan 081209 change 1600*900 to 1440*900**********************
if((modecnt==_MODE_1920x1080_60HZ)||(modecnt==_MODE_1920x1080_60HZ_DMT))
{
if(stModeInfo.IHTotal < 2205)
modecnt=_MODE_1920x1080_60HZ_DMT;
else
modecnt=_MODE_1920x1080_60HZ;
}
if(modecnt==_MODE_1600x1000_60HZ)
{
if(stModeInfo.IVTotal < 1035)
modecnt=_MODE_1600x1000_60HZ_RB;
}
if(modecnt==_MODE_1680x1050_60HZ)
{
if(stModeInfo.IVTotal < 1084)
modecnt=_MODE_1680x1050_60HZ_RB;
}
if(modecnt==_MODE_1600x1200_60HZ)
{
if(stModeInfo.IVTotal < 1242)
modecnt=_MODE_1600x1200_60HZ_RB;
}
break;
}
}
#if(_TMDS_SHRINK_SUPPORT == _ON)
stModeInfo.IVHeight = stModeInfo.IVHeight - (_TMDS_SHRINK_RANGE * 2);
stModeInfo.IHWidth = stModeInfo.IHWidth - (_TMDS_SHRINK_RANGE * 2);
#endif // End of #if(_TMDS_SHRINK_SUPPORT == _ON)
}
}
else
{
CScalerSetBit(_MEAS_HS_PERIOD_H_52, ~_BIT5, 0x00);
modecnt = _MODE_NOSUPPORT;
}
}
else // 24 bit input including HDMI or DVI format !!
{
CLR_DEEPCOLORMODE();
CAdjustSyncProcessorMeasureStart();
if(CTimerPollingEventProc(60, CMiscModeMeasurePollingEvent))
{
CScalerSetBit(_MEAS_HS_PERIOD_H_52, ~_BIT6, _BIT6);
CScalerSetBit(_MEAS_HS_VS_HI_SEL_58, ~_BIT0, 0x00);
CScalerRead(_MEAS_HS_PERIOD_H_52, 6, &pData[8], _AUTOINC);
((WORD *)pData)[0] = ((WORD)(pData[8] & 0x1f) << 8) | pData[9];
((WORD *)pData)[1] = ((WORD)(pData[10] & 0x1f) << 8) | pData[11];
((WORD *)pData)[2] = ((WORD)(pData[12] & 0xf0) << 4) | pData[13];
if((((WORD *)pData)[0] >= 0x0fff) || (((WORD *)pData)[1] >= 0x0fff) || (((WORD *)pData)[0] == 0) || (((WORD *)pData)[1] == 0) || (bit)(pData[10] & _BIT5))
{
modecnt = _MODE_NOSUPPORT;
}
else
{
// Save IH_TOTAL
stModeInfo.IHTotal = ((WORD *)pData)[0] + 1;
// Save input data enable width and height
stModeInfo.IVHeight = ((WORD *)pData)[1] + 1;
stModeInfo.IHWidth = ((WORD *)pData)[2] + 1;
for(modecnt=0;modecnt<_MAX_PRESET_MODE;modecnt++)
{
if(CModeCompareModeDVI(modecnt))
{
//*********************ryan 081209 change 1600*900 to 1440*900**********************
if((modecnt==_MODE_1440x900_60HZ)||(modecnt==_MODE_1440x900_60HZ_RB))
{
if(stModeInfo.IVTotal > 930)
modecnt = _MODE_1440x900_60HZ; // ATI card
else
modecnt = _MODE_1440x900_60HZ_RB;
}
//*********************ryan 081209 change 1600*900 to 1440*900**********************
if((modecnt==_MODE_1920x1080_60HZ)||(modecnt==_MODE_1920x1080_60HZ_DMT))
{
if(stModeInfo.IHTotal < 2205)
modecnt=_MODE_1920x1080_60HZ_DMT;
else
modecnt=_MODE_1920x1080_60HZ;
}
if(modecnt==_MODE_1600x1000_60HZ)
{
if(stModeInfo.IVTotal < 1035)
modecnt=_MODE_1600x1000_60HZ_RB;
}
if(modecnt==_MODE_1680x1050_60HZ)
{
if(stModeInfo.IVTotal < 1084)
modecnt=_MODE_1680x1050_60HZ_RB;
}
if(modecnt==_MODE_1600x1200_60HZ)
{
if(stModeInfo.IVTotal < 1242)
modecnt=_MODE_1600x1200_60HZ_RB;
}
break;
}
}
#if(_TMDS_SHRINK_SUPPORT == _ON)
stModeInfo.IVHeight = stModeInfo.IVHeight - (_TMDS_SHRINK_RANGE * 2);
stModeInfo.IHWidth = stModeInfo.IHWidth - (_TMDS_SHRINK_RANGE * 2);
#endif // End of #if(_TMDS_SHRINK_SUPPORT == _ON)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -