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

📄 play_com.c

📁 手机8032的完整代码。吐血推荐。小做改动就可以生产。
💻 C
📖 第 1 页 / 共 5 页
字号:
  BYTE bTvOutMode;
  #ifdef VGA_SELECTION
  vSetSharedInfo(SI_SETUP_MENU,1);
  #endif
  #if (DRAM_SZ == DRAM_2M) || defined(USE_DRAM_CFG1)
  if (fgIsDvdPlay()
  #ifdef PROHIBIT_SAVE_SHADOW_IN_PLAY_STATE
  #ifdef VCD_SUPPORT
  || (fgIsVcdPlay())
  #endif
  #else //!PROHIBIT_SAVE_SHADOW_IN_PLAY_STATE
  #ifdef VCD_SUPPORT
  || (fgIsVcdPlay() && !fgIsVcdCddaTrk())
  #endif
  #endif
  )
  {
    switch (bSharedInfo(SI_PBC_STATE))
    {
      case SV_STOP:
      case SV_STOP_RESUME:
      case SV_PAUSE:
      // Allow
      break;

      default:
      // Not Allow
      vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
      // 20050428, IS00002663, if can't enter setup, clear it
      vSetSharedInfo(SH_PAUSE_SHOW_WB, 0) ;
      return;
    }
  }
  else if (fgIsNonPlay())
  {
  }
  else if (fgIsIsoPlay() || fgIsPcdPlay())    // PL00003815, add check PCD or it'll be returned in next step if CDDA_USE_CDFS isn't defined
  {
    if ((fgFlCheckStatus(FL_STATUS_IN_JPEG) || fgFlCheckStatus(FL_STATUS_IN_JPGDGST)) &&
    (bSharedInfo(SI_JPG_STT) == JPEGSTT_DEC_STRT))
    {
      return;
    }
  }

  #ifndef CDDA_USE_CDFS
  else  if(!fgIsCddaPlay())
  {
    return;
  }
  #endif

  #ifdef SUPPORT_DATA_DISC
  if (
  #ifdef SUPPORT_PCD
  fgIsPcdPlay() ||
  #endif
  (fgIsIsoPlay() && fgFlCheckStatus(FL_STATUS_IN_JPEG)))
  {
    vSendUopCmd(UOP_PAUSE, 0x01, 0x01, 0x00);
  }
  #ifdef PROHIBIT_SAVE_SHADOW_IN_PLAY_STATE
  else if (fgIsIsoPlay() && (!fgFlCheckStatus(FL_STATUS_IN_MPEG))&&
  ((bSharedInfo(SI_PBC_STATE) >= SV_PLAY) && (bSharedInfo(SI_PBC_STATE) <= SV_STEP_BACK) &&
  (bSharedInfo(SI_PBC_STATE) != SV_PAUSE)))
  {
    vSetSharedInfo(SH_PAUSE_SHOW_WB,SV_SHOW_SETUP);
    vSendUopCmd(UOP_PAUSE, 0x00, 0x00, 0x00);
  }
  #endif
  #endif
  #if (defined(SUPPORT_DATA_DISC) && defined(SETUP_PAUSE_PLAY))
  else
  #endif
  #ifdef SETUP_PAUSE_PLAY
  {
    vSendUopCmd(UOP_PAUSE, 0, 0, SV_SETUP_ENTER);
  }
  #endif

  #if 0
  #ifdef SETUP_PAUSE_PLAY

  if (
  #ifdef SUPPORT_PCD
  (!fgIsPcdPlay()) &&
  #endif
  (!(fgIsIsoPlay() && fgIsIsoItemStill(bSharedInfo(SI_ISO_ITEM_TYPE))))
  )
  {
    vSendUopCmd(UOP_PAUSE, 0, 0, SV_SETUP_ENTER);
  }
  else
  {
    vSendUopCmd(UOP_PAUSE, 0x01, 0x01, 0x00);
  }
  #endif /* SETUP_PAUSE_PLAY */
  #endif

  #endif /*#if (DRAM_SZ == DRAM_2M)  */
  _rOsdStateCtx.fgSetupShow = FALSE;
  #ifdef VGA_SELECTION
  bTvOutMode = bSharedInfo(SI_TVE_OUT_MODE);
  if(bTvOutMode & SV_CPNT_VGA)
  {
    vSetSharedInfo(SI_DAC1_CTRL,1);// DAC open
    vNotifySharedInfo(SI_DAC1_CTRL,0,0);
  }
  #endif
  vSetSharedInfo(SH_WAIT_FOR_WB_ALLOC,1);

  vSetupInitState();

  #ifdef IR_SUPPORT_SHIFT_KEY
  /* force use shift key table */
  vSetShiftKeyMode(TRUE);
  #endif

  #ifdef REAL_TIME_SAVE_FLASH_SHADOW
  _bStpInitTimer = 100;
  #endif

  _rOsdStateCtx.fgSetupShow = TRUE;
  //  _bKeyOldState = _bKeyState;
  vSetKeyState(KEY_SETUP);
}

// *********************************************************************
// Function : void vSetupMenuExit(void)
// Description :
// Parameter : None
// Return    : None
// *********************************************************************
void vSetupMenuExit(void) large
{
  BYTE bInitState = bSharedInfo(SI_INIT_STATE);
  BYTE bPbcState = bSharedInfo(SI_PBC_STATE);
  BYTE bTvOutMode;

  #ifndef PLAYER_BASIC
  if (fgIsIsoPlay()
  #ifdef SUPPORT_PCD
  ||fgIsPcdPlay()
  #endif
  )
  {
    vISOFsMenuShow(FS_MENU_SHOW_REFRESH); /* recall FS menu */
  }
  #endif

  #ifdef IR_SUPPORT_SHIFT_KEY
  /* force use normal key table */
  vSetShiftKeyMode(FALSE);
  #endif

  _rOsdStateCtx.fgSetupShow = FALSE;
  vRestorKeyState();
  //  _bKeyState = _bKeyOldState;

  #ifdef SETUP_PAUSE_PLAY
  switch (bInitState)
  {
    case SV_LOADING_DISC:
    vSendUopCmd(UOP_PAUSE, 0, 0, SV_SETUP_EXIT);
    return;

    case SV_TRAY_CLOSING:
    case SV_TRAY_OPENING:
    case SV_TRAY_ERROR:
    case SV_NO_DISC:
    case SV_UNKNOWN_DISC:
    return;

    case SV_DISC_IDENTIFIED:
    default:
    break; /* not determined */

  }

  /* PCD and Jpeg is handled by FSMENU */
  if (
  #ifdef SUPPORT_PCD
  fgIsPcdPlay() ||
  #endif
  (fgIsIsoPlay() && fgIsIsoItemStill(bSharedInfo(SI_ISO_ITEM_TYPE)))
  )
  {
    return;
  }

  switch (bPbcState)
  {
    case SV_STOP:
    case SV_STOP_RESUME:
    break;

    case SV_PAUSE:
    case SV_STEP:
    case SV_STEP_BACK:
    vSendUopCmd(UOP_PLAY, 0, 0, 0);
    break;

    case SV_SETUP_PAUSE:
    case SV_PBC_INIT:
    vSendUopCmd(UOP_PAUSE, 0, 0, SV_SETUP_EXIT);
    break;

    case SV_PTL_ERR:
    case SV_REGION_ERR:
    case SV_DISC_ERR:
    case SV_SET_TMP_PTL:
    break; /* allowed */

    case SV_PLAY:
    break;

    case SV_FF:
    #ifdef TRICK_MODE_USE_PLAY
    vSendUopCmd(UOP_PLAY, 0, 0, 0);
    #else
    vSendUopCmd(UOP_FORWARD, SV_FAST, 0, 0);
    #endif
    break;

    case SV_SF:
    #ifdef TRICK_MODE_USE_PLAY
    vSendUopCmd(UOP_PLAY, 0, 0, 0);
    #else
    vSendUopCmd(UOP_FORWARD, SV_SLOW, 0, 0);
    #endif
    break;

    case SV_FR:
    #ifdef TRICK_MODE_USE_PLAY
    vSendUopCmd(UOP_PLAY, 0, 0, 0);
    #else
    vSendUopCmd(UOP_REVERSE, SV_FAST, 0, 0);
    #endif
    break;

    case SV_SR:
    #ifdef TRICK_MODE_USE_PLAY
    vSendUopCmd(UOP_PLAY, 0, 0, 0);
    #else
    vSendUopCmd(UOP_REVERSE, SV_SLOW, 0, 0);
    #endif
    break;

    case SV_FREEZE:
    case SV_DIGEST9:
    case SV_DIGEST4:
    case SV_DIGEST:
    case SV_STILL:
    default:
    break;
  }
  #endif /* SETUP_PAUSE_PLAY */
  #ifdef VGA_SELECTION

  bTvOutMode = bSharedInfo(SI_TVE_OUT_MODE);
  if(bTvOutMode & SV_CPNT_VGA)
  {
    if (bSharedInfo(SI_CGMS))
    {
      vSetSharedInfo(SI_DAC1_CTRL,0);//DAC off
      vNotifySharedInfo(SI_DAC1_CTRL,0,0);
    }
  }
  vSetSharedInfo(SI_SETUP_MENU,0);

  #endif
  //pause before show WB
  if(bSharedInfo(SH_PAUSE_SHOW_WB) == SV_SHOW_SETUP)
  {
    // 20050428, IS00002663, don't clear yet, we'll clear this flag when RISC notify PBC_STATE
    //vSetSharedInfo(SH_PAUSE_SHOW_WB,0);//init
    vSendUopCmd(UOP_PLAY, 0, 0, 0);
  }
}

#ifdef EN_DISC_ID_CHK
// *********************************************************************
// For disc ID check password
// *********************************************************************
void vNONDLockPwdInit(BYTE fgInit) large
{
  vNumInInitState(NUM_IN_TYPE_2, PASSWORD_LEN);

  //show disc lock information here
  vOsdShowPassword(0, PASSWORD_LEN, 0);

  /* no input timeout */
  vIrSetTimeOut(IR_TIMER_VOID);
}

BOOL fgNONDLockPwdState(void) large
{
  BOOL fgRetVal = TRUE;

  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)
        {
          /* password check OK */
          vSetDiscInitFlag(DISC_INIT_PWD_OK);
        }
        else /* password check error */
        {
          /* pass IR_PASSWORD to main state to
          ask user input password again */
          _bIRKey = IR_PASSWORD;
          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);
}
#endif /* EN_DISC_ID_CHK */

// *********************************************************************
// From combine.c
// *********************************************************************
// *********************************************************************
// Handle system UOP return
// *********************************************************************
BYTE bCOMHandleUopRet(BYTE bUopId, BYTE bUopRet) large
{
  BYTE bRet = UOP_UPDATE;
  BYTE bTmp1, bTmp2;

  if (bUopRet != SV_NO_ERROR)
  {
    bRet = UOP_FAIL; /* show error */
  }
  else
  {
    bRet = UOP_UPDATE;
  }

  switch (bUopId)
  {
    case UOP_ZOOM_IN:
    {
      #ifdef DDISC_FTYPE_JPEG_SUPPORT
      if (bUopRet != SV_NO_ERROR)
      {
        #ifdef PLAYER_ZOOMIN_INDICATOR
        vDisableWB(WB_ZOOM_BR);
        #endif

        bTmp1 = bSharedInfo(SI_ZOOM_SWITCH);
        bTmp2 = bSharedInfo(SI_ISO_ITEM_TYPE);

        if (
        #ifdef SUPPORT_PCD
        fgIsPcdPlay() ||
        #endif
        (fgIsIsoPlay() && (bTmp2 == SV_ISO_JPG)))
        {
          vOsdShowZoomPct(bTmp1);

          if ((bTmp1 == 0) && fgIsInputStateValid(INPUT_STATE_PCD_ZOOM))
          {
            /* need to escape zoom control mode */
            fgSetPlayPostKey(IR_ZOOM_IN);
          }
        }
      }
      #endif /* DDISC_FTYPE_JPEG_SUPPORT */
      break;
    }

    /* case UOP_ZOOM_OUT: */
    /* case UOP_SHOW_LOGO: */
    #ifdef SUPPORT_CAPTURE_LOGO
    case UOP_CAPTURE:
    if (fgIsInputStateValid(INPUT_STATE_LOGO_CAPTURE) == TRUE)
    {
      if (bUopRet == SV_NO_ERROR)
      {
        fgSetPlayPostKey(IR_CAPTURE);
      }
      else
      {
        fgSetPlayPostKey(IR_TIME_OUT);
      }
    }
    #endif /* SUPPORT_CAPTURE_LOGO */
    break;

    /* case UOP_AUDIO_CLIP: */
    /* case UOP_VOCAL_ASSIST: */

    case UOP_POWER:
    break;

    case UOP_OPEN_CLOSE:
    {
      if (bUopRet == SV_NO_ERROR)
      {
        #if 0
        bTmp1 = bSharedInfo(SI_INIT_STATE);

        if (bTmp1 == SV_TRAY_OPENING)
        {
          vOsdPosShow(OSD_POS_PLAY_STATUS, OSD_MSG_OPEN, OSD_NO_DISAPPEAR);
        }
        else if(bTmp1 == SV_TRAY_CLOSING)
        {
          vOsdPosShow(OSD_POS_PLAY_STATUS, OSD_MSG_CLOSE, OSD_NO_DISAPPEAR);
        }
        #endif
      }
      break;
    }

    #ifdef AUTO_LAST_MEMORY
    case UOP_MEMORY:
    if (bUopRet == SV_NO_ERROR)
    {
      if((bSharedInfo(SI_MEMORY_RES)!=0xFF)&&(bSharedInfo(SI_MEMORY_RES)!=SV_MEM_ERR))
      {
        _fgWriteLastMemory = 0x01;
        //   vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_MEMORY_STORE, OSD_TIMEOUT_SHORT);
      }
    }
    break;
    #endif

    default:
    break;
  }

  return (bRet);
}

// *********************************************************************
// From extuop.c
// *********************************************************************
BOOL fgCOMSetupKey(void) large
{
  BYTE bState;

  bState = bSharedInfo(SI_PBC_STATE);

  #if defined(MT1389_REV_E_512K) && defined(PLAYER_KARAOKE) && !defined(RISC_FULL_CUSTOM_MMAP)
  // 20050830: In 4+2 model, don't allow Setup Menu in Jpeg
  if ((fgIsDiscPlay(bState)) && fgFlCheckStatus(FL_STATUS_IN_JPEG) /*(bSharedInfo(SI_ISO_ITEM_TYPE) == SV_ISO_JPG)*/)
  {
    vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
    _bIRKey = IR_NONE;
    return (UOP_OK);
  }
  #endif  // #ifdef MT1389_REV_E_512K

  // 20050503, PL00000140, prohibit setup key when user press enter to play MPG file but playback javen't started yet.
  if (fgIsIsoPlay() && bState == SV_PRE_PLAY)
  return UOP_FAIL ;

  #if (DRAM_SZ == DRAM_2M) || defined(USE_DRAM_CFG1)
  // 20050428, IS00002663, if entering setup, don't accept key again
  //  if (bSharedInfo(SH_PAUSE_SHOW_WB) == SV_SHOW_SETUP)
  // 20050623, PL00001170, switching between these keys also should be prohibited
  //20050630, PL00001181, add check if _fgSetupProhibit
  if (bSharedInfo(SH_PAUSE_SHOW_WB) != 0 || _fgSetupProhibit)
  return UOP_FAIL ;

  // 20050617, PL00001125, if current file finish and entering next file, we should prohibit entering setup, or MPS will play next file when entering setup
  if (fgFlCheckStatus (FL_STATUS_IN_MPEG) && bState == SV_STOP)
  return UOP_FAIL ;
  // 20050511, when step, also send pause command and enter setup
  //  if(((bState >= SV_PLAY) && (bState <= SV_SR)) && ((_bPlayType != PLAY_TYPE_ISO) || (_bFlCmdTarget == FL_CMD_TARGET_MPEG))&& //0728
  if(((bState >= SV_PLAY) && (bState <= SV_STEP_BACK) && (bState != SV_PAUSE)) && ((!fgIsIsoPlay() && !fgIsPcdPlay()) || (_bFlCmdTarget == FL_CMD_TARGET_MPEG))&& //0728
  #ifndef PROHIBIT_SAVE_SHADOW_IN_PLAY_STATE
  (_bPlayType != PLAY_TYPE_CDDA) &&
  #ifdef VCD_SUPPORT
  (!fgIsVcdCddaTrk()) &&
  #endif
  #endif
  ((_bTrayStatus == TRAY_ST_IN)||(bSharedInfo(SI_DEVICE_ID) != SV_DEVID_CDVDROM)) && _bPlayType != PLAY_TYPE_NONE)    // 20050519, PL00000996, sometimes PBC state is kept at play when tray out
  {
    vSetSharedInfo(SH_PAUSE_SHOW_WB,SV_SHOW_SETUP);
    //vSendUopCmd(UOP_PAUSE, 0, 0, SV_SETUP_ENTER);
    if(_bPlayType == PLAY_TYPE_DVD)
    {
      vSendUopCmd(UOP_PAUSE, 0, 0, SV_SHOW_MENU);
    }
    else
    {
      if (bSharedInfo(SI_JPG_STT) == JPEGSTT_DEC_STRT)
      vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
      else
      vSendUopCmd(UOP_PAUSE, 0, 0, 0);
    }
  }
  else
  #endif
  {
    #ifndef N22_CERTIFICATION
    if ((bSharedInfo(SI_OSD_STATE) != OSD_ST_INIT) &&
    (bSharedInfo(SI_OSD_CMD_BUF_FULL) != TRUE)
    // PL00002964, when in flmenu, it should be ok to enter setup.
    //&& (bSharedInfo(SI_MPV_PAUSE) == 1 || (bState != SV_PAUSE) || fgFlCheckStatus(FL_STATUS_IN_MENU)   // Wait for SI_MPV_PAUSE == 1, so that RISC is really paused
    // PL00003335, if JPEG pause, should be able to enter setup
    //|| ((bState == SV_PAUSE) && fgFlCheckStatus(FL_STATUS_IN_JPEG)))
    #ifdef PLAYER_FLMENU
    && (!fgFlCheckStatus(FL_STATUS_IN_HELP))
    #endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -