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

📄 flipshow.c

📁 MTK 1389E SOURCE CODE
💻 C
📖 第 1 页 / 共 2 页
字号:
/**********************************************************************/
/***************    MTK CONFIDENTIAL & COPYRIGHTED     ****************/
/***************                                       ****************/
/***************  $Modtime:: 05/12/01 5:39p    $       ****************/
/***************  $Revision:: 5                $       ****************/
/***************                                       ****************/
/***************   Description : File Menu             ****************/
/***************                 Info Panel Module     ****************/
/***************                                       ****************/
/***************       Company : MediaTek Inc.         ****************/
/***************    Programmer : Jacob Lin             ****************/
/**********************************************************************/

#pragma NOAREGS

#define __FLIPSHOW_C_

#include "../general.h"
#include "../osdshow.h"
#include "flcomm.h"
#include "flctrl.h"
#include "flconfig.h"
#include "../../procdef.h"

#if (defined(FSMENU_INFO_PANEL) && defined(PLAYER_FLMENU))

static void vWord2Str(WORD wVal, BYTE *pbStr, BYTE bLen) large;

static void vFlIpShowTimeRemain(BYTE bMin, BYTE bSec) large;
static void vFlIpShowTotalTime(BYTE bMin, BYTE bSec) large;
static void vFlIpShowBitrate(WORD wBitrate) large;
static void vFlIpShowVolume(BYTE bVal, BYTE bStyle) large;
static void vFlIpShowPbcState(BYTE bVal, WORD wMsg) large;
static void vFlIpShowUsrAuxCtrl(BYTE bMode) large;
static void vFlIpShowFileIndex(WORD wCurr, BYTE bType) large;
#ifdef FL_CHK_FOLDER_NS
  static void vFlIpShowFolderIndex(WORD wCurr) large;
#endif
static void vFlIpShowRptType(BYTE bRptType) large;
static void vFlIpShowListType(BYTE bType) large;
#ifdef SPTM_SUPPORT
static void vFlIpShowEq(void) large;
#endif

static code BYTE pbISOFastDispTbl[] = { 0, 2, 4, 8, 16, 32 };
static code BYTE pbISOSlowDispTbl[] = { 0, 2, 4, 8, 16 };

#ifdef SUPPORT_DTS_CD
extern BIT            _fgDTSCD;
  #endif

typedef struct sInfoPanelArea
{
  WORD  wPanelPos[2];
  BYTE  bTimeout[2];
};
#if 0
static code WORD _pwListTypeName[] = 
{
  OSD_MSG_MP3_NORMAL_MODE
#ifdef FLMN_SUPPORT_FILELIST
  , OSD_MSG_FL_FILELIST
#endif
#ifdef FLMN_SUPPORT_PLAYLIST
  , OSD_MSG_FL_PLAYLIST
#endif
};
#endif
#define OSD_TIMEOUT_SHORTER  2

static code struct sInfoPanelArea _rInfoPanelArea[IP_INFO_MAX] =
{
  // Common
  { { OSD_POS_FS_PLAYTIME,   OSD_POS_FS_PLAYTIME   }, { OSD_NO_DISAPPEAR,    OSD_NO_DISAPPEAR    } },
  { { OSD_POS_FS_TOTALTIME,  OSD_POS_FS_TOTALTIME  }, { OSD_NO_DISAPPEAR,    OSD_NO_DISAPPEAR    } },
  { { OSD_POS_FS_FILE_INDEX, OSD_POS_FS_FILE_INDEX }, { OSD_NO_DISAPPEAR,    OSD_NO_DISAPPEAR    } },
  // Panel 1
  { { OSD_POS_FS_BITRATE,      OSD_POS_FS_INFO_BAR }, { OSD_NO_DISAPPEAR, OSD_TIMEOUT_SHORTER } },
  { { OSD_POS_FS_PBC,          OSD_POS_FS_INFO_BAR }, { OSD_NO_DISAPPEAR, OSD_TIMEOUT_SHORTER } }, 
  { { OSD_POS_FS_USR_AUX_CTRL, OSD_POS_FS_INFO_BAR }, { OSD_NO_DISAPPEAR, OSD_TIMEOUT_SHORTER } },
  { { OSD_POS_FS_VOLUME,       OSD_POS_FS_INFO_BAR }, { OSD_NO_DISAPPEAR, OSD_TIMEOUT_SHORTER } },
  { { OSD_POS_FS_EQ,           OSD_POS_FS_INFO_BAR }, { OSD_NO_DISAPPEAR, OSD_TIMEOUT_SHORTER } },
  // Panel 2
  { { OSD_POS_FS_INFO_BAR,     OSD_POS_FS_LIST_TYPE }, { OSD_TIMEOUT_SHORTER,  OSD_NO_DISAPPEAR } },
  { { OSD_POS_FS_INFO_BAR,     OSD_POS_FS_KEY_SHIFT }, { OSD_TIMEOUT_SHORTER,  OSD_NO_DISAPPEAR } },
  { { OSD_POS_FS_INFO_BAR,     OSD_POS_FS_RPT_TYPE  }, { OSD_TIMEOUT_SHORTER,  OSD_NO_DISAPPEAR } },
  { { OSD_POS_FS_INFO_BAR,     OSD_POS_FS_REVERB    }, { OSD_TIMEOUT_SHORTER,  OSD_NO_DISAPPEAR } },
  // Info Bar
  { { OSD_POS_FS_INFO_BAR,     OSD_POS_FS_INFO_BAR   }, { OSD_TIMEOUT_SHORTER, OSD_TIMEOUT_SHORTER } },
  { { OSD_POS_FS_INFO_BAR,     OSD_POS_FS_INFO_BAR   }, { OSD_TIMEOUT_SHORTER, OSD_TIMEOUT_SHORTER } },
  { { OSD_POS_FS_DISC_TYPE,     OSD_POS_FS_DISC_TYPE   }, { OSD_TIMEOUT_LONG,    OSD_TIMEOUT_LONG    } }
};

////////////////////////////////////////////////////////////////////////////////
// Utility Function

static void vWord2Str(WORD wVal, BYTE *pbStr, BYTE bLen) large
{
  wVal = wWRDToBCD(wVal);
  
  pbStr[0] = bLen;
  if (bLen == 3)
  {
    pbStr[1] = BCD_LO(bHiByte(wVal)) + '0';
    pbStr[2] = BCD_HI(bLoByte(wVal)) + '0';
    pbStr[3] = BCD_LO(bLoByte(wVal)) + '0';
  }
  else // if (bLen == 4)
  {
    pbStr[1] = BCD_HI(bHiByte(wVal)) + '0';
    pbStr[2] = BCD_LO(bHiByte(wVal)) + '0';
    pbStr[3] = BCD_HI(bLoByte(wVal)) + '0';
    pbStr[4] = BCD_LO(bLoByte(wVal)) + '0';
  }
}  

static void vFlIpDrawInfo(BYTE bInfo, WORD wMsg, BYTE *pbStr) large
{
  BYTE  bTime;
  WORD  wPos;
  
  wPos  = _rInfoPanelArea[bInfo].wPanelPos[_bFlIpState];
  bTime = _rInfoPanelArea[bInfo].bTimeout[_bFlIpState];
  
  if (pbStr)
  {
    vOsdPosShowArg(wPos, wMsg, bTime, pbStr);
  }
  else
  {
    vOsdPosShow(wPos, wMsg, bTime);
  }
}

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

static void vFlIpShowTimeRemain(BYTE bMin, BYTE bSec) large
{
  BYTE pbTime[5];
  
  vCheckTimeValid2(bMin, bSec);

  pbTime[0] = 4;
  pbTime[1] = BCD_HI(bMin) + '0';
  pbTime[2] = BCD_LO(bMin) + '0';
  pbTime[3] = BCD_HI(bSec) + '0';
  pbTime[4] = BCD_LO(bSec) + '0';  
  
 
  vFlIpDrawInfo(IP_INFO_PLAYTIME, OSD_MSG_TIME_RIGHT_2, pbTime);
}

static void vFlIpShowTotalTime(BYTE bMin, BYTE bSec) large
{
  BYTE pbTime[5];

  vCheckTimeValid2(bMin, bSec);
  
  pbTime[0] = 4;
  pbTime[1] = BCD_HI(bMin) + '0';
  pbTime[2] = BCD_LO(bMin) + '0';
  pbTime[3] = BCD_HI(bSec) + '0';
  pbTime[4] = BCD_LO(bSec) + '0';  

  vFlIpDrawInfo(IP_INFO_TOTALTIME, OSD_MSG_TIME_RIGHT_2, pbTime);
}

static void vFlIpShowBitrate(WORD wBitrate) large
{
  BYTE i;
  BYTE pbBr[9];

  if ((wBitrate != 0xFFFF) && (wBitrate != 0))
  {
    vWord2Str(wBitrate, pbBr, 4);
    pbBr[0] = 8;
    pbBr[5] = 'K';
    pbBr[6] = 'b';
    pbBr[7] = 'p';
    pbBr[8] = 's';

    for (i=1; i<=4; i++)
    {
      if (pbBr[i] == '0')
       pbBr[i] = ' ';
      else 
        break;
    }
  }
  else
  {
    pbBr[0] = 8;
    pbBr[1] = ' ';
    pbBr[2] = ' ';
    pbBr[3] = ' ';
    pbBr[4] = ' ';
    pbBr[5] = ' ';
    pbBr[6] = ' ';
    pbBr[7] = ' ';
    pbBr[8] = ' ';
  }

  if (_bFlIpState == IP_STATE_PANEL_1)
    vOsdPosShowStr(OSD_POS_FS_BITRATE, pbBr);
}

static void vFlIpShowVolume(BYTE bVal, BYTE bStyle) large
{
  BYTE pbStr[3];
  BYTE i;

  if (bStyle & FLIP_VOLUME_MUTE_ON)
  {
/*
    _wStartX = FS_VOLUME_X;
    _wEndX = FS_VOLUME_X + FS_VOLUME_W;
    _wStartY = FS_VOLUME_Y;
    _wEndY = FS_VOLUME_H;
*/  
    if (_bFlIpState == IP_STATE_PANEL_1)
    {
      vOsdPosClear(OSD_POS_FS_VOLUME);
      vOsdPosShow(OSD_POS_FS_VOLUME, OSD_MSG_MUTE, OSD_NO_DISAPPEAR);
    }
    else
      vOsdPosShow(OSD_POS_FS_INFO_BAR, OSD_MSG_MUTE, OSD_TIMEOUT_SHORT);
    return;
  }
  else if (bStyle & FLIP_VOLUME_MUTE_OFF)
  {
    if (_bFlIpState == IP_STATE_PANEL_1)
    {
      vOsdPosClear(OSD_POS_FS_VOLUME);
    }
    else
    {
      vOsdPosShow(OSD_POS_FS_INFO_BAR, OSD_MSG_MUTEOFF, OSD_TIMEOUT_SHORT);
      return;
    }
  }

  if (_bFlIpState == IP_STATE_PANEL_1)
  {
    if (bStyle & FLIP_VOLUME_REDRAW)
    {
      _wStartX = FS_VOLUME_X;
      _wEndX = FS_VOLUME_X + FS_VOLUME_W;
      _wStartY = FS_VOLUME_Y;
      _wEndY = FS_VOLUME_H;
      vOsdPosClear(OSD_POS_FS_VOLUME);
  
      _wStartY = FS_VOLUME_Y;
      _wEndY = FS_VOLUME_H;
      vDrawProgress(bVal, MAX_VOL_LEVEL);
    }
    else
    {
      _wStartX = FS_VOLUME_X;
      _wEndX = FS_VOLUME_X + FS_VOLUME_W;
      _wStartY = FS_VOLUME_Y;
      _wEndY = FS_VOLUME_H;
    
      if (bStyle & FLIP_VOLUME_UP)
      {
        //vMoveProgress(bVal-1, MAX_VOL_LEVEL, FALSE);
      }
      else if (bStyle & FLIP_VOLUME_DOWN)
      {
        vMoveProgress(bVal+1, MAX_VOL_LEVEL, FALSE);
      }
  
      _wStartX = FS_VOLUME_X;
      _wEndX = FS_VOLUME_X + FS_VOLUME_W;
      _wStartY = FS_VOLUME_Y;
      _wEndY = FS_VOLUME_H;
    
      vMoveProgress(bVal, MAX_VOL_LEVEL, TRUE);
    }
  }
  else 
  {
    if (bVal < 0)
    {
      bVal = 0;
    }
  
    if (bVal > MAX_VOL_LEVEL)
    {
      bVal = MAX_VOL_LEVEL;
    }
  
  /*
    pbStr[0] = 12;
  
    for(i=0; i<bVal/2; i++)
    {
      if (i == 10)
      {
        break;
      }
      pbStr[i+1] = ICON_VOL_1; //3;
    }
    if (bVal % 2)
    {
      pbStr[i+1] = ICON_VOL_2; //4;
      i ++;
    }
    for(; i<20/2; i++)
    {
      pbStr[i+1] = ICON_VOL_0; //2;
    }
    bVal = bHEXToBCD(bVal);
    pbStr[11] = BCD_HI(bVal) + '0';
    pbStr[12] = BCD_LO(bVal) + '0';
    
    */
    bVal = bHEXToBCD(bVal);
    pbStr[0] = 2;
    pbStr[1] = BCD_HI(bVal) + '0';
    pbStr[2] = BCD_LO(bVal) + '0';

    vOsdPosShowArg(OSD_POS_FS_INFO_BAR, OSD_MSG_VOLUME, OSD_TIMEOUT, pbStr);
  }
}

#ifdef FL_CHK_FOLDER_NS
static void vFlIpShowFolderIndex(WORD wCurr) large
{
  BYTE pbStr[10];

  wCurr++;

  vFlIpClearInfoArea(IP_INFO_FILE_INDEX);
  
  pbStr[1] = 'D';
  pbStr[2] = 'i';
  pbStr[3] = 'r';

  if (wCurr < 1000)
  {
    vWord2Str(wCurr, pbStr + 4, 3);
    pbStr[0] = 7;
  }
  else
  {
    vWord2Str(wCurr, pbStr + 4, 4);
    pbStr[0] = 8;
  }
  pbStr[4] = ':';
 
  vInMsgColDis(FL_INFO_WB);
  vOsdPosShowStr(OSD_POS_FS_FILE_INDEX, pbStr);
}
#endif

static void vFlIpShowFileIndex(WORD wCurr, BYTE bType) large
{
  BYTE pbStr[10];
  WORD wTotal, wFldrNs;
  
#if 0  
  if((bType == IP_INFO_FILE_INDEX) && (bSharedInfo(SI_MP3_MOD) != SV_STOP))
  {
    wCurr = _wFlCurAdoIdx;
  }
#endif

  if (bType == IP_INFO_FILE_INDEX_5)
  {
    // tmp  
    if (_rNumInStateCtx.wNum != 0)
    {
      wCurr = (WORD) _rNumInStateCtx.bDig[0] * 100 + 
                     _rNumInStateCtx.bDig[1] * 10 + 
                     _rNumInStateCtx.bDig[2];
      if (_wFlMnListLen >= 1000)
        wCurr = wCurr * 10 + _rNumInStateCtx.bDig[3];
    }
    else
    {
      wCurr = wFlGetItemIdx(_bFlMnCurItemIdx) + 1;
    }
    
    if (wCurr > _wFlMnListLen)
      wCurr = wFlGetItemIdx(_bFlMnCurItemIdx) + 1;

    if (wCurr)  wCurr--;
    bType = IP_INFO_FILE_INDEX;
  }

  if (bType == IP_INFO_FILE_INDEX)
  {
    //if (bFlGetItemType(wCurr % FL_ITEM_N) == FTYPE_FOLDER)
#ifdef FL_CHK_FOLDER_NS    
    if (bFlGetItemType(wCurr % 6) == FTYPE_FOLDER)
    {
      vFlIpShowFolderIndex(wCurr);
      return;
    }
#endif

    wTotal = _wFlMnListLen;
    
    wCurr++;
#ifdef FL_CHK_FOLDER_NS 
    if(bSharedInfo(FL_LIST_FIELD(_bFlMnListId)) == FLPARM_LIST_FOLDER)
      wFldrNs = wFlGetSubFldrNs(_bFlMnListId);
    else
      wFldrNs = 0;
    wCurr -= (wFldrNs);
    wTotal -= (wFldrNs);
#endif

    if (wTotal < 1000)
    {
      vWord2Str(wCurr, pbStr, 3);
      vWord2Str(wTotal, pbStr+4, 3);
      pbStr[4] = '/';
      pbStr[8] = pbStr[9] = ' ';
    }
    else // if (wTotal > 1000)
    {
      vWord2Str(wCurr, pbStr, 4);
      vWord2Str(wTotal, pbStr+5, 4);
      pbStr[5] = '/';
    }
    pbStr[0] = 9;
    vInMsgColDis(FL_INFO_WB);
    vOsdPosShowStr(OSD_POS_FS_FILE_INDEX, pbStr);
  }
  else // IP_INFO_FILE_INDEX_?
  {
    wTotal = _wFlMnListLen;

    if (wTotal < 1000)
    {
      pbStr[0] = 6;
      pbStr[1] = pbStr[2] = 3;
    }
    else
    {
      pbStr[0] = 7;
      pbStr[1] = pbStr[2] = 4;
    }
    pbStr[3] = 0;
    pbStr[4] = pbStr[5] = pbStr[6] = pbStr[7] = '-';
          
    wCurr = wWRDToBCD(wCurr);
    
    switch(bType)
    {
      case IP_INFO_FILE_INDEX_0:
        break;
      case IP_INFO_FILE_INDEX_1:
    #ifdef FLIP_DIGIT_RIGHT
        if (wTotal < 1000)
          pbStr[6] = BCD_LO(bHiByte(wCurr)) + '0';          
        else
          pbStr[7] = BCD_HI(bHiByte(wCurr)) + '0';
    #else      
        pbStr[4] = BCD_HI(bHiByte(wCurr)) + '0';
    #endif
        break;
      case IP_INFO_FILE_INDEX_2:
    #ifdef FLIP_DIGIT_RIGHT
        if (wTotal < 1000)
        {
          pbStr[5] = BCD_LO(bHiByte(wCurr)) + '0';
          pbStr[6] = BCD_HI(bLoByte(wCurr)) + '0';
        }
        else
        {
          pbStr[6] = BCD_HI(bHiByte(wCurr)) + '0';
          pbStr[7] = BCD_LO(bHiByte(wCurr)) + '0';
        }
    #else
        pbStr[4] = BCD_LO(bHiByte(wCurr)) + '0';
        pbStr[5] = BCD_HI(bLoByte(wCurr)) + '0';
    #endif
        break;
      case IP_INFO_FILE_INDEX_3:
    #ifdef FLIP_DIGIT_RIGHT
        if (wTotal < 1000)
        {

⌨️ 快捷键说明

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