📄 osdcore.c
字号:
/**********************************************************************/
/*************** MTK CONFIDENTIAL & COPYRIGHTED ****************/
/*************** ****************/
/*************** $Modtime:: 05/04/03 4:38p $ ****************/
/*************** $Revision: 2.0 $ ****************/
/*************** ****************/
/*************** Description : high level OSD ****************/
/*************** management module ****************/
/*************** Company : MediaTek Inc. ****************/
/*************** Programmer : Peter Huang ****************/
/**********************************************************************/
#define _OSDCORE_C_
#include "general.h"
#pragma NOAREGS
#ifdef TEMP_VERIFY_FOR_OSD_ERROR
extern xdata BYTE _bClearAudCtl;
#endif
#ifdef TEMP_VERIFY_PLAYINFO_ERROR
extern xdata BYTE _bClearStatusBmp;
#endif
#ifdef MPEG4_TXT_SP
extern BOOL fgFlMpSubResume(void) large;
extern BOOL fgFlMpSubLeave(void) large;
#endif
#ifdef DL339_MENU
extern BYTE xdata _bOSDLanguageFlag;
#endif
//#define OSDCORE_DEBUG
#ifdef OSDCORE_DEBUG
extern void DRS232LogS(char *pcStr);
extern void DRS232LogB(BYTE bV1, BYTE bV2, BYTE bV3, BYTE bV4);
#endif
// *********************************************************************
// Local Define
// *********************************************************************
// *********************************************************************
// Normal playback used white board
// *********************************************************************
static code BYTE pbWbLayer1[] = {
WB_NORMAL_HEAD1,
WB_NORMAL_HEAD2,
WB_NORMAL_PBC1,
WB_NORMAL_PBC2,
WB_NORMAL_VOL,
WB_NORMAL_INITMSG
};
static code BYTE pbWbLayer2[] = {
WB_OVERLAY_MSG1,
WB_OVERLAY_MSG2,
WB_OVERLAY_MSG3,
WB_OVERLAY_MSG4
};
static code BYTE pbWbFsMenu[] = {
FSMENU_OSD_WBIDX_BASIC,
FSMENU_OSD_WBIDX_SEC
};
static code BYTE pbWbFullScr[] = {
WB_DGST_DISP1, WB_DGST_DISP1A,
WB_DGST_DISP2, WB_DGST_DISP2A,
WB_DGST_DISP3, WB_DGST_MENU
};
#define WB_LAYER1_NS TBL_SIZE(pbWbLayer1)
#define WB_LAYER2_NS TBL_SIZE(pbWbLayer2)
#define WB_FULL_SCR_NS TBL_SIZE(pbWbFullScr)
#define WB_FSMENU_NS TBL_SIZE(pbWbFsMenu)
#define WB_ST_DISP_NS TBL_SIZE(pbWbStaticDisp)
typedef union {
BYTE Byte;
struct {
BYTE Wb1Hili:1;
BYTE Wb2Hili:1;
BYTE Wb3Hili:1;
BYTE Wb4Hili:1;
} Bit;
} uOsdLayer1Status;
typedef union {
BYTE Byte;
struct {
BYTE Wb1Hili:1;
BYTE Wb2Hili:1;
BYTE Wb3Hili:1;
BYTE Wb4Hili:1;
BYTE Line1:1;
BYTE Line2:1;
BYTE Line3:1;
BYTE Line4:1;
} Bit;
} uOsdLayer2Status;
// *********************************************************************
// For static display WB
// *********************************************************************
// note the sequence is from layer low to layer high
static code BYTE pbWbStaticDisp[] = {
#ifdef PLAYER_ZOOMIN_INDICATOR
WB_ZOOM_BR,
#endif
#ifdef SPTM_SUPPORT
WB_NORMAL_SPTM,
#endif
WB_INDEX_MAX
};
static BYTE bRecallStDispWB(void) large
{
// note the recall sequence is from high to low
#ifdef SPTM_SUPPORT
if (fgIsEqShow())
{
vDeleteWB(WB_ZOOM_BR);
vCreateWBEx(WB_NORMAL_SPTM);
vSptmDraw(bEqCurrType());
vEnableWB(WB_NORMAL_SPTM);
return (OSD_WB_SPECTRUM);
}
else
{
vDeleteWB(WB_NORMAL_SPTM);
}
#endif
#ifdef PLAYER_ZOOMIN_INDICATOR
if (fgIsZoomBrShow())
{
#ifdef MPEG4_TXT_SP
fgFlMpSubLeave();
#endif
vCreateWBEx(WB_ZOOM_BR);
vEnableWB(WB_ZOOM_BR);
// 20050607, PL00000259, sometimes SI_ZOOM_OFST_X are not updated yet, we should not call vZoomBrUpdate() now, or fgIsZoomBrShow() will be set to FALSE
if ((bSharedInfo(SI_ZOOM_OFST_X_HI) == 0xFF) || (bSharedInfo(SI_ZOOM_OFST_X_LO)==0xFF))
{
return (OSD_WB_ZOOM_BR);
}
//vZoomBrUpdate();//peiyu,050617,make no use
// Add it by Bright_liu 2005/10/05
if(fgZoomBrCheck())
{
vZoomBrUpdate2();
}
return (OSD_WB_ZOOM_BR);
}
else
{
vDeleteWB(WB_ZOOM_BR);
#ifdef MPEG4_TXT_SP
fgFlMpSubResume();
#endif
}
#endif /* PLAYER_ZOOMIN_INDICATOR */
return (OSD_WB_NORMAL);
}
// *********************************************************************
// Function : void vDisableWB(BYTE bWbIdx) large
// Description :
// Parameter :
// Return : None
// *********************************************************************
void vDisableWB(BYTE bWBIndex) large
{
switch(bWBIndex)
{
case WB_NORMAL_HEAD1:
case WB_NORMAL_HEAD2:
case WB_NORMAL_PBC1:
case WB_NORMAL_PBC2:
case WB_NORMAL_INITMSG:
vWBDisable(bWBIndex);
break;
default:
vDeleteWB(bWBIndex);
break;
}
}
// *********************************************************************
// Function : void vCreateWBEx(BYTE bWbIdx) large
// Description :
// Parameter :
// Return : None
// *********************************************************************
void vCreateWBEx(BYTE bWbIdx) large
{
extern xdata DWRD _dCreatedWB;
if (_dCreatedWB & (0x01L << bWbIdx))
{
return;
}
switch(bWbIdx)
{
case WB_NORMAL_HEAD1:
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
vSetMsgCol4(bWbIdx, HEAD_MSG_COL0, HEAD_MSG_COL1, HEAD_MSG_COL2, HEAD_MSG_COL3);
vSetTcPal(bWbIdx, HEAD_MSG_COL1, HEAD_MSGBG_BLEND, NEWUICOLOR_PANEL_GRAY);
vSetTcPal(bWbIdx, HEAD_ICON_COL, BLEND_3, TRUECOLOR_YELLOW);
vSetTransEn(bWbIdx, HEAD_BG_COL);
break;
case WB_NORMAL_HEAD2:
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
vSetMsgCol4(bWbIdx, HEAD_MSG_COL0, HEAD_MSG_COL1, HEAD_MSG_COL2, HEAD_MSG_COL3);
vSetTcPal(bWbIdx, HEAD_MSG_COL1, HEAD_MSGBG_BLEND, NEWUICOLOR_PANEL_GRAY);
vSetTransEn(bWbIdx, HEAD_BG_COL);
break;
case WB_OVERLAY_MSG1:
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
vSetMsgCol4(bWbIdx, OVERLAY_MSG_COL0, OVERLAY_MSG_COL1, OVERLAY_MSG_COL2, OVERLAY_MSG_COL3);
vSetTcPal(bWbIdx, OVERLAY_MSG_COL1, OVERLAY_MSGBG_BLEND, NEWUICOLOR_PANEL_GRAY);
vSetTcPal(bWbIdx, OVERLAY_ICON_COL, BLEND_3, TRUECOLOR_RED);
vSetTransEn(bWbIdx, OVERLAY_BG_COL);
break;
case WB_NORMAL_PBC1:
case WB_NORMAL_PBC2:
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
vSetMsgCol4(bWbIdx, HEAD_MSG_COL0, HEAD_MSG_COL1, HEAD_MSG_COL2, HEAD_MSG_COL3);
vSetTcPal(bWbIdx, HEAD_MSG_COL1, HEAD_MSGBG_BLEND, NEWUICOLOR_PANEL_GRAY);
vSetTransEn(bWbIdx, HEAD_BG_COL);
break;
case WB_OVERLAY_MSG2:
case WB_OVERLAY_MSG3:
case WB_OVERLAY_MSG4:
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
vSetMsgCol4(bWbIdx, OVERLAY_MSG_COL0, OVERLAY_MSG_COL1, OVERLAY_MSG_COL2, OVERLAY_MSG_COL3);
vSetTcPal(bWbIdx, OVERLAY_MSG_COL1, OVERLAY_MSGBG_BLEND, NEWUICOLOR_PANEL_GRAY);
vSetTransEn(bWbIdx, OVERLAY_BG_COL);
break;
case WB_NORMAL_INITMSG:
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
vSetMsgCol4(bWbIdx, INIT_MSG_COL0, INIT_MSG_COL1, INIT_MSG_COL2, INIT_MSG_COL3);
vSetTcPal(bWbIdx, INIT_MSG_COL2, INIT_MSGBG_BLEND, TRUECOLOR_BLACK);
vSetTcPal(bWbIdx, INIT_ICON_COL0, INIT_ICON_COL0_BLEND, TRUECOLOR_WHITE);
vSetTcPal(bWbIdx, INIT_ICON_COL1, INIT_ICON_COL1_BLEND, TRUECOLOR_WHITE);
vSetTcPal(bWbIdx, INIT_ICON_COL2, INIT_ICON_COL2_BLEND, TRUECOLOR_WHITE);
vSetTransEn(bWbIdx, INIT_BG_COL);
break;
case WB_NORMAL_SPTM:
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
vSetTransEn(bWbIdx, SPTM_BG_COL);
break;
case WB_ZOOM_BR:
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
vSetTransEn(bWbIdx,0);
vSetTcPal(bWbIdx, 1, 0, TRUECOLOR_WHITE);
break;
case WB_NORMAL_VOL:
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
vSetTcPal(bWbIdx, VOL_MSG_COL1, VOL_MSGBG_BLEND, NEWUICOLOR_PANEL_GRAY);
vSetMsgCol4(bWbIdx, VOL_MSG_COL0, VOL_MSG_COL1, VOL_MSG_COL2, VOL_MSG_COL3);
vSetTransEn(bWbIdx, VOL_BG_COL);
break;
case FSMENU_OSD_WBIDX_BASIC:
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
vSetMsgCol4(bWbIdx, 0, 0, 3, 2);
vSetTransEn(bWbIdx,0); //add by linshangbo 05.12.25
break;
case FSMENU_OSD_WBIDX_SEC:
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
vSetTransEn(bWbIdx, 0);
break;
default:
vCreateWB(bWbIdx, TRUE);
vSetWBTcColor(bWbIdx);
break;
}
}
// *********************************************************************
// Function : void vOsdCoreInit(void) large
// Description :
// Parameter :
// Return : None
// *********************************************************************
void vOsdCoreInit(void) large
{
BYTE i;
/* OSD core state flag setting */
vSetLayer2Change(FALSE);
_rOsdCore.fgRefreshNow = FALSE;
vCreateWBEx(WB_NORMAL_INITMSG);
/* trick: assume init state is only in HEAD wb line 1 */
i = bEepromReadByte(OSD_LANG_POSITION);
if(i >= EV_OSD_LANG_NS) // Bright_liu
fgEepromWriteByte(OSD_LANG_POSITION, EV_OSD_ENGLISH); //guosong 121305
#ifdef DL339_MENU
#ifdef RU_OSD_EN
if(i)
_bOSDLanguageFlag = 1;
else
#endif
_bOSDLanguageFlag = 0;
#endif
vOsdSetLang(bEepromReadByte(OSD_LANG_POSITION));
/* warrning, must sync with the code of the vShowInitState() */
i = bSharedInfo(SI_SRV_BOOT_STATE);
if (i == SV_SRV_BOOT_EJECT)
{
vOsdShowInitState(SV_TRAY_OPENING);
}
else if (i == SV_SRV_BOOT_LOAD)
{
if ((_bLastSyncUop != UOP_POWER) && (_bLastSyncUop != UOP_OPEN_CLOSE))
{
if (fgIsTrayInside())
{
vOsdShowInitState(SV_LOADING_DISC);
}
else
{
vOsdShowInitState(SV_TRAY_CLOSING);
}
}
}
else if (i == SV_SRV_BOOT_UPG)
{
}
else /* default state */
{
}
/* for HEAD wb line 1 and 2 */
vCreateWBEx(WB_NORMAL_HEAD1);
vCreateWBEx(WB_NORMAL_HEAD2);
/* for PBC wb */
vCreateWBEx(WB_NORMAL_PBC1);
vCreateWBEx(WB_NORMAL_PBC2);
/* for VOLUME wb */
vCreateWBEx(WB_NORMAL_VOL);
/* enable WB */
vEnableWB(WB_NORMAL_INITMSG);
vEnableWB(WB_NORMAL_HEAD1);
vEnableWB(WB_NORMAL_HEAD2);
vEnableWB(WB_NORMAL_PBC1);
vEnableWB(WB_NORMAL_PBC2);
vEnableWB(WB_NORMAL_VOL);
/* set initial status */
vSetSharedInfo(SH_OSD_LAYER1_WB, 0x7f); /* all layer 1 WB enable */
vSetSharedInfo(SH_OSD_LAYER1_STATUS, 0x00);
vSetSharedInfo(SH_OSD_LAYER2_WB, 0x00); /* all layer 2 WB disable */
vSetSharedInfo(SH_OSD_LAYER2_STATUS, 0x00);
for (i = 0; i < OSD_TIMER_MAX; i++)
{
vSetSharedInfo(SH_OSD_TIMER_START + i, 0);
}
/* set OSD wb mode */
vSetSharedInfo(SH_OSD_WB_MODE, OSD_WB_NORMAL);
vSetSharedInfo(SH_OSD_WB_SAVED, OSD_WB_NONE);
/* file system code page asigned */
vSetFsCodePage(CODE_PAGE_MENU);
/* set OSD state to run state */
vOsdSetSt(OSD_ST_RUN);
//for SPECTRUM wb
#ifdef SPTM_SUPPORT
vCreateWBEx(WB_NORMAL_SPTM);
#endif
#ifdef PLAYER_ZOOMIN_INDICATOR
// for ZOOM IN indicator
vCreateWBEx(WB_ZOOM_BR);
#endif
}
#if 0//def MT1389_REV_HD
void vOsdShowHDWarning(BOOL fgHdMode) large //tide@051213
{
BYTE bWbIdxDummy = 0x0;
WORD wMsgIndex;
bHiByte(_wStartX) = 0x0;
bLoByte(_wStartX) = 0x20;
bHiByte(_wStartY) = 0x0;
bLoByte(_wStartY) = 0x0;
vOsd2MsgPaste(bWbIdxDummy, wMsgIndex);
}
#endif /* MT1389_REV_HD */
// *********************************************************************
// Function : void vOsdCoreLayer1Refresh(void)
// Description :
// Parameter :
// Return : None
// *********************************************************************
void vOsdCoreLayer1Refresh(void) large
{
/* for play status show */
if (_rOsdStateCtx.fgPlayShow == TRUE)
{
if (bSharedInfo(SH_OSD_TIMER_PLAY_STATUS) == 0)
{
_rOsdStateCtx.fgPlayShow = FALSE;
_rOsdStateCtx.bPlayType = OSD_SHOW_PLAY;
/* update flag first then call show PBC state */
vShowPbcState(bSharedInfo(SI_PBC_STATE));
}
}
/* for audio status show */
if (_rOsdStateCtx.fgAudioStatusRecall == TRUE)
{
if (bSharedInfo(SH_OSD_TIMER_AUDIO_CTRL) == 0)
{
_rOsdStateCtx.fgAudioStatusRecall = FALSE;
if (_rOsdStateCtx.bAudioStatus == OSD_AUDIO_SHOW_MUTE)
{
vOsdShowMute(OSD_MUTE_ON);
}
}
}
}
// *********************************************************************
// Function : void vOsdCoreLayer2Refresh(void)
// Description :
// Parameter :
// Return : None
// *********************************************************************
void vOsdCoreLayer2Refresh(void) large
{
uOsdLayer1Status uTmp1;
uOsdLayer2Status uTmp2;
BYTE bCnt, bIdx;
BYTE bChanged;
BYTE bWbMode;
uTmp1.Byte = bSharedInfo(SH_OSD_LAYER1_STATUS);
uTmp2.Byte = bSharedInfo(SH_OSD_LAYER2_STATUS);
bWbMode = bSharedInfo(SH_OSD_WB_MODE);
/* LINE 1 */
bChanged = 0;
bCnt = bSharedInfo(SH_OSD_TIMER_LAYER2_1);
if (uTmp2.Bit.Line1)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -