📄 osdctrl.c
字号:
/************************************************
* *
* 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 + -