📄 osdproc003.c
字号:
OSDLine(ROW(5), COL(1), LENGTH(25), 0xA6, THE_BYTE0);
OSDLine(ROW(5), COL(1), LENGTH(25), 0xA4, THE_BYTE1);
OSDLine(ROW(5), COL(1), LENGTH(25), 0x11, THE_BYTE2);
OSDLine(ROW(3), COL(1), LENGTH(45), 0x10, BYTE_COLOR);
// Draw Window
COsdFxDrawWindow(0,0, //WORD usXStart,WORD usYStart,
_DIALOG_WIDTH,_DIALOG_HEIGHT, //WORD usXEnd,WORD usYEnd,
tMainWindowStyle); //BYTE *pStyle)
if (GET_OSD_SIZE())
OSDPosition(_OSD_DOUBLE_WIDTH(_DIALOG_WIDTH), _OSD_DOUBLE_HEIGHT(_DIALOG_HEIGHT), 50, 50, 0x03);
else
OSDPosition(_DIALOG_WIDTH, _DIALOG_HEIGHT, 50, 50, 0x03);
LoadCHIFont(_LF_ADJUST_PAGE);
CCenterTextout(sAutoConfig[GET_LANGUAGE()],ROW(3),1,25);
COsdFxEnableOsd();
CAutoDoAutoConfig();
COsdFxDisableOsd();
}
//---------------------------------------------------------------------------
#define _NOTE_WIDTH (8 * 13)//(8 * 12)
#define _NOTE_HEIGHT (4 * 18)
void CShowNote(void)
{
BYTE code *pStr;
ucOsdState = _MI_MENU_NONE;
InitOsdFrame();
SetOSDDouble(0x01);
// TextOut
switch(stSystemData.InputSource)
{
case _SOURCE_VGA: pStr = sVGA; break;
case _SOURCE_DVI: pStr = sDVI; break;
case _SOURCE_HDMI: pStr = sHDMI; break;
case _SOURCE_YPBPR: pStr = sYPBPR; break;
case _SOURCE_VIDEO_SV: pStr = sSVideo; break;
case _SOURCE_VIDEO_AV: pStr = sAV; break;
case _SOURCE_VIDEO_TV: pStr = sTV; break;
}
CCenterTextout(pStr,ROW(0),0,10);
if (GET_OSD_SIZE())
OSDPosition(_OSD_DOUBLE_WIDTH(_NOTE_WIDTH), _OSD_DOUBLE_HEIGHT(_NOTE_HEIGHT), 0, 0, 0x03);
else
OSDPosition(_NOTE_WIDTH, _NOTE_HEIGHT, 0, 0, 0x03);
COsdFxEnableOsd();
CPowerPanelOn();
CTimerReactiveTimerEvent(SEC(5), COsdDispOsdTimerEvent);
bOSDTimeOut = 0;
#if(_SLEEP_FUNC)
bOSDOnScreen = 1;
#endif
}
//---------------------------------------------------------------------------
#if(_VIDEO_TV_SUPPORT)
//---------------------------------------------------------------------------
void CShowTVNumber(BYTE ucNumber, BYTE ucOption)
{
BYTE PosX = 0;
ucOsdState = _MI_MENU_NONE;
bChangeChannel = 0;
COsdFxDisableOsd();
SetOSDDouble(0x03);
SetOsdMap(tMsgOsdMap);
// Init OSD Ram
OSDClear(0, 8, 0, 30, 0x8C, BYTE_ATTRIB);
OSDClear(0, 8, 0, 30, 0x00, BYTE_DISPLAY);
OSDClear(0, 8, 0, 30, 0xF0, BYTE_COLOR);
COsdFxCodeWrite(ucCloseAllWindow);
OSDPosition(_MAINMENU_WIDTH,_MAINMENU_HEIGHT,64,1,0x03);
if (ucOption & _SHOW_CH_TV_NUMBER)
CShowNumber(0, 0, ucNumber);
if (_SHOW_CH_TV_TYPE & ucOption)
{
BYTE *pStr;
switch(ucTVType)
{
case _TV_NTSC_M: pStr = sNTSC_M; break;
case _TV_NTSC_4_BG: pStr = sNTSC_4_BG; break;
case _TV_NTSC_4_DK: pStr = sNTSC_4_DK; break;
case _TV_NTSC_4_I: pStr = sNTSC_4_I; break;
case _TV_PAL_M: pStr = sPAL_M; break;
case _TV_PAL_BG: pStr = sPAL_BG; break;
case _TV_PAL_I: pStr = sPAL_I; break;
case _TV_PAL_DK: pStr = sPAL_DK; break;
case _TV_PAL_N: pStr = sPAL_N; break;
case _TV_SECAM_BG: pStr = sSECAM_BG; break;
case _TV_SECAM_DK: pStr = sSECAM_DK; break;
case _TV_SECAM_L: pStr = sSECAM_L; break;
case _TV_SECAM_LL: pStr = sSECAM_L; break;
}
CTextOutEx(pStr, 0, 1);
}
COsdFxEnableOsd();
CTimerReactiveTimerEvent(SEC(5), COsdDispOsdTimerEvent);
bOSDTimeOut = 0;
#if(_SLEEP_FUNC)
bOSDOnScreen = 1;
#endif
}
#endif // #if(_VIDEO_TV_SUPPORT)
//---------------------------------------------------------------------------
void CShowPictureMode()
{
BYTE *pStr;
//ucOsdState = _MI_MENU_NONE;
COsdFxDisableOsd();
InitOsdFrame();
SetOSDDouble(0x03);
OSDClear(0, 8, 0, 30, 0x8C, BYTE_ATTRIB);
OSDClear(0, 8, 0, 30, 0x00, BYTE_DISPLAY);
OSDClear(0, 1, 0, 30, 0xc0, BYTE_COLOR);
COsdFxCodeWrite(ucCloseAllWindow);
// TextOut
switch(GET_Picture_Mode())
{
case 0: pStr = sStandard_Eng; break;
case 1: pStr = sSoft_Eng; break;
case 2: pStr = sVivid_Eng; break;
case 3: pStr = sPersonal_Eng; break;
}
CCenterTextout(pStr,0,0,8);
OSDClear(0, 8, 0, 30, 0xc0, BYTE_COLOR);
// Draw Window
//COsdFxDrawWindow(0,8, //WORD usXStart,WORD usYStart,
// _NOTE_WIDTH,_NOTE_HEIGHT, //WORD usXEnd,WORD usYEnd,
// tMainWindowStyle); //BYTE *pStyle)
//if (GET_OSD_SIZE())
// OSDPosition(_OSD_DOUBLE_WIDTH(_NOTE_WIDTH), _OSD_DOUBLE_HEIGHT(_NOTE_HEIGHT), 0, 0, 0x03);
//else
OSDPosition(_NOTE_WIDTH, _NOTE_HEIGHT, 41, 0, 0x03);
CTimerReactiveTimerEvent(SEC(5), COsdDispOsdTimerEvent);
COsdFxEnableOsd();
bOSDTimeOut = 0;
bOSDOnScreen = 1;
CTimerReactiveTimerEvent(SEC(5), COsdDispOsdTimerEvent);
bOSDTimeOut = 0;
// bOSDOnScreen = 0;
}
//---------------------------------------------------------------------------
void Draw2bit3x2Icon(BYTE *tIcon,BYTE x,BYTE y)
{
Gotoxy(x,y,ALL_BYTE);
pData[0] = tIcon[0];
pData[1] = tIcon[1];
pData[2] = tIcon[2];
pData[3] = tIcon[0];
pData[4] = tIcon[1] + 1;
pData[5] = tIcon[2];
pData[6] = tIcon[0];
pData[7] = tIcon[1] + 2;
pData[8] = tIcon[2];
CScalerWrite(_OSD_DATA_PORT_92, 9, pData, _NON_AUTOINC);
Gotoxy(x,y + 1,ALL_BYTE);
pData[0] = tIcon[0];
pData[1] = tIcon[1] + 3;
pData[2] = tIcon[2];
pData[3] = tIcon[0];
pData[4] = tIcon[1] + 4;
pData[5] = tIcon[2];
pData[6] = tIcon[0];
pData[7] = tIcon[1] + 5;
pData[8] = tIcon[2];
CScalerWrite(_OSD_DATA_PORT_92, 9, pData, _NON_AUTOINC);
}
//---------------------------------------------------------------------------
BYTE AdjustMenuItem(BYTE ucBeginItem,BYTE ucEndItem,BYTE ucMode)
{
BYTE i;
BYTE ucCount;
BYTE ucNewItem;
CLR_KEYREPEATENABLE();
//如果菜单只有一项,直接返回
ucCount = ucEndItem - ucBeginItem;
if(ucCount < 1)
{
return ucOsdState;
}
// 计算下一项菜单,或是上一菜单
i = 0;
ucNewItem = ucOsdState;
while(i < ucCount)
{
ucNewItem = ValueInRangeChange(ucBeginItem, ucEndItem, ucNewItem, ucMode | _LOOP);
if(g_tMenuItem[ucNewItem].Enable())
{
break;
}
i++;
}
return ucNewItem;
}
//----------------------------------------------------------------------------------------------------
BYTE GetShowIndex(BYTE ucMenuItem,BYTE ucBeginItem,BYTE ucEndItem)
{
BYTE Index;
bit fEnable;
bit fDisableNoShow;
Index = 0;
while(ucBeginItem <= ucEndItem)
{
fEnable = g_tMenuItem[ucBeginItem].Enable();
if((g_tMenuItem[ucBeginItem].Option & _DISABLE_NOT_SHOW) != _DISABLE_NOT_SHOW)
fDisableNoShow = 0;
else
fDisableNoShow = 1;
if(ucBeginItem == ucMenuItem)
{
if(fEnable)
{
return Index;
}
else
{
if(fDisableNoShow)
return _NOT_SHOW;
else
return Index;
}
}
if(ucBeginItem > ucMenuItem)
return _NOT_SHOW;
if(!fDisableNoShow)
{
Index++;
}
else
{
if(fEnable)
{
Index++;
}
}
ucBeginItem++;
}
return _NOT_SHOW;
}
//----------------------------------------------------------------------------------------------------
BYTE GetShowCount(BYTE ucBeginItem,BYTE ucEndItem)
{
BYTE ucCount;
bit fEnable;
bit fDisableNoShow;
ucCount = 0;
while(ucBeginItem <= ucEndItem)
{
fEnable = g_tMenuItem[ucBeginItem].Enable();
if((g_tMenuItem[ucBeginItem].Option & _DISABLE_NOT_SHOW) != _DISABLE_NOT_SHOW)
fDisableNoShow = 0;
else
fDisableNoShow = 1;
if(!fDisableNoShow)
{
ucCount++;
}
else
{
if(fEnable)
{
ucCount++;
}
}
ucBeginItem++;
}
return ucCount;
}
//----------------------------------------------------------------------------------------------------
void TextOutCalcWidth(BYTE *pStr,BYTE row,BYTE col,BYTE ucMaxLength,BYTE ucDisplayPixcel)
{
BYTE ucPixLen = CTextOutBase(pStr, col, row);
BYTE i = StrLen(pStr);
ucMaxLength -= 1;
CScalerSendAddr(_OSD_DATA_PORT_92, _NON_AUTOINC);
for(;i<ucMaxLength;i++)
{
*(&MCU_SCA_INF_DATA_FFF5) = (0x80 | 4);
ucPixLen += 4;
}
//CScalerSendWriteStop();
// 计算 Blank 宽度
ucPixLen = ucDisplayPixcel - ucPixLen;
//设置 Blank
Gotoxy(col + ucMaxLength,row,ALL_BYTE);
pData[0] = 0x00;
pData[1] = ucPixLen;
//pData[2] = ucBlankColor;
CScalerWrite(_OSD_DATA_PORT_92, 2, pData, _NON_AUTOINC);
}
//---------------------------------------------------------------------------
void CSetMuteState(void)
{
if (GET_AUDIO_MUTE()) // Mute on
CLR_AUDIO_MUTE();
else
SET_AUDIO_MUTE();
CDrawMuteState();
#if(_VIDEO_TV_SUPPORT)
#if(_IF_PLL_DE_CHIP == _IF_PLL_DE_1338)
if ((_GET_INPUT_SOURCE() == _SOURCE_VIDEO_TV && gmi_CModeLocked()) || _GET_INPUT_SOURCE() != _SOURCE_VIDEO_TV)
#endif
#endif
CSetVolume();
ucOsdEventMsg = _SAVE_EE_AUDIO_DATA_MSG;
}
//-----------------------------------------------------------------------
void CDrawMuteState(void)
{
ucOsdState = _MI_MENU_NONE;
#if(_VIDEO_TV_SUPPORT)
bChangeChannel = 0;
#endif
COsdFxDisableOsd();
//SetOSDDouble(0x03);
SetOSDDouble((GET_OSD_SIZE() ? 0x03 : 0x00) | OSD_WINDOWCHAR_BLENDING);
SetOsdMap(tMsgOsdMap);
// Init OSD Ram
OSDClear(0, 8, 0, 30, 0x8C, BYTE_ATTRIB);
OSDClear(0, 8, 0, 30, 0x00, BYTE_DISPLAY);
OSDClear(0, 8, 0, 30, 0xF0, BYTE_COLOR);
COsdFxCodeWrite(ucCloseAllWindow);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -