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