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

📄 flmenu.c

📁 MTK1389 SOURCE CODE
💻 C
📖 第 1 页 / 共 5 页
字号:
  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));
    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)
    vDeleteWB(FL_MENU_WB);
    vDeleteWB(FL_INFO_WB);
#endif
    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);
      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
   vPlayerShowLogo(ISO_STOP_LOGO, ISO_LOGO_COLOR);
   // - 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, FLMN_PREVIEW_H / 5);
#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
{
  bLoByte(_wFlCurAdoIdx) = bSharedInfo(SI_MP3_ITEM_IDX_LO);
  bHiByte(_wFlCurAdoIdx) = bSharedInfo(SI_MP3_ITEM_IDX_HI);

  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, FLMN_HILI_PLAY, FLMN_CLR_BG, FLMN_CLR_PLAY);
      }
    }
  }

  vFlUpdateVfd(TRUE);
  return;
}

//
// Leave this object (called when we try to move away the focus).
//
WORD wFlMnLeave(BOOL bSuicide) large
{
  // - snuff out hilight, and turn off the hili select mode
  vFlMnHiliItem(_bFlMnCurItemIdx, FALSE);
  vSetSharedInfo(SI_HLI_STATE, SV_OFF);
  
  vFlMnHiliOff(FLMN_HILI_SEL);
  vFlMnHiliOff(FLMN_HILI_PLAY);

#ifdef SHOW_FS_SLIDER
  vMoveSlider(wFlGetItemIdx(_bFlMnCurItemIdx), _wFlMnListLen, FALSE);
#endif 
  
#ifdef SPTM_SUPPORT
  vHideEqBar();
#endif
#ifdef JPG_PREVIEW_SUPPORT 
  _bPreview = PREVIEW_STATE_IDLE;
#endif


#if (DRAM_SZ != DRAM_2M)
  // - disable the whiteboard
  vDisableWB(FL_MENU_WB);
  vDisableWB(FL_INFO_WB);
#else
  vDeleteWB(FL_MENU_WB);
  vDeleteWB(FL_INFO_WB);
#endif
  return (bSharedInfo(SI_MP3_ITEM_IDX_HI)*256 + 
          bSharedInfo(SI_MP3_ITEM_IDX_LO));
}


////////////////////////////////////////////////////////////////////////////////
// IR Key Handlers

/**
 * 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 fgFlMnOnIrUp(void) large
{
  if (fgFlClIsLock())
    return TRUE;

  if (wFlGetItemIdx(_bFlMnCurItemIdx) && 
      (wFlGetItemIdx(_bFlMnCurItemIdx) != 0xFFFF))
  {
    // - IR_UP is still available
    vMoveSpin(TRUE);
    fgFlMnLeavItem(_bFlMnCurItemIdx);
    if (!fgFlMnEntItem(_bFlMnCurItemIdx - 1))
    {
      // - out boundary, change to previous page
      WORD wBIdx;

      wBIdx = wFlGetItemIdx(0x0);
      wBIdx -= (wBIdx >= FLMN_PAGE_SZ) ? (WORD)FLMN_PAGE_SZ : wBIdx;
      if (!fgFlClLock(FL_CMDPATH_UP))
        return TRUE;
      if (fgFlCmdGetItems(_bFlMnListId, wBIdx))
      {
        _bFlMnCurItemIdx = FLMN_PAGE_SZ - 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

⌨️ 快捷键说明

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