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

📄 flmenu.c

📁 MTK 1389E SOURCE CODE
💻 C
📖 第 1 页 / 共 5 页
字号:
  #endif
        WriteDRAMTbl(bLoByte(wHiWord(dwDesAddr)), wLoWord(dwDesAddr), bTmp);
        dwSrcAddr++;
        dwDesAddr++;
        i++;
      }
      WriteDRAMTbl(bLoByte(wHiWord(dwDesAddr)), wLoWord(dwDesAddr), '\\');
    }
  }

  return;
}

////////////////////////////////////////////////////////////////////////////////
// Info Panel

static void vFlMnDrawInfoPanel(BYTE bPanel) large
{
  switch(bPanel)
  {
    case IP_STATE_PANEL_1:
      vFlIpShowInfo(IP_INFO_EQ, 0, 0);
      vFlIpClearInfoArea(IP_INFO_PANEL_2);
      vFlIpShowInfo(IP_INFO_VOLUME, bAdspCurrVol(),
                    (fgIsMute() ? FLIP_VOLUME_MUTE_ON : FLIP_VOLUME_REDRAW));
      vFlIpShowInfo(IP_INFO_PBC, 0, 0);
      vFlIpShowInfo(IP_INFO_USR_AUX_CTRL, bSharedInfo(SI_USR_AUX_CTRL), 0);
      break;
    case IP_STATE_PANEL_2:
    #ifdef SPTM_SUPPORT
      vHideEqBar();
    #endif

      vFlIpClearInfoArea(IP_INFO_PANEL_1);
      vFlIpShowInfo(IP_INFO_RPT_TYPE, _bFlPbMode, 0);
      vFlIpShowInfo(IP_INFO_LIST_TYPE, bSharedInfo(FL_LIST_FIELD(_bFlMnListId)), 0);
//      vFlIpShowInfo(IP_INFO_KEY_SHIFT, 0, 0);
//      vFlIpShowInfo(IP_INFO_KEY_SHIFT, 0, 0);
    #ifdef PLAYER_SURROUND
      vFlIpShowInfo(IP_INFO_REVERB, bEepromReadByte(REVERB_MD_POS), 0);
    #endif
      vFlIpShowInfo(IP_INFO_DISC_TYPE, 0, 0);

      break;
  }
  if (bSharedInfo(SI_MP3_STT) == MP3STT_PB_STRT)
  {
    // - display run-time info
    vFlIpShowInfo(IP_INFO_PLAYTIME, bSharedInfo(SI_TIME_MM), bSharedInfo(SI_TIME_SS));
    vFlIpShowInfo(IP_INFO_TOTALTIME, bSharedInfo(SI_MP3_TOTAL_TIME_MM),
                                     bSharedInfo(SI_MP3_TOTAL_TIME_SS));
    vFlIpShowInfo(IP_INFO_BITRATE, 0,
                  bSharedInfo(SI_MP3_BITRATE_LO) + bSharedInfo(SI_MP3_BITRATE_HI) * 256);
    //vFlIpShowInfo(IP_INFO_EQ, 0, 0);
  }
  else
  {
    // - clear the run-time info
    vFlIpShowInfo(IP_INFO_PLAYTIME, 0, 0);
    vFlIpShowInfo(IP_INFO_TOTALTIME, 0, 0);
    vFlIpShowInfo(IP_INFO_BITRATE, 0, 0);
    //#ifdef SPTM_SUPPORT
    //  vHideEqBar();
    //#endif
  }
}

static BOOL fgIsParentDir(void) large
{
#if 1
  BYTE  bLen, bChar;
  WORD  wIdx;
  DWRD  dwAddr;

  bLen = bSharedInfo(FL_ITEM_FIELD(_bFlMnCurItemIdx) + 4);
  wIdx = FL_ITEM_FIELD(_bFlMnCurItemIdx);
  bLoByte(wLoWord(dwAddr)) = bSharedInfo(wIdx);
  bHiByte(wLoWord(dwAddr)) = bSharedInfo(wIdx + 1);
  bLoByte(wHiWord(dwAddr)) = bSharedInfo(wIdx + 2);
  bHiByte(wHiWord(dwAddr)) = bSharedInfo(wIdx + 3);
  bChar = bReadDRAMTbl(bLoByte(wHiWord(dwAddr)), wLoWord(dwAddr));

  if ((bLen == 0x1) && (bChar == 0x1))
    return TRUE;

#else

  WORD  wBsseDir, wIdx;

  wBaseDir = wFlMnGetListBaseDir(_bFlMnListId);
  wIdx = wFlGetItemIdx(_bFlMnCurItemIdx);
  if ((wBaseDir != 0) && (wIdx == 0) && (_bFlMnItemType == FTYPE_FOLDER))
    return TRUE;
#endif
}

////////////////////////////////////////////////////////////////////////////////
// IR Handler

/**
 * Handle IR_PLAY, IR_ENTER, IR_RIGHT_ENTER. It acts like "clicking" or
 *  "selecting" actually.
 */
static BOOL fgFlMnOnIrPlay(void) large
{
  DWRD  dwAddr;
  WORD  wBaseDir, wIdx;
  BYTE  bLen, bChar;

  // - 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;

    fgFlMnLeavItem(_bFlMnCurItemIdx);

    if (fgIsParentDir())
      fgFlMnEntDir(_bFlMnCurItemIdx, TRUE);
    else
      fgFlMnEntDir(_bFlMnCurItemIdx, FALSE);
    break;

  case FTYPE_AV:
    // - click the item and change the playback module to MPEG player
    vFlCmdClickItem(_bFlMnListId, wFlGetItemIdx(_bFlMnCurItemIdx));
    // 20050503, PL00000140, set PBC state to SV_PRE_PLAY so that we don't accept setup key from here.
    vSetSharedInfo(SI_PBC_STATE, SV_PRE_PLAY) ;
    break;

  case FTYPE_STILL:
    // - turn off the preview mode and terminate the preview timing
#ifdef JPG_PREVIEW_SUPPORT
    vSetSharedInfo(SI_PREVIEW_MODE, FALSE);
    _bPreview = PREVIEW_STATE_IDLE;
#endif

#if (DRAM_SZ == DRAM_2M) || defined(USE_DRAM_CFG1)
    vDeleteWB(FL_MENU_WB);
    vDeleteWB(FL_INFO_WB);
#else
    vDisableWB(FL_MENU_WB);
    vDisableWB(FL_INFO_WB);
#endif
    while(bSharedInfo(SI_CMD_CNT))
    {
      //wait for OSD command finish
    }

    if (fgFlClLock(FL_CMDPATH_CLICK))
      vFlCmdClickItem(_bFlMnListId, wFlGetItemIdx(_bFlMnCurItemIdx));
    break;

  case FTYPE_AUDIO:
    // - for all audio files
    wBaseDir = wFlMnGetListBaseDir(_bFlMnListId);
    wIdx = wFlGetItemIdx(_bFlMnCurItemIdx);
    if ((wBaseDir == _wFlCurAdoDir) && (wIdx == _wFlCurAdoIdx) && (bSharedInfo(SI_MP3_MOD) != SV_STOP))
    {
      vSendUopCmd(UOP_PLAY, 0, 0, 0);
    }
    else
    {
      _wFlCurAdoDir = wBaseDir;
      vWorkAreaMove(FALSE);
      // 20050519, PL00001004, need to change the path. If we use intro to select a file, the path will became FL_CMDPATH_SEL_2
      // In vFlMnRetClickItem(), it'll redraw the page.
      if (fgFlClLock(FL_CMDPATH_CLICK))
        vFlCmdClickItem(_bFlMnListId, wFlGetItemIdx(_bFlMnCurItemIdx));
    }
  default:
    break;
  }

  return TRUE;
}

static BOOL fgFlMnOnIrPause(void) large
{
  if (bSharedInfo(SI_MP3_MOD) == SV_PAUSE)
  {
    vSendUopCmd(UOP_PLAY, 0, 0, 0);
  }
  else
  {
    vSendUopCmd(UOP_PAUSE, 0, 0, 0);
  }

  return TRUE;
}


#ifdef FL_USE_LOGO
/**
 * Operations for showing the basic visual components of the
 *  file browser menu.
 */
static void vFlMnShowPage(void) large
{
  // - display the menu logo
  #ifdef SUPPORT_CAPTURE_LOGO
    vPlayerShowLogo(ISO_NOMAL_LOGO, ISO_LOGO_COLOR);
  #else
    vPlayerShowLogo(ISO_STOP_LOGO, ISO_LOGO_COLOR);
  #endif

   // - enable the whiteboard

#if 0//(DRAM_SZ != DRAM_2M) //cl 0512
  #ifdef FSMENU_INFO_PANEL
    vCreateWB(FL_INFO_WB, TRUE);
  #endif
    vCreateWB(FL_MENU_WB, TRUE);
#else
#ifdef FSMENU_INFO_PANEL
  vEnableWB(FL_INFO_WB);
#endif
  vEnableWB(FL_MENU_WB);
#endif
  vSetSharedInfo(SI_HLI_STATE, SV_ON); // - turn on hili select mode

  return;
}
#else
static void vFlMnShowPage(void) large
{
  _wStartX = FLMN_BTN_0_X;
  _wEndX = FLMN_BTN_0_X + FLMN_BTN_0_W;
  _wStartY = FLMN_BTN_0_Y;
  _wEndY = FLMN_BTN_0_Y + FLMN_BTN_0_H;
  vCreateButton(FL_MENU_WB, 30, 4);
  //vSetBtnCol(FL_MENU_WB, 0, 0, 2, 3);
  vSetBtnCol(FL_MENU_WB, 0, 0, 3, 2);
  vUnselButton(FL_MENU_WB, 30);

  _wStartX = FLMN_BTN_1_X;
  _wEndX = FLMN_BTN_1_X + FLMN_BTN_1_W;
  _wStartY = FLMN_BTN_1_Y;
  _wEndY = FLMN_BTN_1_Y + FLMN_BTN_1_H;
  vCreateButton(FL_MENU_WB, 30, 4);
  //vSetBtnCol(FL_MENU_WB, 0, 0, 2, 3);
  vSetBtnCol(FL_MENU_WB, 0, 0, 3, 2);
  vSelButton(FL_MENU_WB, 30);

  _wStartX = FLMN_BTN_2_X;
  _wEndX = FLMN_BTN_2_X + FLMN_BTN_2_W;
  _wStartY = FLMN_BTN_2_Y;
  _wEndY = FLMN_BTN_2_Y + FLMN_BTN_2_H;
  vCreateButton(FL_MENU_WB, 30, 4);
  //vSetBtnCol(FL_MENU_WB, 0, 0, 2, 3);
  vSetBtnCol(FL_MENU_WB, 0, 0, 3, 2);
  vSelButton(FL_MENU_WB, 30);


  _wStartX = FLMN_BTN_3_X;
  _wEndX = FLMN_BTN_3_X + FLMN_BTN_3_W;
  _wStartY = FLMN_BTN_3_Y;
  _wEndY = FLMN_BTN_3_Y + FLMN_BTN_3_H;
  vCreateButton(FL_MENU_WB, 30, 4);
  //vSetBtnCol(FL_MENU_WB, 0, 0, 2, 3);
  vSetBtnCol(FL_MENU_WB, 0, 0, 3, 2);
  vSelButton(FL_MENU_WB, 30);

  vDrawSpin();
}
#endif


// INTER-MODULE INTERFACE
/**
 * Init the object "file list menu".
 */
BOOL fgFlMnInit(void) large
{
  WORD  wTmp;

  // - 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
  _wFlAtplyIdx = 0;
  _fgFlIsAutoPlay = FALSE;

  //    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
  vFlMnGetLastMemItem();
#endif

  //    6. create the list of the menu (the latest operation of init procedure)
  if (!fgFlClLock(FL_CMDPATH_INIT_0))
  {
    return FALSE;
  }

#ifdef ISO_LAST_MEM
  if (_wFlCurAdoIdx != 0xFFFF)
  {
    vFlCmdCreate(FLPARM_LIST_FOLDER,
             FLPARM_INC_FILE|FLPARM_INC_FOLDER|FLPARM_INC_PARENT,
             _wFlCurAdoDir, FLMN_DEF_FFAC, FLPARM_SO_GDIR);
  }
  else
#endif
  {
#ifdef SUPPORT_PCD
    if (fgIsPcdPlay())
    {
      bLoByte(wTmp) = bSharedInfo(SI_FS_PCD_BASEDIR_LO);
      bHiByte(wTmp) = bSharedInfo(SI_FS_PCD_BASEDIR_HI);

      vFlCmdCreate(FLPARM_LIST_FOLDER,
                   0x0, wTmp, FLMN_DEF_FFAC, FLPARM_SO_GDIR);
    }
    else
#endif
    {
      vFlCmdCreate(FLPARM_LIST_FOLDER,
                   FLPARM_INC_PARENT, 0x0, FLPARM_FF_DIR|FLMN_DEF_FFAC, FLPARM_SO_GDIR);
    }
  }

  return TRUE;
}

////////////////////////////////////////////////////////////////////////////////
// Command Target State Transition

static void vFlMnSyncState(void) large
{
  if (bSharedInfo(SI_MP3_STT) == MP3STT_PB_STRT) {
    bLoByte(_wFlCurAdoIdx) = bSharedInfo(SI_MP3_ITEM_IDX_LO);
    bHiByte(_wFlCurAdoIdx) = bSharedInfo(SI_MP3_ITEM_IDX_HI);
  }
  else
    _wFlCurAdoIdx = 0xFFFF;

  return;
}

//
// 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 vFlMnEnter(WORD wItem) large
{
  WORD  wTmp;
  BYTE  bTmp;
  _bFlMnMemLock = FALSE;

  if (_fgFlMdChg)
  {
    vFlMnSyncState();
  }
#if 1//(DRAM_SZ != DRAM_2M)
   vOsdShowWb(OSD_WB_FULL_SCR);
#endif

#if 0
  if (_wCurrItem != 0xFFFF)
  {
    wItem = _wCurrItem;
  }
  else
#endif
  if (wItem == 0xFFFF)
  {
    wItem = wFlGetItemIdx(_bFlMnCurItemIdx);
  }

  _bFlMnCurItemIdx = wItem % FLMN_ITEM_N;

  // - show the basic visual components
  vFlMnShowPage();

  if (_fgFlMdChg)
  {
    vFlMnDrawPage();
    _fgFlMdChg = FALSE;
  }

  _rOsdStateCtx.bTimeType = _bFlMnTimeType;

  // - set shared info to config RISC
#ifdef JPG_PREVIEW_SUPPORT
  _bPreview = PREVIEW_STATE_IDLE;
#endif
#if 1//def JPG_INFO
  vOsdPosClear(OSD_POS_FS_INFO_BAR);
#endif
#ifdef JPG_PREVIEW_SUPPORT
  vSetSharedInfo(SI_PREVIEW_MODE, TRUE);
#endif
  vSetSharedInfo(SI_JPG_ROTATE_AUTO_SLIDE, FL_JPEG_SLIDESHOW_INTERVAL);
  //vSetSharedInfo(SI_JPG_DIGEST_BG, 0x2);

  // - display the run-time info if necessary
  vFlMnDrawInfoPanel(_bFlIpState);

  // - 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(FLMN_PAGE_SZ)) ||
      (wItem >= wFlGetItemIdx(_bFlMnItemNs - 1)))
  {
    // - out boundary redraw
    _bFlMnCurItemIdx = wItem % FLMN_PAGE_SZ;
    if (fgFlClLock(FL_CMDPATH_REDRAW))
      fgFlCmdGetItems(_bFlMnListId, wItem - (WORD)_bFlMnCurItemIdx);
  }
  else
  {
    // - in boundary, enter current item
    fgFlMnEntItem((BYTE)(wItem - wFlGetItemIdx(0x0)));
    for (bTmp = 0; (bTmp < _bFlMnItemNs) && (bTmp < FLMN_PAGE_SZ); bTmp++)
    {
      if (fgFlMnIsCurrPlayItem(bTmp))
      {
        vFlMnHiliOn(bTmp

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -