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

📄 osdctrl.c

📁 采用台湾MRT晶捷公司的MRT4方案的液晶电视的程序
💻 C
📖 第 1 页 / 共 5 页
字号:
/************************************************
*                                               *
* OSDCTRL.C:  OSD control routines.             *
*                                               *
*************************************************/
#include <reg51.h>
#include <math.h>
#include "mascot.h"
#include "OSD.h"
#include "osd_data.h"
#include "prg_font.h"
#include "global.h"





/************************************************
* intialize OSD registers                       *
*************************************************/
void osd_init(void)
{

	statusBefore = 0x1F;

	/* initialize OSD control regs */
	OSDRegDataOut(0x00, osdInitData, sizeof(osdInitData));

	/* initialize palette */
	PortDataOut(0x00, PORT_PALETTE, PaletteData, sizeof(PaletteData) / sizeof(char));




	/* Define Color Key PaletteData No.4*/
	RegByteOut(0xC0, 0xBC);		// Select OSD Registers
	RegBitOut(0x80, 0x00, 0x00);	//disable transparency color
	RegByteOut(0x83, 0xF8);		//OR83 - Color Key B[7:3]
	RegByteOut(0x84, 0xF8);		//OR84 - Color Key G[7:3]
	RegByteOut(0x85, 0x00);		//OR85 - Color Key R[7:3]
	RegBitOut(0x75, 0x00, 0x20);	//OR80 - P-Font as Color font
	RegByteOut(0xC0, 0x3C);	// Select Normal Registers


	/* check ID */
	miscDelay(50);
	eepDataIn(EEPHEADSTART, buff, 4);

#if DEBUGMSG    
	printf("%c %c %c %c\n",buff[0],buff[1],buff[2],buff[3]);
#endif    



	if( (buff[0]==osdID[0]) && (buff[1]==osdID[1]) && (buff[2]==osdID[2]) && (buff[3]==osdID[3]) )
	{
        	/* load OSD data from EEPROM */
        	eepDataIn(EEPDATASTART, (unsigned char *)&eepData, EEPDATASIZE);
	}
	else if( buff[0]==0xff && buff[1]==0xff && buff[2]==0xff && buff[3]==0xff ) 		//20030221
	{
        	/* reset eeprom */
        	ResetEEPROM(RSTCOLOR+RSTEEP+RSTUSER+RSTPOT);
        	eepData.colorPos = COLOR_USER;
        	eepDataOut(EEPDATASTART+(&eepData.colorPos-&eepData),(unsigned char *)&eepData.colorPos, 1);        	        
	}
	else 
	{
	        /* reset eeprom */
	        ResetEEPROM(RSTEEP+RSTUSER+RSTCOLOR);
	}    

	setColorRGB(EEP_DATA);
	setEepData();

}


/************************************************
* create the first main menu pattern            *
*************************************************/
void informationMenu(void)
{

	if (FactoryFlag)
	{
//		PortDataOut((MainMenuCols+1)*3+6, UPDATE_ATTR, factmessageATTRData,sizeof(factmessageATTRData) / sizeof(char));
		SetOSDData((MainMenuCols+1)*3+6, UPDATE_ATTR, 0x36, 15);
		PortDataOut((MainMenuCols+1)*3+6, UPDATE_CODE, factmessageData, sizeof(factmessageData) / sizeof(char));
		showPotTimer();
	}

	// VGA width 	
	converInt(CurrentWidth);
	if(CurrentWidth > 999)
 		PortDataOut((MainMenuCols+1)*4+10, UPDATE_CODE, buff, 4);
 	else
 		PortDataOut((MainMenuCols+1)*4+11, UPDATE_CODE, buff, 3);

	// VGA height 
	converInt(CurrentHeight);
	PortDataOut((MainMenuCols+1)*4+15, UPDATE_CODE, buff, 4);

	buff[0] = _x;
	PortDataOut((MainMenuCols+1)*4+14, UPDATE_CODE, buff, 1);

	/* H sync  */
	ival = 100000L * HsyncCnt / 21845L /2;
	converFlt(ival);
	buff[1] = _H;
	buff[2] = _DOT2; //:
	buff[5] = _K;
	buff[6] = _H;
	buff[7] = _z;
	PortDataOut((MainMenuCols+1)*6+8, UPDATE_CODE, &buff[1], 7);
	  			
	/* V sync  */
	ival = 18750000L / VsyncCnt;
	converFlt(ival);
	buff[1] = _V;
	buff[2] = _DOT2; //:
	buff[5] = _H;
	buff[6] = _z;			
	PortDataOut((MainMenuCols+1)*6+16, UPDATE_CODE, &buff[1], 6);

	PortDataOut((MainMenuCols+1)*8+7, UPDATE_CODE,analogInputData[eepData.language],sizeof(analogInputData[0]/sizeof(char)));
}	


void menuDraw(void)
{
   	/* Clear SRAM */
   	SRAMClear();

   	/* disable window */
	OSDRegDataOut(OSDWIN1_H_START, disWinData, sizeof(disWinData) / sizeof(char));
#if (NEW_OSD) //1
	OSDRegByteOut(OSDNEWWINDOWCONTROL,0x00);
#endif	



	if(cursor == 0x00  || cursor == HOT_BRIGHTNESS  || cursor == HOT_CONTRAST)
	{
	   	/* Change OSD frame size and location */
		if (FactoryFlag)
			osdChgFrame(MainMenuCols,11, 0, 0);
		else if (ISPFlag)
			osdChgFrame(MainMenuCols,11, 50, 50);
		else
			osdChgFrame(MainMenuCols,11,eepData.osdPosH,MAX_osdPosV-eepData.osdPosV);


		if(eepData.language==5)
			load_attention_font_data();
		PortDataOut((MainMenuCols+1)*1+10,UPDATE_CODE,attentionData[eepData.language],sizeof(attentionData[0]) / sizeof(char));
	
		OSDWindowSet(OSDWIN8_H_START, 29, 12, 0 ,0, 0x22, 0x10);
		//OSDWindowSet(OSDWIN7_H_START, 27, 10, 1 ,1, 0x44, 0x10);
		OSDWindowSet(OSDWIN6_H_START, 27, 6, 1 ,3, 0x66, 0x10);
	}
	else
	{
	   	/* Change OSD frame size and location */
		if (FactoryFlag)
			osdChgFrame(MainMenuCols,MainMenuLines, 0, 0);
		else
			osdChgFrame(MainMenuCols,MainMenuLines,eepData.osdPosH,MAX_osdPosV+MIN_osdPosV-eepData.osdPosV);


		OSDWindowSet(OSDWIN8_H_START, 29, 13, 0 ,0, 0x22, 0x10);
		//OSDWindowSet(OSDWIN7_H_START, 27, 11, 1 ,1, 0x44, 0x10);
		OSDWindowSet(OSDWIN6_H_START, 27, 7, 1 ,3, 0x66, 0x10);
	}

	OSDRegByteOut(OSDNEWWINDOWCONTROL,NEWWIN8ENABLE+NEWWIN7ENABLE+NEWWIN6ENABLE);
}

void subClear(void)
{
	if (FactoryFlag)
	{
		dspStyle(0x36);
		buff[0] = __;
		PortDataOut((MainMenuCols+1)*4+1, UPDATE_HCD_REGATT, buff, 1);
//		buff[0] = 0x36;
//		PortDataOut((MainMenuCols+1)*4+1, UPDATE_ATTR, buff,1);
	}
	for(buff[20]=3;buff[20]<9;buff[20]++)
	{
//		PortDataOut((MainMenuCols+1)*buff[20]+3, UPDATE_CODE,clearData2, sizeof(clearData2) / sizeof(char));
		SetOSDData((MainMenuCols+1)*buff[20]+3, UPDATE_CODE, 0x00, 23);
//		PortDataOut((MainMenuCols+1)*buff[20]+7,UPDATE_ATTR,ScrollBarAttrData[1],sizeof(ScrollBarAttrData[1]/sizeof(char)));
		SetOSDData((MainMenuCols+1)*buff[20]+7, UPDATE_ATTR, 0x06, 17);
	}
}

/************************************************
* create the first main menu pattern            *
*************************************************/
void mainMenu(void)
{
	menuDraw();
	mainIcon();
	PortDataOut((MainMenuCols+1)*1+8,UPDATE_CODE,LuminanceData[eepData.language],sizeof(LuminanceData[0]) / sizeof(char));
   	enableOSD();
}	

void mainIcon(void)
{
	subClear();

	// FACTORY
	if (FactoryFlag)
	{
		dspStyle(0x64);
		buff[0] = _F;
		PortDataOut((MainMenuCols+1)*4+1, UPDATE_HCD_REGATT, buff, 1);
//		buff[0] = 0x64;
//		PortDataOut((MainMenuCols+1)*4+1, UPDATE_ATTR, buff,1);
	}
	
	// LuminanceIcon
	PortDataOut((MainMenuCols+1)*4+3,UPDATE_CODE,LuminanceIcon[0],3);
	PortDataOut((MainMenuCols+1)*5+3,UPDATE_CODE,LuminanceIcon[1],3);

	// ImagesetupIcon
	PortDataOut((MainMenuCols+1)*4+8,UPDATE_CODE,ImagesetupIcon[0],3);
	PortDataOut((MainMenuCols+1)*5+8,UPDATE_CODE,ImagesetupIcon[1],3);
		
	// ImagePosIcon
	PortDataOut((MainMenuCols+1)*4+13,UPDATE_CODE,ImagePosIcon[0],3);
	PortDataOut((MainMenuCols+1)*5+13,UPDATE_CODE,ImagePosIcon[1],3);

	// ColortempIcon
	PortDataOut((MainMenuCols+1)*4+18,UPDATE_CODE,ColortempIcon[0],3);
	PortDataOut((MainMenuCols+1)*5+18,UPDATE_CODE,ColortempIcon[1],3);

	// AutoConfigIcon
	PortDataOut((MainMenuCols+1)*4+23,UPDATE_CODE,AutoConfigIcon[0],3);
	PortDataOut((MainMenuCols+1)*5+23,UPDATE_CODE,AutoConfigIcon[1],3);

	// OSDsetupIcon
	PortDataOut((MainMenuCols+1)*7+3,UPDATE_CODE,OSDsetupIcon[0],3);
	PortDataOut((MainMenuCols+1)*8+3,UPDATE_CODE,OSDsetupIcon[1],3);

	// LanguageIcon
	PortDataOut((MainMenuCols+1)*7+8,UPDATE_CODE,LanguageIcon[0],3);
	PortDataOut((MainMenuCols+1)*8+8,UPDATE_CODE,LanguageIcon[1],3);
		
	// InformationIcon
	PortDataOut((MainMenuCols+1)*7+13,UPDATE_CODE,InformationIcon[0],3);
	PortDataOut((MainMenuCols+1)*8+13,UPDATE_CODE,InformationIcon[1],3);

	// ResetIcon
	PortDataOut((MainMenuCols+1)*7+18,UPDATE_CODE,ResetIcon[0],3);
	PortDataOut((MainMenuCols+1)*8+18,UPDATE_CODE,ResetIcon[1],3);

#if WITH_AUDIO
	PortDataOut((MainMenuCols+1)*7+23,UPDATE_CODE,VolumeIcon[0],3);
	PortDataOut((MainMenuCols+1)*8+23,UPDATE_CODE,VolumeIcon[1],3);
#else
	// ExitIcon
	PortDataOut((MainMenuCols+1)*7+23,UPDATE_CODE,ExitIcon[0],3);
	PortDataOut((MainMenuCols+1)*8+23,UPDATE_CODE,ExitIcon[1],3);
#endif
}


void mainSelect(char select)
{
	if (cursor == MAIN_FACTORY)
		PortDataOut((MainMenuCols+1)*4+1, UPDATE_ATTR, mainFIconAttrData+select,1);
	else if(cursor >= MAIN_LUMINANCE && cursor <= MAIN_AUTOCONFIG)
	{
		PortDataOut((MainMenuCols+1)*4+((cursor-MAIN_LUMINANCE)*5+3), UPDATE_ATTR, mainIconAttrData[select],3);
		PortDataOut((MainMenuCols+1)*5+((cursor-MAIN_LUMINANCE)*5+3), UPDATE_ATTR, mainIconAttrData[select],3);
	}
	else if(cursor >= MAIN_OSDSETUP && cursor <= MAIN_EXIT)
	{
		PortDataOut((MainMenuCols+1)*7+((cursor-MAIN_OSDSETUP)*5+3), UPDATE_ATTR, mainIconAttrData[select],3);
		PortDataOut((MainMenuCols+1)*8+((cursor-MAIN_OSDSETUP)*5+3), UPDATE_ATTR, mainIconAttrData[select],3);
	}
}

