📄 modehandle.c
字号:
k = V_SYNC >> 8;
k |= HV_Pol;
Write24C16(addr,k);
addr++;
k = V_SYNC;
Write24C16(addr,k);
*/
Word addr;
Byte i,Dat;
ModePoint = UserModePtr;
UserModePtr++;
Write24C16(ep_User_Ptr,UserModePtr);
if(UserModePtr > ModeNum)
UserModePtr = UserModeSt;
//#if PRINT_MESSAGE
// printf("UserModePoint = %d\n",(unsigned short)ModePoint);
//#endif
UserModeRefReso = SearchEstimatedModeTables();
//write range refference
//printf("UserModeReferencePoint = %d\n",(unsigned short)UserModeRefReso);
addr = UserModeRefReso * 8;
//write sync data
addr = ep_Sync_Data + (ModePoint * 8);
for(i=0; i<8; i++)
Write24C16(addr++,EEP_SyncMap[UserModeRefReso*8+i]);
addr = ep_Mode_Data+ModePoint * 4;
Dat = H_SYNC >> 8;
Write24C16(addr,Dat);
addr++;
Dat = H_SYNC;
Write24C16(addr,Dat);
addr++;
Dat = V_SYNC >> 8;
Dat |= HV_Pol;
Write24C16(addr,Dat);
addr++;
Dat = V_SYNC;
Write24C16(addr,Dat);
}
void SetInterface()
{
Word code InterfaceTab[]={0x000,0x008,0x102,0x023,0x021,0x196,0x012,0x072};
Byte code InterfaceDat[][8]={
{0x12,0x00,0x29,0x00,0x01,0x64,0x00,0x01}, //channel 1 sep +-
{0x12,0x00,0x29,0x40,0x01,0x65,0x00,0x00}, //channel 1 comp +-
{0x1a,0x00,0x29,0x40,0x01,0x65,0x7c,0x00}, //channel 1 SOG -
#if DVImode == DEmode
{0x10,0x00,0x03,0x01,0x01,0x24,0x00,0x01}, //DVI +-
#else
{0x10,0x00,0x03,0x09,0x01,0x94,0x00,0x01}, //DVI +-
#endif
{0x12,0x04,0x29,0x00,0x01,0x64,0x00,0x01}, //channel 2 sep +-
{0x12,0x04,0x29,0x40,0x01,0x65,0x00,0x00}, //channel 2 comp +-
{0x1a,0x04,0x29,0xc0,0x01,0x65,0xe4,0x00}, //channel 2 SOG -
};
//Byte SourSel,temp,i;
Byte i;
if(!PowerDown)
{
#if PanelInterface == TCON_TO_RSDS
WriteIIC563(0x101,0x90);
#endif
#if PanelInterface == LVDS_TO_TCON
WriteIIC563(0x101,0x40);
#endif
#if PanelInterface == TTL_TO_TCON
WriteIIC563(0x101,0x00);
#endif
#if PanelInterface == TCON_TO_TTL
WriteIIC563(0x101,0x00);
#endif
// Jacky 20040906 for LVDS power up
WriteIIC563(0x1f5,0x06); //disable Pull low LVDS pad
WriteIIC563(0x1f7,0xc0); //Power up LVDS buffer
}
Interlance = 0;
if(SyncMode == 3){
WriteIIC563(0x020,0x83);
WriteIIC563(0x143,0x20); //Power up DVI Pll
WriteIIC563(0x146,0xf3); //Power up DVI SCDT detect
}
else{
WriteIIC563(0x020,0x81);
WriteIIC563(0x143,0xa0); //Power down DVI Pll
}
for(i=0;i<8;i++)
{
if(InterfaceTab[i] == 0x102 && PowerDown)
WriteIIC563(InterfaceTab[i],InterfaceDat[SyncMode][i]&0x02);
else if(InterfaceTab[i] == 0x021 && (HV_Pol & BIT_4))
WriteIIC563(InterfaceTab[i],InterfaceDat[SyncMode][i]|BIT_7);
else
WriteIIC563(InterfaceTab[i],InterfaceDat[SyncMode][i]);
Sleep(1);
}
}
void SyncSource(bit ForceChange)
{
Byte temp,Max;
Bit ExitLoop;
// if(VideoMute || ForceChange)
if(NoSyncFlag || ForceChange)
{
ExitLoop = 0;
if(Saa7114En)
Max = 8;
else
Max = 6;
while(PowerTimer < (POWER_TIME-100) && !ExitLoop)
{
SyncMode++;
if(SyncMode > Max)
SyncMode = 0;
if(SyncMode == 0)
{
SetInterface();
ExitLoop = 1;
FuncBuf[pVIDEOSOURCE] = 0;
#if PRINT_MESSAGE
printf("Separate Sync\n");
#endif
}
if(SyncMode == 1)
{
temp = ReadIIC563(0x19a);
if(temp & BIT_5)
{
SetInterface();
ExitLoop = 1;
FuncBuf[pVIDEOSOURCE] = 0;
#if PRINT_MESSAGE
printf("Separate Sync\n");
#endif
}
}
if(SyncMode == 2 && !BypassSOG)
{
SetInterface();
ExitLoop = 1;
FuncBuf[pVIDEOSOURCE] = 0;
#if PRINT_MESSAGE
printf("Sync on green\n");
#endif
}
if(SyncMode == 3)
{
if(DetectDVI())
{
WriteIIC563(0x01d, 0x1f);
SetInterface();
if(ReadIIC563(0x1ad) != 0) //Jacky 20050107
ExitLoop = 1;
FuncBuf[pVIDEOSOURCE] = 1;
#if PRINT_MESSAGE
printf("DVI Input\n");
#endif
}
}
if(SyncMode == 4)
{
SetInterface();
ExitLoop = 1;
FuncBuf[pVIDEOSOURCE] = 2;
#if PRINT_MESSAGE
printf("Separate Sync\n");
#endif
}
if(SyncMode == 5)
{
temp = ReadIIC563(0x19a);
if(temp & BIT_5)
{
SetInterface();
ExitLoop = 1;
FuncBuf[pVIDEOSOURCE] = 2;
#if PRINT_MESSAGE
printf("Separate Sync\n");
#endif
}
}
if(SyncMode == 6 && !BypassSOG)
{
SetInterface();
ExitLoop = 1;
FuncBuf[pVIDEOSOURCE] = 2;
#if PRINT_MESSAGE
printf("Sync on green\n");
#endif
}
/*
if(PowerTimer < (POWER_TIME)) //search video after 3 seconds
{
if(SyncMode == 7) //Video search
{
FuncBuf[pVIDEOSOURCE] = 3;
if(CheckAVExist())
{
SyncMode = 0;
SetSource();
if(BurnInMode)
{
BurnInMode = 0;
Write24C16(ep_Status,StatusFlag);
}
ExitLoop = 1;
}
}
if(SyncMode == 8) //S-Video search
{
FuncBuf[pVIDEOSOURCE] = 4;
if(CheckAVExist())
{
SyncMode = 0;
SetSource();
if(BurnInMode)
{
BurnInMode = 0;
Write24C16(ep_Status,StatusFlag);
}
ExitLoop = 1;
}
}
}
*/
}
ChangeMode = 1;
}
}
void NoSync(void)
{
if(!VideoMute)
{
VideoMute =1;
MessageShow = 0;
//FastMuteOn();
BackLightOff();
ForceToBackground(0,0,0); //Set fource to background
Osd_Off();
PowerTimer = POWER_TIME;
#if PRINT_MESSAGE
printf("NoSync\n");
#endif
}
else
{
if((PowerTimer < (POWER_TIME-200))&&(PowerTimer > 0)&&(!MessageShow))
{
MessageShow = 1;
if(!FactMode)
ShowMessage(MSG_NOSYNC);
OsdTimer = PowerTimer;
if((PTC_REG & BIT_0) == 0)
{
Sleep(PowerUpInvTiming);
//FastMuteOff();
BackLightOn();
}
}
}
}
void PowerSaveingProcess()
{
if(NoSyncFlag && PowerTimer == 0 && !PowerDown && !BurnInMode)
{
if(!FactMode)
PowerSaving();
if(FactMode){
BurnInMode = 1;
BurnInTimer = 0;
Osd_Off();
}
else{ //jacky0316 Item41 BurnInMode
LED_GrnOff();
LED_RedOn();
}
}
}
void SourceSelect(void)
{
switch(FuncBuf[pVIDEOSOURCE])
{
case 0x00:
case 0x01:
case 0x02:
//SAA7114Off();
ForceToBackground(0,0,0);
H_SYNC_Temp = 0x5555;
V_SYNC_Temp = 0x5555;
LoadModeIndependentSettings();
InitScaler();
SetBrightness();
SetContrast();
LoadADC_Gain();
ChangeMode = 1;
#if PRINT_MESSAGE
printf("Select PC Input\n");
#endif
break;
/*
case 0x03:
//PanelPowerOn();
//Sleep(PowerUpPanelTiming);
ScalerPowerUp();
Sleep(10);
SAA7114Init();
//#if PRINT_MESSAGE
// printf("Select Video 1 Input\n");
//#endif
break;
case 0x04:
//PanelPowerOn();
//Sleep(PowerUpPanelTiming);
ScalerPowerUp();
Sleep(10);
SAA7114Init();
//#if PRINT_MESSAGE
// printf("Select Video 2 Input\n");
//#endif
break;
*/
};
}
void CheckModeChange(void)
{
unsigned char temp;
if(DetectIRQ() || ChangeMode>0){
temp = ReadIIC563(0x1ab);
if((temp & 0x3c) != 0){
BackLightOff();
Abort = 1;
H_SYNC_Temp = 0xffff;
V_SYNC_Temp = 0xffff;
#if PRINT_MESSAGE
printf("Mode change\r\n");
#endif
}
temp = ReadIIC563(0x19a);
if(((SyncMode > 0)&&(SyncMode < 3))||((SyncMode > 4)&&(SyncMode < 7))){ //compostive
if((temp & BIT_5) == 0){
BackLightOff();
Abort = 1;
H_SYNC_Temp = 0xffff;
V_SYNC_Temp = 0xffff;
return;
}
}
else{
if((temp & 0x18) != 0x18){
BackLightOff();
Abort = 1;
H_SYNC_Temp = 0xffff;
V_SYNC_Temp = 0xffff;
return;
}
}
}
}
Byte SearchEstimatedModeTables(void)
{
Byte Resolution;
if(VTotal < 320)//486)//485)//470 ) // 720x400 Mode : Vertical Line < 470
{
if(V_SYNC < 550)
Resolution = _756x574i_50Hz;
else
Resolution = _640x480i_60Hz;
}
else if(VTotal < 488)//486)//485)//470 ) // 720x400 Mode : Vertical Line < 470
{
if(V_SYNC < 740)
Resolution = _720x400_70Hz;
else
Resolution = _720x400_70Hz;
}
else if(VTotal < 580) // 640x480 Mode : 481 <= Vertical Line < 580
{
if(V_SYNC < 640)
if(SyncMode == 6)
Resolution = _640x480P_60Hz;
else
Resolution = _640x480_60Hz;
else if (V_SYNC < 690)
Resolution = _640x480_67Hz;
else if (V_SYNC < 740)
Resolution = _640x480_73Hz;
else
Resolution = _640x480_75Hz;
}
else if(VTotal < 601 )
{
Resolution = _720x400_70Hz;
}
else if(VTotal < 612)//610)//608)//606) //605 )
{
Resolution = _720x400_70Hz;
}
else if(VTotal < 660 ) // 800x600 Mode : 604 <= Vertical Line < 660
{
if(V_SYNC < 540) // Add this line for 640x480@50Hz
Resolution = _640x480_50Hz;
else if(V_SYNC < 580)
Resolution = _800x600_56Hz;
else if(V_SYNC < 660)
Resolution = _800x600_60Hz;
else if(V_SYNC < 740)
Resolution = _800x600_72Hz;
else
Resolution = _800x600_75Hz;
}
else if(VTotal < 732)//720 ) // 832x624(75Hz) Mode : 660 <= Vertical Line < 720
{
if(V_SYNC < 740)
Resolution = _800x600_72Hz;
else
Resolution = _832x624_75Hz;
}
else if(VTotal < 780)//778)//770 ) // 1280x720(60Hz) Mode : 720 <= Vertical Line < 770
{
if(V_SYNC < 740)
Resolution = _1280x720_60Hz;
else
Resolution = _1024x768_75Hz;
}
else if(VTotal < 800) // 1280x768(60Hz) Mode : 780 <= Vertical Line < 800
{
if(V_SYNC < 650)
Resolution = _1280x768_60Hz;
else
Resolution = _1024x768_72Hz;
}
else if(VTotal < 881)//878)//876)//861) // 1024x768 Mode : 770 <= Vertical Line < 861
{
if(V_SYNC < 650)
Resolution = _1024x768_60Hz;
else if(V_SYNC < 730)
Resolution = _1024x768_70Hz;
else if (V_SYNC < 800)
if((H_SYNC > 634)&&(H_SYNC < 644))
Resolution = _640x480_75Hz; //Apple G4 PC
else
Resolution = _1024x768_75Hz;
else
Resolution = _1024x768_75Hz;
}
else if(VTotal < 932) // 1152x864/870 Mode : 861 <= Vertical Line < 961
{
if(V_SYNC < 650)
if((VTotal > 899 && VTotal < 903)/*&&( H_SYNC & (SM_SyncHnVp))*/)
Resolution = _1152x864_60Hz; //Apple G4 : 901(-/+)
else
Resolution = _1152x864_60Hz; //ATI : 895, Voodoo4 : 905, G550 : 900(+/+)
else if(V_SYNC < 730)
Resolution = _1152x864_70Hz;
else
if((H_SYNC > 679)&&(H_SYNC < 697))
Resolution = _1152x870_75Hz;
else
Resolution = _1152x864_75Hz;
}
else if(VTotal < 975)//961) // 1152x864/870 Mode : 861 <= Vertical Line < 961
{
if(V_SYNC < 680)
Resolution = _1152x900_66Hz;
else
Resolution = _1152x864_70Hz; //ATI Rage Fury Pro
}
else if(VTotal < 1040)//1036)//1025) // 1280x960 Mode : 960 <= Vertical Line < 1024
{
if(V_SYNC < 650)
Resolution = _1280x960_60Hz;
else
Resolution = _1280x960_75Hz;
}
else// 1280x1024 Mode : 1040 <= Vertical Line < 1080
{
if(V_SYNC < 680)
Resolution = _1280x1024_60Hz;
else if(V_SYNC < 720)
Resolution = _1280x1024_70Hz;
else
Resolution = _1280x1024_75Hz;
}
return Resolution;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -