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