/********************************************************
* Moving LEFT & RIGHT buttons to select menu item       *
*********************************************************/
void moveCtrl(char step)
{	

	if(cursor >= MAIN_LUMINANCE && cursor <= MAIN_FACTORY)	//MAIN_EXIT
	{
		mainSelect(UnSelect);
    		cursor += step;
		if (FactoryFlag)
		{
			if (cursor > MAIN_FACTORY)
				cursor = MAIN_LUMINANCE;
               		if (cursor < MAIN_LUMINANCE)
				cursor = MAIN_FACTORY;
		}
		else	
		{
			if (cursor > MAIN_EXIT)
				cursor = MAIN_LUMINANCE;
               		if (cursor < MAIN_LUMINANCE)
				cursor = MAIN_EXIT;
		}
		mainSelect(Select);

//		PortDataOut((MainMenuCols+1)*1+3,UPDATE_CODE,clearData2,sizeof(clearData2) / sizeof(char));
		SetOSDData((MainMenuCols+1)*1+3, UPDATE_CODE, 0x00, 23);
		
		if(cursor == MAIN_FACTORY)
			return;
		else if(cursor == MAIN_LUMINANCE)
		{
			if(eepData.language==5)
				load_luminance_font_data();
			PortDataOut((MainMenuCols+1)*1+8,UPDATE_CODE,LuminanceData[eepData.language],sizeof(LuminanceData[0]) / sizeof(char));
		}
		else if(cursor == MAIN_IMAGESETUP)
		{
			if(eepData.language==5)
				load_imagesetup_font_data();			
			PortDataOut((MainMenuCols+1)*1+6,UPDATE_CODE,ImagesetupData[eepData.language],sizeof(ImagesetupData[0]) / sizeof(char));
		}
		else if(cursor == MAIN_IMAGEPOSITION)
		{
			if(eepData.language==5)
				load_imagepos_font_data();			
			PortDataOut((MainMenuCols+1)*1+6,UPDATE_CODE,ImagePosData[eepData.language],sizeof(ImagePosData[0]) / sizeof(char));
		}
		else if(cursor == MAIN_COLORTEMP)
		{
			if(eepData.language==5)
				load_colortemp_font_data();			
			PortDataOut((MainMenuCols+1)*1+6,UPDATE_CODE,ColortempData[eepData.language],sizeof(ColortempData[0]) / sizeof(char));
		}
		else if(cursor == MAIN_AUTOCONFIG)
		{
			if(eepData.language==5)
			{
				load_yesno_font_data();
				load_autoconfig_font_data();			
			}
			PortDataOut((MainMenuCols+1)*1+6,UPDATE_CODE,AutoConfigData[eepData.language],sizeof(AutoConfigData[0]) / sizeof(char));
		}
		else if(cursor == MAIN_OSDSETUP)
		{
			if(eepData.language==5)
				load_osdsetup_font_data();			
			PortDataOut((MainMenuCols+1)*1+7,UPDATE_CODE,OSDsetupData[eepData.language],sizeof(OSDsetupData[0]) / sizeof(char));
		}
		else if(cursor == MAIN_LANGUAGE)
		{
			load_sub_language_font_data();
			load_language_font_data();			
			PortDataOut((MainMenuCols+1)*1+11,UPDATE_CODE,LanguageData[eepData.language],sizeof(LanguageData[0]) / sizeof(char));
		}
		else if(cursor == MAIN_INFORMATION)
		{
			if(eepData.language==5)
			{
				load_info_font_data();
				load_sub_info_font_data();
			}
			PortDataOut((MainMenuCols+1)*1+9,UPDATE_CODE,InformationData[eepData.language],sizeof(InformationData[0]) / sizeof(char));
		}
		else if(cursor == MAIN_RESET)
		{
			if(eepData.language==5)
			{
				load_yesno_font_data();
				load_reset_font_data();			
			}
			PortDataOut((MainMenuCols+1)*1+7,UPDATE_CODE,ResetData[eepData.language],sizeof(ResetData[0]) / sizeof(char));
		}
		else if(cursor == MAIN_EXIT)
		{
#if WITH_AUDIO 		     	
		        PortDataOut((MainMenuCols+1)*1+11,UPDATE_CODE,volumeData[eepData.language],sizeof(volumeData[0]) / sizeof(char));	
#else			
			if(eepData.language==5)
				load_exit_font_data();	
			PortDataOut((MainMenuCols+1)*1+11,UPDATE_CODE,ExitData[eepData.language],sizeof(ExitData[0]) / sizeof(char));
#endif 		
		
		}
    	}    	
	else if(cursor >= LUMINANCE_CONTRAST && cursor <= LUMINANCE_BRIGHTNESS)
	{
		subSelect(UnSelect);
		cursor ^= 0x01;
		subSelect(Select);
	}
	else if(cursor >= IMAGESETUP_FOUCS && cursor <= IMAGESETUP_CLOCK)
	{
		subSelect(UnSelect);
		cursor ^= 0x01;
		subSelect(Select);
	}
	else if(cursor >= IMAGEPOSITION_H && cursor <= IMAGEPOSITION_V)
	{
		subSelect(UnSelect);
		cursor ^= 0x01;
		subSelect(Select);
	}
	else if(cursor >= COLORTEMP_WARM && cursor <= COLORTEMP_USER)
	{
		subSelect(UnSelect);
    		cursor += step;
    		if (cursor > COLORTEMP_USER)
			cursor = COLORTEMP_WARM;
    		if (cursor < COLORTEMP_WARM)
			cursor = COLORTEMP_USER;
		subSelect(Select);
	}
	else if(cursor >= USER_R && cursor <= USER_B)
	{
		subSelect(UnSelect);
    		cursor = cursor + (step * 2);
    		if (cursor > USER_B)
			cursor = USER_R;
    		if (cursor < USER_R)
			cursor = USER_B;
		subSelect(Select);
	}
	else if(cursor >= AUTOCONFIG_YES && cursor <= AUTOCONFIG_NO)
	{
		subSelect(UnSelect);
    		cursor += step;
    		if (cursor > AUTOCONFIG_NO)
			cursor = AUTOCONFIG_YES;
    		if (cursor < AUTOCONFIG_YES)
			cursor = AUTOCONFIG_NO;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -