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

📄 osd.c

📁 车载 液晶显示器的主控程序(主要使用芯片为 MYSON MTV512 单片机、RealTek 2323 Scare 芯片、TVP5147(视频解码)。配Sharp 8寸液晶显示器 )。
💻 C
📖 第 1 页 / 共 5 页
字号:
//----------------------------------------------------------------------------------------------------
// ID Code      : Osd.c No.0000
// Update Note  : 
//
//----------------------------------------------------------------------------------------------------

#define __OSD__

#include "..\Header\Include.h"


//--------------------------------------------------
// Description  : 
// Input Value  : 
// Output Value : 
//--------------------------------------------------
void COsdHandler(void)
{
	COsdEventMsgProc();	

	
	if(ucKeyMessage < _MESSAGE_AMOUNT)
	{
		#if (_MENU_KEY_REPEAT_OPTION == _TRUE)
		if (ucKeyMessage == _MENU_KEY_MESSAGE) {
			if ((usKeyMenuDelay > 2))// && (usKeyMenuDelay < (_DELAY_MENU_REPEAT-50)))
			{
				ucKeyMessage = _NONE_MESSAGE;
			}
			else {
				usKeyMenuDelay = _DELAY_MENU_REPEAT;
			}
		}
		else {
			usKeyMenuDelay = 0;
		}
		
		if (ucKeyMessage == _LEFT_KEY_MESSAGE || ucKeyMessage == _RIGHT_KEY_MESSAGE ) {
			if ((usKeyLRDelay > 2))// && (usKeyMenuDelay < (_DELAY_MENU_REPEAT-50)))
			{
				ucKeyMessage = _NONE_MESSAGE;
			}
			else {
				usKeyLRDelay = _DELAY_LR_REPEAT;
			}
		}
		else {
			usKeyLRDelay = 0;
		}
		#endif
		
		switch (GET_INPUTPORT_TYPE(stSystemData.InputSource))
		{
			case _DSUB_A0_PORT:
				if (OperationVGATable[ucOsdState][ucKeyMessage] != 0 && ucKeyMessage < 8)
					(*OperationVGATable[ucOsdState][ucKeyMessage])();
				break;
			#if (_VIDEO_SUPPORT == _ON)
			case _VIDEO_AV_PORT:
			case _VIDEO_AV2_PORT:
				#if (_CUSTOM_TYPE == _CUSTOM_HAOZHEN)
				if (OperationTableSM[ucOsdState][ucKeyMessage] != 0 && ucKeyMessage < 4)
					(*OperationTableSM[ucOsdState][ucKeyMessage])();
				#else
				if (OperationAVTable[ucOsdState][ucKeyMessage] != 0 && ucKeyMessage < 8)
					(*OperationAVTable[ucOsdState][ucKeyMessage])();
				#endif
				break;
			#endif
		}

		CTimerReactiveTimerEvent(SEC(stOsdUserData.OsdTimeout),COsdDispOsdTimerEvent);
		/*
		CVdcI2cRead(_VIDEO_DEVICE, 0xc,1);
		COsdFxShowNumberMU(0, 26, pData[0], (_ALIGN_LEFT| _FORCE_SHOW_NUMBER_OFF| _SHOW_3));
		CVdcI2cRead(_VIDEO_DEVICE, 0x9,1);
		COsdFxShowNumberMU(0, 20, pData[0], (_ALIGN_LEFT| _FORCE_SHOW_NUMBER_OFF| _SHOW_3));
		*/
	}


	#if (_IRPOLLING)
		#if (_CUSTOM_TYPE == _CUSTOM_HAOZHEN)
	else if ((ucOsdState == _MENU_NONE) || (ucOsdState == _MENU_MU_MUTE)) 
	{
#if (_CUSTOM_HAOZHEN_PRJ5K == _TRUE)
#if (_CUSTOM_HAOZHEN_PRJ5K_HIDE_FM_MUTE== _TRUE)
		;
#else
		if (ucKeyMessage  == _IR_MUTE_MESSAGE)
			CIrActionMute();
#endif
#else
		if (ucKeyMessage  == _IR_MUTE_MESSAGE)
			CIrActionMute();
#endif
	}
		#endif
	#endif
}

//--------------------------------------------------
// Description  : 
// Input Value  : 
// Output Value : 
//--------------------------------------------------
void COsdEventMsgProc(void)
{
   	switch(ucOsdEventMsg)
   	{
   		case _SHOW_MAIN_PAGE:
			COsdDispPage();
			break;
		
       	case _SHOW_NOSIGNAL_MSG:
           	COsdDispNoSignalProc();
           	break;
       	case _SHOW_NOCABLE_MSG:
           	COsdDispNoCableProc();
           	break;
       	case _SHOW_NOSUPPORT_MSG:
           	COsdDispNoSupportProc();
           	break;
       	case _SAVE_EE_MODEUSERDATA_MSG:
			if(ucKeyMessage != _NONE_MESSAGE)
				return;
           	CEepromSaveModeData(stModeInfo.ModeCurr);
           	break;

       	case _SAVE_EE_SYSTEMDATA_MSG:
			if(ucKeyMessage != _NONE_MESSAGE)
			return;
			
           	CEepromSaveSystemData();
           	break;

       	case _SAVE_EE_OSDUSERDATA_MSG:
			if(ucKeyMessage != _NONE_MESSAGE)
				return;
	      	CEepromSaveOsdUserData();
           	break;

       	case _SAVE_EE_ADCDATA_MSG:
			if(ucKeyMessage != _NONE_MESSAGE)
				return;
			
           	CEepromSaveAdcData();
           	break;

       	case _SAVE_EE_COLORPROC0_MSG:
			if(ucKeyMessage != _NONE_MESSAGE)
				return;
			
           	CEepromSaveBriConData();
           	break;

       	case _SAVE_EE_COLORPROC1_MSG:
			if(ucKeyMessage != _NONE_MESSAGE)
				return;
			
       		CEepromSaveColorTempData();
      		break;

       	case _ENTER_FACTORY_MODE_MSG:
       		stOsdUserData.OsdSettingFlag |= _BIT7;
       		break;

       	case _CHANGE_SOURCE_MSG:
       		CLR_SOURCE_AUTOCHANGE();
       		CEepromSaveSystemData();
			
       		//CModeResetMode();	//remove to mode_handler()
			break;

		case _DO_AUTO_CONFIG:
			COsdDispAutoProc();
			break;
		#if (_VIDEO_SUPPORT == _ON)
		case _SAVE_EE_VIDEODATA_MSG:
			if(ucKeyMessage != _NONE_MESSAGE)
				return;

			CEepromSaveVideoData();
			break;
		#endif
		case _SHOW_TIMER_REMIND:
			//if(ucCurrState != _ACTIVE_STATE)
				//return;

			COsdDispUserTimerRemind(stUserTimerData.Hour[3], stUserTimerData.Minute[3]);
			switch(GET_INPUTSOURCE_TYPE())
			{
				case _SOURCE_VGA:
					SETOSDSTATE(_VGA_MENU_REMIND);
					break;
				#if(_VIDEO_SUPPORT == _ON)
				case _SOURCE_VIDEO8:
					SETOSDSTATE(_AV_MENU_REMIND);
					break;
				#endif
			}
			
			break;
		#if (_CUSTOM_TYPE == _CUSTOM_HAOZHEN)
		#if (_AUDIO_DEVICE != _AUDIO_NONE || _FM_MODULATION == _ENABLE)
		case _SAVE_EE_AUDIODATA_MSG:
			CEepromSaveAudioData();
			break;
		#endif
		#endif
		#if (_CUSTOM_TYPE == _CUSTOM_NONE)
		#if (_AUDIO_DEVICE != _AUDIO_NONE)
		case _SAVE_EE_AUDIODATA_MSG:
			CEepromSaveAudioData();
			break;
		#endif
		#endif


			
		#if (_SHOW_SOURCEHINT)
		case _SHOW_SOURCE_MSG:
			COsdDispSourceProc();
			break;
		#endif
			default:
            		break;

    	}

    	ucOsdEventMsg = _NONE_MSG;
}

//--------------------------------------------------
// Description :	System reset
// Input Value :	none
// Output Value :	none
//--------------------------------------------------
void COsdReset(void)
{
	BYTE tempLanguage, tempInuputSource;

	tempLanguage = stOsdUserData.Language;
	tempInuputSource = stSystemData.InputSource;

	CEepromLoadDefault();

	stOsdUserData.Language = tempLanguage;	//restore current language setting
	stSystemData.InputSource = tempInuputSource;//restore current input source
	
    	//stOsdUserData.OsdSettingFlag = factorymodeflag;
    	//CEepromSaveSystemData();
    CEepromSavePowerStatus();
	CEepromSaveOsdUserData();		//Save language
	CEepromSaveSystemData();		// save input source

	/*
	if(GET_INPUTSOURCE_TYPE() == _SOURCE_VGA)
	{
		CAdjustBrightness();
    	CAdjustContrast();
    	CAdjustBacklight();
    	CAdjustAdcGainOffset();
    	CAdjustAdcClock(stModeUserData.Clock);
    	CAdjustPhase(stModeUserData.Phase);
    	CAdjustHPosition();
    	CAdjustVPosition();
		CAdjustSharpness();
	}
	#if (_VIDEO_SUPPORT == _ON)
	else if(GET_INPUTSOURCE_TYPE() == _SOURCE_VIDEO8)
	{
		CAdjustVideoBright();
		CAdjustVideoContrast();
		CAdjustVideoHue();
		CAdjustVideoSaturation();
		CAdjustVideoSharpness();

	}
	#endif
	*/
	//x.hu, for No signal osd show
	switch (GET_INPUTPORT_TYPE(stSystemData.InputSource))
	{
		case _DSUB_A0_PORT:
			CAdjustBrightness();
	    	CAdjustContrast();
	    	CAdjustBacklight();
	    	CAdjustAdcGainOffset();
	    	CAdjustAdcClock(stModeUserData.Clock);
	    	CAdjustPhase(stModeUserData.Phase);
	    	CAdjustHPosition();
	    	CAdjustVPosition();
			CAdjustSharpness();

					
			COsdFxAlphaBlendingLevel(stOsdUserData.OsdSettingFlag & 0x07);
                  #if (_PANEL_TYPE == _PANEL_LQ104V1DG51 ||_PANEL_TYPE==_PANEL_JIALUHUA)
		if ( stModeInfo.ModeCurr == _MODE_640x480_60HZ)
		{
			stModeUserData.HPosition = 143;
			stModeUserData.VPosition = 30;//34;
		}
		if (	stModeInfo.ModeCurr == _MODE_640x480_72HZ)
		{
			stModeUserData.HPosition = 168;
			stModeUserData.VPosition = 34;
		}
		if ( stModeInfo.ModeCurr == _MODE_640x480_75HZ)
		{
			//stModeUserData.HPosition = 144;
			//stModeUserData.VPosition = 34;
		}
		CAdjustHPosition();
		CAdjustVPosition();
		#endif
			
			break;
	#if (_VIDEO_SUPPORT == _ON)
		case _VIDEO_AV_PORT:
		case _VIDEO_AV2_PORT:
			CAdjustVideoBright();
			CAdjustVideoContrast();
			CAdjustVideoHue();
			CAdjustVideoSaturation();
			CAdjustVideoSharpness();
			
			COsdFxAlphaBlendingLevel(stOsdUserData.OsdSettingFlag & 0x07);
			break;
	#endif
	}


	#if (_AUDIO_DEVICE != _AUDIO_NONE)
	CAdjustVolume();
	#endif

#if (_CUSTOM_TYPE == _CUSTOM_HAOZHEN)

	#if (_FM_MODULATION == _ENABLE)
	CAudio2FM();
	#endif
#endif	
	//COsdFxSetPosition(WIDTH(_OSD_MAIN_DH_END), HEIGHT(_OSD_MAIN_DV_END), stOsdUserData.OsdHPos, stOsdUserData.OsdVPos, 0x01);
	COsdFxSetOsdSizeDouble(((stOsdUserData.OsdSettingFlag & 0x08) >> 3)+1);
	
}

//--------------------------------------------------
// Description:	Value adjust function
// Input Value:	
// Output Value:
//--------------------------------------------------
void COsdByteValueAdj(BYTE *Value, BYTE max, BYTE min, BYTE message, void (* AdjFun)())
{
	//BYTE temp; 

	//temp = *Value;
	
	if(message == _VALUE_UP_MESSAGE)
		message = _DET_OVERRANGE_MAX;
	else if(message == _VALUE_DOWN_MESSAGE)
		message = _DET_OVERRANGE_MIN;
	
	SET_KEYREPEATENABLE();
	
    *Value = COsdFxDetOverRange(*Value, max, min, message);

	(*AdjFun)();
}

void COsdWordValueAdj(WORD *Value, WORD max, WORD min, BYTE message, void (* AdjFun)())
{
	//BYTE temp; 

	//temp = *Value;
	
	if(message == _VALUE_UP_MESSAGE)
		message = _DET_OVERRANGE_MAX;
	else if(message == _VALUE_DOWN_MESSAGE)
		message = _DET_OVERRANGE_MIN;
	
	SET_KEYREPEATENABLE();
	
    	*Value = COsdFxDetOverRange(*Value, max, min, message);

	(*AdjFun)();
}

//----------------------------------------
// ICON & ITEM Selection function
//----------------------------------------
void COsdIconItemSelection(BYTE *ItemIcon, BYTE Message, BYTE SkipItem, BYTE Max, BYTE Min, void (* MoveFun)())
{
	if(_ITEM_UP_MESSAGE == Message)
	{
		*ItemIcon = (*ItemIcon+1 > Max) ? Min : *ItemIcon+1;

		if(*ItemIcon == SkipItem)
			*ItemIcon += 1;
	}
	else if(_ITEM_DOWN_MESSAGE == ucKeyMessage)
	{
		*ItemIcon = (*ItemIcon-1 < Min) ? Max : *ItemIcon-1;

		if(*ItemIcon == SkipItem)
			*ItemIcon -= 1;
	}
		
	(*MoveFun)();
}

//----------------------------------------------------------------------------------------------------
// OSD "Page0" Operation
//----------------------------------------------------------------------------------------------------
// 0,0-------------------------------------0,20
// |
// |
// 5,0-------------------------------------5, 20
// |
void COsdPage0SelectMessage(void)		//Selected message
{
	//stOsdUserData.OsdSettingFlag = 0x80;
	
	//x.hu, prevent gabage message from showing if osd is enabled already.
	COsdFxDisableOsd();


	SETOSDSTATE(_MENU_1);
	SETOSDITEM0(_ITEM_NONE);
	SETOSDITEM1(_ITEM_NONE);
	//SETOSDITEM2(_ITEM_NONE);
	
	SETOSDEVENTMSG(_SHOW_MAIN_PAGE);

	//x.hu, test for OSD start position error
	//COsdFxSetPosition(WIDTH(_OSD_MAIN_DH_END), HEIGHT(_OSD_MAIN_DV_END), stOsdUserData.OsdHPos, stOsdUserData.OsdVPos, 0x01);
	COsdDispClearText(0, 0, _OSD_MAIN_COL, _OSD_MAIN_ROW);

	//COsdFxEnableOsd();		//enabled in function 'COsdDispPage()'

	COsdFxApplyMapSetting(_OSD_MAP0);
	//COsdDispPrevWork(_OSD_MAP0);
	COsdFxChange1bitColor(ROW(1), COL(0), WIDTH(_OSD_MAIN_COL), HEIGHT(1), FGCOLOR(_CP_WHITE), BGCOLOR(_CP_BLACK));	//for showing icon description.
	
	COsdFxPWMCtlCommand(ADDRESS(3), _WRITE_BYTE1, 0x04);	//Set char shadow/border color and Alpha Blending type.
	COsdFxAlphaBlendingLevel(stOsdUserData.OsdSettingFlag & 0x07);

	//x.hu, for No signal osd show
	//COsdFxLoadText(ROW(1), COL(1), GET_INPUTSOURCE_TYPE(), tOSD_SIGNALITEM_STR);		//Show source information. 
	COsdFxLoadText(ROW(1), COL(1), 0, &tOSD_SOURCE_STR[GET_INPUTPORT_TYPE(stSystemData.InputSource)-1][0]);		//Show source information. 


	//COsdDispDrawInitWindow();	//error.
	
	COsdFxCloseWindow(WINNO(1));
    COsdFxCloseWindow(WINNO(2));
    COsdFxCloseWindow(WINNO(3));
    COsdFxCloseWindow(WINNO(4));
    COsdFxCloseWindow(WINNO(6));    	
	
	COsdFxDrawWindow(WXSTART(0x30, 0x00), WYSTART(0x00, 0x01), WXEND(0x90, 0x085), WYEND(0x85, 0x027), tOSD_WINDOW0_STYLE);
	COsdFxDrawWindow(WXSTART(0xA0, 0x00), WYSTART(0x00, 0x0B), WXEND(0x30, 0x85), WYEND(0x85, 0x0E), tOSD_WINDOW2_STYLE);
	COsdFxDrawWindow(WXSTART(0x4C, 0x00), WYSTART(0x00, 0x05), WXEND(0x70, 0x25), WYEND(0x25, 0x0A), tOSD_WINDOW5_STYLE);

	//COsdDispIconSelect(ucOsdState);
	
	COsdFxSetPosition(WIDTH(_OSD_MAIN_DH_END), HEIGHT(_OSD_MAIN_DV_END), stOsdUserData.OsdHPos, stOsdUserData.OsdVPos, 0x01);
	//COsdFxEnableOsd();		//enabled in function 'COsdDispPage()'
	 
}

void COsdPage0ValueAdjMessage(void)
{
switch(GET_INPUTSOURCE_TYPE())
{
 case _SOURCE_VGA:
      if(ucOsdState== _MENU_NONE)
      	{
               COsdFxDisableOsd();
	        COsdDispPrevWork(_OSD_MAP2);
		COsdFxCodeWrite(tOSD_SHORTV_ATB);

⌨️ 快捷键说明

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