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

📄 osd.c

📁 NT68521源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
#include "OSD.H"
#include "Scaler.H"
#include "IIC.H"
#include "MyDef.H"
#include "RAM.H"
#include "stdio.h"
#include "UserAdj.H"
#include "AutoAdj.H"
#include "PANEL.H"
#include "F63REG.H"
#include "MCU.H"
#include "OSD_TAB.H"
#include "ModeHandle.H"
#include "TUNER.H"

/*==========================================
==========================================*/

code unsigned char IconPosition[]={
	3,0,7,0,11,0,15,0,19,0,22,2,22,4,19,6,15,6,11,6,7,6,3,6,0,4,0,2
};
code unsigned char AVIconPosition[]={
	3,0,8,0,13,0,18,0,22,2,22,4,18,6,13,6,8,6,3,6,0,4,0,2
};

code unsigned char MainIconColor[]={
	4,1,4,4,4,4,4,4,1,1,1,4,4,1,
	4,4,4,4,4,4,4,4,4,4,4,1,1,1
};

code unsigned char VideoIconColor[]={
	4,1,4,4,4,4,4,4,4,4,4,1,1,1,
	4,4,4,4,4,4,4,4,4,4,4,1,1,1
};

code unsigned char SpaceLine20[]={
	20,"                    "
};

code unsigned char Source1[]={
	8,"  PC    "
};
code unsigned char Source2[]={
	8,"  AV    "
};
code unsigned char Source3[]={
	8,"S-VIDEO "
};
code unsigned char Source4[]={
	8,"  TV    "
};
code unsigned char Source5[]={
	8,"        "
};
code unsigned char Source6[]={
	6,"        "
};
code unsigned char *SourceTab[]={
	Source1,Source2,Source3,Source4,Source5,Source6
};

code unsigned char ClearLine1[]={
	20,"                    "
};
code unsigned char ClearLine2[]={
	5,"     "
};
code unsigned char ClearLine3[]={
	5,0x82,0x82,0x82,0x82,0x82
};

code unsigned char MenuItem[]={
	7,3,4,5
};

void OsdInit(void)
{
//unsigned char g;
//OSD
	OSD_Control = Read24C16(0xce);
	WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);  //Disable OSD
	WriteIIC_HW(Scaler_Addr,0xa9,0x55);  //OSD FONT ZOOM Range
	SetPosition();
	ClearOSD();
	ClearText();
	OSD_Point1 = 0;
	OSD_Point2 = 0;
	SavePointer = 0;
	if(PowerStatus > 0x80){
		ShowVideoMenu();
		ShowVideoSubMenu();
	}
	else{
		ShowMainMenu();
		ShowSubMenu();
	}
}

void Osd4Init(void)
{
	OSD_Control &= ~BIT_0;
	WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
	WriteWordIIC_HW(Scaler_Addr,0x96,OSD2_CCx);
	WriteWordIIC_HW(Scaler_Addr,0x99,OSD2_CCy);
	WriteIIC_HW(Scaler_Addr,0x98,OSD2_WIDTH-1);
	WriteIIC_HW(Scaler_Addr,0x9b,OSD2_HIGHT-1);
	WriteIIC_HW(Scaler_Addr,0xa4,0x00);
	WaitSetup(40);
	ClearOSD();
	FillLineAttr(1,1,20,TextColor);	//add by Anbbdy
	FillLineAttr(1,2,20,TextColor);
	FillLineAttr(1,3,20,TextColor);
	MoveX = OSD2_CCx / 6;
	MoveY = OSD2_CCy / 6;
	if((flag3 & BIT_2) != 0x00){
		printf("OSD X = %d\r\n",OSD2_CCx);
		printf("OSD Y = %d\r\n",OSD2_CCy);
	}
}

void Osd3Init(void)
{
	OSD_Control &= ~BIT_0;
	WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
	WriteWordIIC_HW(Scaler_Addr,0x96,OSD3_Px);
	WriteWordIIC_HW(Scaler_Addr,0x99,OSD3_Py);
	WriteIIC_HW(Scaler_Addr,0x98,OSD3_WIDTH-1);
	WriteIIC_HW(Scaler_Addr,0x9b,OSD3_HIGHT-1);
	WriteIIC_HW(Scaler_Addr,0xa4,0x03);
	WaitSetup(40);
	ClearOSD();
	if((flag3 & BIT_2) != 0x00){
		printf("OSD3 X = %d\r\n",OSD3_Px);
		printf("OSD3 Y = %d\r\n",OSD3_Py);
	}
}

void LoadFont(void)
{
code unsigned char PaletteTab[]={
	67,0,0xd0,0x00,0x00,
//
	(unsigned char)BLACK,(unsigned char)(BLACK>>8),
	(unsigned char)RED,(unsigned char)(RED>>8),
	(unsigned char)GREEN,(unsigned char)(GREEN>>8),
	(unsigned char)BLUE,(unsigned char)(BLUE>>8),
	(unsigned char)CYAN,(unsigned char)(CYAN>>8),
	(unsigned char)MAGENTA,(unsigned char)(MAGENTA>>8),
	(unsigned char)YELLOW,(unsigned char)(YELLOW>>8),
	(unsigned char)WHITE,(unsigned char)(WHITE>>8),
	(unsigned char)TBLACK,(unsigned char)(TBLACK>>8),
	(unsigned char)TRED,(unsigned char)(TRED>>8),
	(unsigned char)TGREEN,(unsigned char)(TGREEN>>8),
	(unsigned char)TBLUE,(unsigned char)(TBLUE>>8),
	(unsigned char)TCYAN,(unsigned char)(TCYAN>>8),
	(unsigned char)TMAGENTA,(unsigned char)(TMAGENTA>>8),
	(unsigned char)TYELLOW,(unsigned char)(TYELLOW>>8),
	(unsigned char)GRAY,(unsigned char)(GRAY>>8),
//
	(unsigned char)WHITE,(unsigned char)(WHITE>>8),
	(unsigned char)WHITE,(unsigned char)(WHITE>>8),
	(unsigned char)WHITE,(unsigned char)(WHITE>>8),
	(unsigned char)WHITE,(unsigned char)(WHITE>>8),
	(unsigned char)WHITE,(unsigned char)(WHITE>>8),
	(unsigned char)WHITE,(unsigned char)(WHITE>>8),
	(unsigned char)WHITE,(unsigned char)(WHITE>>8),
	(unsigned char)WHITE,(unsigned char)(WHITE>>8),
	(unsigned char)WHITE,(unsigned char)(WHITE>>8),
	(unsigned char)WHITE,(unsigned char)(WHITE>>8),
	(unsigned char)WHITE,(unsigned char)(WHITE>>8),
	(unsigned char)WHITE,(unsigned char)(WHITE>>8),
	(unsigned char)WHITE,(unsigned char)(WHITE>>8),
	(unsigned char)WHITE,(unsigned char)(WHITE>>8),
	(unsigned char)WHITE,(unsigned char)(WHITE>>8),
	(unsigned char)WHITE,(unsigned char)(WHITE>>8),
};
	WriteWordIIC_HW(Scaler_Addr,0x9c,640);		//one bit
	WriteWordIIC_HW(Scaler_Addr,0xa0,2296);		//four bit
	
	WriteSequenceScaler(0xe0,PaletteTab);
	WriteSequenceScaler(0xe0,OneBitFont);
	WriteSequenceScaler(0xe0,FourBitFont);
}

void SetPosition(void)
{
unsigned short xy;
	if((OSD_Control & BIT_7) == 0){
		if(OSD_Type == 0x02){
			xy = (unsigned long)OSD2_CCx * OSD_X / 100;
			WriteWordIIC_HW(Scaler_Addr,0x96,xy);
			if((flag3 & BIT_2) != 0x00)
				printf("OSD2 X = %d\r\n",xy);
			WriteWordIIC_HW(Scaler_Addr,0x98,OSD2_WIDTH-1);
			xy = (unsigned long)OSD2_CCy * (100 - OSD_Y) / 100;
			WriteWordIIC_HW(Scaler_Addr,0x99,xy);
			WriteIIC_HW(Scaler_Addr,0x9b,OSD2_HIGHT-1);
			if((flag3 & BIT_2) != 0x00)
				printf("OSD2 Y = %d\r\n",xy);
		}
		else{
			xy = (unsigned long)OSD_RBx * OSD_X / 100;
			WriteWordIIC_HW(Scaler_Addr,0x96,xy);
			if((flag3 & BIT_2) != 0x00)
				printf("OSD1 X = %d\r\n",xy);
			WriteWordIIC_HW(Scaler_Addr,0x98,OSD_WIDTH-1);
			xy = (unsigned long)OSD_RBy * (100 - OSD_Y) / 100;
			WriteWordIIC_HW(Scaler_Addr,0x99,xy);
			WriteIIC_HW(Scaler_Addr,0x9b,OSD_HIGHT-1);
			if((flag3 & BIT_2) != 0x00)
				printf("OSD1 Y = %d\r\n",xy);
		}
	}
	else{
		if(OSD_Type == 0x02){
			xy = (unsigned long)OSD2_CCx1 * OSD_X / 100;
			WriteWordIIC_HW(Scaler_Addr,0x96,xy);
			if((flag3 & BIT_2) != 0x00)
				printf("OSD2 X = %d\r\n",xy);
			WriteWordIIC_HW(Scaler_Addr,0x98,OSD2_WIDTH-1);
			xy = (unsigned long)OSD2_CCy1 * (100 - OSD_Y) / 100;
			WriteWordIIC_HW(Scaler_Addr,0x99,xy);
			WriteIIC_HW(Scaler_Addr,0x9b,OSD2_HIGHT-1);
			if((flag3 & BIT_2) != 0x00)
				printf("OSD2 Y = %d\r\n",xy);
		}
		else{
			xy = (unsigned long)OSD_RBx1 * OSD_X / 100;
			WriteWordIIC_HW(Scaler_Addr,0x96,xy);
			if((flag3 & BIT_2) != 0x00)
				printf("OSD1 X = %d\r\n",xy);
			WriteWordIIC_HW(Scaler_Addr,0x98,OSD_WIDTH-1);
			xy = (unsigned long)OSD_RBy1 * (100 - OSD_Y) / 100;
			WriteWordIIC_HW(Scaler_Addr,0x99,xy);
			WriteIIC_HW(Scaler_Addr,0x9b,OSD_HIGHT-1);
			if((flag3 & BIT_2) != 0x00)
				printf("OSD1 Y = %d\r\n",xy);
		}
	}
	WriteIIC_HW(Scaler_Addr,0xa4,0x00);
	WaitSetup(40);
}

void ClearOSD(void)
{
// Clear osd ram
	if(OSD_Type < 2){
		if((flag3 & BIT_0) == 0x00)
			WriteWordIIC_HW(Scaler_Addr,0xcc,FrameColor);
		else
			WriteWordIIC_HW(Scaler_Addr,0xcc,FactoryColor);
	}
	else{
		WriteWordIIC_HW(Scaler_Addr,0xcc,RedFrameColor);
	}
	WriteIIC_HW(Scaler_Addr,0xce,0x20);
	WriteIIC_HW(Scaler_Addr,0xcf,0x01);

// Wait for Clear Ready....
	while((ReadIIC_HW(Scaler_Addr,0xcf) & BIT_0) != 0){
		CheckModeChange();
	}
}
/*==========================================
==========================================*/
void MainMenu(void)
{
	if(MuteFlag)
	{
		MuteFlag = 0;
		OSD_OFF();
	}
	if((flag1 & BIT_1) == 0)
	{
		switch(OSD_Type)
		{
			case 0x00:
				SavePointer = 0;
				OsdInit();
/*				if(PowerStatus == 0x80)
				{
					ShowResolution();
					ShowFreq();
				}
				ShowVersion();
*/				OSD_Type = 1;
				//osd on
				OSD_Control |= BIT_0;
				WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
				if((flag3 & BIT_2) != 0x00)
					printf("OSD ON\r\n");
				break;
			default:
				if(SavePointer != 0x00)
					SaveData();
				OSD_Type = 1;

				if(PowerStatus == 0x80)
				{
					OsdInit();
//					ShowFreq();
//					ShowResolution();
				}
//				ShowVersion();
				//osd on
				OSD_Control |= BIT_0;
				WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
				break;
		}
	}
	KeyBuffer = 0xff;
}

