📄 flmenu.c
字号:
#endif
WriteDRAMTbl(bLoByte(wHiWord(dwDesAddr)), wLoWord(dwDesAddr), bTmp);
dwSrcAddr++;
dwDesAddr++;
i++;
}
WriteDRAMTbl(bLoByte(wHiWord(dwDesAddr)), wLoWord(dwDesAddr), '\\');
}
}
return;
}
////////////////////////////////////////////////////////////////////////////////
// Info Panel
static void vFlMnDrawInfoPanel(BYTE bPanel) large
{
switch(bPanel)
{
case IP_STATE_PANEL_1:
vFlIpShowInfo(IP_INFO_EQ, 0, 0);
vFlIpClearInfoArea(IP_INFO_PANEL_2);
vFlIpShowInfo(IP_INFO_VOLUME, bAdspCurrVol(),
(fgIsMute() ? FLIP_VOLUME_MUTE_ON : FLIP_VOLUME_REDRAW));
vFlIpShowInfo(IP_INFO_PBC, 0, 0);
vFlIpShowInfo(IP_INFO_USR_AUX_CTRL, bSharedInfo(SI_USR_AUX_CTRL), 0);
break;
case IP_STATE_PANEL_2:
#ifdef SPTM_SUPPORT
vHideEqBar();
#endif
vFlIpClearInfoArea(IP_INFO_PANEL_1);
vFlIpShowInfo(IP_INFO_RPT_TYPE, _bFlPbMode, 0);
vFlIpShowInfo(IP_INFO_LIST_TYPE, bSharedInfo(FL_LIST_FIELD(_bFlMnListId)), 0);
// vFlIpShowInfo(IP_INFO_KEY_SHIFT, 0, 0);
// vFlIpShowInfo(IP_INFO_KEY_SHIFT, 0, 0);
#ifdef PLAYER_SURROUND
vFlIpShowInfo(IP_INFO_REVERB, bEepromReadByte(REVERB_MD_POS), 0);
#endif
vFlIpShowInfo(IP_INFO_DISC_TYPE, 0, 0);
break;
}
if (bSharedInfo(SI_MP3_STT) == MP3STT_PB_STRT)
{
// - display run-time info
vFlIpShowInfo(IP_INFO_PLAYTIME, bSharedInfo(SI_TIME_MM), bSharedInfo(SI_TIME_SS));
vFlIpShowInfo(IP_INFO_TOTALTIME, bSharedInfo(SI_MP3_TOTAL_TIME_MM),
bSharedInfo(SI_MP3_TOTAL_TIME_SS));
vFlIpShowInfo(IP_INFO_BITRATE, 0,
bSharedInfo(SI_MP3_BITRATE_LO) + bSharedInfo(SI_MP3_BITRATE_HI) * 256);
//vFlIpShowInfo(IP_INFO_EQ, 0, 0);
}
else
{
// - clear the run-time info
vFlIpShowInfo(IP_INFO_PLAYTIME, 0, 0);
vFlIpShowInfo(IP_INFO_TOTALTIME, 0, 0);
vFlIpShowInfo(IP_INFO_BITRATE, 0, 0);
//#ifdef SPTM_SUPPORT
// vHideEqBar();
//#endif
}
}
static BOOL fgIsParentDir(void) large
{
#if 1
BYTE bLen, bChar;
WORD wIdx;
DWRD dwAddr;
bLen = bSharedInfo(FL_ITEM_FIELD(_bFlMnCurItemIdx) + 4);
wIdx = FL_ITEM_FIELD(_bFlMnCurItemIdx);
bLoByte(wLoWord(dwAddr)) = bSharedInfo(wIdx);
bHiByte(wLoWord(dwAddr)) = bSharedInfo(wIdx + 1);
bLoByte(wHiWord(dwAddr)) = bSharedInfo(wIdx + 2);
bHiByte(wHiWord(dwAddr)) = bSharedInfo(wIdx + 3);
bChar = bReadDRAMTbl(bLoByte(wHiWord(dwAddr)), wLoWord(dwAddr));
if ((bLen == 0x1) && (bChar == 0x1))
return TRUE;
#else
WORD wBsseDir, wIdx;
wBaseDir = wFlMnGetListBaseDir(_bFlMnListId);
wIdx = wFlGetItemIdx(_bFlMnCurItemIdx);
if ((wBaseDir != 0) && (wIdx == 0) && (_bFlMnItemType == FTYPE_FOLDER))
return TRUE;
#endif
}
////////////////////////////////////////////////////////////////////////////////
// IR Handler
/**
* Handle IR_PLAY, IR_ENTER, IR_RIGHT_ENTER. It acts like "clicking" or
* "selecting" actually.
*/
static BOOL fgFlMnOnIrPlay(void) large
{
DWRD dwAddr;
WORD wBaseDir, wIdx;
BYTE bLen, bChar;
// - check the type of the clicked item
switch(_bFlMnItemType)
{
case FTYPE_FOLDER:
if (_bFlMnMemLock || fgFlClIsLock())
return TRUE;
if (!fgFlClLock(FL_CMDPATH_CHG_DIR))
return TRUE;
fgFlMnLeavItem(_bFlMnCurItemIdx);
if (fgIsParentDir())
fgFlMnEntDir(_bFlMnCurItemIdx, TRUE);
else
fgFlMnEntDir(_bFlMnCurItemIdx, FALSE);
break;
case FTYPE_AV:
// - click the item and change the playback module to MPEG player
vFlCmdClickItem(_bFlMnListId, wFlGetItemIdx(_bFlMnCurItemIdx));
// 20050503, PL00000140, set PBC state to SV_PRE_PLAY so that we don't accept setup key from here.
vSetSharedInfo(SI_PBC_STATE, SV_PRE_PLAY) ;
break;
case FTYPE_STILL:
// - turn off the preview mode and terminate the preview timing
#ifdef JPG_PREVIEW_SUPPORT
vSetSharedInfo(SI_PREVIEW_MODE, FALSE);
_bPreview = PREVIEW_STATE_IDLE;
#endif
#if (DRAM_SZ == DRAM_2M) || defined(USE_DRAM_CFG1)
vDeleteWB(FL_MENU_WB);
vDeleteWB(FL_INFO_WB);
#else
vDisableWB(FL_MENU_WB);
vDisableWB(FL_INFO_WB);
#endif
while(bSharedInfo(SI_CMD_CNT))
{
//wait for OSD command finish
}
if (fgFlClLock(FL_CMDPATH_CLICK))
vFlCmdClickItem(_bFlMnListId, wFlGetItemIdx(_bFlMnCurItemIdx));
break;
case FTYPE_AUDIO:
// - for all audio files
wBaseDir = wFlMnGetListBaseDir(_bFlMnListId);
wIdx = wFlGetItemIdx(_bFlMnCurItemIdx);
if ((wBaseDir == _wFlCurAdoDir) && (wIdx == _wFlCurAdoIdx) && (bSharedInfo(SI_MP3_MOD) != SV_STOP))
{
vSendUopCmd(UOP_PLAY, 0, 0, 0);
}
else
{
_wFlCurAdoDir = wBaseDir;
vWorkAreaMove(FALSE);
// 20050519, PL00001004, need to change the path. If we use intro to select a file, the path will became FL_CMDPATH_SEL_2
// In vFlMnRetClickItem(), it'll redraw the page.
if (fgFlClLock(FL_CMDPATH_CLICK))
vFlCmdClickItem(_bFlMnListId, wFlGetItemIdx(_bFlMnCurItemIdx));
}
default:
break;
}
return TRUE;
}
static BOOL fgFlMnOnIrPause(void) large
{
if (bSharedInfo(SI_MP3_MOD) == SV_PAUSE)
{
vSendUopCmd(UOP_PLAY, 0, 0, 0);
}
else
{
vSendUopCmd(UOP_PAUSE, 0, 0, 0);
}
return TRUE;
}
#ifdef FL_USE_LOGO
/**
* Operations for showing the basic visual components of the
* file browser menu.
*/
static void vFlMnShowPage(void) large
{
// - display the menu logo
#ifdef SUPPORT_CAPTURE_LOGO
vPlayerShowLogo(ISO_NOMAL_LOGO, ISO_LOGO_COLOR);
#else
vPlayerShowLogo(ISO_STOP_LOGO, ISO_LOGO_COLOR);
#endif
// - enable the whiteboard
#if 0//(DRAM_SZ != DRAM_2M) //cl 0512
#ifdef FSMENU_INFO_PANEL
vCreateWB(FL_INFO_WB, TRUE);
#endif
vCreateWB(FL_MENU_WB, TRUE);
#else
#ifdef FSMENU_INFO_PANEL
vEnableWB(FL_INFO_WB);
#endif
vEnableWB(FL_MENU_WB);
#endif
vSetSharedInfo(SI_HLI_STATE, SV_ON); // - turn on hili select mode
return;
}
#else
static void vFlMnShowPage(void) large
{
_wStartX = FLMN_BTN_0_X;
_wEndX = FLMN_BTN_0_X + FLMN_BTN_0_W;
_wStartY = FLMN_BTN_0_Y;
_wEndY = FLMN_BTN_0_Y + FLMN_BTN_0_H;
vCreateButton(FL_MENU_WB, 30, 4);
//vSetBtnCol(FL_MENU_WB, 0, 0, 2, 3);
vSetBtnCol(FL_MENU_WB, 0, 0, 3, 2);
vUnselButton(FL_MENU_WB, 30);
_wStartX = FLMN_BTN_1_X;
_wEndX = FLMN_BTN_1_X + FLMN_BTN_1_W;
_wStartY = FLMN_BTN_1_Y;
_wEndY = FLMN_BTN_1_Y + FLMN_BTN_1_H;
vCreateButton(FL_MENU_WB, 30, 4);
//vSetBtnCol(FL_MENU_WB, 0, 0, 2, 3);
vSetBtnCol(FL_MENU_WB, 0, 0, 3, 2);
vSelButton(FL_MENU_WB, 30);
_wStartX = FLMN_BTN_2_X;
_wEndX = FLMN_BTN_2_X + FLMN_BTN_2_W;
_wStartY = FLMN_BTN_2_Y;
_wEndY = FLMN_BTN_2_Y + FLMN_BTN_2_H;
vCreateButton(FL_MENU_WB, 30, 4);
//vSetBtnCol(FL_MENU_WB, 0, 0, 2, 3);
vSetBtnCol(FL_MENU_WB, 0, 0, 3, 2);
vSelButton(FL_MENU_WB, 30);
_wStartX = FLMN_BTN_3_X;
_wEndX = FLMN_BTN_3_X + FLMN_BTN_3_W;
_wStartY = FLMN_BTN_3_Y;
_wEndY = FLMN_BTN_3_Y + FLMN_BTN_3_H;
vCreateButton(FL_MENU_WB, 30, 4);
//vSetBtnCol(FL_MENU_WB, 0, 0, 2, 3);
vSetBtnCol(FL_MENU_WB, 0, 0, 3, 2);
vSelButton(FL_MENU_WB, 30);
vDrawSpin();
}
#endif
// INTER-MODULE INTERFACE
/**
* Init the object "file list menu".
*/
BOOL fgFlMnInit(void) large
{
WORD wTmp;
// - 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;
_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; //IP_STATE_NORMAL;
#ifdef JPG_PREVIEW_SUPPORT
_bPreview = PREVIEW_STATE_IDLE; // - jpeg preview
#endif
_bFlMnTimer = FLMN_TIMER_PERIOD; // - timer
_wFlAtplyIdx = 0;
_fgFlIsAutoPlay = FALSE;
// 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
#ifdef JPG_PREVIEW_SUPPORT
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, 0x24);
#endif
// 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();
// tmp solution
vSetSharedInfo(SI_MP3_TOTAL_TIME_MM, 0);
vSetSharedInfo(SI_MP3_TOTAL_TIME_SS, 0);
#ifdef ISO_LAST_MEM
vFlMnGetLastMemItem();
#endif
// 6. create the list of the menu (the latest operation of init procedure)
if (!fgFlClLock(FL_CMDPATH_INIT_0))
{
return FALSE;
}
#ifdef ISO_LAST_MEM
if (_wFlCurAdoIdx != 0xFFFF)
{
vFlCmdCreate(FLPARM_LIST_FOLDER,
FLPARM_INC_FILE|FLPARM_INC_FOLDER|FLPARM_INC_PARENT,
_wFlCurAdoDir, FLMN_DEF_FFAC, FLPARM_SO_GDIR);
}
else
#endif
{
#ifdef SUPPORT_PCD
if (fgIsPcdPlay())
{
bLoByte(wTmp) = bSharedInfo(SI_FS_PCD_BASEDIR_LO);
bHiByte(wTmp) = bSharedInfo(SI_FS_PCD_BASEDIR_HI);
vFlCmdCreate(FLPARM_LIST_FOLDER,
0x0, wTmp, FLMN_DEF_FFAC, FLPARM_SO_GDIR);
}
else
#endif
{
vFlCmdCreate(FLPARM_LIST_FOLDER,
FLPARM_INC_PARENT, 0x0, FLPARM_FF_DIR|FLMN_DEF_FFAC, FLPARM_SO_GDIR);
}
}
return TRUE;
}
////////////////////////////////////////////////////////////////////////////////
// Command Target State Transition
static void vFlMnSyncState(void) large
{
if (bSharedInfo(SI_MP3_STT) == MP3STT_PB_STRT) {
bLoByte(_wFlCurAdoIdx) = bSharedInfo(SI_MP3_ITEM_IDX_LO);
bHiByte(_wFlCurAdoIdx) = bSharedInfo(SI_MP3_ITEM_IDX_HI);
}
else
_wFlCurAdoIdx = 0xFFFF;
return;
}
//
// Enter this object (called when we try to move in the focus).
//
/**
* Operation to make the focus enter the object "file list menu".
*
* DES:
* 1. Show the basic visial component
* 2. Set shared info config for "file list menu" control
* 3. Display the run-time infor of MP3 (audio files) playback if necessary
* 4. Get item for redraw or enter the current item
* 5. Set the current module as the foreground module
*/
void vFlMnEnter(WORD wItem) large
{
WORD wTmp;
BYTE bTmp;
_bFlMnMemLock = FALSE;
if (_fgFlMdChg)
{
vFlMnSyncState();
}
#if 1//(DRAM_SZ != DRAM_2M)
vOsdShowWb(OSD_WB_FULL_SCR);
#endif
#if 0
if (_wCurrItem != 0xFFFF)
{
wItem = _wCurrItem;
}
else
#endif
if (wItem == 0xFFFF)
{
wItem = wFlGetItemIdx(_bFlMnCurItemIdx);
}
_bFlMnCurItemIdx = wItem % FLMN_ITEM_N;
// - show the basic visual components
vFlMnShowPage();
if (_fgFlMdChg)
{
vFlMnDrawPage();
_fgFlMdChg = FALSE;
}
_rOsdStateCtx.bTimeType = _bFlMnTimeType;
// - set shared info to config RISC
#ifdef JPG_PREVIEW_SUPPORT
_bPreview = PREVIEW_STATE_IDLE;
#endif
#if 1//def JPG_INFO
vOsdPosClear(OSD_POS_FS_INFO_BAR);
#endif
#ifdef JPG_PREVIEW_SUPPORT
vSetSharedInfo(SI_PREVIEW_MODE, TRUE);
#endif
vSetSharedInfo(SI_JPG_ROTATE_AUTO_SLIDE, FL_JPEG_SLIDESHOW_INTERVAL);
//vSetSharedInfo(SI_JPG_DIGEST_BG, 0x2);
// - display the run-time info if necessary
vFlMnDrawInfoPanel(_bFlIpState);
// - set the MP3 player as the foreground module
vFlCtrlSetFg(FLMD_MP3_PLAYER);
while(bSharedInfo(SI_DDISC_PB_MODULE) != SV_DDISC_MODULE_MP3);
if (_rFlCmdLock.bPath != FL_CMDPATH_SEL_1)
{
vFlClRls();
}
// - redraw page if necessary or get into the current item
if (!_bFlMnItemNs || // - list don't ready yet
(wItem <= wFlGetItemIdx(0x0)) ||
(wItem >= wFlGetItemIdx(FLMN_PAGE_SZ)) ||
(wItem >= wFlGetItemIdx(_bFlMnItemNs - 1)))
{
// - out boundary redraw
_bFlMnCurItemIdx = wItem % FLMN_PAGE_SZ;
if (fgFlClLock(FL_CMDPATH_REDRAW))
fgFlCmdGetItems(_bFlMnListId, wItem - (WORD)_bFlMnCurItemIdx);
}
else
{
// - in boundary, enter current item
fgFlMnEntItem((BYTE)(wItem - wFlGetItemIdx(0x0)));
for (bTmp = 0; (bTmp < _bFlMnItemNs) && (bTmp < FLMN_PAGE_SZ); bTmp++)
{
if (fgFlMnIsCurrPlayItem(bTmp))
{
vFlMnHiliOn(bTmp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -