?? flmenu.c
字號:
/**********************************************************************/
/*************** 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 + -