void OSD_OFF(void)
{
	if(SavePointer != 0x00)
		SaveData();
	if((flag3 & BIT_4) == 0){		//no mute
		if(OSD_Type != 0){
			OSD_Control &= ~BIT_0;
			WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
			OSD_Type = 0;
			if((flag3 & BIT_2) != 0x00)
				printf("OSD OFF\r\n");
		}
	}
	else{
		OSD_Point1 = 0;
		OSD_Point2 = 0;
	}
}

void ShowMainMenu(void)
{
	code unsigned char MainIcon[][5]=
	{
		4,3,0,0x00,0x01,
		4,7,0,0x18,0x19,
		4,11,0,0x02,0x03,
		4,15,0,0x04,0x05,
		4,19,0,0x06,0x07,

		4,22,2,0x08,0x09,
		4,22,4,0x0a,0x0b,

		4,19,6,0x0c,0x0d,
		4,15,6,0x09,0x2c,
		4,11,6,0x0a,0x2c,
		4,7,6,0x0b,0x2c,
		4,3,6,0x10,0x11,

		4,0,4,0x12,0x13,
		4,0,2,0x20,0x20,
	};
	unsigned char i;
	for(i=0; i<14; i++)
	{
		if(MainIconColor[i] == 1)
		{
			if((SyncMode == 3)&&(i > 1)&&(i < 6)){
				WriteWordIIC_HW(Scaler_Addr,0xcc,DisIconColor);
			}
			else{
				WriteWordIIC_HW(Scaler_Addr,0xcc,FrameColor);
			}
			if(((flag2 & BIT_5) != 0)&&(i > 7)&&(i < 11)){
				WriteWordIIC_HW(Scaler_Addr,0xcc,DisIconColor);
			}
			else if(i == 8){
				WriteWordIIC_HW(Scaler_Addr,0xcc,RedColor);
			}
			else if(i == 9){
				WriteWordIIC_HW(Scaler_Addr,0xcc,GreenColor);
			}
			else if(i == 10){
				WriteWordIIC_HW(Scaler_Addr,0xcc,BlueColor);
			}
		}
		else
		{
			if((SyncMode == 3)&&(i > 1)&&(i < 6)){
				WriteWordIIC_HW(Scaler_Addr,0xcc,DisIconMColor);
			}
			else{
				WriteWordIIC_HW(Scaler_Addr,0xcc,FrameMColor);
			}
			if(((flag2 & BIT_5) != 0)&&(i > 7)&&(i < 11)){
				WriteWordIIC_HW(Scaler_Addr,0xcc,DisIconMColor);
			}
			else{
				WriteWordIIC_HW(Scaler_Addr,0xcc,FrameMColor);
			}
		}
		WriteStringScaler(1,MainIcon[i]);
	}
}

void CheckRGB(void)
{
	if((flag2 & BIT_5) != 0){
		FillLineAttr(15,6,2,DisIconColor);
		FillLineAttr(11,6,2,DisIconColor);
		FillLineAttr(7,6,2,DisIconColor);
	}
	else{
		FillLineAttr(15,6,2,RedColor);
		FillLineAttr(11,6,2,GreenColor);
		FillLineAttr(7,6,2,BlueColor);
	}
}

void ShowMisceMenu(void)
{
code unsigned char MainIcon1[][5]={

	4,3,0,0x12,0x13,
	4,7,0,0x16,0x17,
	4,11,0,0x18,0x19,
	4,15,0,0x1a,0x1b,
	4,19,0,0x1c,0x1d,

	4,22,2,0x1e,0x1f,
	4,22,4,0x20,0x21,

	4,19,6,0x22,0x23,
	4,15,6,0x24,0x25,
	4,11,6,0x26,0x27,
	4,7,6,0x28,0x29,
	4,3,6,0x20,0x20,

	4,0,4,0x20,0x20,
	4,0,2,0x20,0x20,
};
code unsigned char MainIcon2[][5]={
	4,7,6,0x20,0x20,
	4,3,6,0x20,0x20,
	4,0,4,0x20,0x20,
	4,0,2,0x20,0x20,
};

unsigned char i;
	for(i=0; i<10; i++){
		if(MainIconColor[i+14] == 1){
			WriteWordIIC_HW(Scaler_Addr,0xcc,FrameColor);
		}
		else{
			WriteWordIIC_HW(Scaler_Addr,0xcc,FrameMColor);
		}
		WriteStringScaler(1,MainIcon1[i]);
	}
	if((flag3 & BIT_0) == 0){
		for(i=0; i<4; i++){
			WriteWordIIC_HW(Scaler_Addr,0xcc,FrameColor);
			WriteStringScaler(1,MainIcon2[i]);
		}
	}
	else{
		for(i=10; i<14; i++){
			if(MainIconColor[i+14] == 1){
				WriteWordIIC_HW(Scaler_Addr,0xcc,FrameColor);
			}
			else{
				WriteWordIIC_HW(Scaler_Addr,0xcc,FrameMColor);
			}
			WriteStringScaler(1,MainIcon1[i]);
		}
	}
}

void ShowSubMenu(void)
{
unsigned char k;
//Icon
	if(OSD_Point1 == 0){
		k = OSD_Point2 << 1;
	}
	else{
		k = (OSD_Point2-13) << 1;  //gan 14 to 13
	}
	if(MainIconColor[OSD_Point2] == 1){
		if(OSD_Point2 == 8){
			FillLineAttr(IconPosition[k],IconPosition[k+1],2,IconRedColor);
		}
		else if(OSD_Point2 == 9){
			FillLineAttr(IconPosition[k],IconPosition[k+1],2,IconGreenColor);
		}
		else if(OSD_Point2 == 10){
			FillLineAttr(IconPosition[k],IconPosition[k+1],2,IconBlueColor);
		}
		else if(OSD_Point2 == 13){
			FillLineAttr(IconPosition[k],IconPosition[k+1],2,IconMColor);
		}
		else{
			FillLineAttr(IconPosition[k],IconPosition[k+1],2,IconColor);
		}
	}
	else{
		FillLineAttr(IconPosition[k],IconPosition[k+1],2,IconMColor);
	}
// Show Titel
	k = Language * 25 + OSD_Point2;
//	WriteXY_CStrScaler(0,7,3,23,Tab1J[k]);  //display every function char
	WriteXY_CStrScaler(0,2,2,20,Tab1J[k]);
//Show Value
	switch(OSD_Point2){
	case 0:
//		if((flag3 & BIT_0) == 0){   //gan
//			ShowInverter();
//		}
//		else{
		ClearText1();
		ShowBrightness();
//		}
		break;
	case 1:
		ShowContrast();
		break;
	case 2:
		ShowPhase();
		break;
	case 3:
		ShowClock();
		break;
	case 4:
		ShowHP();
		break;
	case 5:
		ClearText1();
		ShowVP();
		break;
	case 7:
		ClearText1();
		ShowColorTemperature();
		break;
	case 8:
	case 9:
	case 10:
		ClearText1();
		ShowRGB();
		break;
/*
	case 11:
		ClearText();
        Showlanuage(0);
		break;*/
	case 14:
		ClearText1();
		ShowOSD_X();
		break;
	case 15:
		ShowOSD_Y();
		break;
	case 16:

⌨️ 快捷键说明

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