📄 fllrc.c
字号:
return FALSE;
}
// - check the type of the given item
wPos = FL_ITEM_FIELD(bItemIdx);
// - parse the full path
_bFlMnMemLock = TRUE;
vLrcParseFolderName(bItemIdx, bGetStackTop());
// - get the base dir index and set the list to it
bLoByte(wBsDir) = bSharedInfo(wPos + 12);
bHiByte(wBsDir) = bSharedInfo(wPos + 13);
wPos = FL_LIST_FIELD(_bFlMnListId);
vFlCmdClickItem(_bFlMnListId, wFlGetItemIdx(bItemIdx));
return TRUE;
}
//
// 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 vFlLrcEnter(WORD wItem) large
{
WORD wTmp;
BYTE bTmp;
_bFlMnMemLock = FALSE;
if (_fgFlMdChg)
{
vFlLrcSyncState();
}
// vFlClRls();
#ifndef MT1379_MANUFACTURE_TEST
vOsdShowWb(OSD_WB_FULL_SCR);
#endif
#if 0
if (_wCurrItem != 0xFFFF)
{
wItem = _wCurrItem;
}
else
#endif
if (wItem == 0xFFFF)
{
wItem = wFlGetItemIdx(_bFlMnCurItemIdx);
}
_bFlMnCurItemIdx = wItem % FLMP3LRCMN_ITEM_N;
if (_fgFlMdChg)
{
vFlLrcDrawPage();
_fgFlMdChg = FALSE;
}
_rOsdStateCtx.bTimeType = _bFlMnTimeType;
//vSetSharedInfo(SI_JPG_DIGEST_BG, 0x2);
vSetSharedInfo(SI_PREVIEW_MODE, TRUE);
vSetSharedInfo(SI_JPG_ROTATE_AUTO_SLIDE, FL_JPEG_SLIDESHOW_INTERVAL);
// - set shared info to config RISC
//_bPreview = PREVIEW_STATE_IDLE;
// - 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(FLMP3LRCMN_ITEM_N)) ||
(wItem >= wFlGetItemIdx(_bFlMnItemNs - 1)))
{
// - out boundary redraw
_bFlMnCurItemIdx = wItem % FLMP3LRCMN_ITEM_N;
if (fgFlClLock(FL_CMDPATH_REDRAW))
{
_wFlFirstIdx = wItem - (WORD)_bFlMnCurItemIdx;
fgFlCmdGetItems(_bFlMnListId, _wFlFirstIdx);
}
}
else
{
// - in boundary, enter current item
fgFlLrcEntItem((BYTE)(wItem - wFlGetItemIdx(0x0)));
for (bTmp = 0; (bTmp < _bFlMnItemNs) && (bTmp < FLMP3LRCMN_ITEM_N); bTmp++)
{
if (fgFlLrcIsCurrPlayItem(bTmp))
{
vFlLrcHiliOnIdx(bTmp);
}
}
}
vFlUpdateVfd(TRUE);
return;
}
//
// Leave this object (called when we try to move away the focus).
//
WORD wFlLrcLeave(BOOL bSuicide) large
{
// - snuff out hilight, and turn off the hili select mode
vFlLrcHiliItem(_bFlMnCurItemIdx, FALSE);
vSetSharedInfo(SI_HLI_STATE, SV_OFF);
//_bPreview = PREVIEW_STATE_IDLE;
// - disable the whiteboard
vDisableWB(MP3LRC_MENU_WB);
// vDisableWB(MP3LRC_MENU_WB);
return (bSharedInfo(SI_MP3_ITEM_IDX_HI)*256 +
bSharedInfo(SI_MP3_ITEM_IDX_LO));
}
///////////////////////////////////////////////////////////////////////////////
// Play List
/**
* Handle IR_MARK to add the current item to playlist.
*/
static BOOL fgFlLrcPlMark(void) large
{
if (fgFlClIsLock())
{
LRC_DBGLogS("Add to Play List, CmdPath is locked in:");
LRC_DBGLogB((BYTE)bFlClPath(), 0, 0, 0);
return TRUE;
}
if (_bFlMnItemType == FTYPE_AUDIO) // Changed by Hiker Hauk - a stronger condition than != FTYPE_FOLDER
{
//added by msz00049 for CR PL00105822
if(!fgFlClLock(FL_CMDPATH_ADDTO_PLAYLIST))
{
return TRUE;
}
//added end
LRC_DBGLogS("A song is to be added to Play List, sending cmd");
vFlCmdAddToPl(_bFlMnListId, wFlGetItemIdx(_bFlMnCurItemIdx), 0xFFFF);
}
return TRUE;
}
#ifdef MP3_LYRICS_PL_15_SONGS
static BOOL fgFlLrcPlRemove(void) large
{
WORD wPos;
WORD wIdx;
if (fgFlClIsLock())
{
LRC_DBGLogS("IR_ANGLE, CmdPath is locked in:");
LRC_DBGLogB((BYTE)bFlClPath(), 0, 0, 0);
return TRUE;
}
wIdx = wFlGetItemIdx(_bFlMnCurItemIdx);
_bFlMnPLNs = bSharedInfo(SI_FS_PLLISTNS);
#ifdef MP3_LYRICS_PL_15_SONGS
if(_fgIsInPlayList)
#endif
{
if ((bSharedInfo(SI_MP3_STT) == MP3STT_PB_STRT) && (FL_MP3_ITEM_IDX == wIdx))
{
//wPos = FL_ITEM_FIELD(_bFlMnListId);
//if ((bSharedInfo(wPos + 4) == 0) && (bSharedInfo(wPos + 5) == 0))
if(_bFlMnPLNs == 1)
{
if(_fgIsInPlayList)
{
fgFlLrcOnIrLeft();
}
vFlSendUopCmd(UOP_STOP, 0, UOP_RET_PL_RM_LAST);
}
else
{
vFlSendUopCmd(UOP_STOP, 0, UOP_RET_PL_RM);
}
}
else
{
vFlCmdRmFromPl(wIdx);
}
}
return TRUE;
}
#endif
static BOOL fgFlLrcTimeShow(void) large
{
if(_fgIsTimeShowOn)
{
_fgIsTimeShowOn = FALSE;
vOsdPosClear(OSD_POS_TIME_RIGHT);
}
else
{
_fgIsTimeShowOn = TRUE;
}
return TRUE;
}
static BOOL fgFlLrcPlClear(void) large
{
vFlCmdRmAllFromPl(_bFlPlListId);
return TRUE;
}
/**
* Read in the list info from proper shared info group.
*/
static void vFlLrcRdListInfo(BYTE bId) large
{
BYTE bIncItemType;
WORD wBsDir, wPos;
if (bId >= FL_MAX_LIST_NS)
return;
wPos = FL_LIST_FIELD(bId);
_bFlMnListType = bSharedInfo(wPos);//061208 xinzhen modify for CQ(PL00103667)
bIncItemType = bSharedInfo(wPos + 1);
bLoByte(wBsDir) = bSharedInfo(wPos + 2);
bHiByte(wBsDir) = bSharedInfo(wPos + 3);
bLoByte(_wFlMnListLen) = bSharedInfo(wPos + 4);
bHiByte(_wFlMnListLen) = bSharedInfo(wPos + 5);
return;
}
#if 0
static BOOL fgFlLrcChgListType(void) large
{
return TRUE;
}
#endif
/**
* Handle the notification of MP3 playback status change.
*
* NOTE: In order to avoid the racing condition, check the parameters
* of notification instead of shared info slot.
*/
static void vFlLrcChgMp3State(BYTE bStt) large
{
BYTE bIdx;
WORD wItemIdx, wIdx;
// - the current item of MP3 module
bLoByte(wItemIdx) = bSharedInfo(SI_MP3_ITEM_IDX_LO);
bHiByte(wItemIdx) = bSharedInfo(SI_MP3_ITEM_IDX_HI);
bStt = bSharedInfo(SI_MP3_STT);
switch (bStt)
{
case MP3STT_PB_ENB:
// - playback enabled
break;
case MP3STT_PB_STRT:
// - playback starts
if (_wFlCurAdoDir == wFlMnGetListBaseDir(_bFlMnListId))
{
_wFlCurAdoIdx = wItemIdx;
wIdx = wFlGetItemIdx(0);
if ((_wFlCurAdoIdx != wFlGetItemIdx(_bFlMnCurItemIdx)) &&
(wItemIdx >= wIdx) && (wItemIdx < wIdx + FLMP3LRCMN_ITEM_N))
{
bIdx = _wFlCurAdoIdx % FLMP3LRCMN_ITEM_N;
}
}
break;
case MP3STT_PB_FSH:
_bFlMnPLNs = bSharedInfo(SI_FS_PLLISTNS);
if(_bFlMnPLNs > 0)
{
_bFlMnPLNs--;
#ifdef MP3_LYRICS_PL_15_SONGS
if(!_bFlMnPLNs)
{
_fgFlRedrawPlPlay = TRUE;
}
#endif
vFlCmdRmFromPl(0);
}
if(_bFlMnPLNs == 0)
{
_fgFlRedrawPlPlay = FALSE;
if (_fgIsMp3LrcMnOn)
{
#if 0//def MP3_LYRICS_PL_15_SONGS
if(_fgIsInPlayList)
{
fgFlLrcOnIrLeft();
}
#endif
vFlLrcClrPlList();
#ifdef MP3_LYRICS_SHOW_INTRO_PANEL
vFlLrcDrawMp3Intro();
#endif
}
else
{
fgSetPlayPostKey(IR_ROOT_MENU);
}
}
else
{
_fgFlRedrawPlPlay = TRUE;
}
if (!_fgIsMp3LrcMnOn)
{
vOsdPosClear(OSD_POS_TIME_RIGHT);
}
break;
// - playback finishes
// break;
case MP3STT_PB_ABT:
// - playback is aborted
// break;
case MP3STT_PB_ERR:
// - temp solution
// - some playback erro occurs
if (_wFlCurAdoDir == wFlMnGetListBaseDir(_bFlMnListId))
{
_wFlCurAdoIdx = 0xFFFF;
}
if (_bFlIpState == IP_STATE_PANEL_1)
{
_wStartX = FS_EQ_X;
_wStartY = 32;
}
break;
default:
// - error occurs
break;
}
return;
}
static void vFlLrcSyncState(void) large
{
bLoByte(_wFlCurAdoIdx) = bSharedInfo(SI_MP3_ITEM_IDX_LO);
bHiByte(_wFlCurAdoIdx) = bSharedInfo(SI_MP3_ITEM_IDX_HI);
return;
}
void vFlLrcHandleUopRet(BYTE bUopId) large
{
BYTE bSpeed;
BYTE pbStr[3];
switch (bUopId)
{
case UOP_STOP:
break;
case UOP_REPEAT:
break;
// Added by Hiker Hauk, September 28, 2007, for CR(PL00108440) : Begin
case UOP_FORWARD:
bSpeed = bSharedInfo(SI_PBC_SPEED);
bSpeed = pbFastTbl[bSpeed];
pbStr[0] = 2;
if (bSpeed > 9)
{
pbStr[1] = (bSpeed / 10) % 10 + '0';
pbStr[2] = bSpeed % 10 + '0';
}
else
{
pbStr[1] = ' ';
pbStr[2] = bSpeed % 10 + '0';
}
vOsdPosShowArg(OSD_POS_PLAY_STATUS, OSD_MSG_ICON_FFX, OSD_NO_DISAPPEAR, pbStr);
break;
case UOP_REVERSE:
bSpeed = bSharedInfo(SI_PBC_SPEED);
bSpeed = pbSlowTbl[bSpeed];
pbStr[0] = 2;
if (bSpeed > 9)
{
pbStr[1] = (bSpeed / 10) % 10 + '0';
pbStr[2] = bSpeed % 10 + '0';
}
else
{
pbStr[1] = ' ';
pbStr[2] = bSpeed % 10 + '0';
}
vOsdPosShowArg(OSD_POS_PLAY_STATUS, OSD_MSG_ICON_FRX, OSD_NO_DISAPPEAR, pbStr);
break;
// Added by Hiker Hauk, September 28, 2007, for CR(PL00108440) : End
default:
break;
}
if (_bFlWaitUopRet == bUopId)
{
switch(bUopId)
{
case UOP_STOP:
switch (_bFlUopRetJob)
{
case UOP_RET_PL_RM:
case UOP_RET_PL_RM_LAST:
vFlCmdRmFromPl(wFlGetItemIdx(_bFlMnCurItemIdx));//, FLCMD_RET_OP_CMDACK);
break;
}
break;
}
_bFlWaitUopRet = 0xFF;
}
}
////////////////////////////////////////////////////////////////////////////////
//
// IR Key Handlers
//
static BOOL fgFlMp3LrcKeyFilter(BYTE bIsMp3LrcMnOn, BYTE bIrKey) large
{
if(bIsMp3LrcMnOn)
{
switch(bIrKey)
{
case IR_POWER:
case IR_EJECT:
case IR_ROOT_MENU:
case IR_UP:
case IR_DOWN:
case IR_LEFT:
case IR_RIGHT:
case IR_NEXT:
case IR_PREV:
case IR_PLAY:
case IR_ENTER:
case IR_PLAY_ENTER:
case IR_STOP:
case IR_PLAYLIST_CLEAN:
case IR_CMD_DONE:
case IR_PLAY_PAUSE:
#ifdef MP3_LYRICS_PL_15_SONGS
case IR_ANGLE:
#endif
return TRUE;
default:
return FALSE;
}
}
else
{
switch(bIrKey)
{
case IR_POWER:
case IR_EJECT:
case IR_FF:
case IR_FR:
case IR_PAUSE:
case IR_PLAY:
case IR_ENTER:
case IR_PLAY_ENTER:
case IR_STOP:
case IR_ROOT_MENU:
case IR_CMD_DONE:
case IR_PREV:
case IR_NEXT:
case IR_DISPLAY:
return TRUE;
default:
return FALSE;
}
}
return TRUE;
}
/**
* Event handler of the object "file list menu".
*/
BOOL fgFlOnLrc(void) large
{
BOOL fgIsGrabbed = FALSE;
BYTE i;
// Hiker Hauk: Block these two keys (IR_SF & IR_SR). CR(PL00108573)
// Hiker Hauk: Also block IR_SUB_TITLE. CR(PL00109283) - Dec 19, 2007
if ((_bIRKey == IR_SF) || (_bIRKey == IR_SR) || (_bIRKey == IR_SUB_TITLE))
{
return TRUE;
}
if(fgFlMp3LrcKeyFilter(_fgIsMp3LrcMnOn, _bIRKey))
{
for (i = 0; i < sizeof(_rFlMp3LrcIrHandler) / sizeof(_rFlMp3LrcIrHandler[0]); i++)
{
if (_bIRKey == _rFlMp3LrcIrHandler[i].bIrKey)
{
fgIsGrabbed = _rFlMp3LrcIrHandler[i].pHandler();
return fgIsGrabbed;
}
}
}
return fgIsGrabbed;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -