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

📄 flmenu.c

📁 手机8032的完整代码。吐血推荐。小做改动就可以生产。
💻 C
📖 第 1 页 / 共 5 页
字号:
  }

#ifdef ISO_LAST_MEM
  if (_wFlCurAdoIdx != 0xFFFF)
  {
    
#ifdef MP3_LAST_MEMORY
#ifdef FLMENU_DEFAULT_DISC_LIST
		vFlCmdCreate(FLPARM_LIST_DISC, 0, 0, FLMN_DEF_FFAC, FLPARM_SO_GDIR);
#else
		vFlCmdCreate(FLPARM_LIST_FOLDER,
				 FLPARM_INC_PARENT,
				 _wFlCurAdoDir, FLPARM_FF_DIR|FLMN_DEF_FFAC, FLPARM_SO_GDIR);
#endif
#else
		vFlCmdCreate(FLPARM_LIST_FOLDER,
				 FLPARM_INC_FILE|FLPARM_INC_FOLDER|FLPARM_INC_PARENT,
				 _wFlCurAdoDir, FLMN_DEF_FFAC, FLPARM_SO_GDIR);
#endif  
    
  }
  else
#endif
  {
#ifdef SUPPORT_PCD
    if (fgIsPcdPlay())
    {
      #ifdef SUPPORT_FJCD//071029
      if (bSharedInfo(SI_DISC_TYPE) == SV_PCD)
      #endif
      {
      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);
    }
      #ifdef SUPPORT_FJCD//071029
	    else
	    {
		   wFCfg = FLPARM_FF_JPEG;
		   bListType = FLPARM_LIST_FJPIC;
		   bIncItemType = FLPARM_INC_HI_RES_PICS | FLPARM_INC_LO_RES_PICS;
		   vFlCmdCreate(bListType, bIncItemType,
               0, wFCfg, FLPARM_SO_GDIR);
	    }
      #endif
    }
    else
#endif
    {
      
#ifdef FLMENU_DEFAULT_DISC_LIST
	vFlCmdCreate(FLPARM_LIST_DISC, 0, 0, FLMN_DEF_FFAC, FLPARM_SO_GDIR);
#else
	vFlCmdCreate(FLPARM_LIST_FOLDER,
			FLPARM_INC_PARENT, 0x0, FLPARM_FF_DIR|FLMN_DEF_FFAC, FLPARM_SO_GDIR);
#endif
      
    }
  }
#ifdef UNICODE_SUPPORT_COPY
    _bUSBCopyState = USB_COPY_STATE_NONE;
#endif

  return TRUE;
}

////////////////////////////////////////////////////////////////////////////////
//

#ifdef ENABLE_ID3

static code BYTE _pbId3V1Tag[3] = { 'T', 'A', 'G' };
static code BYTE _pbId3V1FldLen[ID3V1_MAX] =  { 3, 30, 30, 30,  4, 30 , 1 };
static code BYTE _pbId3V1FldPos[ID3V1_MAX] =  { 0, 3, 33, 63, 93, 97, 127 };

static void vFlGetId3Info(void) large
{
  DWRD  dwAddr;
  BYTE  pbStr[31];
  BYTE  bFld, bLen, i, bChar;
#ifndef MT1379_MANUFACTURE_TEST
#ifdef SUPPORT_CAPTURE_LOGO
  vPlayerShowLogo(ISO_NOMAL_LOGO, ISO_LOGO_COLOR);
#else
  vPlayerShowLogo(ISO_STOP_LOGO, ISO_LOGO_COLOR);
#endif
#endif
  bLoByte(wLoWord(dwAddr)) = bSharedInfo(SI_MP3_ID3TAG_B1);
  bHiByte(wLoWord(dwAddr)) = bSharedInfo(SI_MP3_ID3TAG_B2);
  bLoByte(wHiWord(dwAddr)) = bSharedInfo(SI_MP3_ID3TAG_B3);
  bHiByte(wHiWord(dwAddr)) = bSharedInfo(SI_MP3_ID3TAG_B4);

  if (dwAddr == 0xffffffff)
    return;

  for (bFld=0, bLen=0; bFld < ID3V1_MAX; bFld++)
  {
    pbStr[0] = _pbId3V1FldLen[bFld];
    for (i=0; i<_pbId3V1FldLen[bFld]; i++)
    {
      bChar = bReadDRAMTbl(bLoByte(wHiWord(dwAddr)), wLoWord(dwAddr));

      if (bFld == 0)
      {
        if (bChar != _pbId3V1Tag[i])
          return;
      }

      if (bChar == 0x00)
      {
        pbStr[0] = i;
        dwAddr += (_pbId3V1FldLen[bFld] - i);
        break;
      }
      else
      {
        pbStr[i+1] = bChar;
        dwAddr ++;
      }
    }

    if (bFld != 0)
    {
      _wStartX = (WORD) FLMN_PREVIEW_X - FSMENU_BASIC_WB_LEFT;
      _wStartY = (WORD) FLMN_PREVIEW_Y - FSMENU_BASIC_WB_TOP + 15 + 30 * bFld;
      vOsdShowStrMax(FL_MENU_WB, pbStr, 200, 0);
    }
  }
}
#endif

////////////////////////////////////////////////////////////////////////////////
//

#ifndef MP3_LAST_MEMORY   
#ifdef ISO_LAST_MEM
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
#endif
#ifdef MT1379_MANUFACTURE_TEST
extern void vNotMp4CD() large;
#endif

////////////////////////////////////////////////////////////////////////////////
// Command return

/**
 * Check the return value of command "FLCMD_CREATE".
 */
static void vFlMnRetCreate(void) large
{
  WORD wBlkPtr;
  BYTE bRCode;

  wBlkPtr = FL_CMD_BLK_SA + 1; // - shift to the parameter block
  bRCode = bSharedInfo(wBlkPtr ++);

  // - mark the command is done
  vFlCmdDone();

  if (bRCode == FLRET_S_OK)
  {
    // - read in the newly created list info
    if (fgFlClIsLock())
    {
      switch(bFlClPath())
      {
        case FL_CMDPATH_INIT_0:
          _bFlMnListId = bSharedInfo(wBlkPtr ++);
          vFlMnRdListInfo(_bFlMnListId);
#ifdef ISO_AUTO_PLAY
          vFlClNext();
          vFlCmdCreate(FLPARM_LIST_DISC, 0, 0x0,
        #ifdef MT1379_MANUFACTURE_TEST
                       FLPARM_FF_MPG,
        #else
                       FL_AUDIO_FILE,
        #endif
                       FLPARM_SO_GDIR);
          break;

        case FL_CMDPATH_INIT_1:
          _bFlRefListId = bSharedInfo(wBlkPtr ++);
        #ifdef MT1379_MANUFACTURE_TEST
          vFlMnRdListInfo(_bFlRefListId);
          #ifdef RS232_LOG
            DRS232LogS("Aft FlCreate");
            DRS232LogB(_wFlMnListLen,0,0,0);
          #endif

          if (!_wFlMnListLen)
            vNotMp4CD();
          else
            vFlCmdClickItem(_bFlRefListId, 0);
        #endif

#endif
 #ifdef SUPPORT_FJCD//071029
          if( (bSharedInfo(SI_DISC_TYPE) == SV_PCD)||(bSharedInfo(SI_DISC_TYPE) == SV_FJCD))
 #else
          if (bSharedInfo(SI_DISC_TYPE) == SV_PCD)
#endif
          {
            vFlSetCmdTarget(FL_CMD_TARGET_JPEG);
          }
          else
          {
            if (_wFlMnListLen)
            {
            if (_wFlCurAdoIdx == 0xFFFF)
            {
              fgFlCmdGetItems(_bFlMnListId, 0);
              //vFlSetCmdTarget(FL_CMD_TARGET_MENU);
            }
            else
            {
              _bFlMnCurItemIdx = _wFlCurAdoIdx % FLMN_ITEM_N;
              fgFlCmdGetItems(_bFlMnListId, _wFlCurAdoIdx - _bFlMnCurItemIdx);
            }
          }
            else
            {
          #ifdef SUPPORT_EMD
              vFlMnShowPage();
              vFlMnDrawInfoPanel(_bFlIpState);
              vFlIpShowInfo(IP_INFO_FILE_INDEX, 0, 0);
              _wStartX = FLMN_BTN_1_X + FLMN_MENU_BORDER + 80;
              _wStartY = FLMN_BTN_1_Y + FLMN_MENU_BORDER + 2;
              if (bSharedInfo(SI_FAT_ERR_CODE) == SV_FAT_E_NOT_SUPPORT)
                vOsdMsgPaste(FL_MENU_WB, OSD_MSG_ERR_DISC_NOT_SUPPORT);
              else
                //Alan Cheng: temporarily for porting
                vOsdMsgPaste(FL_MENU_WB, OSD_MSG_EMPTY_CARD);
              _bFlCmdTarget = FL_CMD_TARGET_MENU;
		#ifdef UNICODE_SUPPORT_COPY
              vFlMnClrPage();
              #endif	              
              vFlClRls();
          #endif
            }
          }
          break;
      }
    }
  }
  else
  {
    // - error occurs
    _bFlMnListId = 0xFF;
    _bFlRefListId = 0xFF;
  }

  return;
}

/**
 * Check the return value of command "FLCMD_SET".
 */
static void vFlMnRetSet(void) large
{
  WORD wBlkPtr;
  BYTE bRCode;

  wBlkPtr = FL_CMD_BLK_SA + 1; // - shift to the parameter block
  bRCode = bSharedInfo(wBlkPtr ++);

  //bRetOp = bFlCmdRetOp();
  // - mark the command is done
  vFlCmdDone();

  if (bRCode == FLRET_S_OK)
  {
    // - successful
    vFlMnRdListInfo(_bFlMnListId);
    if (fgFlClIsLock())
    {
      switch(bFlClPath())
      {
        case FL_CMDPATH_RETURN:
          _bFlMnCurItemIdx = _wFlCurAdoIdx % FLMN_ITEM_N;
          fgFlCmdGetItems(_bFlMnListId, _wFlCurAdoIdx - _bFlMnCurItemIdx);
          break;

        case FL_CMDPATH_CHG_DIR:
        case FL_CMDPATH_DIR_UP_0:
        case FL_CMDPATH_DIR_UP_1:
          _bFlMnCurItemIdx = 0x0;
          fgFlCmdGetItems(_bFlMnListId, 0);
          break;
        case FL_CMDPATH_CHG_LIST:
          fgFlCmdGetItems(_bFlMnListId, 0x0);
          break;
        case FL_CMDPATH_ATPLY_1:
          _wFlCurAdoIdx += wFlGetSubFldrNs(_bFlMnListId);
          fgFlCmdGetItems(_bFlMnListId, _wFlCurAdoIdx - (_wFlCurAdoIdx % FLMN_ITEM_N));
          break;
      }
    }
    else
    {
#if 0
      if (bRetOp == FLCMD_RET_OP_CHG_LIST)
        fgFlCmdGetItems(_bFlMnListId, 0x0);
      else
#endif
        fgFlCmdGetItems(_bFlMnListId, 0x0);

      _bFlMnCurItemIdx = 0x0;
    }
  }
  else
  {
    // - error occurs
  }

  return;
}

/**
 * Check the return value of command "FLCMD_GET_ITEMS".
 */
static void vFlMnRetGetItems(void) large
{
  WORD wBlkPtr;
  WORD wNum;
  BYTE bType;
  BYTE bRCode;

  wBlkPtr = FL_CMD_BLK_SA + 1; // - shift to the parameter block
  bRCode = bSharedInfo(wBlkPtr ++);

  if (bRCode == FLRET_S_OK)
  {
    // - successful, update the item number, redraw the page
    _bFlMnItemNs = bSharedInfo(wBlkPtr ++);
    vFlCmdDone();

    switch(bFlClPath())
    {
    #ifdef ISO_AUTO_PLAY
      case FL_CMDPATH_INIT_1:
    #else
      case FL_CMDPATH_INIT_0:
    #endif
	
#ifdef MP3_LAST_MEMORY
			// lastmem & autoplay can't be happened at the same time
			if (_wFlCurAdoIdx != 0xffff)
			{
			  vFlMnDrawPage();
			  fgFlMnEntItem(_bFlMnCurItemIdx);
		  _bFlPlayListType = bSharedInfo(FL_LIST_FIELD(_bFlMnListId));
			  vFlCmdClickItem(_bFlMnListId, _wFlCurAdoIdx);
			}else
#endif
        vFlSetCmdTarget(FL_CMD_TARGET_MENU);
        break;
      case FL_CMDPATH_CHG_LIST:
        vFlIpShowInfo(IP_INFO_LIST_TYPE, bSharedInfo(FL_LIST_FIELD(_bFlMnListId)), 0);
      case FL_CMDPATH_CHG_DIR:
      case FL_CMDPATH_REDRAW:
      case FL_CMDPATH_DIR_UP_1:
      case FL_CMDPATH_UP:
      case FL_CMDPATH_DOWN:
      case FL_CMDPATH_RETURN:
        vFlMnSyncState();
        vFlMnDrawPage();
        fgFlMnEntItem(_bFlMnCurItemIdx);
        vFlClRls();
#ifdef CDFS_AUTO_PLAY
        if((bFlClPath() == FL_CMDPATH_REDRAW) && (bSharedInfo(SI_FS_FSTYPE) == FSTYPE_CDFS))
        {
          if((!_bFlMnCurItemIdx) && (bSharedInfo(SI_PBC_STATE) == SV_STOP))
          {
#ifdef RS232_LOG
          DBGLogS(" send play \n ");
        #endif
            fgSetPlayPostKey(IR_PLAY);
          }
        }
#endif
        break;
#ifdef UNICODE_SUPPORT_COPY
      case FL_CMDPATH_USBCP0:  //SUPPORT_USB_COPY_MENU  //for usb copy item select
        vFlMnSyncState();
        vFlMnDrawPage();
        fgFlMnEntItem(_bFlMnCurItemIdx);
        vUSBCpShowAllChkbox();
        vFlClRls();
        break;
#endif		

      case FL_CMDPATH_SEL_2:
        vFlMnDrawPage();
        fgFlMnEntItem(_bFlMnCurItemIdx);
        vFlClRls();
        break;
      case FL_CMDPATH_DIR_DOWN:
        fgFlMnEntDir(0x0, FALSE);
        break;
      case FL_CMDPATH_DIR_UP_0:
        vFlClNext();
        fgFlMnEntDir(0x0, TRUE);
        break;
      case FL_CMDPATH_PL_RM:
        vFlMnDrawPage();
        fgFlMnEntItem(_bFlMnCurItemIdx);
        vFlClRls();
        break;
      case FL_CMDPATH_SEL_0:
        _fgFlMdChg = TRUE;
        // PL00003850, need to set _bFlMnItemType or it'll be wrong type
        _bFlMnItemType = bFlGetItemType(_bFlMnCurItemIdx);
        switch (_bFlMnItemType)
        {
          case FTYPE_FOLDER:
            vFlClNext();
            if (fgIsParentDir())
              vParseFolderName(_bFlMnCurItemIdx, TRUE);
            else
              vParseFolderName(_bFlMnCurItemIdx, FALSE);
            vFlSetCmdTarget(FL_CMD_TARGET_MENU);
            break;
          case FTYPE_AUDIO:
            vFlClNext();
            vFlSetCmdTarget(FL_CMD_TARGET_MENU);
            break;
          case FTYPE_STILL:
            vFlClNext();
            vFlSetCmdTarget(FL_CMD_TARGET_JPEG);
            break;
          case FTYPE_AV:
            // 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) ;
            vFlClNext();
            // PL00003626, why change to MPEG need to change to MENU first ??
            // Correct it.
            vFlSetCmdTarget(FL_CMD_TARGET_MPEG);
            //vFlSetCmdTarget(FL_CMD_TARGET_MENU);
            break;
        }
        break;
#ifdef ISO_AUTO_PLAY
      case FL_CMDPATH_ATPLY_0:
        vFlCmdQueryItem(_bFlRefListId, _wFlAtplyIdx);
        break;
      case FL_CMDPATH_ATPLY_1:
        _bFlMnCurItemIdx = _wFlCurAdoIdx % FLMN_ITEM_N;
     #ifdef FL_AUTO_PLAY_SYNC_MENU
        vFlMnDrawPage();
        fgFlMnEntItem(_bFlMnCurItemIdx);
     #endif
        vFlCmdClickItem(_bFlMnListId, _wFlCurAdoIdx);
        break;
#endif
    }
  }
  else
  {
    // - error occurs, mark the number of item is negative
    vFlCmdDone();

    switch(bFlClPath())
    {
      case FL_CMDPATH_CHG_LIST:
        bType = bSharedInfo(FL_LIST_FIELD(_bFlMnListId));
        switch (bType)
        {
          case FLPARM_LIST_FOLDER:
#if defined (DATA_DISC_SUPPORT_DISC_LIST)
            bType = FLPARM_LIST_DISC;
            _wFlCurAdoIdx = _wFlFdIdx;
#elif defined (DATA_DISC_SUPPORT_PLAY_LIST)
            bType = FLPARM_LIST_PLAYLIST;
            _wFlCurAdoIdx = _wFlFlIdx;
#else
            _wFlCurAdoIdx = _wFlPlIdx;
#endif
            break;

⌨️ 快捷键说明

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