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

📄 mode.c

📁 realtek LCD monitor, TV开发源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
            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 + -