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

📄 osd.c

📁 NOVATEK公司的LCD_CONTROLLER源代码 液晶显示器驱动板源代码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"

code unsigned char IconPosition[]={
	1,1,1,3,1,5,1,7,1,9,1,11,1,13,4,1,4,3,4,5,4,7,4,9,4,11,4,13
};
code unsigned char MainIconColor[]={
	4,1,4,4,4,4,4,4,1,1,1,4,4,4,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 SpaceLine23[]={
	23,"                       "
};

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

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 i;
//OSD
	OSD_Control = Read24C16(0xce);
	WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
	WriteIIC_HW(Scaler_Addr,0xa9,0x55);
	SetPosition();
	ClearOSD();
	for(i=2; i<5; i++){
		FillLineAttr(7,i,23,TitleColor);
	}
	ClearText();
	OSD_Point1 = 0;
	OSD_Point2 = 0;
	SavePointer = NotSaveSaveFlag;
	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,30,TextColor);
	FillLineAttr(1,2,30,TextColor);
	FillLineAttr(1,3,30,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....
   	Timer3 = 10;
	while(((ReadIIC_HW(Scaler_Addr,0xcf) & BIT_0) != 0) && (Timer3 != 0)){
		CheckModeChange();
	}
}

void MainMenu(void)
{
	if((flag1 & BIT_1) == 0){
		switch(OSD_Type){
		case 0x00:
			SavePointer = NotSaveSaveFlag;
			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;
		case 0x01:
			/*SaveData();
			UnselectIcon();
			if(PowerStatus == 0x80){
				if(OSD_Point1 == 0){
					if(++OSD_Point2 > 13){
						OSD_Point2 = 0;
					}
					if(SyncMode == 3){
						if((OSD_Point2 > 1)&&(OSD_Point2 < 6)){
							OSD_Point2 = 6;
						}
					}
					if((flag2 & BIT_5) != 0){
						if((OSD_Point2 > 7)&&(OSD_Point2 < 11)){
							OSD_Point2 = 11;
						}
					}
				}
				else{
					if((flag3 & BIT_0) == 0){
						if(++OSD_Point2 > 23){
							OSD_Point2 = 14;
						}
					}
					else{
						if(++OSD_Point2 > 24){
							OSD_Point2 = 14;
						}
					}
				}
				ShowSubMenu();
			}*/
			break;
		default:
			if(SavePointer != NotSaveSaveFlag)
				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 SelectItem(void)
{
	SaveData();
	UnselectIcon();
	if(KeyBuffer==LeftKey){
  	    if(OSD_Point1 == 0){
	        if(--OSD_Point2 == 0xff){
		     OSD_Point2 = 13;
		 }
		 if(SyncMode == 3){
		     if((OSD_Point2 > 1)&&(OSD_Point2 < 6)){
		         OSD_Point2 = 1;
                   }
		 }
		 if((flag2 & BIT_5) != 0){
		     if((OSD_Point2 > 7)&&(OSD_Point2 < 11)){
			  OSD_Point2 = 7;
		     }
		 }
	    }
	    else{
		  if((flag3 & BIT_0) == 0){
		      if(--OSD_Point2 < 14){
			  OSD_Point2 = 23;
		      }
		  }
		  else{
			if(--OSD_Point2 < 14){
			   OSD_Point2 = 24;
			}
		   }
	      }
         }
	  else if(KeyBuffer==RightKey){
		if(OSD_Point1 == 0){
		    if(++OSD_Point2 > 13){
		        OSD_Point2 = 0;
		    }
		    if(SyncMode == 3){
			 if((OSD_Point2 > 1)&&(OSD_Point2 < 6)){
			     OSD_Point2 = 6;
			 }
		    }
		    if((flag2 & BIT_5) != 0){
			 if((OSD_Point2 > 7)&&(OSD_Point2 < 11)){
			     OSD_Point2 = 11;
			 }
		    }
		}
		else{
		     if((flag3 & BIT_0) == 0){
			  if(++OSD_Point2 > 23){
			      OSD_Point2 = 14;
			  }
		     }
		     else{
			   if(++OSD_Point2 > 24){
			       OSD_Point2 = 14;
			   }
		     }
		}				
	  }
	ShowSubMenu();
}

void ShowVersion(void)
{
code unsigned char String1[]={
	6,25,11,"0.12"
};
code unsigned char String2[]={
	6,25,11,"    "
};

code unsigned char String3[]={
	3,8,11," "
};
	if((flag3 & BIT_0) != 0){
		WriteStringScaler(0,String1);
		ShowNum(0,9,11,PANEL);
	}
	else{
		WriteStringScaler(0,String2);
		WriteStringScaler(0,String3);
	}
}

void OSD_OFF(void)
{
	if(SavePointer != NotSaveSaveFlag)
		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{	//mute
		OSD_Point1 = 0;
		OSD_Point2 = 0;
//		ShowMute();
	}
}

void ShowMainMenu(void)
{
code unsigned char MainIcon[][5]={
	4,1,1,0x00,0x01,
	4,1,3,0x18,0x19,
	4,1,5,0x02,0x03,
	4,1,7,0x04,0x05,
	4,1,9,0x06,0x07,
	4,1,11,0x08,0x09,
	4,1,13,0x0a,0x0b,
	4,4,1,0x0c,0x0d,
	4,4,3,0x09,0x2c,
	4,4,5,0x0a,0x2c,
	4,4,7,0x0b,0x2c,
	4,4,9,0x0e,0x0f,
	4,4,11,0x10,0x11,
	4,4,13,0x12,0x13,
};

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(4,3,2,DisIconColor);
		FillLineAttr(4,5,2,DisIconColor);
		FillLineAttr(4,7,2,DisIconColor);
	}
	else{
		FillLineAttr(4,3,2,RedColor);
		FillLineAttr(4,5,2,GreenColor);
		FillLineAttr(4,7,2,BlueColor);
	}
}

void ShowMisceMenu(void)
{
code unsigned char MainIcon1[][5]={
	4,1,1,0x12,0x13,
	4,1,3,0x16,0x17,
	4,1,5,0x18,0x19,
	4,1,7,0x1a,0x1b,
	4,1,9,0x1c,0x1d,
	4,1,11,0x1e,0x1f,
	4,1,13,0x20,0x21,
	4,4,1,0x22,0x23,
	4,4,3,0x24,0x25,
	4,4,5,0x26,0x27,
	4,4,7,0x28,0x29,
	4,4,9,0x20,0x20,
	4,4,11,0x20,0x20,
	4,4,13,0x20,0x20,
};
code unsigned char MainIcon2[][5]={
	4,4,7,0x20,0x20,
	4,4,9,0x20,0x20,
	4,4,11,0x20,0x20,
	4,4,13,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-14) << 1;
	}
	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{
			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,Tab1[k]);
//Show Value
	switch(OSD_Point2){
	case BrightnessNode:
		if((flag3 & BIT_0) == 0){
			ShowInverter();
		}
		else{
			ShowBrightness();
		}
		break;
	case ContrastNode:
		ShowContrast();
		break;
	case PhaseNode:
		ShowPhase();
		break;
	case ClockNode:
		ShowClock();
		break;
	case HP_Node:
		ShowHP();
		break;
	case VP_Node:
		ShowVP();
		break;
	case ColorTempNode:

⌨️ 快捷键说明

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