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

📄 flmenu.c

📁 MTK 1389E SOURCE CODE
💻 C
📖 第 1 页 / 共 5 页
字号:
/**********************************************************************/
/***************    MTK CONFIDENTIAL & COPYRIGHTED     ****************/
/***************                                       ****************/
/***************  $Modtime:: 05/12/02 2:35p    $       ****************/
/***************  $Revision:: 32               $       ****************/
/***************                                       ****************/
/***************  $Modtime:: 05/12/02 2:35p    $       ****************/
/***************  $Revision:: 32               $       ****************/
/***************                                       ****************/
/***************   Description : File List             ****************/
/***************                 File Menu Module      ****************/
/***************                                       ****************/
/***************       Company : MediaTek Inc.         ****************/
/***************    Programmer : Jacob Lin             ****************/
/**********************************************************************/

/**
 *          $(PROJ_HOME)/8032/custom/demo/fslist/flmenu.c
 *
 *          Object "FILE MENU" acts like the file menu of the
 *          file browser and MP3 player control.
 */

#define __FLMENU_C_


#include "../general.h"
#include "../osdshow.h"
#include "flmenu.h"
#include "flspec.h"
#include "flcomm.h"
#include "flipshow.h"
#include "flconfig.h"

#pragma NOAREGS
extern void DRS232LogB(BYTE bV1, BYTE bV2, BYTE bV3, BYTE bV4);

#ifdef PLAYER_FLMENU

// 20050324, RISC don't support SPTM, remark it also in 8032 to save code
//#define SPTM_SUPPORT

/**
 * Macro defnitions
 */
// "FS LIST" command return handler
static void vFlMnRetCreate(void) large;
static void vFlMnRetSet(void) large;
static void vFlMnRetGetItems(void) large;
static void vFlMnRetClickItem(void) large;
static void vFlMnRetAddToPl(void) large;
static void vFlMnRetRmFromPl(void) large;
static void vFlMnRetRmAllFromPl(void) large;
static void vFlMnRetQueryItem(void) large;

// UI
static void vFlMnShowPage(void) large;
static void vFlMnDrawItem(BYTE bItemIdx) large;
static void vFlMnPProcName(DWRD *pdwAddr, BYTE *pbLen) large;
static void vFlMnDrawPage(void) large;
static void vFlMnClrPage(void) large;
static void vFlMnDrawInfoPanel(BYTE bPanel) large;

#if (defined(DATA_DISC_SUPPORT_DISC_LIST) || defined(DATA_DISC_SUPPORT_PLAY_LIST))
static BOOL fgFlMnChgListType(void) large;
#endif

#ifdef DATA_DISC_SUPPORT_PLAY_LIST
// List
static BOOL fgFlMnPlMark(void) large;
static BOOL fgFlMnPlRemove(void) large;
#endif

// Utilities
static WORD wFlMnGetListBaseDir(BYTE bListId) large;
static BOOL fgFlMnIsCurrPlayItem(BYTE bIdx) large;
static void vFlMnHiliOn(BYTE bItemIdx, BYTE bHiliIdx, BYTE bColor1, BYTE bColor2) large;
static void vFlMnHiliOff(BYTE bHiliIdx) large;
static BOOL fgIsParentDir(void) large;


static BYTE bFlMnGetIconIdx(BYTE bFType) large;
static void vFlMnHiliItem(BYTE bItemIdx, BOOL fgOn) large;
static BOOL fgFlMnLeavItem(BYTE bItemIdx) large;
static BOOL fgFlMnEntItem(BYTE bItemIdx) large;
static void vFlMnRdListInfo(BYTE bId) large;
static BOOL fgFlMnLeavDir(void) large;
static BOOL fgFlMnEntDir(BYTE bItemIdx, BOOL fgMoveUp) large;

static void vFlMnSyncState(void) large;

//  full path display manipulation
static void vWorkAreaClear(void) large;
#ifdef FLMN_RET_PLAY_DIR
  static void vWorkAreaMove(BOOL fgToFront) large;
#endif
static void vParseFolderName(BYTE bIdx, BOOL fgMoveUp) large;
static void vDrawFolderName(BOOL fgDraw) large;

// Timer
#ifdef FLMN_TEST_NEW_FUNC
static void vFlMnTimerScrollWB(void) large;
#endif
static void vFlMnTimerJpgPv(void) large;
#if 0 // - JACOB: unused yet
static void vFlMnTimerScrollingStr(void) large;
#endif //0
static void vFlMnTimerShowBitrate(void) large;
static void vFlMnChgMp3State(BYTE bStt) large;

// IR Key Handlers
static BOOL fgFlMnIrCmdDoneHdr(void) large;
static BOOL fgFlMnOnIrPlay(void) large;
static BOOL fgFlMnOnIrPause(void) large;
//static BOOL fgFlMnIrOnIrNum(void) large;
static BOOL fgFlMnOnIrSelDone(void) large;
static BOOL fgFlMnIrDirsHdr(void) large;
static BOOL fgFlMnOnIrUp(void) large;
static BOOL fgFlMnOnIrDown(void) large;
static BOOL fgFlMnOnIrLeft(void) large;
static BOOL fgFlMnOnIrRight(void) large;
static BOOL fgFlMnOnIrNext(void) large;
static BOOL fgFlMnOnIrPrev(void) large;
#ifdef FLMENU_FUNC_TEST
static BOOL fgFlMnOnIrNextFile(void) large;
static BOOL fgFlMnOnIrPrevFile(void) large;
#endif
static BOOL fgFlMnOnIrRepeat(void) large;
static BOOL fgFlMnOnIrRandom(void) large;

#ifdef ISO_AUTO_PLAY
  static BOOL fgFlAutoPlayStart(void) large;
  static BOOL fgFlAutoPlayNext(void) large;
  static BOOL fgFlAutoPlayQuit(void) large;
#endif

static BOOL fgFlMnChgInfoPanel(void) large;
static void vShowJpegInfo(void) large;

#if 0
static code BYTE _pbListType[] =
{
  FLPARM_LIST_FOLDER
#ifdef FLMN_SUPPORT_FILELIST
  , FLPARM_LIST_DISC
#endif
#ifdef FLMN_SUPPORT_PLAYLIST
  , FLPARM_LIST_PLAYLIST
#endif
};
#endif

// Global Variables
static xdata WORD _wFlMnLstFirst;
static xdata WORD _wFlMnPlFirst;
static xdata WORD _wBaseDir;

static xdata BYTE _bFlMnTimer;
static xdata BYTE _bFlMnShift;
//xdata BYTE _bShiftPos;


////////////////////////////////////////////////////////////////////////////////
//

#ifdef ENABLE_ID3

static code BYTE _pbId3V1Tag[3] = { 'T', 'A', 'G' };
static code BYTE _pbId3V1FldLen[ID3V1_MAX] =  { 3, 30, 30, 30,  4, 30 , 1 };
static code BYTE _pbId3V1FldPos[ID3V1_MAX] =  { 0, 3, 33, 63, 93, 97, 127 };

static void vFlGetId3Info(void) large
{
  DWRD  dwAddr;
  BYTE  pbStr[31];
  BYTE  bFld, bLen, i, bChar;
#ifndef MT1379_MANUFACTURE_TEST
#ifdef SUPPORT_CAPTURE_LOGO
  vPlayerShowLogo(ISO_NOMAL_LOGO, ISO_LOGO_COLOR);
#else
  vPlayerShowLogo(ISO_STOP_LOGO, ISO_LOGO_COLOR);
#endif
#endif
  bLoByte(wLoWord(dwAddr)) = bSharedInfo(SI_MP3_ID3TAG_B1);
  bHiByte(wLoWord(dwAddr)) = bSharedInfo(SI_MP3_ID3TAG_B2);
  bLoByte(wHiWord(dwAddr)) = bSharedInfo(SI_MP3_ID3TAG_B3);
  bHiByte(wHiWord(dwAddr)) = bSharedInfo(SI_MP3_ID3TAG_B4);

  if (dwAddr == 0xffffffff)
    return;

  for (bFld=0, bLen=0; bFld < ID3V1_MAX; bFld++)
  {
    pbStr[0] = _pbId3V1FldLen[bFld];
    for (i=0; i<_pbId3V1FldLen[bFld]; i++)
    {
      bChar = bReadDRAMTbl(bLoByte(wHiWord(dwAddr)), wLoWord(dwAddr));

      if (bFld == 0)
      {
        if (bChar != _pbId3V1Tag[i])
          return;
      }

      if (bChar == 0x00)
      {
        pbStr[0] = i;
        dwAddr += (_pbId3V1FldLen[bFld] - i);
        break;
      }
      else
      {
        pbStr[i+1] = bChar;
        dwAddr ++;
      }
    }

    if (bFld != 0)
    {
      _wStartX = (WORD) FLMN_PREVIEW_X - FSMENU_BASIC_WB_LEFT;
      _wStartY = (WORD) FLMN_PREVIEW_Y - FSMENU_BASIC_WB_TOP + 15 + 30 * bFld;
      vOsdShowStrMax(FL_MENU_WB, pbStr, 200, 0);
    }
  }
}
#endif

////////////////////////////////////////////////////////////////////////////////
//

#ifdef ISO_LAST_MEM
static void vFlMnGetLastMemItem(void) large
{
  WORD  wSlotSa, wIdx;

  _wFlCurAdoIdx = 0xFFFF;

  wSlotSa = wSIItemPos(bSharedInfo(SI_DDISC_LASTMEM_GRP), 1);

  wSlotSa += ((bSharedInfo(SI_DDISC_LASTMEM_NS)-1) *
               bSharedInfo(SI_DDISC_MEM_SLOT_SZ));

  wSlotSa++;

  if (bSharedInfo(wSlotSa) != SV_MEM_SLOT_DDISC)
  {
    return;
  }

  wSlotSa += 9;
  bLoByte(wIdx) = bSharedInfo(wSlotSa);
  wSlotSa ++;
  bHiByte(wIdx) = bSharedInfo(wSlotSa);
  _wFlCurAdoDir = wIdx;

  wSlotSa ++;
  bLoByte(wIdx) = bSharedInfo(wSlotSa);
  wSlotSa ++;
  bHiByte(wIdx) = bSharedInfo(wSlotSa);

  _wFlCurAdoIdx = wIdx;
  if (_wFlCurAdoDir != 0)
    _wFlCurAdoIdx++;
}
#endif
#ifdef MT1379_MANUFACTURE_TEST
extern void vNotMp4CD() large;
#endif

////////////////////////////////////////////////////////////////////////////////
// Command return

/**
 * Check the return value of command "FLCMD_CREATE".
 */
static void vFlMnRetCreate(void) large
{
  WORD wBlkPtr;
  BYTE bRCode;

  wBlkPtr = FL_CMD_BLK_SA + 1; // - shift to the parameter block
  bRCode = bSharedInfo(wBlkPtr ++);

  // - mark the command is done
  vFlCmdDone();

  if (bRCode == FLRET_S_OK)
  {
    // - read in the newly created list info
    if (fgFlClIsLock())
    {
      switch(bFlClPath())
      {
        case FL_CMDPATH_INIT_0:
          _bFlMnListId = bSharedInfo(wBlkPtr ++);
          vFlMnRdListInfo(_bFlMnListId);
#ifdef ISO_AUTO_PLAY
          vFlClNext();
          vFlCmdCreate(FLPARM_LIST_DISC, 0, 0x0,
        #ifdef MT1379_MANUFACTURE_TEST
                       FLPARM_FF_MPG,
        #else
                       FL_AUDIO_FILE,
        #endif
                       FLPARM_SO_GDIR);
          break;

        case FL_CMDPATH_INIT_1:
          _bFlRefListId = bSharedInfo(wBlkPtr ++);
        #ifdef MT1379_MANUFACTURE_TEST
          vFlMnRdListInfo(_bFlRefListId);
          #ifdef RS232_LOG
            DRS232LogS("Aft FlCreate");
            DRS232LogB(_wFlMnListLen,0,0,0);
          #endif

          if (!_wFlMnListLen)
            vNotMp4CD();
          else
            vFlCmdClickItem(_bFlRefListId, 0);
        #endif

#endif
          if (bSharedInfo(SI_DISC_TYPE) == SV_PCD)
          {
            vFlSetCmdTarget(FL_CMD_TARGET_JPEG);
          }
          else
          {
            if (_wFlCurAdoIdx == 0xFFFF)
            {
              fgFlCmdGetItems(_bFlMnListId, 0);
              //vFlSetCmdTarget(FL_CMD_TARGET_MENU);
            }
            else
            {
              _bFlMnCurItemIdx = _wFlCurAdoIdx % FLMN_ITEM_N;
              fgFlCmdGetItems(_bFlMnListId, _wFlCurAdoIdx - _bFlMnCurItemIdx);
            }
          }
          break;
      }
    }
  }
  else
  {
    // - error occurs
    _bFlMnListId = 0xFF;
    _bFlRefListId = 0xFF;
  }

  return;
}

/**
 * Check the return value of command "FLCMD_SET".
 */
static void vFlMnRetSet(void) large
{
  WORD wBlkPtr;
  BYTE bRCode;

  wBlkPtr = FL_CMD_BLK_SA + 1; // - shift to the parameter block
  bRCode = bSharedInfo(wBlkPtr ++);

  //bRetOp = bFlCmdRetOp();
  // - mark the command is done
  vFlCmdDone();

  if (bRCode == FLRET_S_OK)
  {
    // - successful
    vFlMnRdListInfo(_bFlMnListId);
    if (fgFlClIsLock())
    {
      switch(bFlClPath())
      {
        case FL_CMDPATH_RETURN:
          _bFlMnCurItemIdx = _wFlCurAdoIdx % FLMN_ITEM_N;
          fgFlCmdGetItems(_bFlMnListId, _wFlCurAdoIdx - _bFlMnCurItemIdx);
          break;
        case FL_CMDPATH_CHG_DIR:
        case FL_CMDPATH_DIR_UP_0:
        case FL_CMDPATH_DIR_UP_1:
          _bFlMnCurItemIdx = 0x0;
          fgFlCmdGetItems(_bFlMnListId, 0);
          break;
        case FL_CMDPATH_CHG_LIST:
          fgFlCmdGetItems(_bFlMnListId, 0x0);
          break;
        case FL_CMDPATH_ATPLY_1:
          _wFlCurAdoIdx += wFlGetSubFldrNs(_bFlMnListId);
          fgFlCmdGetItems(_bFlMnListId, _wFlCurAdoIdx - (_wFlCurAdoIdx % FLMN_ITEM_N));
          break;
      }
    }
    else
    {
#if 0
      if (bRetOp == FLCMD_RET_OP_CHG_LIST)
        fgFlCmdGetItems(_bFlMnListId, 0x0);
      else
#endif
        fgFlCmdGetItems(_bFlMnListId, 0x0);

      _bFlMnCurItemIdx = 0x0;
    }
  }
  else
  {
    // - error occurs
  }

  return;
}

/**
 * Check the return value of command "FLCMD_GET_ITEMS".
 */
static void vFlMnRetGetItems(void) large
{
  WORD wBlkPtr;
  WORD wNum;
  BYTE bType;
  BYTE bRCode;

  wBlkPtr = FL_CMD_BLK_SA + 1; // - shift to the parameter block
  bRCode = bSharedInfo(wBlkPtr ++);

  if (bRCode == FLRET_S_OK)
  {
    // - successful, update the item number, redraw the page
    _bFlMnItemNs = bSharedInfo(wBlkPtr ++);
    vFlCmdDone();

    switch(bFlClPath())
    {
    #ifdef ISO_AUTO_PLAY
      case FL_CMDPATH_INIT_1:
    #else
      case FL_CMDPATH_INIT_0:
    #endif
        vFlSetCmdTarget(FL_CMD_TARGET_MENU);
        break;
      case FL_CMDPATH_CHG_LIST:
        vFlIpShowInfo(IP_INFO_LIST_TYPE, bSharedInfo(FL_LIST_FIELD(_bFlMnListId)), 0);
      case FL_CMDPATH_CHG_DIR:
      case FL_CMDPATH_REDRAW:
      case FL_CMDPATH_DIR_UP_1:
      case FL_CMDPATH_UP:
      case FL_CMDPATH_DOWN:
      case FL_CMDPATH_RETURN:
        vFlMnSyncState();
        vFlMnDrawPage();
        fgFlMnEntItem(_bFlMnCurItemIdx);
        vFlClRls();
#ifdef CDFS_AUTO_PLAY
        if((bFlClPath() == FL_CMDPATH_REDRAW) && (bSharedInfo(SI_FS_FSTYPE) == FSTYPE_CDFS))
        {
          if((!_bFlMnCurItemIdx) && (bSharedInfo(SI_PBC_STATE) == SV_STOP))
          {
#ifdef RS232_LOG
          DBGLogS(" send play \n ");
        #endif
            fgSetPlayPostKey(IR_PLAY);
          }
        }
#endif
        break;
      case FL_CMDPATH_SEL_2:
        vFlMnDrawPage();
        fgFlMnEntItem(_bFlMnCurItemIdx);
        vFlClRls();
        break;
      case FL_CMDPATH_DIR_DOWN:
        fgFlMnEntDir(0x0, FALSE);
        break;
      case FL_CMDPATH_DIR_UP_0:
        vFlClNext();
        fgFlMnEntDir(0x0, TRUE);
        break;
      case FL_CMDPATH_PL_RM:
        vFlMnDrawPage();
        fgFlMnEntItem(_bFlMnCurItemIdx);
        vFlClRls();
        break;
      case FL_CMDPATH_SEL_0:
        _fgFlMdChg = TRUE;
        switch (bFlGetItemType(_bFlMnCurItemIdx))
        {
          case FTYPE_FOLDER:
            vFlClNext();
            if (fgIsParentDir())
              vParseFolderName(_bFlMnCurItemIdx, TRUE);
            else
              vParseFolderName(_bFlMnCurItemIdx, FALSE);
            vFlSetCmdTarget(FL_CMD_TARGET_MENU);
            break;
          case FTYPE_AUDIO:
            vFlClNext();
            vFlSetCmdTarget(FL_CMD_TARGET_MENU);
            break;

⌨️ 快捷键说明

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