📄 flmain.c
字号:
/**********************************************************************/
/*************** MTK CONFIDENTIAL & COPYRIGHTED ****************/
/*************** ****************/
/*************** $Modtime:: 08-05-22 13:39 $ ****************/
/*************** $Revision:: 1 $ ****************/
/*************** ****************/
/*************** Description : File List ****************/
/*************** Main Module ****************/
/*************** ****************/
/*************** Company : MediaTek Inc. ****************/
/*************** Programmer : Jacob Lin ****************/
/**********************************************************************/
/**
* $(PROJ_HOME)/8032/custom/demo/fslist/flmain.c
*
* Bundle of the basic and common functions used to manipulate the
* component "FILE BROWSER".
*/
#define __FLMAIN_C_
#include "../general.h"
#include "flcomm.h"
#include "fslist.h"
#include "flcmd.h"
#pragma NOAREGS
void DRS232LogS(char *pcStr);
void DRS232LogB(BYTE bV1, BYTE bV2, BYTE bV3, BYTE bV4);
#ifdef PLAYER_FLMENU
typedef void (code *vRedrawFunc) (void) large;
// PRIVATE GLOBAL VARIABLES
// on focus object
//xdata WORD _wCurrItem;
// EXTERNAL INERFACES
/**
* Internal functions
*/
static BOOL fgFlOnInit(void);
extern void vWorkAreaMove(BOOL fgToFront) large;
/**
* Init the menu and create the necessary component "FS LIST".
*/
void vFsMenuInit(BOOL fgInit) large
{
if (fgInit)
{
// - totally init (init whole file browser module)
vFlClRls();
// 1. init each object "file list menu, file list jpeg viewer,
// and mpeg player"
#ifdef MP3_LYRICS_V2_SUPPORT
if (bSharedInfo(SI_MP3_KARA_DISC_TYPE) == SV_ID_MATCH)
{
if (!fgFlLrcInit() || !fgFlJvInit() || !fgFlMpInit())
{
// - TODO: error handling
return;
}
}
else
#endif
{
if (
!fgFlMnInit() || !fgFlJvInit()
#ifdef DDISC_FTYPE_MPG_SUPPORT
|| !fgFlMpInit()
#endif
)
{
// - TODO: error handling
return;
}
#ifdef SUPPORT_USB_COPY
#ifdef USB_COPY_DEBUG
DBGLogB(bSharedInfo(SI_DEVICE_ID),_bUSBSavToEnter,0x66,0x66);
#endif
#ifdef SUPPORT_MULTI_PARTITION_FAT //simon mul
if((bSharedInfo(SI_DEVICE_ID) != SV_DEVID_CDVDROM) && (_bUSBSavToEnter == TRUE))
#else
if((bSharedInfo(SI_DEVICE_ID) == _bSaveToDev)&&(bSharedInfo(SI_DEVICE_ID)!=SV_DEVID_CDVDROM)\
&&(_bUSBSavToEnter==TRUE))
#endif
_bUSBSwitchSuccess = TRUE;
#endif
}
// 2. init shared info for configuration
// PL00004039 : Modified from original vSetSharedInfo(SI_DDISC_ACTIVE_PB_MODULE_MODE, SV_OFF);
vSetSharedInfo(SI_DDISC_ACTIVE_PB_MODULE_MODE, SV_ON);
// 3. init control flags
_bFlPbMode = bSharedInfo(SI_DDISC_DEF_PMODE);
_bFlWaitUopRet = 0xFF;
_bFlUopRetJob = 0xFF;
_fgFlMdChg = FALSE;
// 4. init the command target as "FL_CMD_TARGET_NONE" for init
// state
_bFlCmdTarget = FL_CMD_TARGET_NONE;
}
else
{
// - partial init (init the module of current command target)
switch (_bFlCmdTarget)
{
case FL_CMD_TARGET_MENU:
#ifdef MP3_LYRICS_V2_SUPPORT
if (bSharedInfo(SI_MP3_KARA_DISC_TYPE) != SV_ID_MATCH)
#endif
{
#if 1//def JPG_INFO
vOsdPosClear(OSD_POS_FS_INFO_BAR);
#endif
}
break;
case FL_CMD_TARGET_JPEG:
//vSendUopCmd(UOP_PAUSE, 0x01, 0x02, 0x00);
break;
case FL_CMD_TARGET_MPEG:
break;
case FL_CMD_TARGET_HELP:
break;
}
vFlRecover();
}
return;
}
/**
* Set the foregournd module as given one.
*
* DEF: The foregournd module means the module which the UOPs be dispatched.
*/
void vFlCtrlSetFg(BYTE bMd) large
{
// PL00004039 : Removed for fixing bug.
// if (bSharedInfo(SI_DDISC_PB_MODULE) == bMd)
// return;
vSetSharedInfo(SI_DDISC_PB_MODULE, bMd);
vNotifySharedInfo(SI_DDISC_PB_MODULE, 0x0, 0x0);
return;
}
/**
* Set the current command target as the given one.
*
* DES:
* 1. Leave the state object of the current target module.
* 2. Enter the state object of the next one.
*/
void vFlCmdTargetLeave(BYTE bSrcTgt, BYTE bDesTgt) large
{
switch(bSrcTgt)
{
case FL_CMD_TARGET_MENU:
#ifdef MP3_LYRICS_V2_SUPPORT
if (bSharedInfo(SI_MP3_KARA_DISC_TYPE) == SV_ID_MATCH)
{
_wCurrItem = wFlLrcLeave(FALSE);
}
else
#endif
{
_wCurrItem = wFlMnLeave(FALSE);
}
break;
case FL_CMD_TARGET_JPEG:
if (bDesTgt == FL_CMD_TARGET_HELP)
_wCurrItem = wFlJvLeave(FALSE);
else
_wCurrItem = wFlJvLeave(TRUE);
break;
#ifdef DDISC_FTYPE_MPG_SUPPORT
case FL_CMD_TARGET_MPEG:
_wCurrItem = wFlMpLeave(FALSE);
break;
#endif
#ifdef JPEG_DDISC_DIGEST_ENABLE
case FL_CMD_TARGET_HELP:
_wCurrItem= wFlHpLeave(FALSE);
break;
#endif
default:
// - the current target is invalid or none
_wCurrItem = 0x0;
break;
}
}
void vFlCmdTargetEnter(BYTE bTarget) large
{
switch(bTarget)
{
case FL_CMD_TARGET_MENU:
#ifdef MP3_LYRICS_V2_SUPPORT
if (bSharedInfo(SI_MP3_KARA_DISC_TYPE) == SV_ID_MATCH)
{
vFlLrcEnter(_wCurrItem);
}
else
#endif
{
vFlMnEnter(_wCurrItem);
}
break;
case FL_CMD_TARGET_JPEG:
vFlJvEnter(_wCurrItem);
break;
#ifdef DDISC_FTYPE_MPG_SUPPORT
case FL_CMD_TARGET_MPEG:
vFlMpEnter(_wCurrItem);
break;
#endif
#ifdef JPEG_DDISC_DIGEST_ENABLE
case FL_CMD_TARGET_HELP:
vFlHpEnter(_wCurrItem);
break;
#endif
default:
// - TODO: exception handling (thie case should not happen)
break;
}
_wCurrItem = 0xFFFF;
}
void vFlSetCmdTarget(BYTE bTarget) large
{
// WORD wItem;
BYTE bPrevTarget;
bPrevTarget = _bFlCmdTarget;
if (_bFlCmdTarget != bTarget)
{
#ifdef WB_ALLOC_MIN
if (bTarget == FL_CMD_TARGET_MENU)
_fgFlMdChg = TRUE;
#endif
// - we should switch the state object
// 1. leave current
vFlCmdTargetLeave(_bFlCmdTarget, bTarget);
_bFlCmdTarget = bTarget;
// 2. enter next
if (fgFlClIsLock())
{
switch (bFlClPath())
{
case FL_CMDPATH_SEL_1:
if ( (bSharedInfo(SI_JPG_STT) == JPEGSTT_DEC_STRT) && (bPrevTarget == FL_CMD_TARGET_JPEG) )
{
_bFlWaitUopRet = UOP_STOP;
_bFlUopRetJob = UOP_RET_PL_JPG;
}
else
{
vFlCmdTargetEnter(_bFlCmdTarget);
fgSetPlayPostKey(IR_CMD_DONE);
}
break;
//#ifdef ISO_AUTO_PLAY
// case FL_CMDPATH_INIT_1:
//#else
// case FL_CMDPATH_INIT_0:
//#endif
#if defined(MP3_LYRICS_V2_SUPPORT)
case FL_CMDPATH_INIT_1:
case FL_CMDPATH_INIT_0:
#elif defined(ISO_AUTO_PLAY)
case FL_CMDPATH_INIT_1:
#else
case FL_CMDPATH_INIT_0:
#endif
case FL_CMDPATH_CHG_CMDTGT:
vFlCmdTargetEnter(_bFlCmdTarget);
break;
}
}
else
{
vFlCmdTargetEnter(_bFlCmdTarget);
}
/*
else if (_bFlWaitUopRet != UOP_STOP)
{
vFlCmdTargetEnter(_bFlCmdTarget);
}
*/
}
else if (fgFlClIsLock())
{
switch (bFlClPath())
{
case FL_CMDPATH_SEL_1:
_rFlCmdLock.fgLeap = TRUE;
fgSetPlayPostKey(IR_CMD_DONE);
break;
}
}
return;
}
/**
* Dispatch the event to the on focus object.
*/
BOOL fgFsMenuState(void) large
{
BOOL fgIsGrabbed = FALSE;
WORD wPos, wIdx; // tmp
#if 0
if (!fgFlCmdIsOK())
{
// - the command module is not ready for next one,
// waiting for command ack, and pass IR_CMD_DONE only
if (_bIRKey != IR_CMD_DONE)
{
//vOsdShowError(SV_ERR_GENERAL, FL_MSG_TIMEOUT);
return TRUE;
}
}
#endif
// - main loop to relay message to each state machine
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -