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

📄 flmain.c

📁 mtk1389L latest sourcecode enjoy
💻 C
字号:
/**********************************************************************/
/***************    MTK CONFIDENTIAL & COPYRIGHTED     ****************/
/***************                                       ****************/
/***************  $Modtime:: 07/04/18 2:30p    $       ****************/
/***************  $Revision:: 3                $       ****************/
/***************                                       ****************/
/***************   Description : File List             ****************/
/***************                 Main Module           ****************/
/***************                                       ****************/
/***************       Company : MediaTek Inc.         ****************/
/***************    Programmer : Jacob Lin             ****************/
/**********************************************************************/

/**
 *          $(PROJ_HOME)/8032/custom/demo/fslist/flmain.c
 *
 *          Bundle of the basic and common functions used to manipulate the 
 *          component "FILE BROWSER".
 */

#define __FLMAIN_C_ 
 
#include "../general.h"
#include "flcomm.h"
#include "fslist.h"
#include "flcmd.h"

#pragma NOAREGS

#ifdef PLAYER_FLMENU
/**
 * Internal functions
 */

static BOOL fgFlOnInit(void);

/**
 * Init the menu and create the necessary component "FS LIST".
 */
void vFsMenuInit(BOOL fgInit) large
{
  if (fgInit)
  {
    // - totally init (init whole file browser module)
    vFlClRls();    

    //  1. init each object "file list menu, file list jpeg viewer, 
    //      and mpeg player"
    if (!fgFlMnInit() || !fgFlJvInit() || !fgFlMpInit())
    {
      // - TODO: error handling
      return;
    }
#ifdef SUPPORT_USB_COPY //yan 070409
#ifdef USB_COPY_DEBUG
DBGLogB(bSharedInfo(SI_DEVICE_ID),_bUSBSavToEnter,0x66,0x66);
#endif
//simon mul
#ifdef SMSUI_FOR_MULTI_PARTITION_FAT
if((bSharedInfo(SI_DEVICE_ID) != SV_DEVID_CDVDROM) && (_bUSBSavToEnter == TRUE))
#else
if((bSharedInfo(SI_DEVICE_ID) == _bSaveToDev)&&(bSharedInfo(SI_DEVICE_ID)!=SV_DEVID_CDVDROM)\
	&&(_bUSBSavToEnter==TRUE))
#endif
_bUSBSwitchSuccess = TRUE;
#endif
    //  2. init shared info for configuration
    vSetSharedInfo(SI_DDISC_ACTIVE_PB_MODULE_MODE, SV_OFF);

     // 3. init control flags
    _bFlPbMode = bSharedInfo(SI_DDISC_DEF_PMODE);
    _bFlWaitUopRet = 0xFF;
    _bFlUopRetJob = 0xFF;
    _fgFlMdChg = FALSE;
      
    //  4. init the command target as "FL_CMD_TARGET_NONE" for init
    //      state
    _bFlCmdTarget = FL_CMD_TARGET_NONE;
  }
  else
  {
    // - partial init (init the module of current command target)
    switch (_bFlCmdTarget)
    {
      case FL_CMD_TARGET_MENU:
        vOsdPosClear(OSD_POS_FS_INFO_BAR);
        break;
      case FL_CMD_TARGET_JPEG:
        //vSendUopCmd(UOP_PAUSE, 0x01, 0x02, 0x00);
        break;
      case FL_CMD_TARGET_MPEG:
        break;
      case FL_CMD_TARGET_HELP:
        break;
    }
    vFlRecover();
  }

  return;
}

/**
 * Set the foregournd module as given one.
 *
 * DEF: The foregournd module means the module which the UOPs be dispatched.
 */
void vFlCtrlSetFg(BYTE bMd) large
{
  if (bSharedInfo(SI_DDISC_PB_MODULE) == bMd)
    return;

  vSetSharedInfo(SI_DDISC_PB_MODULE, bMd);
  vNotifySharedInfo(SI_DDISC_PB_MODULE, 0x0, 0x0);

  return;
}


/**
 * Set the current command target as the given one.
 *
 * DES:
 *  1. Leave the state object of the current target module.
 *  2. Enter the state object of the next one.
 */
void vFlCmdTargetLeave(BYTE bSrcTgt, BYTE bDesTgt) large
{
  switch(bSrcTgt)
  {
    case FL_CMD_TARGET_MENU:
      _wCurrItem = wFlMnLeave(FALSE);
      break;
    case FL_CMD_TARGET_JPEG:
      if (bDesTgt == FL_CMD_TARGET_HELP)
        _wCurrItem = wFlJvLeave(FALSE);
      else
        _wCurrItem = wFlJvLeave(TRUE);
      break;
    case FL_CMD_TARGET_MPEG:
      _wCurrItem = wFlMpLeave(FALSE);
      break;
    case FL_CMD_TARGET_HELP:
      _wCurrItem= wFlHpLeave(FALSE);
      break;
    default:
      // - the current target is invalid or none
      _wCurrItem = 0x0;
      break;
  }
}

void vFlCmdTargetEnter(BYTE bTarget) large
{
  switch(bTarget)
  {
    case FL_CMD_TARGET_MENU:
      vFlMnEnter(_wCurrItem);
      break;
    case FL_CMD_TARGET_JPEG:
      vFlJvEnter(_wCurrItem);
      break;
    case FL_CMD_TARGET_MPEG:
      vFlMpEnter(_wCurrItem);
      break;
    case FL_CMD_TARGET_HELP:
      vFlHpEnter(_wCurrItem);
      break;
    default:
      // - TODO: exception handling (thie case should not happen)
      break;
  }

  _wCurrItem = 0xFFFF;
}
 
void vFlSetCmdTarget(BYTE bTarget) large
{
//  WORD wItem;

  if (_bFlCmdTarget != bTarget)
  {
#ifdef WB_ALLOC_MIN
    if (bTarget == FL_CMD_TARGET_MENU)
      _fgFlMdChg = TRUE;
#endif

//zhiqiang
#ifdef SUPPORT_HDMI
  #ifdef MT1389_REV_HD
    if(bTarget == FL_CMD_TARGET_JPEG) 
    {
      vSetSharedInfo(SI_HDMI_UPSCALE, SV_OFF);
    }
    else
    {
      vSetSharedInfo(SI_HDMI_UPSCALE, SV_ON);
    }
    vSetHDMIRes(bEepromReadByte(HDMI_RES_POS));
  #endif
#endif

    // - we should switch the state object
    //  1. leave current
    vFlCmdTargetLeave(_bFlCmdTarget, bTarget);
    _bFlCmdTarget = bTarget;

    //  2. enter next    
    if (fgFlClIsLock())
    {
      switch (bFlClPath())
      {
        case FL_CMDPATH_SEL_1:
    //2006/3/30 modify for CQ(PL00101863):   
   //when play MPEG file, press001(INTR0), it should show logo.
	if  (_bFlUopRetJob != UOP_RET_CHG_CMDTGT)
          vFlCmdTargetEnter(_bFlCmdTarget);
          fgSetPlayPostKey(IR_CMD_DONE);
          break;
      #ifdef ISO_AUTO_PLAY
        case FL_CMDPATH_INIT_1:
      #else
        case FL_CMDPATH_INIT_0:
      #endif
        case FL_CMDPATH_CHG_CMDTGT:
          vFlCmdTargetEnter(_bFlCmdTarget);
          break;
      }
    }
    else
    {
      vFlCmdTargetEnter(_bFlCmdTarget);
    }
    /*
    else if (_bFlWaitUopRet != UOP_STOP)
    {
      vFlCmdTargetEnter(_bFlCmdTarget);
    }
    */
  }
  else if (fgFlClIsLock())
  {
    switch (bFlClPath())
    {
      case FL_CMDPATH_SEL_1:
       _rFlCmdLock.fgLeap = TRUE;
       fgSetPlayPostKey(IR_CMD_DONE);
       break;
     }
  }

  return;
}

/**
 * Dispatch the event to the on focus object.
 */
