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

📄 osdmenu.c

📁 MST720-DEMO程序
💻 C
📖 第 1 页 / 共 4 页
字号:
/******************************************************************************
 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 + -