📄 osdpub900.c
字号:
#define __OSD900_LCD_OSD__
#include "Header\Include.h"
#if(_OSD_TYPE == _OSD900)
//-----------------------------------------------------------
void COsdHandler()
{
COsdEventMsgProc();
KeyMsgToOsdMsg();
COsdEventMsgProc();
if (ucCurrState == _ACTIVE_STATE)
{
COsdProc();
if(ucKeyMessage != VK_NONE)
CTimerReactiveTimerEvent(SEC(stOsdUserData.OsdTimeout),COsdDispOsdTimerEvent);
}
#if(_BURNIN_EN)
else if(ucCurrState == _NOSIGNAL_STATE )//||
//ucCurrState == _NOSUPPORT_STATE )
{
if(GET_BURNIN_STATE() == BURNIN_ON)
{
BurnInRun();
}
}
#endif
if(ucOsdState == 255)
NotUseFunc(); //mask
}
//-----------------------------------------------------------
void COsdProc()
{
switch(stSystemData.InputSource)
{
case _SOURCE_VGA:
case _SOURCE_DVI:
OSDVGAProc();
break;
/*
case _SOURCE_VIDEO8_AV:
case _SOURCE_VIDEO8_SV:
case _SOURCE_VIDEO8_YUV:
OSDAVProc();
break;
case _SOURCE_VIDEO8_TV:
OSDTVProc();
break;
*/
}
#if(_FACTORY_MENU_EN)
COsdFacHandler();
#endif
}
//-----------------------------------------------------------
void COsdDispFirstTimeLoadFont(void)
{
//Andy Before First Time Load Font Disable OSD
COsdFxDisableOsd();
SetOSDRamAddress(ROW_COUNT,COL_WIDTH,FONT_BASE_ADDRESS);
CScalerLoadFont(Fnt_Global,0x00,92,_COMPRESS_FONT);
CScalerLoadFont(Fnt_Pen_Ico,0x78*2,2*2,_COMPRESS_FONT);
CScalerLoadFont(Fnt_Logo,0xa4*2,12*2,_COMPRESS_FONT);
}
//-----------------------------------------------------------
void LoadLanguageFont()
{
switch(GET_LANGUAGE)
{
case LNG_CHI_S:
#if(LNG_CHI_S_EN)
CScalerLoadFont(Fnt_STJ, 0x5c,30,_COMPRESS_FONT);
CScalerLoadFont(Fnt_ST, 0x7a,38,_COMPRESS_FONT);
CScalerLoadFont(Fnt_CHIS,0xa0,54,_COMPRESS_FONT);
#endif
break;
case LNG_CHI_T:
#if(LNG_CHI_T_EN)
CScalerLoadFont(Fnt_STJ, 0x5c,30,_COMPRESS_FONT);
CScalerLoadFont(Fnt_ST, 0x7a,38,_COMPRESS_FONT);
CScalerLoadFont(Fnt_TJ, 0xa0,8, _COMPRESS_FONT);
CScalerLoadFont(Fnt_CHIT,0xa8,46,_COMPRESS_FONT);
#endif
break;
case LNG_JAP:
#if(LNG_JAP_EN)
CScalerLoadFont(Fnt_STJ, 0x5c,30, _COMPRESS_FONT);
CScalerLoadFont(Fnt_TJ, 0x7e,8, _COMPRESS_FONT);
CScalerLoadFont(Fnt_Jap, 0x8a,102,_COMPRESS_FONT);
#endif
break;
case LNG_RUS:
#if(LNG_RUS_EN)
CScalerLoadFont(Fnt_RUS, 0x5c,33, _COMPRESS_FONT);
#endif
break;
case LNG_KOR:
#if(LNG_KOR_EN)
CScalerLoadFont(Fnt_KOR, 0x60,124, _COMPRESS_FONT);
#endif
break;
}
}
//-----------------------------------------------------------
void LoadLanguageFont1()
{
switch(GET_LANGUAGE)
{
case LNG_CHI_S:
#if(LNG_CHI_S_EN)
CScalerLoadFont(Fnt_CHI1_ST, 0x5c,14,_COMPRESS_FONT);
CScalerLoadFont(Fnt_CHI1_S, 0x6a,14,_COMPRESS_FONT);
#endif
break;
case LNG_CHI_T:
#if(LNG_CHI_T_EN)
CScalerLoadFont(Fnt_CHI1_ST, 0x5c,14,_COMPRESS_FONT);
CScalerLoadFont(Fnt_CHI1_T, 0x6a,14,_COMPRESS_FONT);
#endif
break;
case LNG_JAP:
#if(LNG_JAP_EN)
CScalerLoadFont(Fnt_JAP1, 0x5c,34,_COMPRESS_FONT);
#endif
break;
case LNG_RUS:
#if(LNG_RUS_EN)
CScalerLoadFont(Fnt_RUS, 0x5c,33, _COMPRESS_FONT);
#endif
break;
case LNG_KOR:
#if(LNG_KOR_EN)
CScalerLoadFont(Fnt_KOR, 0x60,124, _COMPRESS_FONT);
#endif
break;
}
}
//-----------------------------------------------------------
void COsdDispOsdTimerEvent(void)
{
COsdFxDisableOsd();
ucOsdState = _MENU_NONE;
}
//-----------------------------------------------------------
void COsdEventMsgProc(void)
{
switch(ucOsdEventMsg)
{
case _SHOW_NOSIGNAL_MSG:
case _SHOW_NOCABLE_MSG:
case _SHOW_NOSUPPORT_MSG:
#if(_BURNIN_EN)
if(GET_BURNIN_STATE() == BURNIN_ON)
InitBurnIn();
#endif
ShowHint();
break;
case _SAVE_EE_MODEUSERDATA_MSG:
CEepromSaveModeData(stModeInfo.ModeCurr);
break;
case _SAVE_EE_SYSTEMDATA_MSG:
CEepromSaveSystemData();
break;
case _SAVE_EE_OSDUSERDATA_MSG:
CEepromSaveOsdUserData();
break;
case _SAVE_EE_ADCDATA_MSG:
CEepromSaveAdcData();
break;
case _SAVE_EE_COLORPROC0_MSG:
CEepromSaveBriConData();
break;
case _SAVE_EE_COLORPROC1_MSG:
CEepromSaveColorTempData();
break;
case _SAVE_EE_VEDIOCOLOR_MSG:
#if(_VIDEO_SUPPORT)
CEepromSaveVedioColor();
#endif
break;
case _ENTER_FACTORY_MODE_MSG:
//stOsdUserData.OsdSettingFlag |= _BIT7;
EnterFactoryMenu();
break;
case _CHANGE_SOURCE_MSG:
CLR_SOURCE_AUTOCHANGE();
CEepromSaveSystemData();
CModeResetMode();
break;
case _DO_AUTO_CONFIG:
if(stSystemData.InputSource != _SOURCE_DVI)
DoAuto();
case _DO_SHOW_NOTE:
ShowNote();
break;
// Andy Add OSD Events
case OE_ENTER_MENU:// 0x80 //进入下一级菜单 (VK_MENU_IN)
ucKeyMessage = VK_MENU_IN;
COsdProc();
break;
// 只有在有菜单时 (ucOsdState != _MENU_NONE) 时才会发出以下消息
case OE_MENU_OUT:// 0x81 //回到上一级菜单 (VK_MENU_OUT)
ucKeyMessage = VK_MENU_OUT;
COsdProc();
break;
case OE_MENU_ENTER_NEXT_MENU:// 0x82 //进入上级菜单的下一级菜单 (VK_MENU_OUT + VK_PREV_MENU + VK_MENU_IN)
ucKeyMessage = VK_NEXT_MENU;
COsdProc();
break;
case OE_MENU_ENTER_PREV_MENU:// 0x83 //进入上级菜单的上一级菜单 (VK_MENU_OUT + VK_NEXT_MENU + VK_MENU_IN)
ucKeyMessage = VK_PREV_MENU;
COsdProc();
break;
// 任何时候都可以发出以下的消息
case OE_DO_AUTO:// 0x84 //Auto
if(stSystemData.InputSource != _SOURCE_DVI)
DoAuto();
break;
case OE_DO_CHANGE_SOURCE:// 0x85 //改变模式
if(ChangeSource())
{
CLR_SOURCE_AUTOCHANGE();
CEepromSaveSystemData();
CModeResetMode();
if(stSystemData.InputSource == _SOURCE_VIDEO8_TV) fOsdDouble = 1;
else fOsdDouble = 0;
}
break;
case OE_GOTO_VGA:// 0x86 //切项到VGA
break;
case OE_SWITCH_TV_AV:// 0x87 //AV/TV/SV 切换
break;
// 只有在没有菜单时 (ucOsdState = _MENU_NONE) 时才会发出以下消息
case OE_GO_VOLUME_ADJUST:// 0x88 //进入音量调节
case OE_GO_BRIGHT_ADJUST:// 0x89 //进入亮度调节
#if(_VOLUME_CTRL_TYPE != _AUDIO_NONE)
DrawVolume();
ucOsdState = _MENU_VOLUME_SP;
#else
DrawBright();
ucOsdState = _MENU_BRIGHT_SP;
#endif
break;
case OE_CH_INC:// 0x8a //频道 +
//CNextChannel();
//ucOsdEventMsg = _SAVE_EE_VEDIOCOLOR_MSG;
break;
case OE_CH_DEC:// 0x8b //频道 -
//CPrevChannel();
//ucOsdEventMsg = _SAVE_EE_VEDIOCOLOR_MSG;
break;
default:
break;
}
ucOsdEventMsg = _NONE_MSG;
}
//------------------------------------------------------------------------------
void ShowMode(void)
{
if(ucCurrState == _NOSIGNAL_STATE) return;
switch(stSystemData.InputSource)
{
case _SOURCE_VGA:
case _SOURCE_DVI:
//display display size
Gotoxy(3,25,0x50);
OutputDisplaySize();
OutputChar(' ');
OutputChar('@');
OutputChar(' ');
OutputRefrushRate();
break;
#if(_VIDEO_SUPPORT)
case _SOURCE_VIDEO8_AV:
case _SOURCE_VIDEO8_SV:
case _SOURCE_VIDEO8_YUV:
case _SOURCE_VIDEO8_TV:
if(CHECK60HZ())
CenterTextout(sNTSC,12,25);
else
CenterTextout(sPAL,12,25);
break;
#endif
}
}
//------------------------------------------------------------------------------
void OSDSlider(unsigned char row, unsigned char col, unsigned char length, unsigned char value, unsigned char range,
unsigned char color)
{
unsigned int bound;
unsigned char i,c;
OSDLine(row, col, length + 6, color, THE_BYTE2); // Set Slider Attribute. 4 extra columns for space/numbers/space
bound = length * value;
Gotoxy(col,row,THE_BYTE1);
OutputChar(0x21); // Left Border
for (i = 1; i <= length; i++)
{
if (bound)
{
if(bound >= range)
{
c = 0x28;
bound = bound - range;
}
else
{
color = (bound << 4) / range;
bound = 0;
if (4 > color) c = 0x23;
else if (7 > color) c = 0x24;
else if (10 > color) c = 0x25;
else if (13 > color) c = 0x26;
else c = 0x27;
}
}
else
{
c = 0x22;
}
OutputChar(c);
}
OutputChar(0x29); // Right Border
PrintfDec(value); //值显示在右边
}
//---------------------------------------------------------------------------
void DispIcon(unsigned char x,unsigned char y,unsigned char ucIconBaseAddr)
{
Gotoxy(x,y,BYTE_DISPLAY);
pData[0] = ucIconBaseAddr;
pData[1] = ucIconBaseAddr + 1;
pData[2] = ucIconBaseAddr + 2;
CScalerWrite(_OSD_DATA_PORT_92,3,pData,_NON_AUTOINC);
Gotoxy(x,y + 1,BYTE_DISPLAY);
pData[0] = ucIconBaseAddr + 3;
pData[1] = ucIconBaseAddr + 4;
pData[2] = ucIconBaseAddr + 5;
CScalerWrite(_OSD_DATA_PORT_92,3,pData,_NON_AUTOINC);
}
//---------------------------------------------------------------------------
void Set2BitColor(unsigned char x,unsigned char y,
unsigned char Width,unsigned char Height,
unsigned char code *Style)
{
OSDClear(y,Height,x,Width,Style[0],THE_BYTE0);
OSDClear(y,Height,x,Width,Style[1],THE_BYTE2);
}
//---------------------------------------------------------------------------
void SetIconCntAtb(unsigned char ucCount)
{
unsigned char ucHeight = (ucCount - 1) * 3 + 2;
Set2BitColor(1,4,5,ucHeight,sStyle2BitPen);
}
//---------------------------------------------------------------------------
void MenuShowLogo()
{
Gotoxy(7,2,BYTE_DISPLAY);
switch(stSystemData.InputSource)
{
#if(_VGA_SUPPORT)
case _SOURCE_VGA:
Textout(sLCDVGA);
break;
#endif
#if(_TMDS_SUPPORT)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -