📄 play_dvd.c
字号:
/**********************************************************************/
/*************** MTK CONFIDENTIAL & COPYRIGHTED ****************/
/*************** ****************/
/*************** $Modtime:: 05/05/19 11:01a $ ****************/
/*************** $Revision:: 4 $ ****************/
/*************** ****************/
/*************** Description : ****************/
/*************** ****************/
/*************** Company : MediaTek Inc. ****************/
/*************** Programmer : ****************/
/**********************************************************************/
#define _PLAY_DVD_C_
#pragma NOAREGS
#include "general.h"
#ifdef MTK_MENU
#include "setupmn\stppass.h" /* for password check */
#else
#include "setup\passr.h" /* for password check */
#endif
#define fgIsTimeSearchAllow() ((fgCheckUopBlock(SV_NV_TIME_PLAY) == FALSE) && \
(fgCheckUopBlock(SV_NV_TIME_SEARCH) == FALSE))
#ifdef DVD_NO_PTT_PLAY_UOP_BLOCK
#define fgIsPTTSearchAllow() (fgCheckUopBlock(SV_NV_TIME_SEARCH) == FALSE)
#else
#define fgIsPTTSearchAllow() ((fgCheckUopBlock(SV_NV_PTT_PLAY) == FALSE) && \
(fgCheckUopBlock(SV_NV_TIME_SEARCH) == FALSE))
#endif
#define fgIsTTLSearchAllow() (fgCheckUopBlock(SV_NV_TITLE_PLAY) == FALSE)
#if (defined(MINI_DVD_SUPPORT) && defined(MINI_DVD_8X_SPEED))
extern BYTE xdata _bMaxSpeed;
extern BYTE xdata _bOptimumSpeed;
#endif
// *********************************************************************
// Function : void vDVDInit(BYTE bType) large
// Description : DVD play module initial
// Parameter : None
// Return : None
// *********************************************************************
void vDVDInit(BYTE bType) large
{
#ifdef PLAYER_BOOKMARK
vBookmarkReset();
#endif
#ifdef MINI_DVD_8X_SPEED
if (bSharedInfo(SI_DISC_TYPE) == SV_MINI_DVD)
{
_bOptimumSpeed = 8;
_bMaxSpeed = 8;
}
#endif
_fgDVDStopPlayWait = FALSE ;
#if (defined(USE_8032_AUTO_PLAY) && defined(DVD_AUTO_PLAY))
#ifdef DVD_LAST_MEM
vSendUopCmd(UOP_PLAY, SV_STOP_PLAY_CHK_LASTMEM, 0, 0);
#else
vSendUopCmd(UOP_PLAY, 0, 0, 0);
#endif
#endif
}
// *********************************************************************
// Function : void vDVDExit(void) large
// Description : DVD play module exit
// Parameter : None
// Return : None
// *********************************************************************
void vDVDExit(void) large
{
BYTE bTmp;
/* reset temperal parental level to original value, temp use method */
#if 0
if (bEepromReadByte(PASS_SW_POSITION) == SV_OFF)
{
vSystemParentalLevel(8);
}
else
#endif
{
//FIXME: assume offset 0, defined in menu.h
bTmp = bEepromReadByte(PTL_LEVEL_POSITION);
if (bTmp > 9)
{
bTmp = 9;
}
else if (bTmp < 1)
{
bTmp = 1;
}
if (bTmp == 9) // parental off
{
vSystemParentalLevel(0x0f);
}
else
{
vSystemParentalLevel(bTmp);
}
#ifdef DVDAUD_HIDE_HGR
vSetSharedInfo(SI_HIDE_HGR, SV_ON);
#endif
vSetSharedInfo(SI_DVD_AUDIO_USR_AST, 0);
}
}
// *********************************************************************
// Input State Function: Check Password
// *********************************************************************
#ifdef MTK_MENU
BOOL fgDVDComparePwd(BYTE *pbDigit) large
{
BYTE i;
for (i = 0; i < PASSWORD_LEN; i++)
{
// for nui
vSetSharedInfo(SH_DLG_VAL_0 + i, pbDigit[i]);
}
// for nui
return (bCheckOldPwd(0, 0));
}
#else /* !MTK_MENU */
BOOL fgDVDComparePwd(BYTE *pbDigit) large
{
BYTE i;
for (i = 0; i < PASSWORD_LEN; i++)
{
vSetSharedInfo(SH_PASS_0 + i, pbDigit[i]);
}
return (fgPassCorr());
}
#endif /* !MTK_MENU */
void vDVDPwdInputInit(BYTE fgInit) large
{
vNumInInitState(NUM_IN_TYPE_2, PASSWORD_LEN);
vOsdPosShow(OSD_POS_PLAY_INFO, OSD_MSG_PARENTAL_VIOLATION, OSD_NO_DISAPPEAR);
vOsdShowPassword(0, PASSWORD_LEN, 0);
/* no input timeout */
vIrSetTimeOut(IR_TIMER_VOID);
}
BOOL fgDVDPwdInputState(void) large
{
BOOL fgRetVal = TRUE;
BYTE bPbcState = bSharedInfo(SI_PBC_STATE);
if (fgIsPlayEnterKey(_bIRKey))
{
if (_rNumInStateCtx.rState.fgComplete)
{
vOsdShowPassword(OSD_PASSWORD_CLEAR, PASSWORD_LEN, 0);
vOsdPosClear(OSD_POS_PLAY_INFO);
if (_rNumInStateCtx.rState.fgCancel == FALSE)
{
if (fgDVDComparePwd(_rNumInStateCtx.bDig) == TRUE)
{
/* set temp parental success */
vSendUopCmd(UOP_PLAY, 0, SV_PTL_PWD_OK, 0);
}
else /* password check error */
{
vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_PWD_ERR, OSD_TIMEOUT);
if (bPbcState == SV_SET_TMP_PTL)
{
/* set temp parental fail */
vSendUopCmd(UOP_PLAY, 0, SV_PTL_PWD_FAIL, 0);
}
else
{
/* pass STOP to main state */
_bIRKey = IR_STOP;
fgRetVal = FALSE;
}
}
}
else /* ? */
{
vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_PWD_ERR, OSD_TIMEOUT);
/* pass STOP to main state */
_bIRKey = IR_STOP;
fgRetVal = FALSE;
}
vSetExitInputState();
} /* fgComplete */
}
else if ((_bIRKey < IR_ADD10) || (_bIRKey == IR_CLEAR))
{
if ((_rNumInStateCtx.rState.fgComplete == FALSE) || (_bIRKey == IR_CLEAR))
{
fgNumInState();
vOsdShowPassword(_rNumInStateCtx.rState.bDigNum, PASSWORD_LEN, _rNumInStateCtx.bDig);
}
}
else /* if (_bIRKey >= IR_ADD10) */
{
if (_bIRKey < IR_INTERNAL_KEY_START)
{
/* don't pass the key */
fgRetVal = TRUE;
}
else
{
/* pass the key */
fgRetVal = FALSE;
}
}
return (fgRetVal);
}
#ifdef SUPPORT_DVD_AUDIO
// *********************************************************************
// Input State Function: Dvd Audio Hidden Group Check Password
// *********************************************************************
BOOL fgDACompareHdnPwd(BYTE *pbPwd) large
{
BYTE bHiddenPwd;
bHiddenPwd = bSharedInfo(SI_HIDDEN_PASSWD0);
if ((BCD_HI(bHiddenPwd) != pbPwd[0]) || (BCD_LO(bHiddenPwd) != pbPwd[1]))
{
return FALSE;
}
bHiddenPwd = bSharedInfo(SI_HIDDEN_PASSWD1);
if ((BCD_HI(bHiddenPwd) != pbPwd[2]) || (BCD_LO(bHiddenPwd) != pbPwd[3]))
{
return FALSE;
}
return TRUE;
}
#endif /* SUPPORT_DVD_AUDIO */
void vDAHdnGrpPwdInputInit(BYTE fgInit) large
{
#ifdef SUPPORT_DVD_AUDIO
vNumInInitState(NUM_IN_TYPE_2, 4);
vOsdShowDiscPassword(0, 0);
/* no input timeout */
vIrSetTimeOut(IR_TIMER_VOID);
#endif
}
BOOL fgDAHdnGrpInputState(void) large
{
BOOL fgRetVal = TRUE;
#ifdef SUPPORT_DVD_AUDIO
if (fgIsPlayEnterKey(_bIRKey))
{
if (_rNumInStateCtx.rState.fgComplete)
{
vOsdShowDiscPassword(OSD_PASSWORD_CLEAR, 0);
vOsdPosClear(OSD_POS_PLAY_INFO);
if (_rNumInStateCtx.rState.fgCancel == FALSE)
{
if (fgDACompareHdnPwd(_rNumInStateCtx.bDig) == TRUE)
{
vSendUopCmd(UOP_GROUP_PLAY, bSharedInfo(SI_GRP_NS), 1, 0);
vSetSharedInfo(SI_HIDE_HGR, SV_OFF);
}
else /* password check error */
{
vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_PWD_ERR, OSD_TIMEOUT);
/* pass STOP to main state */
_bIRKey = IR_NONE;
// _bIRKey = IR_STOP;
fgRetVal = FALSE;
}
}
else /* ? */
{
vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_PWD_ERR, OSD_TIMEOUT);
/* pass STOP to main state */
_bIRKey = IR_NONE;
// _bIRKey = IR_STOP;
fgRetVal = FALSE;
}
vSetExitInputState();
} /* fgComplete */
}
else if ((_bIRKey < IR_ADD10) || (_bIRKey == IR_CLEAR))
{
if ((_rNumInStateCtx.rState.fgComplete == FALSE) || (_bIRKey == IR_CLEAR))
{
fgNumInState();
vOsdShowDiscPassword(_rNumInStateCtx.rState.bDigNum, _rNumInStateCtx.bDig);
}
}
else /* if (_bIRKey >= IR_ADD10) */
{
if (_bIRKey < IR_INTERNAL_KEY_START)
{
/* don't pass the key */
fgRetVal = TRUE;
}
else
{
/* pass the key */
fgRetVal = FALSE;
}
}
#endif
return (fgRetVal);
}
// *********************************************************************
// PTT Search State Machine
// *********************************************************************
void vDVDPTTSearchInit(BYTE fgInit) large
{
BYTE bDiscType = bSharedInfo(SI_DISC_TYPE);
if (_rSearchStateCtx.bType == SEARCH_DVD_CH)
{
if (bDiscType == SV_DVD_AUDIO)
{
vOsdShowChapterTimeSearch(0, bSharedInfo(SI_TRACK_NS), (OSD_DVD_CH_SEARCH | 0), 0);
}
else
{
vOsdShowChapterTimeSearch(0, bSharedInfo(SI_CHAP_NS), (OSD_DVD_CH_SEARCH | 0), 0);
}
}
else
{
_rSearchStateCtx.bType = SEARCH_DVD_PTT;
if (bDiscType == SV_DVD_AUDIO)
{
vOsdShowChapterSearch(bSharedInfo(SI_GRP_NO), bSharedInfo(SI_GRP_NS), 0,
0, bSharedInfo(SI_TRACK_NS), OSD_NO_DISAPPEAR);
}
else
{
vOsdShowChapterSearch(bSharedInfo(SI_TT_NO), bSharedInfo(SI_TT_NS), 0,
0, bSharedInfo(SI_CHAP_NS), OSD_NO_DISAPPEAR);
}
}
#ifdef NO_ADD10_KEY
#ifdef DVD_CHAP_3_DIGITS
if ((bSharedInfo(SI_CHAP_NS) > 99) || ((bDiscType == SV_DVD_AUDIO) && (bSharedInfo(SI_TRACK_NS) > 99)))
{
vNumInInitState(NUM_IN_SEQ_WAIT, 3);
}
else
#endif
{
vNumInInitState(NUM_IN_SEQ_WAIT, 2);
}
#else
#ifdef DVD_CHAP_3_DIGITS
if ((bSharedInfo(SI_CHAP_NS) > 99) || ((bDiscType == SV_DVD_AUDIO) && (bSharedInfo(SI_TRACK_NS) > 99)))
{
vNumInInitState(NUM_IN_TYPE_4, 1);
}
else
#endif
{
vNumInInitState(NUM_IN_TYPE_3, 1);
}
#endif
vIrSetTimeOut(IR_TIMEOUT_SEARCH);
}
BOOL fgDVDPTTSearchState(void) large
{
BOOL fgRetValue;
BYTE bChNs;
BYTE bDiscType = bSharedInfo(SI_DISC_TYPE);
if (bDiscType == SV_DVD_AUDIO)
{
bChNs = bSharedInfo(SI_TRACK_NS);
}
else
{
bChNs = bSharedInfo(SI_CHAP_NS);
}
if (_rSearchStateCtx.bType == SEARCH_DVD_TIME_CH_WAIT)
{
if (_bIRKey != IR_TIME_OUT)
{
return (TRUE);
}
}
/* check range here */
if ((_bIRKey <= IR_ADD10) && (_rNumInStateCtx.rState.bDigNum == 0))
{
if (_rNumInStateCtx.wNum + _bIRKey > bChNs)
{
vIrSetTimeOut(IR_TIMEOUT_SEARCH);
/* don't process the key */
return (TRUE);
}
}
// megaa ADD5 begin
if ((_bIRKey == IR_ADD5) && (_rNumInStateCtx.rState.bDigNum == 0))
{
if (_rNumInStateCtx.wNum + 5 > bChNs)
{
vIrSetTimeOut(IR_TIMEOUT_SEARCH);
/* don't process the key */
return (TRUE);
}
}
// megaa ADD5 end
fgRetValue = fgNumInState();
if (fgRetValue == TRUE)
{
if (_rNumInStateCtx.rState.fgComplete == TRUE)
{
if ((_rNumInStateCtx.rState.fgCancel == FALSE) &&
(_rNumInStateCtx.wNum <= bChNs))
{
if (_rSearchStateCtx.bType == SEARCH_DVD_CH)
{
vOsdShowChapterTimeSearch(_rNumInStateCtx.wNum, bChNs,
(OSD_DVD_CH_SEARCH | OSD_DVD_SEARCH_END), 0);
_rSearchStateCtx.bType = SEARCH_DVD_TIME_CH_WAIT;
vIrSetTimeOut(IR_TIMEOUT_SEARCH);
}
else
{
#ifdef SEARCH_INPUT_SHOW
if (bDiscType == SV_DVD_AUDIO)
{
vOsdShowChapterSearch(bSharedInfo(SI_GRP_NO), bSharedInfo(SI_GRP_NS), OSD_DVD_SEARCH_END,
_rNumInStateCtx.wNum, bChNs, OSD_TIMEOUT_SHORT);
}
else
{
vOsdShowChapterSearch(bSharedInfo(SI_TT_NO), bSharedInfo(SI_TT_NS), OSD_DVD_SEARCH_END,
_rNumInStateCtx.wNum, bChNs, OSD_TIMEOUT_SHORT);
}
#else
vOsdShowChapterSearch(0, 0, OSD_SEARCH_CLEAR, 0, 0, 0); /* clear OSD and input field */
#endif
_rSearchStateCtx.bType = SEARCH_NONE;
vSetExitInputState();
}
#ifdef DVD_NO_PTT_PLAY_UOP_BLOCK
if (fgCheckUopBlock(SV_NV_PTT_PLAY) == TRUE)
{
if (bDiscType == SV_DVD_AUDIO)
{
vSendUopCmd(UOP_TRACK_PLAY, _rNumInStateCtx.wNum, 0, 0);
}
else
{
vSendUopCmd(UOP_PTT_PLAY, _rNumInStateCtx.wNum, SV_PTT_PLAY_FORCE, 0);
}
}
else
#endif
{
if (bDiscType == SV_DVD_AUDIO)
{
vSendUopCmd(UOP_TRACK_PLAY, _rNumInStateCtx.wNum, 0, 0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -