⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flmenu.c

📁 手机8032的完整代码。吐血推荐。小做改动就可以生产。
💻 C
📖 第 1 页 / 共 5 页
字号:
/**********************************************************************/
/***************    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 + -