📄 osdmenu.c
字号:
/******************************************************************************
Copyright (c) 2005 MStar Semiconductor, Inc.
All rights reserved.
[Module Name]: OSDMenu.c
[Date]: 04-Feb-2005
[Comment]:
OSD menu Functions.
[Reversion History]:
*******************************************************************************/
#define _OSDMENU_C_
/********************
* INCLUDE FILES *
*********************/
#include "Project.h"
#include "Global.h"
#include "Mcu_reg.h"
#include "TypeDef.h"
#include "Ms_RWreg.h"
#include "Ms7X_reg.h"
#include "Mst7x.h"
#include "Debug.h"
#include "Misc.h"
#include "Timer0.h"
#include "OSDFunc.h"
#include "OSDMenu.h"
#include "OSDKey.h"
#include "OSDData.h"
#include "Ms_Func.h"
#include "Sync.h"
#include "AutoFunc.h"
#include "PANEL.h"
/********************
* STATIC DATA *
*********************/
BYTE code tOSDSourcSELSequence[MAX_SOURCE_NUM+1] =
{
#if USE_CVBS1
CVBS1,
#endif
#if USE_CVBS2
CVBS2,
#endif
#if USE_SVIDEO1
SVIDEO1,
#endif
#if USE_SVIDEO2
SVIDEO2,
#endif
#if USE_VGA
VGA,
#endif
#if USE_YPBPR
YPBPR,
#endif
#if USE_CCIR656
CCIR656,
#endif
INPUTSOURCE_END,
};
BYTE code tOSDLanguageSequence[OSD_LANGUAGE_NUM+1]=
{
ENGLISH,
//FRANCH,
//DEUTSCH,
//SPANISH,
//ITALIAN,
//RUSSIAN,
//JAPANESE,
//TRADCHINESE,
//SIMPCHINESE,
LANGUAGE_END,
};
#if SCALING_OSD_EN
BYTE code tOSDScalingSequence[Scaling_TypeNumbers+1]=
{
FULL,
LETTERBOX,
PARANOMA,
SCALING_END,
};
#endif //SCALING_OSD_EN
/********************
* VARIABLEV DEFINE *
*********************/
//BYTE g_ucOSDPageIndex = 0;
//BYTE g_ucOSDSelectIndex = 0;
//BYTE g_ucOSDItemValue = 0;
//BYTE g_ucOSDItemValueMax;
//BYTE g_ucOSDItemValueMin;
//bit g_bOSDStatus = 0;
//bit g_bOSDAdjustFlag = 0;
//DisplaySettingType data Display;
/**********************
* FUNCTION PROTOTYPES *
***********************/
void osdOSDDrawSourceMenu(void)
{
BYTE i,index;
for( i = 0; i <= MAX_SOURCE_NUM; i++)
{
index = tOSDSourcSELSequence[i];
osdOSDPrintString(4, 2+i, Display.ucLanguage, tpInputSourceList[index], _GREEN, _DARKBLUE);
}
osdOSDPrintIcon(3, (Display.ucSourceSEL+2), _CHECK, _CYAN, _DARKBLUE);
}
void osdOSDDrawPictureMenu(void)
{
osdOSDPrintString(4, 2, Display.ucLanguage, tContrastSTR, _GREEN, _DARKBLUE);
osdOSDPrintString(4, 3, Display.ucLanguage, tBrightnessSTR, _GREEN, _DARKBLUE);
osdOSDPrintString(4, 4, Display.ucLanguage, tHueSTR,_GREEN, _DARKBLUE);
osdOSDPrintString(4, 5, Display.ucLanguage, tSaturationSTR, _GREEN, _DARKBLUE);
osdOSDPrintString(4, 6, Display.ucLanguage, tGammaFunctionSTR, _GREEN, _DARKBLUE);
#if SCALING_OSD_EN
osdOSDPrintString(4, 7, Display.ucLanguage, tScalingSTR, _GREEN, _DARKBLUE);
osdOSDPrintString(4, 8, Display.ucLanguage, tReturnSTR, _GREEN, _DARKBLUE);
#else
osdOSDPrintString(4, 7, Display.ucLanguage, tReturnSTR, _GREEN, _DARKBLUE);
#endif //SCALING_OSD_EN
}
void osdOSDDrawMACEMenu(void)
{
#if USE_ALLMACEOSD
osdOSDPrintString(4, 2, Display.ucLanguage, tDLTISTR, _GREEN, _DARKBLUE);
osdOSDPrintString(4, 3, Display.ucLanguage, tDCTISTR, _GREEN, _DARKBLUE);
osdOSDPrintString(4, 4, Display.ucLanguage, tBlackExtensionSTR,_GREEN, _DARKBLUE);
osdOSDPrintString(4, 5, Display.ucLanguage, tWhiteExtensionSTR, _GREEN, _DARKBLUE);
osdOSDPrintString(4, 6, Display.ucLanguage, tFavorColorSTR, _GREEN, _DARKBLUE);
osdOSDPrintString(4, 7, Display.ucLanguage, tSharpnessSTR, _GREEN, _DARKBLUE);
osdOSDPrintString(4, 8, Display.ucLanguage, tReturnSTR, _GREEN, _DARKBLUE);
#else
osdOSDPrintString(4, 2, Display.ucLanguage, tEnableSTR, _GREEN, _DARKBLUE);
osdOSDPrintString(4, 3, Display.ucLanguage, tDisableSTR, _GREEN, _DARKBLUE);
osdOSDPrintString(4, 4, Display.ucLanguage, tReturnSTR, _GREEN, _DARKBLUE);
if (Display.ucMACE != 0)
osdOSDPrintIcon(3, 2, _CHECK, _CYAN, _DARKBLUE);
else
osdOSDPrintIcon(3, 3, _CHECK, _CYAN, _DARKBLUE);
#endif //USE_ALLMACEOSD
}
void osdOSDDrawOSDMenu(void)
{
osdOSDPrintString(4, 2, Display.ucLanguage, tLanguageSTR, _GREEN, _DARKBLUE);
osdOSDPrintString(4, 3, Display.ucLanguage, tOSDtimeoutSTR, _GREEN, _DARKBLUE);
osdOSDPrintString(4, 4, Display.ucLanguage, tTransparencySTR,_GREEN, _DARKBLUE);
osdOSDPrintString(4, 5, Display.ucLanguage, tInformationSTR, _GREEN, _DARKBLUE);
osdOSDPrintString(4, 6, Display.ucLanguage, tMemoryRecallSTR, _GREEN, _DARKBLUE);
osdOSDPrintString(4, 7, Display.ucLanguage, tReturnSTR, _GREEN, _DARKBLUE);
}
void osdOSDDrawExitMenu(void)
{
osdOSDPrintString(4, 2, Display.ucLanguage, tExitSTR, _GREEN, _DARKBLUE);
osdOSDPrintString(4, 3, 0, tAutoAdjustSTR, _GREEN, _DARKBLUE);
osdOSDPrintString(4, 4, 0, tWhiteBalanceSTR, _GREEN, _DARKBLUE);
osdOSDPrintString(4, 5, 0, tGainOffsetAdjustSTR, _GREEN, _DARKBLUE);
osdOSDPrintString(4, 6, 0, tVCOMAdjustSTR, _GREEN, _DARKBLUE);
#if USE_SSC_OSD
osdOSDPrintString(4, (OES_SSC_ADJUST-OES_EXIT+2), 0, tSSCAdjustSTR, _GREEN, _DARKBLUE);
#endif
#if USE_ROTATE_OSD
osdOSDPrintString(4, (OES_DISPLAY_MODE-OES_EXIT+2), 0, tDisplayModeSTR, _GREEN, _DARKBLUE);
if((Display.ucSystemStauts & ROTATE_STATUS_FLAG) == 0)
osdOSDPrintString(17, (OES_DISPLAY_MODE-OES_EXIT+2), 0, tNormalSTR, _GREEN, _DARKBLUE);
else
osdOSDPrintString(17, (OES_DISPLAY_MODE-OES_EXIT+2), 0, tRotateSTR, _GREEN, _DARKBLUE);
#endif
}
void osdOSDDrawSourceLable(void)
{
osdOSDSetFrame(100, 0, OSD_SOURCE_WIDTH, OSD_SOURCE_HEIGHT);
osdOSDClearBlock(0, 0, OSD_SOURCE_WIDTH, OSD_SOURCE_HEIGHT);
osdOSDSetBlockColor(0, 0, OSD_SOURCE_WIDTH, OSD_SOURCE_HEIGHT, _WHITE, _DARKBLUE);
osdOSDPrintString(1, 0, 0, tpInputSourceList[tOSDSourcSELSequence[Display.ucSourceSEL]], _WHITE, _DARKBLUE);
g_bSourceOSDFlag = 1;
sysTimer0Set(g_ucOSDTimerHandle, 5000); // show 5 seconds then off
osdOSDEnable();
}
void osdOSDPageMoveCTRL(SCHAR Delta)
{
if (g_ucOSDPageIndex + Delta >= MAXNUMBER_PAGE)
g_ucOSDPageIndex = SOURCE_SELECT_PAGE;
else if (((SCHAR)g_ucOSDPageIndex + Delta) < SOURCE_SELECT_PAGE)
g_ucOSDPageIndex = MAXNUMBER_PAGE-1;
else
g_ucOSDPageIndex+= Delta;
osdOSDClearBlock(0, 2, 25, 7);
switch (g_ucOSDPageIndex)
{
case SOURCE_SELECT_PAGE:
osdOSDSetBlockColor(5, 0, 5, 2, _GRAY, _BLUE);
osdOSDSetBlockColor(20, 0, 5, 2, _GRAY, _BLUE);
osdOSDSetBlockColor(0, 0, 5, 2, _YELLOW, _PURPLE);
osdOSDDrawSourceMenu();
break;
case PICTURE_ADJUST_PAGE:
osdOSDSetBlockColor(10, 0, 5, 2, _GRAY, _BLUE);
osdOSDSetBlockColor(0, 0, 5, 2, _GRAY, _BLUE);
osdOSDSetBlockColor(5, 0, 5, 2, _YELLOW, _PURPLE);
osdOSDDrawPictureMenu();
break;
case MACE_PAGE:
osdOSDSetBlockColor(15, 0, 5, 2, _GRAY, _BLUE);
osdOSDSetBlockColor(5, 0, 5, 2, _GRAY, _BLUE);
osdOSDSetBlockColor(10, 0, 5, 2, _YELLOW, _PURPLE);
osdOSDDrawMACEMenu();
break;
case OSD_PAGE:
osdOSDSetBlockColor(20, 0, 5, 2, _GRAY, _BLUE);
osdOSDSetBlockColor(10, 0, 5, 2, _GRAY, _BLUE);
osdOSDSetBlockColor(15, 0, 5, 2, _YELLOW, _PURPLE);
osdOSDDrawOSDMenu();
break;
case EXIT_PAGE:
osdOSDSetBlockColor(00, 0, 5, 2, _GRAY, _BLUE);
osdOSDSetBlockColor(15, 0, 5, 2, _GRAY, _BLUE);
osdOSDSetBlockColor(20, 0, 5, 2, _YELLOW, _PURPLE);
osdOSDDrawExitMenu();
break;
}
}
void osdOSDFactoryMenuMoveCTRL(SCHAR Delta)
{
BYTE ucMinSel, ucMaxSel;
switch (g_ucOSDSelectIndex)
{
case OES_GAIN_OFFSET:
if(tOSDSourcSELSequence[Display.ucSourceSEL] == VGA)
{
ucMinSel = FMVGOS_RGAIN;
ucMaxSel = FMVGOS_MAXNUMBER;
}
else if(tOSDSourcSELSequence[Display.ucSourceSEL] == YPBPR)
{
ucMinSel = FMYGOS_PrGAIN;
ucMaxSel = FMYGOS_MAXNUMBER;
}
break;
case OES_VCOM_ADJUST:
ucMinSel = FMVS_VCOMDC;
ucMaxSel = FMVS_MAXNUMBER;
break;
#if USE_SSC_OSD
case OES_SSC_ADJUST:
ucMinSel = FMSS_STEP;
ucMaxSel = FMSS_MAXNUMBER;
break;
#endif
}
if(g_ucFactorySelectIndex + Delta >= ucMaxSel)
g_ucFactorySelectIndex = ucMinSel;
else if ((g_ucFactorySelectIndex + Delta) < ucMinSel)
g_ucFactorySelectIndex = ucMaxSel-1;
else
g_ucFactorySelectIndex+= Delta;
ucMaxSel = ucMaxSel-ucMinSel+1;
ucMinSel = g_ucFactorySelectIndex-ucMinSel+2;
if(ucMinSel == 2 )
{
osdOSDClearBlock(1, ucMaxSel , 2, 1);
osdOSDClearBlock(1, ucMinSel+1 , 2, 1);
}
else if(ucMinSel == ucMaxSel)
{
osdOSDClearBlock(1, 2 , 2, 1);
osdOSDClearBlock(1, ucMinSel-1 , 2, 1);
}
else
{
osdOSDClearBlock(1, ucMinSel-1 , 2, 1);
osdOSDClearBlock(1, ucMinSel+1 , 2, 1);
}
osdOSDPrintString(1, ucMinSel, 0, tPointMarkSTR, _WHITE, _DARKBLUE);
}
void osdOSDRestoreOldSetting(void)
{
switch (g_ucOSDSelectIndex)
{
case PMS_CONTRAST:
if(tOSDSourcSELSequence[Display.ucSourceSEL] == VGA)
mstSetContrast(Display.ucPcContrast);
else
mstSetContrast(Display.ucVedioContrast);
break;
case PMS_BRIGHTNESS:
mstSetBrightness(Display.ucBrightness);
break;
case PMS_HUE:
mstSetHue(Display.ucHue);
break;
case PMS_SATURATION:
mstSetSaturation(Display.ucSaturation);
break;
case PMS_GAMMA:
mstSetGamma(Display.ucGamma);
break;
#if USE_ALLMACEOSD
case MMS_DLTI:
mstSetDLTI(Display.ucDLTI);
break;
case MMS_DCTI:
mstSetDCTI(Display.ucDCTI);
break;
case MMS_BLACKEXT:
mstSetBlackExtension(Display.ucBlackExtension);
break;
case MMS_WHITEEXT:
mstSetWhiteExtension(Display.ucWhiteExtension);
break;
case MMS_FACORCOLOR:
mstSetFavorColor(Display.ucFavorColor);
break;
case MMS_SHARPNESS:
mstSetSharpness(Display.ucSharpness);
break;
#else
case MMS_ENABLE:
case MMS_DISABLE:
mstSetMACE(Display.ucMACE);
break;
#endif //USE_ALLMACEOSD
case OMS_DURATION:
// To do set register of Maria for functios
break;
case OMS_TRANSPARENCY:
osdSetTransparency(Display.ucTransparency);
break;
#if SCALING_OSD_EN
case PMS_SCALING:
mstSetScalingMode(Display.ucScalingMode);
break;
#endif //SCALING_OSD_EN
case OMS_LANGUAGE:
break;
default:
break;
}
}
void osdOSDMenuMoveCTRL(SCHAR Delta)
{
BYTE ucMinSel, ucMaxSel;
switch(g_ucOSDPageIndex)
{
case SOURCE_SELECT_PAGE:
//ucMinSel = SMS_CVBS1;
//ucMaxSel = SMS_MAXNUMBER;
ucMinSel = SMS_SOURCE1;
ucMaxSel = SMS_EXIT+1;
break;
case PICTURE_ADJUST_PAGE:
ucMinSel = PMS_CONTRAST;
ucMaxSel = PMS_MAXNUMBER;
break;
case MACE_PAGE:
#if USE_ALLMACEOSD
ucMinSel = MMS_DLTI;
#else
ucMinSel = MMS_ENABLE;
#endif //USE_ALLMACEOSD
ucMaxSel = MMS_MAXNUMBER;
break;
case OSD_PAGE:
ucMinSel = OMS_LANGUAGE;
ucMaxSel = OMS_MAXNUMBER;
break;
case EXIT_PAGE:
ucMinSel = OES_EXIT;
ucMaxSel = OES_MAXNUMBER;
break;
}
if (g_ucOSDSelectIndex + Delta >= ucMaxSel)
g_ucOSDSelectIndex = ucMinSel;
else if ((g_ucOSDSelectIndex + Delta) < ucMinSel)
g_ucOSDSelectIndex = ucMaxSel-1;
else
g_ucOSDSelectIndex+= Delta;
ucMaxSel = ucMaxSel-ucMinSel+1;
ucMinSel = g_ucOSDSelectIndex-ucMinSel+2;
if(ucMinSel == 2 )
{
osdOSDClearBlock(1, ucMaxSel , 2, 1);
osdOSDClearBlock(1, ucMinSel+1 , 2, 1);
}
else if(ucMinSel == ucMaxSel)
{
osdOSDClearBlock(1, 2 , 2, 1);
osdOSDClearBlock(1, ucMinSel-1 , 2, 1);
}
else
{
osdOSDClearBlock(1, ucMinSel-1 , 2, 1);
osdOSDClearBlock(1, ucMinSel+1 , 2, 1);
}
osdOSDPrintString(1, ucMinSel, 0, tPointMarkSTR, _WHITE, _DARKBLUE);
}
void osdOSDBarAdjustCTRL( SCHAR Delta)
{
if(((SCHAR)g_ucOSDItemValue+Delta) <= g_ucOSDItemValueMax && ((SCHAR)g_ucOSDItemValue+Delta) >= g_ucOSDItemValueMin)
g_ucOSDItemValue += Delta;
osdOSDPrintAdjustBar(5, 6, g_ucOSDItemValueMax, g_ucOSDItemValue, _GREEN, _DARKBLUE);
osdOSDPrintValue(17, 6, (SINT)g_ucOSDItemValue, _GREEN, _DARKBLUE);
}
void osdOSDReturnPageSelect(void)
{
g_ucOSDSelectIndex = 0;
osdOSDClearBlock(0, 9, 25, 1);
osdOSDPrintString(1, 9, 0, tPageLastLineSTR, _BLUE, _WHITE);
osdOSDClearBlock(1, 2, 2, 7);
}
void osdOSDReturnMenuSelect(void)
{
g_bOSDAdjustFlag = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -