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

📄 selmenu.c

📁 MTK 1389E SOURCE CODE
💻 C
📖 第 1 页 / 共 3 页
字号:

    case IR_ENTER:
    case IR_PLAY:
    case IR_PLAY_ENTER:
    case IR_PLAY_PAUSE:
      if (_rSelMenu.bItemType == PROG_ITEM_TYPE_TT_CH)
      {
        vSelMenuTtChInputStart();
      }
      else /* if (_rSelMenu.bItemType == PROG_ITEM_TYPE_TIME) */
      {
        vSelMenuTimeInputStart();
      }
      return (TRUE);

    default:
      return (TRUE);
  }

  if (bItem != bSelMenuHiliItemNo(_rSelMenu.bPage, _rSelMenu.bHili))
  {
    vSelMenuGotoItem(bItem);
  }

  return (TRUE);
}

// *********************************************************************
// Function :
// Description :
// Parameter :
// Return    :
// *********************************************************************
static BOOL fgSelMenuBarState(void) large
{
  BYTE bState;
  BYTE pbTime[3];
  BYTE bType = bSharedInfo(SI_USR_PROGRAM_TYPE);

  switch (_bIRKey)
  {
    case IR_UP:
      if (bType != SV_PROGRAM_NONE_ITEM)
      {
        vSelMenuGotoItem(bSelMenuHiliItemNo(_rSelMenu.bPage, SELMENU_PAGE_SIZE - 1));
      }
      return (TRUE);

    case IR_LEFT:
      bState = bSelMenuGetBarPrevValid(_rSelMenu.bState);
      if (bState == PROG_STATE_SELECT)
      {
        /* goto last item of current page */
        if (bType != SV_PROGRAM_NONE_ITEM)
        {
          vSelMenuGotoItem(bSelMenuHiliItemNo(_rSelMenu.bPage, SELMENU_PAGE_SIZE - 1));
        }
        return (TRUE);
      }
      else
      {
        vSelMenuGotoBar(bState);
      }
      break;

    case IR_RIGHT:
    case IR_DOWN:
      bState = bSelMenuGetBarNextValid(_rSelMenu.bState);
      if (bState == PROG_STATE_SELECT)
      {
        return (TRUE); /* not goto next page */
      }
      else
      {
        vSelMenuGotoBar(bState);
      }
      break;

    case IR_ENTER:
    case IR_PLAY:
    case IR_PLAY_ENTER:
    case IR_PLAY_PAUSE:
      vSelMenuBarActive(_rSelMenu.bState);
      return (TRUE);

    default:
      return (TRUE);
  }

  if (_rSelMenu.bState != bState)
  {
    vSelMenuGotoBar(_rSelMenu.bState);
  }

  return (TRUE);
}

// *********************************************************************
// Function :
// Description :
// Parameter :
// Return    :
// *********************************************************************
static void vSelMenuProgTypeChange(BYTE bType) large
{
  switch (bType)
  {
    case SV_PROGRAM_TRACK_ITEM:
      _rSelMenu.bSelNoMax = bSharedInfo(SI_TRACK_NS);
      _rSelMenu.bItemType = PROG_ITEM_TYPE_TIME;
      break;

    case SV_PROGRAM_CHAPTER_ITEM:
      /* chapter program mode is only valid for one title only DVD */
      _rSelMenu.bSelNoMax = bSharedInfo(SI_DVD_TT_CH); /* assume offset 0 is title 1 */
      _rSelMenu.bItemType = PROG_ITEM_TYPE_TIME;
      break;

    case SV_PROGRAM_TT_ITEM:
      _rSelMenu.bSelNoMax = bSharedInfo(SI_TT_NS);
      _rSelMenu.bItemType = PROG_ITEM_TYPE_TIME;
      break;

    case SV_PROGRAM_TT_CH_ITEM:
      _rSelMenu.bSelNoMax = bSharedInfo(SI_TT_NS);
      _rSelMenu.bItemType = PROG_ITEM_TYPE_TT_CH;
      break;

    case SV_PROGRAM_NONE_ITEM:
    default:
      _rSelMenu.bSelNoMax = 0;
      bType = SV_PROGRAM_NONE_ITEM;
      if (fgIsDvdPlay())
      {
        _rSelMenu.bItemType = PROG_ITEM_TYPE_TT_CH;
      }
      else
      {
        _rSelMenu.bItemType = PROG_ITEM_TYPE_TIME;
      }
      break;
  } /* switch (bType) */


  if (bType != bSharedInfo(SI_USR_PROGRAM_TYPE))
  {
    vSetSharedInfo(SI_USR_PROGRAM_TYPE, bType);
    vSelMenuResetItem();
  }
#ifdef PROGRAM_STOP_CLEAR
  else if (bSharedInfo(SI_USR_PBC_CTRL) != SV_PROGRAM)
  {
    vSelMenuResetItem();
  }
#endif

#if 0 // Not used
  /* show program type */
  vOsdShowProgType(OSD_PROG_TYPE_CLEAR, 0, 0); // we need to clear it manually

  if (bType == SV_PROGRAM_TT_CH_ITEM)
  {
    vOsdShowProgType(bType, _rSelMenu.bSelNoMax, 0);
  }
  else
  {
    vOsdShowProgType(bType, 1, _rSelMenu.bSelNoMax);
  }
#endif

  /* clear command sync flag */
  _rSelMenu.fgWaitProgStop = FALSE;

  /* default is page 0, item 0 */
  _rSelMenu.bPage = 0;
  _rSelMenu.bHili = 0;

  /* Page refresh */
  vSelMenuShowPage(0, OSD_PROG_ITEM_HEADER);

  /* default hili position */
  if (bType == SV_PROGRAM_NONE_ITEM)
  {
    vSelMenuGotoBar(PROG_STATE_EXIT);
  }
  else if (bSharedInfo(SI_USR_PBC_CTRL) == SV_PROGRAM)
  {
    vSelMenuGotoBar(PROG_STATE_START_STOP);
  }
  else
  {
    vSelMenuGotoItem(0);
  }
}

// *********************************************************************
// Function :
// Description :
// Parameter :
// Return    :
// *********************************************************************
BYTE bSelMenuNextType(BYTE bCurrType) large
{
  BYTE bType = SV_PROGRAM_NONE_ITEM;
  
  /* switch program type */
  if (fgIsDvdPlay())
  {
    if (bCurrType == SV_PROGRAM_NONE_ITEM)
    {
      if (bSharedInfo(SI_TT_NS) > 1)
      {
        bType = SV_PROGRAM_TT_CH_ITEM;
        
      }
      else /* if (bSharedInfo(SI_TT_NS) == 1) */
      {
        /* chapter program mode is only valid for one title only DVD */
        bType = SV_PROGRAM_CHAPTER_ITEM;
      }
    }
#ifndef PROGRAM_KEY_EXIT
    else if (bCurrType == SV_PROGRAM_TT_CH_ITEM)
    {
      bType = SV_PROGRAM_TT_ITEM;
    }
#endif
    else /* if ((bCurrType == SV_PROGRAM_TT_ITEM) || (bCurrType == SV_PROGRAM_CHAPTER_ITEM)) */
    {
      bType = SV_PROGRAM_NONE_ITEM;
    }
  }
#ifdef VCD_SUPPORT  
  else if (fgIsVcdPlay() || fgIsCddaPlay())
  {
    if (bCurrType == SV_PROGRAM_NONE_ITEM)
    {
      bType = SV_PROGRAM_TRACK_ITEM;
    }
    else /* if (bCurrType == SV_PROGRAM_TRACK_ITEM) */
    {
      bType = SV_PROGRAM_NONE_ITEM;
    }
  }
#endif  
  else if (fgIsIsoPlay())
  {
    /* not supported */
    bType = SV_PROGRAM_NONE_ITEM;
  }

  return (bType);
}

#ifdef PLAYER_PROGRAM
// *********************************************************************
// Function :
// Description :
// Parameter :
// Return    :
// *********************************************************************
void vSelectInit(BYTE fgInit) large
{
  BYTE bType;
  
  /* chnage OSD mode to user mode */
  vOsdShowWb(OSD_WB_USER);

#if (DRAM_SZ == DRAM_2M) || defined(USE_DRAM_CFG1)
  vOsdSetMemBlk(OSD_MEM_BLK_DYNAMIC, OSD_MEM_DEFAULT);
#endif  

//  vSetSharedInfo(SH_PAUSE_SHOW_WB,0);//init
  vSetSharedInfo(SH_PROGRAM_START,0);//init

  bType = bSharedInfo(SI_USR_PROGRAM_TYPE);

#ifdef ALL_WB_USE_TRUECOLOR
  vCreateWB(WB_SELMENU, TRUE);
  vSetWBTcColor(WB_SELMENU);
#else
  vCreateWB(WB_SELMENU, FALSE);
#endif
#ifdef FONT_NO_BORDER
  vSetMsgCol4(WB_SELMENU, 0, 1, 1, 3);
#else
  #ifdef HILI_USE_OSD
  vSetMsgCol4(WB_SELMENU, 0, 0, 2, 3);
  #else
  vSetMsgCol4(WB_SELMENU, 0, 1, 2, 3);
  #endif
#endif
  vEnableWB(WB_SELMENU);

#ifndef HILI_USE_OSD
  /* set hilight color */
  vSetHLCol(HL_1, 0x0000); /* green */
#endif

  if (fgIsIsoPlay())
  {
    /* not supported */
    vSetExitInputState();
    return;
  }
  else if (bType == SV_PROGRAM_NONE_ITEM)
  {
    bType = bSelMenuNextType(bType);
  }

  vSelMenuProgTypeChange(bType);
}

// *********************************************************************
// Function :
// Description :
// Parameter :
// Return    :
// *********************************************************************
BOOL fgSelectState(void) large
{
  BOOL fgRet = TRUE;
  BYTE bType = bSharedInfo(SI_USR_PROGRAM_TYPE);

  if (_bIRKey <= IR_ADD10 || _bIRKey == IR_ADD5)  // megaa ADD5
  {
    if (_rSelMenu.bItemType == PROG_ITEM_TYPE_TT_CH)
    {
      vSelMenuTtChInputStart();
    }
    else /* if (_rSelMenu.bItemType == PROG_ITEM_TYPE_TIME) */
    {
      vSelMenuTimeInputStart();
    }
  }

  if ((_rSelMenu.bState == PROG_STATE_INPUT) ||
      (_rSelMenu.bState == PROG_STATE_INPUT_1))
  {
    if (_rSelMenu.bItemType == PROG_ITEM_TYPE_TT_CH)
    {      
      if (fgSelMenuTtChInputState() == TRUE)
      {
        return (TRUE);
      }
    }
    else /* if (_rSelMenu.bItemType == PROG_ITEM_TYPE_TIME) */
    {
      if (fgSelMenuTimeInputState() == TRUE)
      {
        return (TRUE);
      }
    }
  }

  // FIXME: use global to get current disc type
  switch (_bIRKey)
  {
    case IR_PROGRAM:
    {
      if(bSharedInfo(SI_CMD_CNT))
      {
        break;
      }		
    	
#ifdef PROGRAM_KEY_EXIT
      vSetExitInputState();
#else /* PROGRAM key switch type */
      if (bSharedInfo(SI_USR_PBC_CTRL) == SV_PROGRAM)
      {
        /* program off first then change program type */
        vSendUopCmd(UOP_PROGRAM, SV_PROGRAM_STOP, 0, 0);
      }

      bType = bSelMenuNextType(bType);
      vSelMenuProgTypeChange(bType);
#endif
      break;
    } /* case IR_PROGRAM: */

    case IR_TITLE_MENU:
      /* switch title no when play DVD */
      /* vOsdPosShow(OSD_POS_NORMAL, ); */
      break;

    case IR_NEXT:
      if (_rSelMenu.fgNextValid)
      {
        vSelMenuBarActive(PROG_STATE_NEXT);
      }
      break;

    case IR_PREV:
      if (_rSelMenu.fgPrevValid)
      {
        vSelMenuBarActive(PROG_STATE_PREV);
      }
      break;

    default:
    {
      if (fgIsAVContrlKey(_bIRKey))
      {
        /* pass the A/V control key */
        fgRet = FALSE;
      }
      else if (_rSelMenu.bState == PROG_STATE_SELECT)
      {
        fgRet = fgSelMenuSelectState();
      }
      else if ((_rSelMenu.bState == PROG_STATE_INPUT) ||
               (_rSelMenu.bState == PROG_STATE_INPUT_1))
      {
        /* error handle: force input end */
        if (_rSelMenu.bItemType == PROG_ITEM_TYPE_TT_CH)
        {
          _rNumInStateCtx.wNum = bSelMenuReadItem(bSelMenuHiliItemNo(_rSelMenu.bPage, _rSelMenu.bHili),
                                                  _rNumInStateCtx.bDig);
          vSelMenuTtChInputEnd(_rNumInStateCtx.wNum, _rNumInStateCtx.bDig);
        }
        else /* if (_rSelMenu.bItemType == PROG_ITEM_TYPE_TIME) */
        {
          vSelMenuTimeInputEnd(bSelMenuReadItem(bSelMenuHiliItemNo(_rSelMenu.bPage, _rSelMenu.bHili),0));
        }
      }
      else /* default is in BAR state */
      {
        fgRet = fgSelMenuBarState();
      }
      break;
    } /* default */
  } /* switch (_bIRKey) */

  return (fgRet);
}

// *********************************************************************
// Function :
// Description :
// Parameter :
// Return    :
// *********************************************************************
void vSelectExit(void) large
{
  if ((_rSelMenu.bState == PROG_STATE_INPUT) ||
      (_rSelMenu.bState == PROG_STATE_INPUT_1))
  {
    /* force input end */
    if (_rSelMenu.bItemType == PROG_ITEM_TYPE_TT_CH)
    {
      _rNumInStateCtx.wNum = bSelMenuReadItem(bSelMenuHiliItemNo(_rSelMenu.bPage, _rSelMenu.bHili),
                                              _rNumInStateCtx.bDig);
      vSelMenuTtChInputEnd(_rNumInStateCtx.wNum, _rNumInStateCtx.bDig);
    }
    else /* if (_rSelMenu.bItemType == PROG_ITEM_TYPE_TIME) */
    {
      vSelMenuTimeInputEnd(bSelMenuReadItem(bSelMenuHiliItemNo(_rSelMenu.bPage, _rSelMenu.bHili),0));
    }
  }

  vDeleteWB(WB_SELMENU);
#if 0   // Not used
  vOsdShowProgType(OSD_PROG_TYPE_CLEAR, 0, 0);
#endif
  vOsdPosHili(OSD_POS_HILI_CLEAR, 0, 0);

#if (DRAM_SZ == DRAM_2M) || defined(USE_DRAM_CFG1)
  vOsdSetMemBlk(OSD_MEM_BLK_STATIC, OSD_MEM_DEFAULT);
#endif  

  /* restore OSD mode */
  vOsdShowWb(OSD_WB_RESTORE);
  
#if (DRAM_SZ == DRAM_2M) || defined(USE_DRAM_CFG1)
  //pause before show WB
#if 0 // 20050513, PL00000724, clear it when play
  if(bSharedInfo(SH_PAUSE_SHOW_WB) == SV_SHOW_PROGRAM)
  {
    vSetSharedInfo(SH_PAUSE_SHOW_WB,0);//init
  }
#endif
  if(bSharedInfo(SH_PROGRAM_START) != SV_PROGRAM_START)
  {
    //vOsdCmdFlush();
    vSendUopCmd(UOP_PLAY, 0, 0, 0);
  }
  vSetSharedInfo(SH_PROGRAM_START,0);//init  
#endif  
}
#endif /* #ifdef PLAYER_PROGRAM */

// *********************************************************************
// Function :
// Description :
// Parameter :
// Return    :
// *********************************************************************
void vSelMenuUsrPbcChange(void) large
{
  if ((bSharedInfo(SI_USR_PBC_CTRL) != SV_PROGRAM) && 
      (_rSelMenu.fgWaitProgStop == TRUE))
  {
    _rSelMenu.fgWaitProgStop = FALSE;
    
#ifdef PROGRAM_STOP_CLEAR
    vSelMenuResetItem();
#endif
  }

  vSelMenuShowPage(_rSelMenu.bPage, OSD_PROG_ITEM_NORMAL); /* update current page */
}

#else /* PLAYER_PROGRAM dummy function */

static code BYTE pbSelMenuCodeSegment[1] = { FALSE }; /* for code segment */

#if (defined(PLAYER_PROGRAM) || defined(PLAYER_DIGEST))
void vSelectInit(BYTE fgInit) large { return; }
BOOL fgSelectState(void) large
{
#if 0   // Not used
  vOsdShowProgType(0, 0, 0);
#endif
  return (pbSelMenuCodeSegment[0]);
}
void vSelectExit(void) large { return; }
#endif
//void vSelMenuReset(void) large { return; }
//void vSelMenuUsrPbcChange(void) large { return; }

#endif /* PLAYER_PROGRAM */

⌨️ 快捷键说明

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