📄 flmenu.c
字号:
/**********************************************************************/
/*************** MTK CONFIDENTIAL & COPYRIGHTED ****************/
/*************** ****************/
/*************** $Modtime:: 08-05-22 13:39 $ ****************/
/*************** $Revision:: 1 $ ****************/
/*************** ****************/
/*************** $Modtime:: 08-05-22 13:39 $ ****************/
/*************** $Revision:: 1 $ ****************/
/*************** ****************/
/*************** 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"
#include "..\..\common\dsp\dsp_uop.h"
#pragma NOAREGS
extern void DRS232LogB(BYTE bV1, BYTE bV2, BYTE bV3, BYTE bV4);
extern void vFlCmdTargetEnter(BYTE bTarget) large;
#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;
#ifdef SUPPORT_EMD
#ifdef SUPPORT_USB_COPY
static void vFlMnRetAddItem(void) large;
static void vFlMnRetDelItem(void) large;
static void vFlMnRetCancelCopy(void) large;
#endif
#endif
// 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
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
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;
#ifdef SUPPORT_USB_COPY
#ifdef SUPPORT_EMD
#ifdef FLMN_EMD_INFO_REFRESH
static void vFlMnTimerEmdInfo(void) large;
#endif
static void vFlMnShowFmvPercent(void) large;
#endif
#endif
// 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
#ifdef UNICODE_SUPPORT_COPY
extern xdata strucUSBCopyBtn _sUSBCopyBtn[];
static BOOL fgFlMnIrCopyDel(void) large;
#endif
static BOOL fgFlMnChgInfoPanel(void) large;
static void vShowJpegInfo(void) large;
#ifdef MP3_LYRICS_V1_SUPPORT
static BOOL fgFlMp3LyricsInit(void) large;
#endif
#ifdef SUPPORT_THAI
code WORD cp874[128] = {
0x20AC, //#EURO SIGN
0x0081,
0x0081,
0x0081,
0x0081,
0x2026, //#HORIZONTAL ELLIPSIS
0x0081,
0x0081,
0x0081,
0x0081,
0x0081,
0x0081,
0x0081,
0x0081,
0x0081,
0x0081,
0x0081,
0x2018, //#LEFT SINGLE QUOTATION MARK
0x2019, //#RIGHT SINGLE QUOTATION MARK
0x201C, //#LEFT DOUBLE QUOTATION MARK
0x201D, //#RIGHT DOUBLE QUOTATION MARK
0x2022, //#BULLET
0x2013, //#EN DASH
0x2014, //#EM DASH
0x0081,
0x0081,
0x0081,
0x0081,
0x0081,
0x0081,
0x0081,
0x0081,
0x00A0, //#NO-BREAK SPACE
0x0E01, //#THAI CHARACTER KO KAI
0x0E02, //#THAI CHARACTER KHO KHAI
0x0E03, //#THAI CHARACTER KHO KHUAT
0x0E04, //#THAI CHARACTER KHO KHWAI
0x0E05, //#THAI CHARACTER KHO KHON
0x0E06, //#THAI CHARACTER KHO RAKHANG
0x0E07, //#THAI CHARACTER NGO NGU
0x0E08, //#THAI CHARACTER CHO CHAN
0x0E09, //#THAI CHARACTER CHO CHING
0x0E0A, //#THAI CHARACTER CHO CHANG
0x0E0B, //#THAI CHARACTER SO SO
0x0E0C, //#THAI CHARACTER CHO CHOE
0x0E0D, //#THAI CHARACTER YO YING
0x0E0E, //#THAI CHARACTER DO CHADA
0x0E0F, //#THAI CHARACTER TO PATAK
0x0E10, //#THAI CHARACTER THO THAN
0x0E11, //#THAI CHARACTER THO NANGMONTHO
0x0E12, //#THAI CHARACTER THO PHUTHAO
0x0E13, //#THAI CHARACTER NO NEN
0x0E14, //#THAI CHARACTER DO DEK
0x0E15, //#THAI CHARACTER TO TAO
0x0E16, //#THAI CHARACTER THO THUNG
0x0E17, //#THAI CHARACTER THO THAHAN
0x0E18, //#THAI CHARACTER THO THONG
0x0E19, //#THAI CHARACTER NO NU
0x0E1A, //#THAI CHARACTER BO BAIMAI
0x0E1B, //#THAI CHARACTER PO PLA
0x0E1C, //#THAI CHARACTER PHO PHUNG
0x0E1D, //#THAI CHARACTER FO FA
0x0E1E, //#THAI CHARACTER PHO PHAN
0x0E1F, //#THAI CHARACTER FO FAN
0x0E20, //#THAI CHARACTER PHO SAMPHAO
0x0E21, //#THAI CHARACTER MO MA
0x0E22, //#THAI CHARACTER YO YAK
0x0E23, //#THAI CHARACTER RO RUA
0x0E24, //#THAI CHARACTER RU
0x0E25, //#THAI CHARACTER LO LING
0x0E26, //#THAI CHARACTER LU
0x0E27, //#THAI CHARACTER WO WAEN
0x0E28, //#THAI CHARACTER SO SALA
0x0E29, //#THAI CHARACTER SO RUSI
0x0E2A, //#THAI CHARACTER SO SUA
0x0E2B, //#THAI CHARACTER HO HIP
0x0E2C, //#THAI CHARACTER LO CHULA
0x0E2D, //#THAI CHARACTER O ANG
0x0E2E, //#THAI CHARACTER HO NOKHUK
0x0E2F, //#THAI CHARACTER PAIYANNOI
0x0E30, //#THAI CHARACTER SARA A
0x0E31, //#THAI CHARACTER MAI HAN-AKAT
0x0E32, //#THAI CHARACTER SARA AA
0x0E33, //#THAI CHARACTER SARA AM
0x0E34, //#THAI CHARACTER SARA I
0x0E35, //#THAI CHARACTER SARA II
0x0E36, //#THAI CHARACTER SARA UE
0x0E37, //#THAI CHARACTER SARA UEE
0x0E38, //#THAI CHARACTER SARA U
0x0E39, //#THAI CHARACTER SARA UU
0x0E3A, //#THAI CHARACTER PHINTHU
0x0081,
0x0081,
0x0081,
0x0081,
0x0E3F, //#THAI CURRENCY SYMBOL BAHT
0x0E40, //#THAI CHARACTER SARA E
0x0E41, //#THAI CHARACTER SARA AE
0x0E42, //#THAI CHARACTER SARA O
0x0E43, //#THAI CHARACTER SARA AI MAIMUAN
0x0E44, //#THAI CHARACTER SARA AI MAIMALAI
0x0E45, //#THAI CHARACTER LAKKHANGYAO
0x0E46, //#THAI CHARACTER MAIYAMOK
0x0E47, //#THAI CHARACTER MAITAIKHU
0x0E48, //#THAI CHARACTER MAI EK
0x0E49, //#THAI CHARACTER MAI THO
0x0E4A, //#THAI CHARACTER MAI TRI
0x0E4B, //#THAI CHARACTER MAI CHATTAWA
0x0E4C, //#THAI CHARACTER THANTHAKHAT
0x0E4D, //#THAI CHARACTER NIKHAHIT
0x0E4E, //#THAI CHARACTER YAMAKKAN
0x0E4F, //#THAI CHARACTER FONGMAN
0x0E50, //#THAI DIGIT ZERO
0x0E51, //#THAI DIGIT ONE
0x0E52, //#THAI DIGIT TWO
0x0E53, //#THAI DIGIT THREE
0x0E54, //#THAI DIGIT FOUR
0x0E55, //#THAI DIGIT FIVE
0x0E56, //#THAI DIGIT SIX
0x0E57, //#THAI DIGIT SEVEN
0x0E58, //#THAI DIGIT EIGHT
0x0E59, //#THAI DIGIT NINE
0x0E5A, //#THAI CHARACTER ANGKHANKHU
0x0E5B, //#THAI CHARACTER KHOMUT
0x0081,
0x0081,
0x0081,
0x0081
};
#endif
typedef void (*pfnTimerHandler) (void);
static code pfnTimerHandler _rFlTimerHandler[] =
{
0, // FLMN_TIMER_NONE
#ifdef JPG_PREVIEW_SUPPORT
vFlMnTimerJpgPv, // FLMN_TIMER_CHECK_PREVIEW
#else
0,
#endif
0, // FLMN_TIMER_DRAW_SCROLLING_SCRIPT
#ifdef FLMN_TEST_NEW_FUNC
vFlMnTimerScrollWB, // FLMN_TIMER_SCROLL_WB,
#else
0,
#endif
vFlMnTimerShowBitrate, // FLMN_TIMER_SHOW_BITRATE,
#ifdef FLMN_EMD_INFO_REFRESH
vFlMnTimerEmdInfo, // FLMN_TIMER_EMD_INFO
#else
0,
#endif
#ifndef UNICODE_SUPPORT_COPY
#ifdef SUPPORT_USB_COPY
vFlMnShowFmvPercent // FLMN_TIMER_FMV_PERCENT
#else
0
#endif
#endif
};
#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;
#ifdef FLMN_TEST_NEW_FUNC
//static xdata BYTE _bFlMnShift;
#endif
#ifdef AUTO_SWITCH_USB_MCR
extern BYTE xdata _bSwitchUSBMCRFlag;
extern BYTE xdata _bSwitchTimeCnt;
extern BIT _fgInFileMenuFlag;
extern BIT _fgSwitchtoUSBFlag ;
#endif
#ifdef SUPPORT_ONEKEY_SWITCH_USB_MCR
extern BOOL _fgShowFlMnPageEnable;
#endif
//xdata BYTE _bShiftPos;
#ifdef MP3_LAST_MEMORY
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
// INTER-MODULE INTERFACE
/**
* Init the object "file list menu".
*/
BOOL fgFlMnInit(void) large
{
WORD wTmp;
#ifdef SUPPORT_FJCD//071029
BYTE bIncItemType, bListType;
WORD wFCfg;
#else
BYTE bIncItemType;
#endif
#ifdef AUTO_SWITCH_USB_MCR //add it here for empty DEV can't show page ,and can't press mute key to switch because _bSwitchUSBMCRFlag = 0xf0
if ((_bSwitchUSBMCRFlag == 0xF0)||(_bSwitchUSBMCRFlag ==0x3F)||(_bSwitchUSBMCRFlag == 0xE0))
{
_bSwitchTimeCnt = 0;
_bSwitchUSBMCRFlag = 0xff;
_fgInFileMenuFlag = TRUE;
_fgSwitchtoUSBFlag = FALSE;
}
#endif
// - 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
#ifdef ISO_AUTO_PLAY
_wFlAtplyIdx = 0;
#endif
_bFlPlayListType = 0xFF ;
_fgFlIsAutoPlay = FALSE;
#ifdef FLMN_EMD_INFO_REFRESH
_FlMnEmdInfoType = EMD_INFO_USB;
#endif
_fgFlOpenMic = FALSE ;
#ifdef UNICODE_SUPPORT_COPY
_fgFlJpgPreviewStart = FALSE;
_fgFlToStopJpgPreview = FALSE;
_wBaseDir = 0;
#endif
// 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
#ifdef MP3_LAST_MEMORY
if ((bSharedInfo(SI_LASTMEM_NS) > 0) &&
(bSharedInfo(SI_LAST_MEM) == EV_ON))
#endif
{
vFlMnGetLastMemItem();
}
#endif
// 6. create the list of the menu (the latest operation of init procedure)
if (!fgFlClLock(FL_CMDPATH_INIT_0))
{
return FALSE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -