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

📄 play_dvd.c

📁 MTK 1389E SOURCE CODE
💻 C
📖 第 1 页 / 共 5 页
字号:
/**********************************************************************/
/***************    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 + -