📄 fllrc.c
字号:
/**
* Handle IR_CMD_DONE.
*/
static BOOL fgFlLrcIrCmdDoneHdr(void) large
{
WORD wTmp;
if (FL_ACK(_dwIrDoneParm) == FL_CMD_ASSERT)
{
// - "FS LIST" command done, get return command
BYTE bCmd;
bCmd = bSharedInfo(FL_CMD_BLK_SA);
if ((bCmd < sizeof(_prFlCmdProc) / sizeof(_prFlCmdProc[0])) && _prFlCmdProc[bCmd])
{
_prFlCmdProc[bCmd]();
}
else
{
// - TODO: exception handling
}
}
else
{
switch(FL_ACK(_dwIrDoneParm))
{
case SI_MP3_STT:
vFlLrcChgMp3State(FL_PARM1(_dwIrDoneParm));
break;
case SI_DDISC_PB_MODULE:
break;
case SI_MP3_MOD:
break;
// tmp solution
case SI_JPG_STT:
switch(FL_PARM1(_dwIrDoneParm))
{
case JPEGSTT_DEC_FSH:
// vShowJpegInfo();
break;
case JPEGSTT_DEC_ABT:
case JPEGSTT_DEC_ERR:
vOsdPosClear(OSD_POS_FS_INFO_BAR);
break;
}
break;
}
}
// - always grab in this case
return TRUE;
}
static BOOL fgFlLrcOnIrMenu(void) large
{
if(fgFlClIsLock())
{
LRC_DBGLogS("IR_MENU, CmdPath is locked in:");
LRC_DBGLogB((BYTE)bFlClPath(), 0, 0, 0);
return TRUE;
}
// Added by Hiker Hauk on 20071018 for CR(PL00108752)
// When showing the JEPG, Menu key is blocked.
// (_bFlMnPLNs > 0) is essential. Added on Dec. 19, 2007
if ((bSharedInfo(SI_MP3_MOD) == SV_STOP) && (_bFlMnPLNs > 0))
{
LRC_DBGLogS("Command not ready yet.");
return TRUE;
}
// Hiker Hauk for CR(PL00108752): Added End
if(_fgIsMp3LrcMnOn)
{
#ifdef MP3_LYRICS_PL_15_SONGS
if(_fgIsInPlayList)
{
fgFlLrcOnIrLeft();
}
#endif
vOsdSetSt(OSD_ST_BURST);
vDeleteWB(MP3LRC_MENU_WB);
vCreateWBEx(WB_NORMAL_HEAD1);
vEnableWB(WB_NORMAL_HEAD1);
vCreateWBEx(WB_NORMAL_HEAD2);
vEnableWB(WB_NORMAL_HEAD2);
vOsdSetSt(OSD_ST_NML);
if(bSharedInfo(SI_MP3_MOD) == SV_STOP && _bFlMnPLNs == 0)
{
_wStartX = 0;
_wStartY = 0;
vOsdClearPos(MP3LRC_INTRO_WB, MP3_LRC_INFO_WIDTH, MP3_LRC_INFO_HEIGHT);
}
_fgIsMp3LrcMnOn = FALSE;
}
else
{
vOsdSetSt(OSD_ST_BURST);
vDeleteWB(WB_NORMAL_HEAD1);
vDeleteWB(WB_NORMAL_HEAD2);
vCreateWBEx(MP3LRC_MENU_WB);
vEnableWB(MP3LRC_MENU_WB);
vOsdSetSt(OSD_ST_NML);
vI2CDelay2us(250);
vI2CDelay2us(250);
vFlMp3LrcDrawInitPage();
vFlLrcDrawPage();
while (bSharedInfo(SI_CMD_CNT));
vI2CDelay2us(250);
vI2CDelay2us(250);
if(_bFlMnPLNs > 0)
{
_fgFlRedrawPlPlay = FALSE;
fgFlMp3LrcRedrawPlList();
}
#ifdef MP3_LYRICS_SHOW_INTRO_PANEL
// Modified by Hiker Hauk on 20071018 for CR(PL00108572)
if ((bSharedInfo(SI_MP3_MOD) == SV_STOP) && ((bSharedInfo(SI_FS_PLLISTNS) == 0)))
{
vFlLrcDrawMp3Intro();
}
#endif
_fgIsMp3LrcMnOn = TRUE;
}
return TRUE;
}
/**
* Handle IR_PLAY, IR_ENTER, IR_RIGHT_ENTER. It acts like "clicking" or "selecting" actually.
* Function is cleaned up by Hiker Hauk on 20071017.
* Now only code for FTYPE_FOLDER and FTYPE_AUDIO is left, as other cases should be illegal.
*/
static BOOL fgFlLrcOnIrPlay(void) large
{
DWRD dwAddr;
WORD wBaseDir, wIdx;
BYTE bLen, bChar;
if (fgFlClIsLock())
{
LRC_DBGLogS("IR_PLAY, CmdPath is locked in:");
LRC_DBGLogB((BYTE)bFlClPath(), 0, 0, 0);
return TRUE;
}
if(!_fgIsMp3LrcMnOn)
{
return FALSE; //treat as uop_play
}
// Added by Hiker Hauk on 20071017 for CR(PL00108776)
if (_fgIsInPlayList)
{
return TRUE;
}
// - 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;
fgFlLrcLeavItem(_bFlMnCurItemIdx);
LRC_DBGLogS("fgPushStack");
fgPushStack(wFlMnGetListBaseDir(_bFlMnListId), wFlGetItemIdx(_bFlMnCurItemIdx));
fgFlLrcEntDir(_bFlMnCurItemIdx, FALSE);
break;
case FTYPE_AUDIO:
// Added by Hiker Hauk for CR(PL00108764) on 20071018
// CR(PL00108764) could be caused by many conditions, this is the mostly occured one.
// When starting to play, JPEG is showed first.
// During this somewhat lengthy process, MP3 is not being played.
// We wait until the MP3 is being played before adding another song,
// or we have to changed the behavior of adding songs in RISC code.
// Sometimes, there will be a serious delay (waiting JPEG to be finished, e.g. when adding the first 2 songs).
// This is the limitation of our hardware system.
if ((bSharedInfo(SI_MP3_MOD) == SV_STOP) && (bSharedInfo(SI_FS_PLLISTNS) != 0))
{
LRC_DBGLogS("Command not ready yet.");
break;
}
// Hiker Hauk for CR(PL00108764): Added end.
_bFlCurAdoListType = _bFlMnListType;//061208 xinzhen add for CQ(PL00103667)
_wFlCurAdoDir = wBaseDir;
#ifdef MP3_LYRICS_PL_15_SONGS
if(_bFlMnPLNs < FLMP3LRCPLLIST_MAX_N)
#else
if(_bFlMnPLNs < FLMP3LRCMN_ITEM_N)
#endif
{
if(bSharedInfo(SI_MP3_MOD) == SV_STOP)
{
_wStartX = 0;
_wStartY = 0;
vOsdClearPos(MP3LRC_INTRO_WB, MP3_LRC_INFO_WIDTH, MP3_LRC_INFO_HEIGHT);
}
_fgFlRedrawPlPlay = TRUE;
fgFlLrcPlMark();
}
else
{
vOsdPosShow(OSD_POS_REMAIN_MSG, OSD_MSG_ERROR, OSD_TIMEOUT);
}
break;
default:
break;
}
return TRUE;
}
/**
* Handle IR_PAUSE.
*/
static BOOL fgFlLrcOnIrPause(void) large
{
if (bSharedInfo(SI_MP3_MOD) == SV_PAUSE)
{
LRC_DBGLogS("IR_PAUSE 1");
vSendUopCmd(UOP_PLAY, 0, 0, 0);
}
else
{
LRC_DBGLogS("IR_PAUSE 2");
vSendUopCmd(UOP_PAUSE, 0, 0, 0);
}
return TRUE;
}
/**
* Function added by Hiker Hauk, on 20071010
* Handles IR_STOP. Originally, IR_STOP had no special treatment and was handled in fgISOKeyProc().
*/
static BOOL fgFlLrcOnIrStop(void) large
{
vSendUopCmd(UOP_STOP, 0, 0, 0);
return TRUE;
}
/**
* Handle IR_DIR.
* IR_DOWN, move hover item down or move to next page
* IR_UP, move hover item up or move to previous page
* IR_RIGHT, enter the dir if it is on a dir
* IR_LEFT, move the parent dir
*/
/**
* Handle IR_UP.
*/
static BOOL fgFlLrcOnIrUp(void) large
{
if (fgFlClIsLock())
{
LRC_DBGLogS("IR_UP, CmdPath is locked in:");
LRC_DBGLogB((BYTE)bFlClPath(), 0, 0, 0);
return TRUE;
}
if (wFlGetItemIdx(_bFlMnCurItemIdx) &&
(wFlGetItemIdx(_bFlMnCurItemIdx) != 0xFFFF))
{
// - IR_UP is still available
vMoveSpin(TRUE);
fgFlLrcLeavItem(_bFlMnCurItemIdx);
if (!fgFlLrcEntItem(_bFlMnCurItemIdx - 1))
{
// - out boundary, change to previous page
WORD wBIdx;
wBIdx = wFlGetItemIdx(0x0);
wBIdx -= (wBIdx >= FLMP3LRCMN_ITEM_N) ? (WORD)FLMP3LRCMN_ITEM_N : wBIdx;
#ifdef MP3_LYRICS_PL_15_SONGS
if(_fgIsInPlayList)
{
if (!fgFlClLock(FL_CMDPATH_REDRAW_PLAYLIST))
return TRUE;
_wFlFirstIdx = wBIdx;
if (fgFlCmdGetItems(_bFlPlListId, _wFlFirstIdx))
{
_bFlMnCurItemIdx = FLMP3LRCMN_ITEM_N - 1;
}
else
{
// - no more next page
// vOsdShowError(SV_ERR_GENERAL, FL_MSG_TIMEOUT);
}
}
else
#endif
{
if (!fgFlClLock(FL_CMDPATH_UP))
return TRUE;
_wFlFirstIdx = wBIdx;
if (fgFlCmdGetItems(_bFlMnListId, _wFlFirstIdx))
{
_bFlMnCurItemIdx = FLMP3LRCMN_ITEM_N - 1;
}
else
{
// - no more previous page
//vOsdShowError(SV_ERR_GENERAL, FL_MSG_TIMEOUT);
}
}
}
else
{
}
}
else
{
// - reach the first item
//vOsdShowError(SV_ERR_GENERAL, FL_MSG_TIMEOUT);
}
return TRUE;
}
/**
* Handle IR_DOWN.
*/
static BOOL fgFlLrcOnIrDown(void) large
{
if (fgFlClIsLock())
{
LRC_DBGLogS("IR_DOWN, CmdPath is locked in:");
LRC_DBGLogB((BYTE)bFlClPath(), 0, 0, 0);
return TRUE;
}
if (wFlGetItemIdx(_bFlMnCurItemIdx) < (_wFlMnListLen - 1))
{
// - IR_DOWN is available still
vMoveSpin(FALSE);
fgFlLrcLeavItem(_bFlMnCurItemIdx);
if (!fgFlLrcEntItem(_bFlMnCurItemIdx + 1))
{
if (fgFlLrcIsCurrPlayItem(_bFlMnCurItemIdx))
{
//vFlLrcHiliItem(_bFlMnCurItemIdx, FALSE);
//vFlLrcHiliOn(_bFlMnCurItemIdx, FLMN_HILI_PLAY, FLMN_CLR_BG, FLMN_CLR_PLAY);
}
#ifdef MP3_LYRICS_PL_15_SONGS
if(_fgIsInPlayList)
{
if (!fgFlClLock(FL_CMDPATH_REDRAW_PLAYLIST))
return TRUE;
_wFlFirstIdx = wFlGetItemIdx(_bFlMnCurItemIdx + 1);
if (fgFlCmdGetItems(_bFlPlListId, _wFlFirstIdx))
{
_bFlMnCurItemIdx = 0x0;
}
else
{
// - no more next page
// vOsdShowError(SV_ERR_GENERAL, FL_MSG_TIMEOUT);
}
}
else
#endif
{
// - the next item is not on page, move to next page
if (!fgFlClLock(FL_CMDPATH_DOWN))
return TRUE;
_wFlFirstIdx = wFlGetItemIdx(_bFlMnCurItemIdx + 1);
if (fgFlCmdGetItems(_bFlMnListId, _wFlFirstIdx) )
{
_bFlMnCurItemIdx = 0x0;
}
else
{
// - no more next page
// vOsdShowError(SV_ERR_GENERAL, FL_MSG_TIMEOUT);
}
}
}
else
{
// - reach the lastest item
}
}
return TRUE;
}
/**
* Handle IR_LEFT. Go back to upper dir.
*/
BOOL fgFlLrcOnIrLeft(void) large
{
if (fgFlClIsLock())
{
LRC_DBGLogS("IR_LEFT, CmdPath is locked in:");
LRC_DBGLogB((BYTE)bFlClPath(), 0, 0, 0);
return TRUE;
}
#ifdef MP3_LYRICS_PL_15_SONGS
if(_fgIsInPlayList)
{
fgFlLrcLeavItem(_bFlMnCurItemIdx);
if (!fgFlClLock(FL_CMDPATH_RETURN_MENU))
return TRUE;
if (fgFlCmdGetItems(_bFlMnListId, _bFlMnMemIdx))
{
_bFlMnCurItemIdx = 0x0;
}
_fgIsInPlayList = FALSE;
}
else
#endif
{
if (bSharedInfo(FL_LIST_FIELD(_bFlMnListId)) == FLPARM_LIST_FOLDER)
{
if (!_bFlMnMemLock)
{
if (!fgFlLrcLeavDir())
{
// - TODO: show error meessage
}
}
}
}
return TRUE;
}
/**
* Handle IR_RIGHT. Go down a dir level.
*/
static BOOL fgFlLrcOnIrRight(void) large
{
WORD wPos, wBaseDir;
if (fgFlClIsLock())
{
LRC_DBGLogS("IR_RIGHT, CmdPath is locked in:");
LRC_DBGLogB((BYTE)bFlClPath(), 0, 0, 0);
return TRUE;
}
#ifdef MP3_LYRICS_PL_15_SONGS
if(!_fgIsInPlayList && _bFlMnPLNs > 0)
{
fgFlLrcLeavItem(_bFlMnCurItemIdx);
_fgIsInPlayList = TRUE;
_bFlMnMemIdx = wFlGetItemIdx(0);
_fgFlRedrawPlPlay = FALSE;
if (!fgFlClLock(FL_CMDPATH_REDRAW_PLAYLIST))
return TRUE;
if (fgFlCmdGetItems(_bFlPlListId, 0))
{
_bFlMnCurItemIdx = 0x0;
}
}
#else
if (_bFlMnItemType == FTYPE_FOLDER)
{
if (_bFlMnMemLock)
return TRUE;
wPos = FL_LIST_FIELD(_bFlMnListId);
bLoByte(wBaseDir) = bSharedInfo(wPos + 2);
bHiByte(wBaseDir) = bSharedInfo(wPos + 3);
if ((wFlGetItemIdx(_bFlMnCurItemIdx) == 0) && (wBaseDir != 0))
{
fgFlLrcLeavItem(_bFlMnCurItemIdx);
fgFlLrcEntDir(_bFlMnCurItemIdx, TRUE);
}
else
{
fgPushStack(wFlMnGetListBaseDir(_bFlMnListId), wFlGetItemIdx(_bFlMnCurItemIdx));
fgFlLrcLeavItem(_bFlMnCurItemIdx);
fgFlLrcEntDir(_bFlMnCurItemIdx, FALSE);
}
}
#endif
return TRUE;
}
/**
* Draw next page.
*/
static BOOL fgFlLrcOnIrNext(void) large
{
WORD wLastItem;
if (fgFlClIsLock())
{
LRC_DBGLogS("IR_NEXT, CmdPath is locked in:");
LRC_DBGLogB((BYTE)bFlClPath(), 0, 0, 0);
return FALSE;
}
// Hiker Hauk: Temp solution, might consider to add this function to play list too
if (_fgIsInPlayList)
{
return TRUE;
}
wLastItem= wFlGetItemIdx(FLMP3LRCMN_ITEM_N - 1);
if (wLastItem < _wFlMnListLen - 1)
{
fgFlLrcLeavItem(_bFlMnCurItemIdx);
_bFlMnCurItemIdx = 0;
if (fgFlClLock(FL_CMDPATH_DOWN))
{
_wFlFirstIdx = wLastItem + 1;
fgFlCmdGetItems(_bFlMnListId, _wFlFirstIdx);
}
}
if(bFllrcPlNs() <= 1 && !fgFllrcMenuOn()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -