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

📄 flcmd.c

📁 MTK 1389E SOURCE CODE
💻 C
字号:
/**********************************************************************/
/***************    MTK CONFIDENTIAL & COPYRIGHTED     ****************/
/***************                                       ****************/
/***************  $Modtime:: 04/08/27 9:39a    $       ****************/
/***************  $Revision:: 1                $       ****************/
/***************                                       ****************/
/***************   Description : File list             ****************/
/***************                 manipulation module   ****************/
/***************                                       ****************/
/***************       Company : MediaTek Inc.         ****************/
/***************    Programmer : Jacob Lin             ****************/
/**********************************************************************/

/*
 *          $(PROJ_HOME)/8032/custom/demo/fslist/flcmd.c
 *
 *          File list manipulation module.
 *
 *          This module is responsible to make sure the OOC
 *          (out of order command) doesn't happen.
 */
#define __FLCMD_C_

#include "flcmd.h"

#pragma NOAREGS


#ifdef PLAYER_FLMENU

/*
 *  Global variables
 */

static xdata BYTE _bFlCmdOOCCnt = 0x0;  // - OOC (out of order comand) conter


/*
 *  Global functions
 */



/**
 * Mark the command is done for OOC check later.
 */
void vFlCmdDone(void)
{
  _rFlCmdLock.fgBlock = FALSE;

  return;
}

/**
 * Check if it is a OOC (out of order command).
 */
BOOL fgFlCmdIsOOC(void) large
{
  if (_rFlCmdLock.fgBlock == TRUE)
  {
    // - it's OOC
    _bFlCmdOOCCnt ++;
    return TRUE;
  }

  // - it's not OOC
  return FALSE;
}

/**
 * Lock command locks with the given method and path and target.
 */
BOOL fgFlClLock(BYTE bPath) large
{
  if (_rFlCmdLock.fgLock == FALSE)
  {
    _rFlCmdLock.fgLock = TRUE;
    _rFlCmdLock.bPath = bPath;
    _rFlCmdLock.fgLeap = FALSE;
    
    return TRUE;
  }
  
  return FALSE;
}

/**
 * Release command lock.
 */
void vFlClRls(void) large
{
  _rFlCmdLock.fgLock = FALSE;

  return;
}

/**
 * Go to next path.
 */
void vFlClNext(void) large
{
  switch (_rFlCmdLock.bPath)
  {
    case FL_CMDPATH_DIR_UP_0:
    case FL_CMDPATH_SEL_0:
    case FL_CMDPATH_SEL_1:
    case FL_CMDPATH_INIT_0:
    case FL_CMDPATH_ATPLY_0:
    case FL_CMDPATH_ATPLY_1:
    case FL_CMDPATH_ATPLY_2:
      _rFlCmdLock.bPath++;
      break;
  }

  return;
}

/**
 * Check if the command lock is locked.
 */
BOOL fgFlClIsLock(void) large
{
  return (_rFlCmdLock.fgLock == TRUE);
}

/**
 * Get the path of the command lock.
 */
BYTE bFlClPath(void) large
{
  return _rFlCmdLock.bPath;
}

/**
 * Create a list of given types and parameters.
 */
void vFlCmdCreate(BYTE bType, BYTE bIncItemType, 
                  WORD wBaseDirIdx, WORD wFCfg, BYTE bSCfg) large
{
  WORD wBlkPtr;

  // - check if there is a returned command
  if (fgFlCmdIsOOC())
    return;

  wBlkPtr = FL_CMD_BLK_SA;

  // - fill the command block
  vSetSharedInfo(wBlkPtr ++, FLCMD_CREATE);
  vSetSharedInfo(wBlkPtr ++, bType);
  vSetSharedInfo(wBlkPtr ++, bIncItemType);
  vSetSharedInfo(wBlkPtr ++, bLoByte(wBaseDirIdx));
  vSetSharedInfo(wBlkPtr ++, bHiByte(wBaseDirIdx));
  vSetSharedInfo(wBlkPtr ++, bLoByte(wFCfg));
  vSetSharedInfo(wBlkPtr ++, bHiByte(wFCfg));
  vSetSharedInfo(wBlkPtr ++, bSCfg);

  // - lock the ack and send out the notification
  _rFlCmdLock.fgBlock = TRUE;
  vNotifySharedInfo(FL_CMD_ASSERT, 0x0, 0x0);

  return;
}

/**
 * Send "FS LIST" command "FLCMD_SET".
 */
void vFlCmdSet(BYTE bId, BYTE bType, BYTE bIncItemType, 
               WORD wBaseDirIdx, WORD wFCfg, BYTE bSCfg) large
{
  WORD wBlkPtr;

  if (fgFlCmdIsOOC())
    return;

  if (bId == 0xFF)
    return;

  wBlkPtr = FL_CMD_BLK_SA;

  // - fill the command block
  vSetSharedInfo(wBlkPtr ++, FLCMD_SET);
  vSetSharedInfo(wBlkPtr ++, bId);
  vSetSharedInfo(wBlkPtr ++, bType);
  vSetSharedInfo(wBlkPtr ++, bIncItemType);
  vSetSharedInfo(wBlkPtr ++, bLoByte(wBaseDirIdx));
  vSetSharedInfo(wBlkPtr ++, bHiByte(wBaseDirIdx));
  vSetSharedInfo(wBlkPtr ++, bLoByte(wFCfg));
  vSetSharedInfo(wBlkPtr ++, bHiByte(wFCfg));
  vSetSharedInfo(wBlkPtr ++, bSCfg);

  // - lock the ack and send out the notification
  _rFlCmdLock.fgBlock = TRUE;
  vNotifySharedInfo(FL_CMD_ASSERT, 0x0, 0x0);

  return;
}

/**
 * Send "FS LIST" command "FLCMD_GET_ITEMS".
 */
BOOL fgFlCmdGetItems(BYTE bId, WORD wBIdx) large
{
  WORD wBlkPtr;

  if (fgFlCmdIsOOC())
    return FALSE;

  if ((bId == 0xFF) || (wBIdx == 0xFFFF))
    return FALSE;

  wBlkPtr = FL_CMD_BLK_SA;

  // - fill the command block
  vSetSharedInfo(wBlkPtr ++, FLCMD_GET_ITEMS);
  vSetSharedInfo(wBlkPtr ++, bId);
  vSetSharedInfo(wBlkPtr ++, bLoByte(wBIdx));
  vSetSharedInfo(wBlkPtr ++, bHiByte(wBIdx));

  // - lock the ack and send out the notification
  _rFlCmdLock.fgBlock = TRUE;
  vNotifySharedInfo(FL_CMD_ASSERT, 0x0, 0x0);

  return TRUE;
}

/**
 * Send "FS LIST" command "FLCMD_CLICK_ITEM".
 */
void vFlCmdClickItem(BYTE bId, WORD wItemIdx) large
{
  WORD wBlkPtr;

  if (fgFlCmdIsOOC())
    return;

  if (bId == 0xFF)
    return;

  wBlkPtr = FL_CMD_BLK_SA;

  // - fill the command block
  vSetSharedInfo(wBlkPtr ++, FLCMD_CLICK_ITEM);
  vSetSharedInfo(wBlkPtr ++, bId);
  vSetSharedInfo(wBlkPtr ++, bLoByte(wItemIdx));
  vSetSharedInfo(wBlkPtr ++, bHiByte(wItemIdx));

  // - lock the ack and send out the notification
  _rFlCmdLock.fgBlock = TRUE;
  vNotifySharedInfo(FL_CMD_ASSERT, 0x0, 0x0);

  return;
}

#ifdef DATA_DISC_SUPPORT_PLAY_LIST
/**
 * Send "FS LIST" command "FLCMD_ADD_TO_PL".
 */
void vFlCmdAddToPl(BYTE bId, WORD wSrcIdx, WORD wDestIdx) large
{
  WORD wBlkPtr;

  if (fgFlCmdIsOOC())
    return;

  if (bId == 0xFF)
    return;

  wBlkPtr = FL_CMD_BLK_SA;

  // - fill the command block
  vSetSharedInfo(wBlkPtr ++, FLCMD_ADD_TO_PL);
  vSetSharedInfo(wBlkPtr ++, bId);
  vSetSharedInfo(wBlkPtr ++, bLoByte(wSrcIdx));
  vSetSharedInfo(wBlkPtr ++, bHiByte(wSrcIdx));
  vSetSharedInfo(wBlkPtr ++, bLoByte(wDestIdx));
  vSetSharedInfo(wBlkPtr ++, bHiByte(wDestIdx));

  // - lock the ack and send out the notification
  _rFlCmdLock.fgBlock = TRUE;
  vNotifySharedInfo(FL_CMD_ASSERT, 0x0, 0x0);

  return;
}


/**
 * Send "FS LIST" command "FLCMD_RM_FROM_PL".
 */
void vFlCmdRmFromPl(WORD wItemIdx) large
{
  WORD wBlkPtr;

  if (fgFlCmdIsOOC())
    return;

  wBlkPtr = FL_CMD_BLK_SA;

  // - fill the command block
  vSetSharedInfo(wBlkPtr ++, FLCMD_RM_FROM_PL);
  vSetSharedInfo(wBlkPtr ++, bLoByte(wItemIdx));
  vSetSharedInfo(wBlkPtr ++, bHiByte(wItemIdx));

  // - send out the notification
  _rFlCmdLock.fgBlock = TRUE;
  vNotifySharedInfo(FL_CMD_ASSERT, 0x0, 0x0);

  return;
}


/**
 * Send "FS LIST" command "FLCMD_CLEAN".
 */
void vFlCmdRmAllFromPl(BYTE bId) large
{
  WORD wBlkPtr;

  if (fgFlCmdIsOOC())
    return;

  if (bId == 0xFF)
    return;

  wBlkPtr = FL_CMD_BLK_SA;

  // - fill the command block
  vSetSharedInfo(wBlkPtr ++, FLCMD_CLEAN);
  vSetSharedInfo(wBlkPtr ++, bId);

  // - send out the notification
  _rFlCmdLock.fgBlock = TRUE;
  vNotifySharedInfo(FL_CMD_ASSERT, 0x0, 0x0);

  return;
}
#endif // DATA_DISC_SUPPORT_PLAY_LIST

/**
 * Send "FS LIST" command "FLCMD_QUERY_ITEM".
 */
#ifdef ISO_AUTO_PLAY
void vFlCmdQueryItem(BYTE bId, WORD wItemIdx) large
{
  WORD wBlkPtr;

  if (fgFlCmdIsOOC())
    return;

  if (bId == 0xFF)
    return;

  wBlkPtr = FL_CMD_BLK_SA;

  // - fill the command block
  vSetSharedInfo(wBlkPtr ++, FLCMD_QUERY_ITEM);
  vSetSharedInfo(wBlkPtr ++, bId);
  vSetSharedInfo(wBlkPtr ++, bLoByte(wItemIdx));
  vSetSharedInfo(wBlkPtr ++, bHiByte(wItemIdx));

  // - send out the notification
  _rFlCmdLock.fgBlock = TRUE;
  vNotifySharedInfo(FL_CMD_ASSERT, 0x0, 0x0);

  return;
}
#endif
/**
 * Send "FS LIST" command "FLCMD_ADD_ITEM".
 */
#if 0
void vFlCmdAddItem(BYTE bSId, WORD wSIdx, 
                  BYTE bDId, WORD wDIdx, BYTE bOpt) large
{
  WORD wBlkPtr;

  if (fgFlCmdIsOOC())
    return;

  if ((bSId == 0xFF) || (bDId == 0xFF))
    return;

  wBlkPtr = FL_CMD_BLK_SA;

  // - fill the command block
  vSetSharedInfo(wBlkPtr ++, FLCMD_ADD_ITEM);
  vSetSharedInfo(wBlkPtr ++, bSId);
  vSetSharedInfo(wBlkPtr ++, bLoByte(wSIdx));
  vSetSharedInfo(wBlkPtr ++, bHiByte(wSIdx));
  vSetSharedInfo(wBlkPtr ++, bDId);
  vSetSharedInfo(wBlkPtr ++, bLoByte(wDIdx));
  vSetSharedInfo(wBlkPtr ++, bHiByte(wDIdx));
  vSetSharedInfo(wBlkPtr ++, bOpt);

  // - send out the notification
  _rFlCmdLock.fgBlock = TRUE;
  vNotifySharedInfo(FL_CMD_ASSERT, 0x0, 0x0);

  return;
}
#endif
/**
 * Send "FS LIST" command "FLCMD_DEL_ITEM".
 */
#if 0
void vFlCmdDelItem(BYTE bId, WORD wIdx, BYTE bOpt) large
{
  WORD wBlkPtr;

  if (fgFlCmdIsOOC())
    return;

  if (bId == 0xFF)
    return;

  wBlkPtr = FL_CMD_BLK_SA;

  // - fill the command block;
  vSetSharedInfo(wBlkPtr ++, FLCMD_DEL_ITEM);
  vSetSharedInfo(wBlkPtr ++, bId);
  vSetSharedInfo(wBlkPtr ++, bLoByte(wIdx));
  vSetSharedInfo(wBlkPtr ++, bHiByte(wIdx));
  vSetSharedInfo(wBlkPtr ++, bOpt);

  // - send out the notification
  _rFlCmdLock.fgBlock = TRUE;
  vNotifySharedInfo(FL_CMD_ASSERT, 0x0, 0x0);

  return;
}
#endif

#endif  // #ifdef PLAYER_FLMENU

⌨️ 快捷键说明

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