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

📄 modehandle.c

📁 台湾联咏NT68663 LCD MONITOR 控制程序(完整版)
💻 C
📖 第 1 页 / 共 2 页
字号:
	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 + -