BOOL fgFsMenuState(void) large
{
  BOOL fgIsGrabbed = FALSE;
  WORD wPos, wIdx;  // tmp
  

#if 0
  if (!fgFlCmdIsOK())
  {
    // - the command module is not ready for next one,
    //  waiting for command ack, and pass IR_CMD_DONE only
    if (_bIRKey != IR_CMD_DONE)
    {
      //vOsdShowError(SV_ERR_GENERAL, FL_MSG_TIMEOUT);
      return TRUE;
    }
  }
#endif
  // - main loop to relay message to each state machine
  #if 0
  if (bFlCmdRetOp() == FLCMD_RET_OP_SEL)
  {
    return fgFlOnMn();
  }
  #endif

  if (fgFlClIsLock())
  {
    switch(bFlClPath())
    {
      case FL_CMDPATH_SEL_0:
    #ifdef ISO_AUTO_PLAY
      case FL_CMDPATH_INIT_1:
    #else
      case FL_CMDPATH_INIT_0:
    #endif
        return fgFlOnMn();
        break;
      case FL_CMDPATH_SEL_1:
        if ((_bIRKey == IR_CMD_DONE) && 
            ((FL_ACK(_dwIrDoneParm) == SI_DDISC_PB_MODULE) || (_rFlCmdLock.fgLeap)))
        {
          vFlClNext();  // FL_CMDPATH_SEL_2:
          // tmp
          wPos = FL_ITEM_FIELD(_bFlMnCurItemIdx);
          bLoByte(wIdx) = bSharedInfo(wPos + 6);
          bHiByte(wIdx) = bSharedInfo(wPos + 7);
          vFlCmdClickItem(_bFlMnListId, wIdx);
          return TRUE;
        }
        break;
      case FL_CMDPATH_RPLC_CMDTGT:
        if(((_bFlCmdTarget != FL_CMD_TARGET_MENU) && (_fgFlMdChg == FALSE)) &&\
        (_bIRKey == IR_CMD_DONE) && (FL_ACK(_dwIrDoneParm) == SI_DDISC_PB_MODULE))
        {
          vFlClRls();
        }
        break;
      case FL_CMDPATH_CHG_CMDTGT:
        if ((_bIRKey == IR_CMD_DONE) && (FL_ACK(_dwIrDoneParm) == SI_DDISC_PB_MODULE))
        {
          vFlClRls();
        }
        break;
    }
  }

  switch (_bFlCmdTarget)
  {
  case FL_CMD_TARGET_MENU:
    fgIsGrabbed = fgFlOnMn();
    break;
  case FL_CMD_TARGET_JPEG:
    fgIsGrabbed = fgFlOnJv();
    break;
  case FL_CMD_TARGET_MPEG:
    fgIsGrabbed = fgFlOnMp();
    break;
  case FL_CMD_TARGET_HELP:
    fgIsGrabbed = fgFlOnHp();
    break;
  case FL_CMD_TARGET_NONE:
    // - init state
    fgIsGrabbed = fgFlOnInit();
    break;
  default:
    break;
  }
  
  return fgIsGrabbed;
}

// FOR COMPATIBLE (TMP)
void vFsMenuExit(void)
{
  vDeleteWB(FL_MENU_WB);
  vDeleteWB(FL_INFO_WB);

  vFlSetCmdTarget(FL_CMD_TARGET_NONE);

  return;
}

void vFlRecover(void) large
{
  switch (_bFlCmdTarget)
  {
    case FL_CMD_TARGET_MENU:
      vFlMnRecover();
      break;
    case FL_CMD_TARGET_JPEG:
      vFlJvRecover();
      break;
    case FL_CMD_TARGET_MPEG:
      vFlMpRecover();
      break;
    case FL_CMD_TARGET_HELP:
      vFlHpRecover(FALSE);
      break;
  }
}

void vFlChgLang(BYTE bLang) large
{
  switch (_bFlCmdTarget)
  {
    case FL_CMD_TARGET_MENU:
      vFlMnChgLang(bLang);
      break;
    case FL_CMD_TARGET_JPEG:
      vFlJvChgLang(bLang);
      break;
    case FL_CMD_TARGET_HELP:
      vFlHpRecover(FALSE);
      break;
  }
}

BOOL fgFlCheckStatus(BYTE bStatus) large
{
  if (!fgIsIsoPlay() && !fgIsPcdPlay())
    return FALSE;

  switch (bStatus)
  {
    case FL_STATUS_BUSY:
      return ((bSharedInfo(SI_MP3_STT) == MP3STT_PB_STRT) ||
              (bSharedInfo(SI_JPG_STT) == JPEGSTT_DEC_STRT) ||
              (bSharedInfo(SI_MPIC_STT) == MPICSTT_PB_STRT));
    case FL_STATUS_OCCUPIED:
      return (fgFlClIsLock());
    case FL_STATUS_IN_MENU:
      return (_bFlCmdTarget == FL_CMD_TARGET_MENU);
    case FL_STATUS_IN_HELP:
      return (_bFlCmdTarget == FL_CMD_TARGET_HELP);
    case FL_STATUS_IN_JPEG:
      return (_bFlCmdTarget == FL_CMD_TARGET_JPEG);
    case FL_STATUS_IN_JPGDGST:
      return ((_bFlCmdTarget == FL_CMD_TARGET_JPEG) && 
              (bSharedInfo(SI_JPG_MODE) == JPEGMOD_DIGEST));
    case FL_STATUS_IN_MPEG:
      return (_bFlCmdTarget == FL_CMD_TARGET_MPEG);
    case FL_STATUS_JPEG_DECODING:
      return (bSharedInfo(SI_JPG_STT) == JPEGSTT_DEC_STRT);
  }
}

void vFlShowError(WORD wPos, WORD wMsg, BYTE bTime) large
{
  if (fgFlCheckStatus(FL_STATUS_IN_MENU))
  {
    vFlIpShowInfo(IP_INFO_ERROR, 0, wMsg);
  }
  else
  {
    vOsdPosShow(wPos, wMsg, bTime);
  }

  return;
}

void vFlSendUopCmd(BYTE bCmd, BYTE bParam, BYTE bRetJob) large
{
  _bFlWaitUopRet = bCmd;
  _bFlUopRetJob = bRetJob;
  
  vSendUopCmd(bCmd, bParam, 0x0, 0x0);
}


void vFlHandleUopRet(BYTE bUopId, BYTE bUopRet) large
{
  if (bUopRet != SV_NO_ERROR)
    return;
#if 1
    //2006/3/30 modify for CQ(PL00101863):   
   //when play MPEG file, press001(INTR0), it should show logo.
  if (bUopId == UOP_STOP)
  {
    switch(_bFlUopRetJob)
    {
      case UOP_RET_CHG_CMDTGT:
	 _bFlUopRetJob = 0xFF;
        _bFlWaitUopRet = 0xFF;
        vFlCmdTargetEnter(_bFlCmdTarget);
        break;
      case UOP_RET_RPLC_CMDTGT:
    //vFlSetCmdTarget(FL_CMD_TARGET_MENU);
        break;
    }
   // _bFlWaitUopRet = 0xFF;
  }
#endif

  if (fgFlClIsLock())
  {
    switch (bFlClPath())
    {
      case FL_CMDPATH_RPLC_CMDTGT:
        vFlCmdTargetEnter(_bFlCmdTarget);
        return;
    }
  }

  switch(_bFlCmdTarget)
  {
    case FL_CMD_TARGET_MENU:
      vFlMnHandleUopRet(bUopId);
      break;
    case FL_CMD_TARGET_JPEG:
      //vFlJvHandleUopRet(bUopId);
      break;
    case FL_CMD_TARGET_MPEG:
//      vFlMphandleUopRet(bUopId);
      break;
    case FL_CMD_TARGET_HELP:
      break;
  } 
}


#else  // #ifdef PLAYER_FLMENU

BOOL fgFsMenuState(void) large  { return TRUE; }

#endif  // #ifdef PLAYER_FLMENU

⌨️ 快捷键说明

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