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

📄 flmenu.c

📁 mtk1389L latest sourcecode enjoy
💻 C
📖 第 1 页 / 共 5 页
字号:
/**********************************************************************/
/***************    MTK CONFIDENTIAL & COPYRIGHTED     ****************/
/***************                                       ****************/
/***************  $Modtime:: 07/06/03 8:08p    $       ****************/
/***************  $Revision:: 10               $       ****************/
/***************                                       ****************/
/***************  $Modtime:: 07/06/03 8:08p    $       ****************/
/***************  $Revision:: 10               $       ****************/
/***************                                       ****************/
/***************   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"

/*  for module Tester */
#include "../tst/tst.h"

#pragma NOAREGS

#ifdef PLAYER_FLMENU
/**
 * 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;
#ifdef SUPPORT_EMD
  static void vFlMnRetAddItem(void) large;
  static void vFlMnRetDelItem(void) large;
  static void vFlMnRetCancelCopy(void) large;
#endif

// 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;

// List
static BOOL fgFlMnChgListType(void) large;
static BOOL fgFlMnPlMark(void) large;
static BOOL fgFlMnPlRemove(void) large;
static BOOL fgFlMnPlClear(void) large;

// Utilities
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;

static void vFlMnTimerShowBitrate(void) large;
static void vFlMnChgMp3State(BYTE bStt) large;
#ifdef SUPPORT_EMD
  #ifdef FLMN_EMD_INFO_REFRESH
  static void vFlMnTimerEmdInfo(void) large;
  #endif
  static void vFlMnShowFmvPercent(void) large;
#endif

// 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;
static BOOL fgFlMnRetPlayDir(void) large;
static BOOL fgFlMnOnIrSf(void) large;
static BOOL fgFlMnOnIrSr(void) large;
static BOOL fgFlMnOnIrRootMenu(void) large;
#ifdef SUPPORT_EMD
  static BOOL fgFlMnOnIrCopy(void) large;
  static BOOL fgFlMnOnIrDelete(void) large;
  static BOOL fgFlMnOnIrCancelCopy(void) large;
#endif
#ifdef SUPPORT_ONLY_AUDIO_TPYE
BOOL fgFlMnOnAudio(void) large;
#endif
#ifdef IR_PLAYLIST_ADD_DEL
  static BOOL fgFlMnOnIrPlAddDel(void) large;
#endif
#ifdef ISO_AUTO_PLAY
  static BOOL fgFlMnOnIrAutoPlay(void) large;
#endif

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

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

#ifdef SUPPORT_SACD
  WORD wGetSacdBaseDir(BYTE bSacdPrio) large;
#endif

#ifdef MT1379_MANUFACTURE_TEST
  extern void vNotMp4CD() large;
#endif


////////////////////////////////////////////////////////////////////////////////
//
// Event Handler Map
//

static code void (*_prFlCmdProc[]) (void) =
{
  0,
  vFlMnRetCreate,
  vFlMnRetSet,
  vFlMnRetGetItems,
  vFlMnRetClickItem,
  vFlMnRetAddToPl,
  vFlMnRetRmFromPl,
  vFlMnRetRmAllFromPl,
  vFlMnRetQueryItem
#ifdef SUPPORT_EMD
  , vFlMnRetAddItem
  , vFlMnRetDelItem
  , vFlMnRetCancelCopy
#endif
};

#if 0
typedef BOOL (*pfnIrHandler) (void);

typedef struct _sFlIrHandler
{
  BYTE  bIrKey;
  pfnIrHandler  pHandler;
} sFlIrHandler;
#endif

static code sFlIrHandler _rFlMnIrHandler[] =
{
  { IR_PLAY_ENTER,        fgFlMnOnIrPlay },
  { IR_PLAY,              fgFlMnOnIrPlay },
  { IR_ENTER,             fgFlMnOnIrPlay },
  { IR_PLAY_PAUSE,        fgFlMnOnIrPlay },
  { IR_CMD_DONE,          fgFlMnIrCmdDoneHdr },
  { IR_SELECT_DONE,       fgFlMnOnIrSelDone },
  { IR_PAUSE,             fgFlMnOnIrPause },
  { IR_UP,                fgFlMnOnIrUp },
  { IR_DOWN,              fgFlMnOnIrDown },
  { IR_LEFT,              fgFlMnOnIrLeft },
  { IR_RIGHT,             fgFlMnOnIrRight },
  { IR_NEXT,              fgFlMnOnIrNext },
  { IR_PREV,              fgFlMnOnIrPrev },
  { IR_CHG_LIST,          fgFlMnChgListType },
  { IR_PLAYLIST_CLEAN,    fgFlMnPlClear },
  { IR_RANDOM,            fgFlMnOnIrRandom },
  { IR_SF,                fgFlMnOnIrSf },
  { IR_SR,                fgFlMnOnIrSr },
  { IR_ROOT_MENU,         fgFlMnOnIrRootMenu },
#ifdef SUPPORT_EMD
  { IR_COPY,              fgFlMnOnIrCopy },
  { IR_CANCEL_COPY,       fgFlMnOnIrCancelCopy },
  { IR_DELETE,            fgFlMnOnIrDelete },
#endif
#ifdef IR_PLAYLIST_ADD_DEL
  { IR_PLAYLIST_ADD_DEL,  fgFlMnOnIrPlAddDel },
#else
  { IR_PLAYLIST_ADD,      fgFlMnPlMark },
  { IR_PLAYLIST_DEL,      fgFlMnPlRemove },
#endif
#ifdef ISO_AUTO_PLAY
  { IR_AUTO_PLAY,         fgFlMnOnIrAutoPlay },
#endif
#ifdef FLMENU_FUNC_TEST
  { IR_NEXT_FILE,         fgFlMnOnIrNextFile },
  { IR_PREV_FILE,         fgFlMnOnIrPrevFile },
#endif
#ifdef FLMN_RET_PLAY_DIR
  { IR_RETURN,           fgFlMnRetPlayDir },
#endif
  { IR_DISPLAY,          fgFlMnChgInfoPanel }
};


typedef void (*pfnTimerHandler) (void);

static code pfnTimerHandler _rFlTimerHandler[] =
{
  0,                      // FLMN_TIMER_NONE
  vFlMnTimerJpgPv,        // FLMN_TIMER_CHECK_PREVIEW
  0,                      // FLMN_TIMER_DRAW_SCROLLING_SCRIPT
#ifdef FLMN_TEST_NEW_FUNC
  vFlMnTimerScrollWB,     // FLMN_TIMER_SCROLL_WB,
#else
  0,
#endif
  vFlMnTimerShowBitrate,  // FLMN_TIMER_SHOW_BITRATE,
#ifdef FLMN_EMD_INFO_REFRESH
  vFlMnTimerEmdInfo,      // FLMN_TIMER_EMD_INFO
#else
  0,
#endif
#ifdef SUPPORT_EMD
  vFlMnShowFmvPercent     // FLMN_TIMER_FMV_PERCENT
#else
  0
#endif
};

static code BYTE _pbIconIndex[] =
{
  BMP_INVALID, // FTYPE_AC3
  BMP_MP3,     // FTYPE_MP3
  BMP_MP2,     // FTYPE_MP2
  BMP_MP1,     // FTYPE_MP1
  BMP_INVALID, // ?
  BMP_PIC,     // FTYPE_JPG
  BMP_INVALID, // FTYPE_MLP
  BMP_WMA,     // FTYPE_WMA
  BMP_WMA,     // FTYPE_ASF
  BMP_MPG,     // FTYPE_MPG
  BMP_MPG,     // FTYPE_DAT
  BMP_MPG,     // FTYPE_VOB
  BMP_INVALID, // ?
  BMP_INVALID, // FTYPE_DSD
  BMP_INVALID, // ?
  BMP_INVALID, // FTYPE_CDA
  BMP_FOLDER,  // FTYPE_DIR
  BMP_INVALID, // ?
  BMP_AVI,     // FTYPE_AVI
  BMP_INVALID, // FTYPE_TS1
  BMP_MP4,     // FTYPE_MP4
  BMP_3GP,     // FTYPE_3GP
  BMP_INVALID, // FTYPE_TS2
  BMP_INVALID, // FTYPE_DST
  BMP_OGG,     // FTYPE_OGG
#ifdef OGG_AUDIO_AS_MP3
  BMP_OGG,     // FTYPE_OGM
#endif
  BMP_INVALID  // FTYPE_TS4
};

#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 WORD _wFlCpDIdx;
static xdata WORD _wFlCpFIdx;

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


////////////////////////////////////////////////////////////////////////////////
//
// Init & Ir dispatch function
//

/**
 * Command handler of init state.
 */
BOOL fgFlOnInit(void)
{
  if (_bIRKey == IR_CMD_DONE)
  {
    // - perform init procedure
    if (FL_ACK(_dwIrDoneParm) == FL_CMD_ASSERT)
    {
      // - what we consider
      switch (bSharedInfo(FL_CMD_BLK_SA))
      {
      case FLCMD_CREATE:
        vFlMnRetCreate();
        break;
      default:
        break;
      }
    }
  }
  else
  {
    // - should not happen, do nothing
  }

  return TRUE;
}

/**
 * Init the object "file list menu".
 */
BOOL fgFlMnInit(void) large
{
  WORD  wInitDir, wFCfg;
  BYTE  bIncItemType;
  BOOL  bAllowLastMem = TRUE;


  // - perform init operations of module "fs list menu"
  //    1. init the command as done
  vFlCmdDone();

  //    2. init control flags & variables
  _bFlMnListId = 0xFF;
  _bFlMnItemNs = 0x0;
  _bFlMnCurItemIdx = 0x0;
  _wFlMnListLen = 0x0;
  _bFlMnTimeType = OSD_SHOW_SINGLE_ELAPSED;
  _wFlMnLstFirst = 0xFFFF;
  _wFlMnPlFirst = 0xFFFF;
  _wFlCurAdoDir = 0xFFFF;
  _wFlCurAdoIdx = 0xFFFF;
 // _bFlCurAdoFileType = FLPARM_LIST_INVALID;  //by Jerry for PL00001440  
  _bFlId3Field = 0x0000;
  _bFlMnHiliClrSrc1 = 0x0F;
  _bFlMnHiliClrDes1 = 0x0F;
  _bFlMnHiliClrSrc2 = 0x0F;
  _bFlMnHiliClrDes2 = 0x0F;
  _bFlMnHiliPos1 = 0x0F;
  _bFlMnHiliPos2 = 0x0F;
  _wFlPlIdx = 0xFFFF;
  _wFlFlIdx = 0xFFFF;
  _wFlFdIdx = 0xFFFF;
  _bFlMnItemType = FTYPE_NONE;
  _bFlIpState = IP_STATE_PANEL_1;
  _bPreview = PREVIEW_STATE_IDLE;   // - jpeg preview
  _bFlMnTimer = FLMN_TIMER_PERIOD;  // - timer
  _wFlAtplyIdx = 0;
  _fgFlIsAutoPlay = FALSE;
  _fgFlFmving = FALSE;
#ifdef FLMN_EMD_INFO_REFRESH
  _FlMnEmdInfoType = EMD_INFO_USB;
#endif

  //    3. white board usage
  //vDisableUnusedWB();
  // - create whiteboard and set up related OSD properties
#ifdef FSMENU_INFO_PANEL
  vCreateWB(FL_INFO_WB, TRUE);
  vSetWBTcColor(FL_INFO_WB);
  vSetMsgCol4(FL_INFO_WB, 0, 0, 3, 2);
  vSetInputMsgCol4(FL_INFO_WB, 0, 4, 4, 2);
#endif
  vCreateWB(FL_MENU_WB, TRUE);
  vSetWBTcColor(FL_MENU_WB);
  vSetMsgCol4(FL_MENU_WB, 0, 0, 3, 2);

  //    4. set size and range of jpeg preview mode
  vSetSharedInfo(SI_PREVIEW_MODE, TRUE);
  vSetSharedInfo(SI_PREVIEW_START_X, FLMN_PREVIEW_X / 4);
  vSetSharedInfo(SI_PREVIEW_START_Y, FLMN_PREVIEW_Y / 5);
  vSetSharedInfo(SI_PREVIEW_WIDTH, FLMN_PREVIEW_W / 4);
  vSetSharedInfo(SI_PREVIEW_HEIGHT, FLMN_PREVIEW_H / 5);

  //    5. init run-time info display
  vFlIpShowInfo(IP_INFO_VOLUME, bAdspCurrVol(), FLIP_VOLUME_REDRAW);
  vFlIpShowInfo(IP_INFO_TOTALTIME, 0, 0);
  vFlIpShowInfo(IP_INFO_TOTALTIME, 0, 0);
  vFlIpShowInfo(IP_INFO_BITRATE, 0, 0);
  vWorkAreaClear();

#ifdef SUPPORT_EMD
  vOsdShowWb(OSD_WB_FULL_SCR);

  vEnableWB(FL_INFO_WB);
  vEnableWB(FL_MENU_WB);
/*
  Mark it by Bright_liu 2005/11/22, for CQ(PL00101343)
  when change the device, the OSD file browser maybe on the screen yet.
*/
  // vFlIpShowInfo(IP_INFO_EMD_ATTACH, EMD_INFO_USB, 0);
#endif

  // tmp solution
  vSetSharedInfo(SI_MP3_TOTAL_TIME_MM, 0);
  vSetSharedInfo(SI_MP3_TOTAL_TIME_SS, 0);
  vSetSharedInfo(SI_MP3_ITEM_IDX_LO, 0xFF);
  vSetSharedInfo(SI_MP3_ITEM_IDX_HI, 0xFF);    

#ifdef ISO_LAST_MEM
  if ((bSharedInfo(SI_LASTMEM_NS) > 0) &&
      (bSharedInfo(SI_LAST_MEM) == EV_ON))
  {
    vFlMnGetLastMemItem();
  }
#endif

  //    6. create the list of the menu (the latest operation of init procedure)
  if (!fgFlClLock(FL_CMDPATH_INIT_0))
  {
    return FALSE;
  }

  wInitDir = 0;
  bIncItemType = FLPARM_INC_PARENT;
  wFCfg = FLPARM_FF_DIR|FLMN_DEF_FFAC;

  if (fgIsPcdPlay())
  {
    bLoByte(wInitDir) = bSharedInfo(SI_FS_PCD_BASEDIR_LO);
    bHiByte(wInitDir) = bSharedInfo(SI_FS_PCD_BASEDIR_HI);
    bIncItemType = 0;
    wFCfg = FLMN_DEF_FFAC;
  }
#ifdef SUPPORT_SACD
  else
  if (IS_SACD_TYPE())
  {
    wInitDir = wGetSacdBaseDir(bSharedInfo(SI_SACD_PRIO));
    if (wInitDir != 0)
    {
      bIncItemType = 0;
      wFCfg = FLMN_DEF_FFAC;
    }
  }
#endif
#ifdef ISO_LAST_MEM
  if (_wFlCurAdoIdx != 0xFFFF && bAllowLastMem)
  {
    _wFlFdIdx = _wFlCurAdoIdx;
    wInitDir = _wFlCurAdoDir;
  }
#endif

  vFlCmdCreate(FLPARM_LIST_FOLDER, bIncItemType,
               wInitDir, wFCfg, FLPARM_SO_GDIR);

  return TRUE;
}

/**
 * Event handler of the object "file list menu".
 */
BOOL fgFlOnMn(void) large
{
  BOOL fgIsGrabbed = FALSE;
  BYTE  i;

#ifdef ISO_AUTO_PLAY
  switch (_bIRKey)

⌨️ 快捷键说明

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