www.pudn.com > 6027_HD65.rar > flcmd.c


/**********************************************************************/ 
/***************    MTK CONFIDENTIAL & COPYRIGHTED     ****************/ 
/***************                                       ****************/ 
/***************  $Modtime:: 04/04/28 11:50a   $       ****************/ 
/***************  $Revision:: 2                $       ****************/ 
/***************                                       ****************/ 
/***************   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 
 */ 
 
static BOOL fgFlCmdIsOOC(void) large; 
 
 
 
/** 
 * 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