www.pudn.com > 6027_HD65.rar > flipshow.c


/**********************************************************************/ 
/***************    MTK CONFIDENTIAL & COPYRIGHTED     ****************/ 
/***************                                       ****************/ 
/***************  $Modtime:: 04/08/03 11:10a   $       ****************/ 
/***************  $Revision:: 14               $       ****************/ 
/***************                                       ****************/ 
/***************   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[8]; 
 
  if (wBitrate != 0xFFFF) 
  { 
    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] = 4; 
    pbBr[1] = ' '; 
    pbBr[2] = ' '; 
    pbBr[3] = ' '; 
    pbBr[4] = ' '; 
  } 
 
  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= 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) 
        { 
          pbStr[4] = BCD_LO(bHiByte(wCurr)) + '0'; 
          pbStr[5] = BCD_HI(bLoByte(wCurr)) + '0'; 
          pbStr[6] = BCD_LO(bLoByte(wCurr)) + '0'; 
        } 
        else 
        { 
          pbStr[5] = BCD_HI(bHiByte(wCurr)) + '0'; 
          pbStr[6] = BCD_LO(bHiByte(wCurr)) + '0'; 
          pbStr[7] = BCD_HI(bLoByte(wCurr)) + '0'; 
        } 
    #else 
        pbStr[4] = BCD_LO(bHiByte(wCurr)) + '0'; 
        pbStr[5] = BCD_HI(bLoByte(wCurr)) + '0'; 
        pbStr[6] = BCD_LO(bLoByte(wCurr)) + '0'; 
    #endif 
        break; 
      case IP_INFO_FILE_INDEX_4: 
        pbStr[4] = BCD_HI(bHiByte(wCurr)) + '0'; 
        pbStr[5] = BCD_LO(bHiByte(wCurr)) + '0'; 
        pbStr[6] = BCD_HI(bLoByte(wCurr)) + '0'; 
        pbStr[7] = BCD_LO(bLoByte(wCurr)) + '0'; 
        break; 
    } 
     
#ifdef FL_CHK_FOLDER_NS  
    if (bFlGetItemType(wCurr % 6) == FTYPE_FOLDER) 
      vFlIpClearInfoArea(IP_INFO_FILE_INDEX); 
#endif 
    vInMsgColEn(FL_INFO_WB); 
    vOsdPosPasteArg(OSD_POS_FS_FILE_INDEX, OSD_MSG_FLMENU_SELECT, pbStr, 0); 
  } 
} 
 
/** 
 * Show the equalizer info (visual spectrum). 
 */ 
#ifdef SPTM_SUPPORT 
static void vFlIpShowEq(void) large 
{ 
#ifdef SPTM_SUPPORT 
  BYTE  bTmp; 
/* 
  _wStartX = 300; 
  _wStartY = 32; 
  _wEndX = 12;   
  _wEndY = 32; 
*/ 
  _wStartX = FS_EQ_X; 
  _wStartY = FS_INFO_PANEL_LINE_2_Y; 
  _wEndX = FS_EQ_LINE_W;   
  _wEndY = 32; 
 
  bTmp = bSharedInfo(SI_MP3_MOD); 
  vSetSharedInfo(SI_PBC_STATE, bTmp); 
 
  //vShowEqBar(FL_INFO_WB, OSD_EQ_TYPE_BAR, FALSE, 15, 4); 
  vShowEqBar(FL_INFO_WB, OSD_EQ_TYPE_BAR, FALSE, 14, 4); 
#endif 
} 
#endif 
 
static void vFlIpShowRptType(BYTE bRptType) large 
{ 
  WORD  wMsg; 
 
  switch(bRptType) 
  { 
    case SV_REPEAT_NONE: 
      wMsg = OSD_MSG_MP3_NORMAL_MODE; 
      break; 
 
#ifdef DDISC_PB_REP_FOLDER_ENABLED 
    case SV_REPEAT_ALL: 
      wMsg = OSD_MSG_MP3_REPEAT_FOLDER; 
      break; 
#endif 
 
    case SV_REPEAT_TRACK: 
      wMsg = OSD_MSG_MP3_REPEAT_ONE; 
      break; 
 
#ifdef DDISC_PB_SHUFFLE_ENABLED 
    case SV_SHUFFLE: 
      wMsg = OSD_MSG_MP3_SHUFFLE; 
      break; 
#endif 
 
#ifdef DDISC_PB_RANDOM_ENABLED 
    case SV_RANDOM: 
      wMsg = OSD_MSG_MP3_RANDOM; 
      break; 
#endif 
 
#ifdef DDISC_PB_SINGLE_ENABLED 
    case SV_SINGLE: 
      wMsg = OSD_MSG_MP3_SINGLE; 
      break; 
#endif 
       
    default:  
      // TODO: add the error handling. 
      return; 
  } 
 
  vFlIpDrawInfo(IP_INFO_RPT_TYPE, wMsg, 0); 
  //void vOsdPosShow(WORD wPosIndex, WORD wMsgIndex, BYTE bTime) large 
  //vOsdPosShow(OSD_POS_FS_RPT_TYPE, wMsg, 0xFF); 
} 
 
static void vFlIpShowListType(BYTE bType) large 
{ 
  WORD  wMsg; 
 
//  wMsg = _pwListTypeName[bType]; 
 
  switch(bType) 
  { 
    case FLPARM_LIST_FOLDER: 
      wMsg = OSD_MSG_MP3_NORMAL_MODE; 
      break; 
       
#ifdef DATA_DISC_SUPPORT_DISC_LIST 
    case FLPARM_LIST_DISC: 
      wMsg = OSD_MSG_FL_FILELIST; 
      break; 
#endif 
 
#ifdef DATA_DISC_SUPPORT_PLAY_LIST  
    case FLPARM_LIST_PLAYLIST: 
      wMsg = OSD_MSG_FL_PLAYLIST; 
      break; 
#endif 
 
    case FLPARM_LIST_INVALID: 
      wMsg = OSD_MSG_MP3_NORMAL_MODE; 
      break; 
  } 
 
  vFlIpDrawInfo(IP_INFO_LIST_TYPE, wMsg, 0); 
} 
 
 
static void vFlIpShowPbcState(BYTE bVal, WORD wMsg) large 
{ 
  BYTE  bState, bSpeed; 
  BYTE  pbStr[4]; 
  WORD  wMsg2; 
 
#if 0 
  if (wMsg != 0) 
  { 
    vFlIpDrawInfo(IP_INFO_PBC, wMsg, 0); 
  } 
  else 
#endif   
  { 
    bState = bSharedInfo(SI_MP3_MOD); 
    bSpeed = bSharedInfo(SI_PBC_SPEED); 
     
    //if (bMode == SV_PLAY) 
    bVal = pbISOFastDispTbl[bSpeed]; 
    bSpeed = bVal; 
    { 
      pbStr[0] = 2; 
 
      if ((bState == SV_FF) || (bState == SV_FR)) 
      { 
        bVal = bHEXToBCD(bVal); 
        if (BCD_HI(bVal) > 0) 
        { 
          pbStr[1] = BCD_HI(bVal) + '0'; 
        } 
        else 
        { 
          pbStr[1] = ' '; 
        } 
        pbStr[2] = BCD_LO(bVal) + '0'; 
      } 
#if ((!defined DISABLE_SF) && (!defined DISABLE_SR))    
      else if ((bState == SV_SF) || (bState == SV_SR)) 
      { 
        bVal = bHEXToBCD(bVal); 
        if (BCD_HI(bVal) > 0) 
        { 
          pbStr[1] = BCD_HI(bVal) + '0'; 
          pbStr[2] = BCD_LO(bVal) + '0'; 
        } 
        else 
        { 
          pbStr[1] = BCD_LO(bVal) + '0'; 
          pbStr[2] = ' '; 
        } 
      } 
#endif       
      else 
      { 
        pbStr[0] = 0; 
      } 
      //vGetPbcStateMsg(bMode, pbISOFastDispTbl[bSpeed], &wMsg, pbStr); 
      vGetPbcStateMsg(bState, bSpeed, &wMsg2, pbStr); 
      vFlIpDrawInfo(IP_INFO_PBC, wMsg2, pbStr); 
    } 
  } 
} 
 
static void vFlIpShowUsrAuxCtrl(BYTE bMode) large 
{ 
  WORD  wMsg; 
 
  switch (bMode) 
  { 
    case SV_REPEAT_SET_A: 
      wMsg = OSD_MSG_ICON_RPT_A; 
      break; 
    case SV_REPEAT_LAST_SP: 
    case SV_REPEAT_INSTANT: 
    case SV_REPEAT_AB: 
      wMsg = OSD_MSG_ICON_RPT_AB; 
      break; 
    case SV_REPEAT_NONE: 
    case SV_REPEAT_ABNONE: 
      vFlIpClearInfoArea(IP_INFO_USR_AUX_CTRL); 
      return; 
  } 
   
  vFlIpDrawInfo(IP_INFO_USR_AUX_CTRL, wMsg, 0); 
} 
 
#if 0 
void vFlIpShowKeyShift(BYTE bShift) large 
{ 
  char  cTmp; 
  BYTE  pbStr[4]; 
 
  //cTmp = (char) bShift; 
  cTmp = _rAudioCtrl.cCurKey; 
  if (cTmp < 0) 
  { 
    pbStr[1] = '-'; 
    cTmp = - cTmp; 
  } 
  else 
  { 
    pbStr[1] = '+'; 
  } 
  pbStr[0] = bHEXToBCD(cTmp); 
  pbStr[2] = BCD_HI(pbStr[0]) + '0'; 
  pbStr[3] = BCD_LO(pbStr[0]) + '0'; 
  pbStr[0] = 3; 
 
  vFlIpDrawInfo(IP_INFO_KEY_SHIFT, OSD_MSG_SET_KEY, pbStr); 
} 
#endif 
 
/////////////////////////////////////////////////////////////////////////////// 
// Interface 
 
 
void vFlIpClearInfoArea(BYTE bArea) large 
{ 
  BYTE  i; 
 
  switch (bArea) 
  { 
    case IP_INFO_PANEL_1: 
      for (i=IP_INFO_PANEL_1_START; i<=IP_INFO_PANEL_1_END; i++) 
      { 
        if (i == IP_INFO_EQ) 
        { 
          _wStartX = FS_EQ_X; 
          _wStartY = 32; 
          vOsdClearPos(FL_INFO_WB, 200, 32); 
        } 
        else 
          vOsdPosClear(_rInfoPanelArea[i].wPanelPos[0]); 
      } 
      break; 
      
    case IP_INFO_PANEL_2: 
      for (i=IP_INFO_PANEL_2_START; i<=IP_INFO_PANEL_2_END; i++) 
      { 
        vOsdPosClear(_rInfoPanelArea[i].wPanelPos[1]); 
      } 
      break; 
     
    default: 
      if (_bFlIpState == IP_STATE_PANEL_1) 
        vOsdPosClear(_rInfoPanelArea[bArea].wPanelPos[0]); 
      else // if (_bFlIpState == IP_STATE_PANEL_2) 
        vOsdPosClear(_rInfoPanelArea[bArea].wPanelPos[1]); 
      break; 
  } 
} 
 
#ifdef PLAYER_SURROUND 
static code WORD _pwReverbModeMsg[AUD_REVERB_MODE_MAX + 1] = { // include OFF 
  /* 00 */ OSD_MSG_OFF, 
  /* 01 */ OSD_MSG_CONCERT, 
  /* 02 */ OSD_MSG_LIVING_ROOM, 
  /* 03 */ OSD_MSG_HALL, 
  /* 04 */ OSD_MSG_BATHROOM, 
  /* 05 */ OSD_MSG_CAVE, 
  /* 06 */ OSD_MSG_ARENA, 
  /* 07 */ OSD_MSG_CHURCH 
}; 
#endif 
 
void vFlIpShowInfo(BYTE bInfo, BYTE bParam, WORD wParam) large 
{ 
  BYTE  bType; 
 
  switch (bInfo) 
  { 
    case IP_INFO_PLAYTIME: 
      vFlIpShowTimeRemain(bParam, bLoByte(wParam)); 
      break; 
    case IP_INFO_TOTALTIME: 
      vFlIpShowTotalTime(bParam, bLoByte(wParam)); 
      break; 
    case IP_INFO_FILE_INDEX: 
      vFlIpShowFileIndex(wParam, IP_INFO_FILE_INDEX); 
      break; 
      break;     
    case IP_INFO_BITRATE: 
      vFlIpShowBitrate(wParam); 
      break; 
    case IP_INFO_PBC: 
      vFlIpShowPbcState(bParam, wParam); 
      break; 
    case IP_INFO_USR_AUX_CTRL: 
      vFlIpShowUsrAuxCtrl(bParam); 
      break; 
    case IP_INFO_VOLUME: 
      vFlIpShowVolume(bParam, bLoByte(wParam)); 
      break; 
    case IP_INFO_EQ: 
#ifdef SPTM_SUPPORT 
      vFlIpShowEq(); 
#endif 
      break; 
 
      case IP_INFO_LIST_TYPE: 
        vFlIpShowListType(bParam); 
        break; 
      case IP_INFO_KEY_SHIFT: 
        //vFlIpShowKeyShift(bParam); 
        break; 
      case IP_INFO_RPT_TYPE: 
        vFlIpShowRptType(bParam); 
        break; 
      case IP_INFO_REVERB: 
#ifdef PLAYER_SURROUND 
        /* 
        bType = bEepromReadByte(REVERB_MD_POS) + 1;   // !!! 
        bType--;                                      // !!! if we use bType directly, its value will be wrong???!!! 
        vFlIpDrawInfo(IP_INFO_REVERB, _pwReverbModeMsg[bType], 0); 
        */ 
        if (wParam != 0) 
          vFlIpDrawInfo(IP_INFO_REVERB, wParam, 0); 
        else 
          vFlIpDrawInfo(IP_INFO_REVERB, _pwReverbModeMsg[bParam], 0); 
#endif 
        break; 
 
    case IP_INFO_FILE_INDEX_0: 
    case IP_INFO_FILE_INDEX_1: 
    case IP_INFO_FILE_INDEX_2: 
    case IP_INFO_FILE_INDEX_3: 
    case IP_INFO_FILE_INDEX_4: 
    case IP_INFO_FILE_INDEX_5: 
      vFlIpShowFileIndex(wParam, bInfo); 
      break; 
 
    case IP_INFO_ERROR: 
      vFlIpDrawInfo(IP_INFO_ERROR, wParam, 0); 
      break;     
       
    case IP_INFO_CHG_LANG: 
      vFlIpDrawInfo(IP_INFO_CHG_LANG, wParam, 0); 
      break; 
       
    case IP_INFO_DISC_TYPE:  
#ifdef RS232_LOG 
  DBGLogS(" show disc type "); 
  DBGLogB(bSharedInfo(FL_CMD_BLK_SA + 2),0xff,0xff,0xff); 
  DBGLogS("\n"); 
#endif     
      if(bSharedInfo(SI_A_CODE_MODE) == SV_A_CODE_PCM) 
      { 
        vFlIpDrawInfo(IP_INFO_DISC_TYPE, OSD_MSG_CD, 0); 
      }     
#ifdef HDCD_EN           
      else if((bSharedInfo(SI_A_CODE_MODE) == SV_A_CODE_HDCD) || //according to track 
         (bSharedInfo(SI_FS_DISC_TYPE) == SV_A_CODE_HDCD))   //according to disc 
      {     
        vFlIpDrawInfo(IP_INFO_DISC_TYPE, OSD_MSG_HDCD, 0); 
      } 
#endif       
#ifdef CDDA_USE_CDFS 
      else if (_fgDTSCD)  //if(bSharedInfo(FL_CMD_BLK_SA + 2) == FTYPE_DTS) 
      { 
        vFlIpDrawInfo(IP_INFO_DISC_TYPE, OSD_MSG_DTS_CD, 0); 
      }  
#endif 
      break; 
      
  } 
} 
 
 
#if 0 
 
void vFlIpShowFileType(BYTE bType) large 
{ 
  switch(bSharedInfo(SI_ISO_ITEM_TYPE)) 
  { 
    case SV_ISO_MP3: 
      break; 
    case SV_ISO_AC3: 
      break; 
    case SV_ISO_DTS: 
      break; 
    case SV_ISO_MLP: 
      break; 
    case SV_ISO_WMA: 
      break; 
    case SV_ISO_WAV: 
      break; 
    case SV_ISO_MPEGA: 
      break; 
    case SV_ISO_AAC: 
      break; 
    case SV_ISO_DSD: 
      break; 
  } 
} 
 
 
#endif 
 
#else  // #if (defined(FSMENU_INFO_PANEL) && defined(PLAYER_FLMENU)) 
 
static code BYTE pbISOFastDispTbl[] = { 0 }; 
static code BYTE pbISOSlowDispTbl[] = { 0 }; 
 
typedef struct sInfoPanelArea 
{ 
  WORD  wPanelPos[2]; 
  BYTE  bTimeout[2]; 
}; 
 
static code struct sInfoPanelArea _rInfoPanelArea[1] = 
{ 
  {0, 0, 0, 0} 
}; 
 
 
#endif  // #if (defined(FSMENU_INFO_PANEL) && defined(PLAYER_FLMENU))