www.pudn.com > dv981-hd.rar > COMBINE.C


/**********************************************************************/ 
/***************    MTK CONFIDENTIAL & COPYRIGHTED     ****************/ 
/***************                                       ****************/ 
/***************  $Modtime:: 03/10/20 3:31p    $       ****************/ 
/***************  $Revision: 5.0 $       ****************/ 
/***************                                       ****************/ 
/***************   Description : Key-Combine State     ****************/ 
/***************                 Machine               ****************/ 
/***************                                       ****************/ 
/***************       Company : MediaTek Inc.         ****************/ 
/***************    Programmer : Sung-Ching Lin        ****************/ 
/**********************************************************************/ 
#define _COMBINE_C_ 
 
#pragma NOAREGS 
#include "general.h" 
#include "posi.h" 
 
//#define COMBINE_DEBUG 
#ifdef COMBINE_DEBUG 
extern void DRS232LogS(char *pcStr); 
extern void DRS232LogB(BYTE bV1, BYTE bV2, BYTE bV3, BYTE bV4); 
#endif 
 
#ifdef MP3_AUTO_PLAY 
 extern BYTE xdata  IsoFileCmdTimer; 
 extern BYTE xdata  IsPureMp3Mode; 
 #endif	 
#ifdef DRMFIX    
extern xdata DWRD _dCreatedWB; 
#endif 
 
#ifdef FIL2300_DVI 
  extern BYTE xdata PNDELAY; 
#endif 
#ifdef HDMI_PROC_IN_8032 
//  extern BYTE xdata _bhdmistate; 
  extern BYTE xdata _bHdmiCheckWithDvd; 
	#endif 
extern BYTE bSetReverbMd(WORD wEEPos, BYTE bValue) large; 
extern BYTE bSetEqPreset(WORD wEEPos, BYTE bValue) large; 
// ********************************************************************* 
// Static Function Prototype 
// ********************************************************************* 
static void vShowDiscType(BYTE bDiscType) large; 
 
/************************************************************************ 
     Function : void vSetPlayType(BYTE bType) 
  Description : 8032 play type define, set play type dependant setting 
    Parameter : None 
    Return    : None 
************************************************************************/ 
void vSetPlayType(BYTE bType) large 
{ 
#ifdef MP3_AUTO_PLAY 
   IsoFileCmdTimer = 0x00; 
   IsPureMp3Mode = FALSE; 
#endif	 
	 
#ifdef MT1379_MANUFACTURE_TEST  
	 
	  vWBDisable(WB_SELMENU); 
 
       #ifdef RS232_LOG 
    	DRS232LogS("PlayType"); 
       DRS232LogB(bType,0,0,0); 
	#endif  
 
	if ((bType != SV_DVD_VIDEO) && (bType != SV_DATA)) 
	{ 
		vOsdShowTestInfo(5); 
		_bPlayPostKey=IR_EJECT; 
		return; 
	} 
	else 
	{ 
		if (fgCheckIfTested()) 
		{ 
			_bPlayPostKey=IR_EJECT; 
			return; 
		} 
 
	} 
	 
#endif 
 
  switch (bType) 
  { 
    case SV_DVD_VIDEO: 
    case SV_DVD_AUDIO: 
    case SV_MINI_DVD: 
    { 
#ifdef DVD_DISC_ID_CHK 
      if (!fgIsDiscInitChecked()) 
      { 
        return; 
      } 
      else 
#endif 
      { 
        _bPlayType = PLAY_TYPE_DVD; 
        vSetKeyState(KEY_NONISO); 
        if ( fgIsInSetupMenu() ) 
        { 
          vSetKeyState(KEY_SETUP);      
        } 
        vDVDInit(bType); 
      } 
      break; 
    } 
 
    case SV_SVCD: 
    case SV_CVD: 
    case SV_VCD3_0: 
    case SV_VCD2_0: 
    case SV_VCD1_1: 
    case SV_VCD6_0: 
    case SV_VCD6_1: 
    { 
#ifdef VCD_DISC_ID_CHK 
      if (!fgIsDiscInitChecked()) 
      { 
        return; 
      } 
      else 
#endif 
      { 
        _bPlayType = PLAY_TYPE_VCD; 
        vSetKeyState(KEY_NONISO);         
        if ( fgIsInSetupMenu() ) 
        { 
          vSetKeyState(KEY_SETUP);      
        } 
        vVCDInit(bType); 
      } 
      break; 
    } 
 
#ifdef SUPPORT_DATA_DISC 
    case SV_DATA: 
    { 
#ifdef ISO_DISC_ID_CHK 
      if (!fgIsDiscInitChecked()) 
      { 
        return; 
      } 
      else 
#endif 
      { 
        _bPlayType = PLAY_TYPE_ISO; 
        vSetKeyState(KEY_ISO); 
        if ( fgIsInSetupMenu() ) 
        { 
          vSetKeyState(KEY_SETUP);      
        }    
				 
#ifdef MP3_AUTO_PLAY 
  #ifdef SUPPORT_THAI 
       if(IS_SACD_MP3_TYPE()) 
       { 
         IsoFileCmdTimer = 0x00; 
       } 
			 else if(fgIsIsoPlay() && fgIsIsoItemAV(bSharedInfo(SI_ISO_ITEM_TYPE))) 
			 { 
         IsoFileCmdTimer = 0x00; 
			 } 
			 else 
			 { 
			   IsoFileCmdTimer = 0x60; 
			 } 
  #else 
        IsoFileCmdTimer = 0x60; 
  #endif 
#endif 
        vISOInit(bType); 
      } 
      break; 
    } 
 
    case SV_PCD: 
    { 
#ifdef PCD_DISC_ID_CHK 
      if (!fgIsDiscInitChecked()) 
      { 
        return; 
      } 
      else 
#endif 
      {       
        _bPlayType = PLAY_TYPE_PCD; 
        vSetKeyState(KEY_ISO); 
        if ( fgIsInSetupMenu() ) 
        { 
          vSetKeyState(KEY_SETUP);      
        }         
        vPCDInit(bType); 
      } 
      break; 
    } 
#endif /* SUPPORT_DATA_DISC */ 
 
    case SV_DTS_CS: 
    case SV_CDDA: 
    case SV_SACD: 
    case SV_CDG: 
    case SV_HDCD: 
    { 
#ifdef CDDA_DISC_ID_CHK 
      if (!fgIsDiscInitChecked()) 
      { 
        return; 
      } 
      else 
#endif 
      {      
        _bPlayType = PLAY_TYPE_CDDA; 
        vSetKeyState(KEY_NONISO);           
        if ( fgIsInSetupMenu() ) 
        { 
          vSetKeyState(KEY_SETUP);      
        } 
        vCDDAInit(bType); 
      } 
      break; 
    } 
 
    case SV_AUDIO_IN: 
    { 
      _bPlayType = PLAY_TYPE_AIN; 
      vSetKeyState(KEY_NONISO);           
      if ( fgIsInSetupMenu() ) 
      { 
        vSetKeyState(KEY_SETUP);      
      } 
      vAINInit(bType); 
      break; 
    } 
 
    default: 
    { 
      vSetKeyState(KEY_INIT);               
             
      if ( fgIsInSetupMenu() ) 
      { 
        vSetKeyState(KEY_SETUP);      
      } 
        
       _bPlayType = PLAY_TYPE_NONE; 
      break; 
    } 
  } /* switch (bType) */ 
#if defined(SUPPORT_DVD_AUDIO) && !defined(AUDIO_TYPE_NOT_SAVE) //BillDen  
  if(bType == SV_DVD_AUDIO) 
  { 
    vAdspReverbMode(0); 
    vAdspSurr(AUD_CH_EQ_CTRL, ADSP_OFF); 
    vAdspChEqLoadPreset(0); 
    fgEepromWriteByte(TONE_POS, ZERO_KEY_LEVEL);    //dengsu 0717 
    bToneChange(ZERO_KEY_LEVEL); //BillDen 
  } 
  else 
  { 
    if (_bSurType > AUD_REVERB_MODE_MAX) 
    { 
      _bSurType = 0; 
    } 
    vAdspReverbMode(_bSurType); 
 
    if (_bEqType >= AUD_EQ_TYPE_MAX) 
    { 
      _bEqType = AUD_EQ_TYPE_NONE; 
    } 
 
    if (_bEqType == EV_NONE) 
    { 
      vAdspSurr(AUD_CH_EQ_CTRL, ADSP_OFF); 
    } 
    else 
    { 
      vAdspSurr(AUD_CH_EQ_CTRL, ADSP_ON); 
    } 
 
    vAdspChEqLoadPreset(_bEqType); 
//BillDen bg 
    fgEepromWriteByte(TONE_POS, ZERO_KEY_LEVEL); 
    bToneChange(bEepromReadByte(TONE_POS)); 
//BillDen end 
  } 
#endif 
 
   if(bType == SV_DTS_CS             //TONE 
         #ifdef SUPPORT_DVD_AUDIO 
           || bType == SV_DVD_AUDIO 
         #endif 
   ) 
   { 
      fgEepromWriteByte(TONE_POS, ZERO_KEY_LEVEL); 
      bToneChange(ZERO_KEY_LEVEL); 
   } 
    
   if(bType == SV_DTS_CS         //EQ SURROUND 
   #ifdef SUPPORT_DVD_AUDIO 
   || bType == SV_DVD_AUDIO 
   #endif 
   ) 
 { 
  #ifdef AUDIO_TYPE_NOT_SAVE 
     if(_bEqType) 
     { 
             _bEqType = 0; 
             bSetEqPreset(0, 0); 
     } 
     if(_bSurType) 
     { 
        _bSurType = 0; 
        bSetReverbMd(0,0);           
     } 
  #else 
     if(bEepromReadByte(EQ_PRESET_POS) != EV_NONE) 
     { 
             fgEepromWriteByte(EQ_PRESET_POS, 0); 
             bSetEqPreset(0,0); 
     } 
     if(bEepromReadByte(REVERB_MD_POS) != EV_NONE) 
     { 
             fgEepromWriteByte(REVERB_MD_POS, 0); 
             bSetReverbMd(0,0);      
     } 
//    } 
  #endif 
     
 } 
  
 
#ifdef SUPPORT_SACD 
if(IS_SACD_MP3_TYPE()) 
{ 
    vAdspReverbMode(0); 
    vAdspSurr(AUD_CH_EQ_CTRL, ADSP_OFF); 
    vAdspChEqLoadPreset(0); 
   #ifdef BBK// TONE_IN_SETUP 
       #ifndef TONE_IN_SETUP  
       _rAudioCtrl.cCurKey = ZERO_KEY_LEVEL; 
	 #endif 
      fgEepromWriteByte(TONE_POS, ZERO_KEY_LEVEL); 
      bToneChange(ZERO_KEY_LEVEL); 
   #endif 
} 
#endif 
#if 0//defined(OPPO) || defined(OPDV971HBES) || defined(DV971TH) 
  if(bType == SV_DVD_AUDIO) 
  { 
    vAdspReverbMode(0); 
    vAdspSurr(AUD_CH_EQ_CTRL, ADSP_OFF); 
    vAdspChEqLoadPreset(0); 
    fgEepromWriteByte(TONE_POS, ZERO_KEY_LEVEL);    //dengsu 0717 
    bToneChange(ZERO_KEY_LEVEL); //BillDen 
  } 
  else 
  { 
    #ifdef TONE_IN_SETUP 
    bToneChange(bEepromReadByte(TONE_POS)); 
    #else 
    bToneChange(_rAudioCtrl.cCurKey); 
    #endif 
  } 
#endif 
 
  vOsdDisplayChange(DISP_INIT, 0); 
 
#ifdef DISC_IDENT_AUTO_MUTE_OFF 
  if (_bPlayType != PLAY_TYPE_NONE) 
  { 
    if (fgIsMute()) // if mute on 
    { 
      vAdspMute(ADSP_OFF, 0); 
      vOsdShowMute(OSD_MUTE_CLEAR); 
    } 
  } 
#endif 
 
if(bEepromReadByte(SP_LCD_POSITION) == EV_LANG_OFF) 
vSystemPrefSpLang(0x0, 0x0);  //tide 
 
if(bEepromReadByte(ASPECT_POSITION) == SV_WIDESQZ ) 
 vSystemTvMode(SV_WIDESQZ);  //tide 
 
  vShowDiscType(bType); 
} 
 
/************************************************************************ 
     Function : void vClearPlayType(void) 
  Description : Clear play type related setting 
    Parameter : None 
    Return    : None 
************************************************************************/ 
void vClearPlayType(void) large 
{ 
  if (fgIsDvdPlay()) 
  { 
    vDVDExit(); 
  } 
  else if (fgIsVcdPlay()) 
  { 
    vVCDExit(); 
  } 
#ifdef SUPPORT_DATA_DISC 
  else if (fgIsIsoPlay()) 
  { 
    vISOExit(); 
  } 
  else if (fgIsPcdPlay()) 
  { 
    vPCDExit(); 
  } 
#endif /* SUPPORT_DATA_DISC */ 
  else if (fgIsCddaPlay()) 
  { 
    vCDDAExit(); 
  } 
  else if (fgIsAinPlay()) 
  { 
    vAINExit(); 
  } 
 
  _bPlayType = PLAY_TYPE_NONE; 
  vSetKeyState(KEY_INIT);   
   
  if (fgIsInSetupMenu()) 
  { 
    vSetKeyState(KEY_SETUP);      
  } 
} 
 
#ifdef AUDIO_IN_EN 
// ********************************************************************* 
// Function : void vPlayerFuncSwitch(BYTE bMode) large 
// Description : 
// Parameter : None 
// Return    : None 
// ********************************************************************* 
void vPlayerFuncSwitch(BYTE bMode) large 
{ 
  if (_fgNotify == FALSE) // system init stage 
  { 
    if (bMode == PLAYER_FUNC_AIN) 
    { 
      _bPlayerFuncMode = PLAYER_FUNC_AIN; 
    } 
    else /* if (bMode == PLAYER_FUNC_DVD) */ 
    { 
      _bPlayerFuncMode = PLAYER_FUNC_DVD; 
    } 
  } 
  else // system run stage 
  { 
    if (bMode == PLAYER_FUNC_AIN) 
    { 
      if (fgIsFuncAin() == FALSE) 
      { 
        vPlayerReset(); 
   
        _bPlayerFuncMode = PLAYER_FUNC_AIN; 
   
        vSendUopCmd(UOP_OPEN_CLOSE, SV_PSEUDO_OPEN, 0, 0); 
   
        _bUISrvStatus = PLAYER_SRV_STOP; 
         
        if (_bDiscLoadSt >= DISC_LOAD_STARTUP) 
        { 
          _fgSkipSrvStart = TRUE; 
        } 
      } 
    } 
    else /* if (bMode == PLAYER_FUNC_DVD) */ 
    { 
      if (fgIsFuncDvd() == FALSE) 
      { 
        vPlayerReset(); 
   
        _bPlayerFuncMode = PLAYER_FUNC_DVD; 
   
        vSendUopCmd(UOP_OPEN_CLOSE, SV_PSEUDO_CLOSE, 0, 0); 
      } 
    } 
  } 
} 
#endif /* AUDIO_IN_EN */ 
 
// ********************************************************************* 
// Function : void vPlayerReset(void) large 
// Description : called from playback 
// Parameter : None 
// Return    : None 
// ********************************************************************* 
void vPlayerReset(void) large    //only used when ejecting  
{ 
  BYTE i; 
 
 #ifdef BBK_LAST_MEMORY 
  _fgPlayFromMemory = FALSE; 
#endif 
  
  /* check setup menu exist moved to WB reset */ 
 
  // clear play type, call every play module exit function 
  vClearPlayType(); 
 
  // reset player timer beep count 
#if (defined(DVD_MENU_UPDATE_VFD_CIRCLE) || defined(JPEG_DECODING_UPDATE_VFD_CIRCLE)) 
  _bPlayerTimerBeepCnt = PLAYER_TIMER_BEEP_PERIOD*2; 
#else 
  _bPlayerTimerBeepCnt = PLAYER_TIMER_BEEP_PERIOD; 
#endif 
 
  // reset display mode 
  vOsdShowWb(OSD_WB_RESET); 
 
  // reset zoom indicator flag 
  _rOsdStateCtx.fgZoomBrShow = FALSE; 
 
  // reset EQ state 
  _rEqState.bDispType = OSD_EQ_TYPE_DISABLE; 
 
  // reset input state 
  vResetInputState(); 
 
  // for RISC communication states 
  _bLastSyncUop = UOP_NONE; 
  _bLastPbcState = SV_PBC_INIT; 
 
  // reset osd state 
  vOsdDisplayChange(DISP_INIT, 0); 
 
  // reset search state 
  _rSearchStateCtx.bType = SEARCH_NONE; 
 
  // reset program state 
  vSelMenuReset(); 
 
  // this is play type dependant 
#ifdef PLAYER_KARAOKE 
  if (bAdspCurrVocal() != VOCAL_NO_ASSIST) 
  { 
    vAdspVocalAssist(VOCAL_NO_ASSIST); 
  } 
  #ifdef KARAOKE_MIC_REC 
  vMicRecCtrl(MIC_REC_CTRL_RESET); 
  #endif 
#else /* not define PLAYER_KARAOKE */ 
  if (bAdspCurrVocal() != AUDIO_STEREO) 
  { 
    vAdspLR(AUDIO_STEREO); 
  } 
#endif /* PLAYER_KARAOKE */ 
  vAdspReset(); 
 
#if !defined(NO_SM_NOTIFY) 
  SmInit(); 
#endif 
#ifdef SUPPORT_SACD 
  vSetSharedInfo(SI_SACD_TRACK_NS,0);//DENGSU 0623 
#endif 
  // for vocal assist 
#ifdef PLAYER_KARAOKE 
  _fgVocalOn = FALSE; 
#endif 
 
#ifdef AUDIO_STREAM_CHANGE_MUTE 
  _fgAstChg = FALSE; 
#endif 
} 
 
/************************************************************************ 
     Function : 
  Description : This function must be moved to screen saver moudle 
    Parameter : 
    Return    :  = 0 -> screen saver not allowed 
                 > 0 -> screen saver allowed 
************************************************************************/ 
BOOL fgScrSaverCheck(void) large 
{ 
  BYTE bInitState = bSharedInfo(SI_INIT_STATE); 
  BYTE bPbcState = bSharedInfo(SI_PBC_STATE); 
 
  switch (bInitState) 
  { 
    case SV_LOADING_DISC: 
    case SV_TRAY_CLOSING: 
    case SV_TRAY_ERROR: 
      return (FALSE); /* not allowed */ 
 
    case SV_TRAY_OPENING: 
    case SV_NO_DISC: 
    case SV_UNKNOWN_DISC: 
      return (TRUE); /* allowed */ 
 
    case SV_DISC_IDENTIFIED: 
    default: 
      break; /* not determined */ 
 
  } 
  switch (bPbcState) 
  { 
    case SV_PAUSE: 
    case SV_STEP: 
    case SV_STEP_BACK: 
#ifdef PLAYER_GOTO //BillDen 
      if (fgIsInGoto()) 
        return (FALSE); /* not allowed */ 
#endif       
    case SV_STOP: 
    case SV_STOP_RESUME: 
    case SV_SETUP_PAUSE: 
    case SV_PTL_ERR: 
    case SV_REGION_ERR: 
    case SV_DISC_ERR: 
    case SV_SET_TMP_PTL: 
      return (TRUE); /* allowed */ 
 
    case SV_PLAY: 
    case SV_FF: 
    case SV_SF: 
    case SV_FR: 
    case SV_SR: 
    case SV_FREEZE: 
    case SV_DIGEST9: 
    case SV_DIGEST4: 
    case SV_PBC_INIT: 
      return (FALSE); /* not allowed */ 
 
    case SV_DIGEST: 
    case SV_STILL: 
#ifdef SUPPORT_DATA_DISC 
      if (fgIsIsoPlay() || fgIsPcdPlay()) 
      { 
        //if (fgFsMenuIsDecoding() == FALSE) 
        if (fgFlCheckStatus(FL_STATUS_BUSY) == FALSE) 
        { 
          /* if not decoding, allowed */ 
          return (TRUE); 
        } 
        else 
        { 
          /* if is decoding, not allowed */ 
          return (FALSE); 
        } 
      } 
      else 
      { 
        /* DVD/VCD is not allowed in still mode */ 
        return (FALSE); 
      } 
      break; 
#endif /* SUPPORT_DATA_DISC */ 
    default: 
      break; /* not determined */ 
  } 
 
  return (FALSE); /* default is not allowed */ 
} 
 
#ifdef PLAYER_STOP_SRV_STOP 
/************************************************************************ 
     Function : 
  Description : 
    Parameter : 
    Return    :  = 0 -> servo stop is not allowed 
                 > 0 -> servo stop is allowed 
************************************************************************/ 
BOOL fgSrvStopCheck(void) large 
{ 
  BYTE bInitState = bSharedInfo(SI_INIT_STATE); 
  BYTE bPbcState = bSharedInfo(SI_PBC_STATE); 
 
  switch (bInitState) 
  { 
    case SV_LOADING_DISC: 
    case SV_TRAY_CLOSING: 
    case SV_TRAY_OPENING: 
    case SV_TRAY_ERROR: 
    case SV_NO_DISC: 
      return (FALSE); /* not allowed */ 
 
    case SV_UNKNOWN_DISC: 
      return (TRUE); /* allowed */ 
 
    case SV_DISC_IDENTIFIED: 
    default: 
      break; /* not determined */ 
 
  } 
 
  #if (STOP_RESUME_STYLE == STOP_RESUME_TWO_KEYS) 
  if (bPbcState == SV_STOP_RESUME) 
  { 
    bPbcState = SV_STOP; 
  } 
  #endif 
 
  if (fgIsIsoPlay() || fgIsPcdPlay()) 
  { 
    if (fgFlCheckStatus(FL_STATUS_BUSY) == FALSE) 
    { 
      /* if not decoding, allowed */ 
      return (TRUE); 
    } 
    else 
    { 
      /* if is decoding, not allowed */ 
      return (FALSE); 
    } 
  } 
 
  switch (bPbcState) 
  { 
    case SV_STOP: 
      if (_bLastSyncUop == UOP_STOP) 
      { 
        /* clear _bLastSyncUop flag immediately */ 
        _bLastSyncUop = UOP_NONE; 
        /* change to stop state due to previous UOP command */ 
        return (TRUE); /* allowed */ 
      } 
      else if (fgIsUopUpdate() && (bSharedInfo(SI_UOP_RET_VAL) == SV_NO_ERROR)) 
      { 
        /* any key changed to stop state */ 
        return (TRUE); /* allowed */ 
      } 
      else if (_bLastPbcState == SV_PBC_INIT) 
      { 
        return (TRUE); 
      } 
      else 
      { 
        return (FALSE); /* not allowed */ 
      } 
 
    case SV_STOP_RESUME: 
    case SV_PAUSE: 
    case SV_STEP: 
    case SV_STEP_BACK: 
    case SV_PTL_ERR: 
    case SV_REGION_ERR: 
    case SV_DISC_ERR: 
    case SV_SET_TMP_PTL: 
    case SV_PLAY: 
    case SV_FF: 
    case SV_SF: 
    case SV_FR: 
    case SV_SR: 
    case SV_FREEZE: 
    case SV_DIGEST9: 
    case SV_DIGEST4: 
    case SV_DIGEST: 
    case SV_STILL: 
      /* DVD/VCD is not allowed in still mode */ 
      return (FALSE); 
 
    default: 
      break; /* not determined */ 
  } 
 
  return (FALSE); /* default is not allowed */ 
} 
#endif /* PLAYER_STOP_SRV_STOP */ 
 
/************************************************************************ 
     Function : 
  Description : 
    Parameter : 
    Return    : 
************************************************************************/ 
void vShowInitState(BYTE bInitState) large 
{ 
  BYTE bTmp; 
  BYTE bDiscType = bSharedInfo(SI_DISC_TYPE); 
 
#ifdef  SETMODEL_DVDA_UNSUPPORT   //Tide 
if(bDiscType == SV_DVD_AUDIO && bInitState == SV_DISC_IDENTIFIED) 
{ 
   vSetSharedInfo(SI_DISC_TYPE, 0xff); 
   vSetSharedInfo(SI_INIT_STATE,SV_UNKNOWN_DISC); 
   bDiscType = 0xff; 
   bInitState = SV_UNKNOWN_DISC; 
   vPlayerShowLogo(DVD_STOP_LOGO, DVD_LOGO_COLOR); 
   vVfdMessage(VFD_MESSAGE_UN_DISC); 
   _bPlayPostKey = IR_EJECT;  
} 
#endif 
 
  /* show or clear ICON/message first */ 
  vOsdShowInitState(bInitState); 
 
  switch (bInitState) 
  { 
    case SV_LOADING_DISC: 
#ifdef AUDIO_IN_EN 
      if (fgIsAinPlay()) 
      { 
        vClearPlayType(); 
      } 
#endif /* AUDIO_IN_EN */ 
    #ifdef HDMI_PROC_IN_8032 
	 vNotifySharedInfo(SI_EDGE_EN, 0 ,0); 
	#endif 
      break; 
 
    case SV_TRAY_OPENING: 
#ifdef AUDIO_IN_EN 
      if (fgIsAinPlay()) 
      { 
        vClearPlayType(); 
      } 
#endif /* AUDIO_IN_EN */ 
      /* the vPlayerReset() has been moved to eject key routine */ 
      //reset video when tray out 
#ifdef RESET_VDO_TRAY_OUT 
      vResetVdoPage(); 
#endif 
#ifdef EEPROM_LASTMEM_EJECT_WR_BACK 
      if (_rOsdStateCtx.fgLastMemWrBack == TRUE) 
      { 
        bTmp = bSharedInfo(SI_LASTMEM_NS); 
        if (bTmp > 0) 
        { 
          vSendPeriCmd(MISC_CMD_EEPROM_SVC, EEPROM_CMD_WR_SLOT, bTmp - 1); 
        } 
        _rOsdStateCtx.fgLastMemWrBack = FALSE; 
      } 
#endif /* EEPROM_LASTMEM_EJECT_WR_BACK */ 
#ifdef HDMI_PROC_IN_8032 
          _bHdmiCheckWithDvd = 0xff; 
//        if(_bhdmistate == HDMI_STATE_DEBUG) 
//	   	_bhdmistate = HDMI_STATE_INIT; 
 #endif 
      break; 
 
    case SV_TRAY_CLOSING: 
      #ifdef DRMFIX    
       if ((_dCreatedWB>>8) | 0x10) 
         { 
		vDRMDisRgCdExitState(); 
          } 
       #endif 
      vClearPlayType(); 
      break; 
 
    case SV_TRAY_ERROR: 
      break; 
 
    case SV_NO_DISC: 
#ifdef AUDIO_IN_EN 
      if (fgIsFuncAin()) 
      { 
        vSetPlayType(SV_AUDIO_IN); 
      } 
#endif /* AUDIO_IN_EN */ 
#ifdef HDMI_PROC_IN_8032 
          _bHdmiCheckWithDvd = 0xff; 
//        if(_bhdmistate == HDMI_STATE_DEBUG) 
//	   	_bhdmistate = HDMI_STATE_INIT; 
 #endif 
   break; 
 
    case SV_UNKNOWN_DISC: 
    if(bSharedInfo(SI_INIT_STATE) == SV_UNKNOWN_DISC) 
    { 
         vPlayerShowLogo(SV_LOGO_FLASH, DVD_LOGO_COLOR); 
    } 
#ifdef HDMI_PROC_IN_8032 
          _bHdmiCheckWithDvd = 0xff; 
//        if(_bhdmistate == HDMI_STATE_DEBUG) 
//	   	_bhdmistate = HDMI_STATE_INIT; 
 #endif 
      break; 
 
    case SV_DISC_IDENTIFIED: 
#ifdef EN_DISC_ID_CHK 
      vSetDiscInitFlag(DISC_INIT_DISC_TYPE); 
      if (fgIsDiscInitFinished()) 
      { 
        vSendPeriCmd(MISC_CMD_EEPROM_SVC, EEPROM_CMD_CHK_DISC_ID, 0); 
      } 
#else 
      /* always assume RISC notify disc type first */ 
      vSetPlayType(bDiscType); 
#ifdef SPECTRUM_IN_SETUP //BillDen 
      if(bEepromReadByte(SPECTRUM_POSITION) != EV_OFF) 
      { 
	if (!fgIsNonPlay() && !fgIsIsoPlay() && !fgIsPcdPlay() && !fgIsInSetupMenu() 
#ifdef SUPPORT_DVD_AUDIO	 
        && bSharedInfo(SI_DISC_TYPE) != SV_DVD_AUDIO 
#endif 
	) 
	  bShowEq(OSD_EQ_TYPE_GRID); 
      } 
#endif 
#endif 
 
#ifdef FIL2300_DVI 
  if(bSharedInfo(SI_TV_SYSTEM) == SV_AUTO) 
  { 
	  PNDELAY = 0x88;   //0922 
#if defined(OPDV972_BES) || defined(THAI981) || defined(ELM981) 
    vSetSharedInfo(SI_TV_SYSTEM, SV_PAL); 
#else	 
    vSetSharedInfo(SI_TV_SYSTEM, SV_NTSC); 
#endif 
 
		vNotifySharedInfo(SI_TV_SYSTEM, 0, 0);	  
  } 
#endif 
 
#ifdef HDMI_PROC_IN_8032 
          _bHdmiCheckWithDvd = 0xff; 
//        if(_bhdmistate == HDMI_STATE_DEBUG) 
//	   	_bhdmistate = HDMI_STATE_INIT; 
 #endif 
      break; 
 
    default: 
      break; 
  } 
 
  if (bInitState != SV_DISC_IDENTIFIED) 
  { 
    vAdspAudioTypeChange(bSharedInfo(SI_A_CODE_MODE), 0xff, bInitState); 
  } 
 
#ifdef AUDIO_IN_EN 
  if (bInitState == SV_DISC_IDENTIFIED) 
  { 
    if (_bDiscLoadSt == DISC_LOAD_TOC) 
    { 
      _bDiscLoadSt = DISC_LOAD_IDENT; 
    } 
  } 
  else if ((bInitState == SV_DISC_IDENTIFIED) || (bInitState == SV_DISC_IDENTIFIED)) 
  { 
    if (_bDiscLoadSt >= DISC_LOAD_STARTUP) 
    { 
      _bDiscLoadSt = DISC_LOAD_IDENT; 
    } 
  } 
#endif /* AUDIO_IN_EN */ 
 
#ifdef PLAYER_STOP_SRV_STOP 
  if (bInitState == bSharedInfo(SI_INIT_STATE)) 
  { 
    if (fgSrvStopCheck() == TRUE) /* for unknown disc */ 
    { 
      _bUISrvStatus = PLAYER_SRV_STOP; 
    } 
  } 
#endif /* PLAYER_STOP_SRV_STOP */ 
} 
 
/************************************************************************ 
     Function : 
  Description : 
    Parameter : 
    Return    : 
************************************************************************/ 
void vShowPbcState(BYTE bPbcState) large 
{ 
  BYTE bTmp; 
  WORD wFileNo; 
#ifdef BBK //BillDen 
  WORD wBsDir; 
  extern xdata BYTE _bFlMnListId;//leguo 
#endif 
 
  switch (bPbcState) 
  { 
    case SV_STOP: 
 
      vVfdMessageClr(); 
#ifdef BBK //BillDen       
      vVfdRotate(VFD_DISC_LIGHT_ALL); 
#else       
      vVfdRotate(VFD_DISC_LIGHT_OFF); 
#endif 
      vVfdMessage(VFD_MESSAGE_STOP); 
      vVfdClrAudInfo(); 
      vVfdSymbol(VFD_SYM_STOP); 
#ifdef PLAYER_FLMENU    
      // prevent showing stop icon while beginning to repeat  
      if (!fgIsIsoItemAV(bSharedInfo(SI_ISO_ITEM_TYPE)) && !fgFlCheckStatus(FL_STATUS_IN_JPEG)) 
#else 
      if (!fgIsIsoItemAV(bSharedInfo(SI_ISO_ITEM_TYPE))) 
#endif 
      { 
        vOsdShowPbcState(SV_STOP, 0, OSD_NO_DISAPPEAR); 
      } 
      vOsdDisplayChange(DISP_STOP, 0); 
      break; 
 
    case SV_STOP_RESUME: 
      vVfdMessageClr(); 
#ifdef BBK //BillDen       
      vVfdRotate(VFD_DISC_LIGHT_ALL); 
#else       
      vVfdRotate(VFD_DISC_LIGHT_OFF); 
#endif 
#ifdef VFD_MESSAGE_HOLD 
      vVfdMessage(VFD_MESSAGE_HOLD); 
#else 
      vVfdMessage(VFD_MESSAGE_STOP); 
#endif 
      vVfdClrAudInfo(); 
      vVfdSymbol(VFD_SYM_STOP); 
       
      vOsdShowPbcState(SV_STOP_RESUME, 0, OSD_NO_DISAPPEAR); 
      vOsdDisplayChange(DISP_STOP_RESUME, 0); 
      break; 
 
    case SV_PLAY: 
      if(fgIsIsoPlay() && bSharedInfo(SI_ISO_ITEM_TYPE) != SV_ISO_AVI && bSharedInfo(SI_ISO_ITEM_TYPE) != SV_ISO_MPG) 
      { 
        if(fgIsIsoPlay() && bSharedInfo(SI_ISO_ITEM_TYPE) != SV_ISO_DAT) 
      	{ 
          // show file no in VFD 
          wFileNo = GetFileNo();//wFlGetItemIdx(_bFlMnCurItemIdx);//wIsoFileNo(); 
#ifdef BBK //BillDen 
          bLoByte(wBsDir) = bSharedInfo(FL_BBK_LIST_FIELD(_bFlMnListId) + 2); 
          bHiByte(wBsDir) = bSharedInfo(FL_BBK_LIST_FIELD(_bFlMnListId) + 3); 
          if(bSharedInfo(FL_BBK_LIST_FIELD(_bFlMnListId)) == FLPARM_LIST_FOLDER && wBsDir) 
          { 
  #ifdef SUPPORT_SACD   //dengsu 0701 
            if(IS_SACD_MP3_TYPE()) 
            { 
						  wFileNo+=1; 
            } 
  #endif         
            wFileNo = wWRDToBCD(wFileNo); 
          } 
          else 
#endif 
          { 
            wFileNo = wWRDToBCD(wFileNo + 1); /* from 1 ~ Ns */ 
          } 
 
#ifdef VFD_FLD_CH100 
          vVfdWord(VFD_WORD_CH100, bHiByte(wFileNo), 0); /* note already in BCD */ 
#else 
 #ifdef SUPPORT_OGG 
          if(bSharedInfo(SI_ISO_ITEM_TYPE) != SV_ISO_OGG) 
 #endif 
 	        { 
            vVfdWord(VFD_WORD_TT, bHiByte(wFileNo), 0); /* note already in BCD */ 
 	        } 
#endif   
#ifdef SUPPORT_OGG 
          if(bSharedInfo(SI_ISO_ITEM_TYPE) != SV_ISO_OGG) 
#endif 
          { 
            vVfdWord(VFD_WORD_CH, bLoByte(wFileNo), 1); 
          } 
        } 
      }	 
			 
      vOsdShowPbcState(SV_PLAY, 0, OSD_NO_DISAPPEAR); 
 
#ifdef BBK_NEW_FORM//tide 
  #ifndef DTS_NO_DISPLAY 
      if(fgIsIsoPlay() && bSharedInfo(SI_ISO_ITEM_TYPE) == SV_ISO_AVI  && bSharedInfo(SI_PBC_STATE)>SV_STOP && bSharedInfo(SI_A_CODE_MODE) == SV_A_CODE_DTS) 
      { 
        vVfdSymbol(VFD_SYM_A_CODE_DTS); 
      } 
      else  
  #endif 
  	  { 
        if(fgIsIsoPlay() && bSharedInfo(SI_ISO_ITEM_TYPE) == SV_ISO_AVI  && bSharedInfo(SI_PBC_STATE)>SV_STOP && bSharedInfo(SI_A_CODE_MODE) == SV_A_CODE_AC3)  
        { 
          vVfdSymbol(VFD_SYM_A_CODE_AC3); 
        } 
  	  } 
#endif 
	   
      break; 
 
    case SV_FF: 
    case SV_SF: 
    case SV_FR: 
    case SV_SR: 
      vOsdDisplayChange(DISP_TRICK, bPbcState); 
      break; 
 
    case SV_PAUSE: 
      if (fgIsPcdPlay()) 
      { 
        vOsdShowPbcState(SV_PAUSE, 0, OSD_TIMEOUT_SHORT); 
      } 
      else 
      { 
        vOsdShowPbcState(SV_PAUSE, 0, OSD_NO_DISAPPEAR); 
      } 
      break; 
 
    case SV_STEP: 
      vOsdShowPbcState(SV_STEP, 0, OSD_NO_DISAPPEAR); 
      break; 
 
    case SV_STEP_BACK: 
      vOsdShowPbcState(SV_STEP_BACK, 0, OSD_NO_DISAPPEAR); 
      break; 
 
    case SV_FREEZE: 
      break; 
 
    case SV_STILL: 
      vOsdShowPbcState(SV_STILL, 0, OSD_NO_DISAPPEAR); 
      break; 
 
    case SV_DIGEST9: 
    case SV_DIGEST4: 
    case SV_DIGEST: 
      if(fgIsIsoPlay() || fgIsPcdPlay()) 
      { 
	#ifdef VFD_MESSAGE_DIGEST 
	 vVfdMessage(VFD_MESSAGE_DIGEST); 
	#endif         
      } 
      vOsdShowPbcState(bPbcState, 0, OSD_NO_DISAPPEAR); 
      break; 
 
    case SV_PTL_ERR: 
    case SV_SET_TMP_PTL: 
      /* clear status first */ 
      /* vOsdPosClear(OSD_POS_PLAY_STATUS); */ 
      /* call the password check function */ 
      if (fgIsDvdPlay() && (fgIsInputStateValid(INPUT_STATE_PASSWORD) == FALSE)) 
      { 
        fgSetPlayPostKey(IR_PASSWORD); 
      } 
      break; 
 
    case SV_REGION_ERR: 
#ifndef EN_DISC_ID_CHK /* not define EN_DISC_ID_CHK */ 
      if (fgIsDvdPlay()) 
      { 
        vClearPlayType(); 
        vOsdPosShow(OSD_POS_ERROR, OSD_MSG_WRONG_REGION, OSD_NO_DISAPPEAR); 
        vOsdShowPbcState(SV_STOP, 0, OSD_NO_DISAPPEAR); 
      } 
#endif /* not define EN_DISC_ID_CHK */ 
      break; 
 
    case SV_DISC_ERR: 
      vOsdPosShow(OSD_POS_ERROR, OSD_MSG_DISC_ERROR, OSD_NO_DISAPPEAR); 
      vOsdShowPbcState(SV_STOP, 0, OSD_NO_DISAPPEAR); 
      break; 
 
    default: 
      break; 
  } 
} 
 
/************************************************************************ 
     Function : 
  Description : 
    Parameter : 
    Return    : 
************************************************************************/ 
void vChangePbcState(BYTE bPbcState) large 
{ 
  BYTE bTmp; 
 
  /* for state change only */ 
  if (bPbcState == _bLastPbcState) 
  { 
    return; 
  } 
 
  switch (_bLastPbcState) 
  { 
    case SV_STOP: 
    case SV_STOP_RESUME: 
#if (STOP_RESUME_STYLE == STOP_RESUME_TWO_KEYS) 
      if ((_bLastPbcState == SV_STOP_RESUME) || 
          (_bLastPbcState == SV_STOP)) 
      { 
        vOsdPosClear(OSD_POS_STOP_MSG1); 
        vOsdPosClear(OSD_POS_STOP_MSG2); 
      } 
#elif (STOP_RESUME_STYLE == STOP_RESUME_TWO_STOP) 
      if (_bLastPbcState == SV_STOP_RESUME) 
      { 
        vOsdPosClear(OSD_POS_STOP_MSG1); 
      } 
#endif 
      break; 
 
    case SV_PLAY: 
    case SV_FF: 
    case SV_SF: 
    case SV_FR: 
    case SV_SR: 
    case SV_PAUSE: 
    case SV_STEP: 
    case SV_STEP_BACK: 
    case SV_FREEZE: 
    case SV_STILL: 
      /* fgIsDiscPlay() */ 
      break; 
 
    case SV_DIGEST9: 
    case SV_DIGEST4: 
    case SV_DIGEST: 
    case SV_PTL_ERR: 
    case SV_REGION_ERR: 
    case SV_DISC_ERR: 
    case SV_SET_TMP_PTL: 
      break; 
 
    default: 
      /* error? */ 
      break; 
  } 
 
  switch (bPbcState) 
  { 
    case SV_STOP: 
    case SV_STOP_RESUME: 
      vOsdCoreSetPlayStatus(OSD_SHOW_CLEAR, 0); 
#ifdef STOP_CANCEL_USR_CTRL 
      if (((fgIsIsoPlay() || fgIsPcdPlay()) == FALSE) 
#ifdef SINGLE_STOP_KEEP_USR_CTRL 
          && (bPbcState != SV_STOP_RESUME) 
#endif 
         ) 
      { 
        bTmp = bSharedInfo(SI_USR_PBC_CTRL); 
 
        if (bTmp == SV_PROGRAM) 
        { 
          vSendUopCmd(UOP_PROGRAM, SV_PROGRAM_STOP, 0, 0); 
        } 
        else if (bTmp == SV_SHUFFLE) 
        { 
          vSendUopCmd(UOP_SHUFFLE, SV_OFF, 0, 0); 
        } 
        else if (bTmp == SV_RANDOM) 
        { 
          vSendUopCmd(UOP_RANDOM, SV_OFF, 0, 0); 
        } 
      } 
#endif /* STOP_CANCEL_USR_CTRL */ 
#ifdef STOP_RESUME_CANCEL_REPEAT 
      if ((fgIsIsoPlay() || fgIsPcdPlay()) == FALSE) 
      { 
        bTmp = bSharedInfo(SI_REPEAT_MODE); 
 
        if ((bTmp != SV_REPEAT_NONE) && 
            (bTmp != SV_REPEAT_ABNONE)) 
        { 
          vSendUopCmd(UOP_REPEAT, SV_REPEAT_NONE, 0, 0); 
        } 
      } 
#endif /* STOP_RESUME_CANCEL_REPEAT */ 
      break; 
 
    case SV_PLAY: 
    case SV_FF: 
    case SV_SF: 
    case SV_FR: 
    case SV_SR: 
    case SV_PAUSE: 
    case SV_STEP: 
    case SV_STEP_BACK: 
    case SV_FREEZE: 
    case SV_STILL: 
      /* fgIsDiscPlay() */ 
      if (!fgIsDiscPlay(_bLastPbcState) && (_bLastPbcState != SV_PBC_INIT)) 
      { 
        vStatusDispRecall(); 
 
        if (_bLastPbcState == SV_STOP) 
        { 
          /* if previous state is STOP, the time information may be incorrect! */ 
          if (fgIsDvdPlay()) 
          { 
            vDVDShowTotalTimeMark(); 
          } 
          else if (fgIsVcdPlay()) 
          { 
            vVCDShowTotalTimeMark(); 
          } 
        } 
      } 
      break; 
 
    case SV_DIGEST9: 
    case SV_DIGEST4: 
    case SV_DIGEST: 
    case SV_PTL_ERR: 
    case SV_REGION_ERR: 
    case SV_DISC_ERR: 
    case SV_SET_TMP_PTL: 
      break; 
 
    default: 
      /* error? */ 
      break; 
  } 
 
  /* to update VFD */ 
  vVfdUpdateTrick(); 
 
#ifdef PLAYER_STOP_SRV_STOP 
  if (fgSrvStopCheck() == TRUE) 
  { 
    _bUISrvStatus = PLAYER_SRV_STOP; 
  } 
#endif 
 
  _bLastPbcState = bPbcState; 
} 
 
/************************************************************************ 
     Function : 
  Description : 
    Parameter : 
    Return    : 
************************************************************************/ 
void vShowUsrPbcCtrl(BYTE bMode) large 
{ 
  WORD wPos; 
 
  if (_rOsdStateCtx.fgTimePos == OSD_SHOW_TIME_LEFT) 
  { 
    if (fgIsIsoPlay()) 
    { 
      wPos = OSD_POS_ISO_REPEAT; 
    } 
    else 
    { 
      wPos = OSD_POS_REPEAT; 
    } 
  } 
  else if (_rOsdStateCtx.fgTimePos == OSD_SHOW_TIME_RIGHT) 
  { 
    if (fgIsIsoPlay()) 
    { 
      wPos = OSD_POS_ISO_REPEAT_LEFT; 
    } 
    else 
    { 
      wPos = OSD_POS_REPEAT_LEFT; 
    } 
  } 
 
  switch (bMode) 
  { 
    case SV_REPEAT_NONE: 
    case SV_REPEAT_ABNONE: 
      vOsdPosClear(wPos); 
      break; 
 
    case SV_REPEAT_ALL: 
      #if  defined(AP) || defined(OPPO) 
    	  vOsdPosShow(wPos, OSD_MSG_ICON_RPT_ALL, OSD_TIMEOUT_LONG); 
    	#else 
         vOsdPosShow(wPos, OSD_MSG_ICON_RPT_ALL, OSD_NO_DISAPPEAR); 
    	#endif 
      break; 
 
    case SV_REPEAT_TRACK: 
    case SV_REPEAT_LIST: 
      #if  defined(AP) || defined(OPPO) 
    	   vOsdPosShow(wPos, OSD_MSG_ICON_RPT_TRK, OSD_TIMEOUT_LONG); 
    	#else 
          vOsdPosShow(wPos, OSD_MSG_ICON_RPT_TRK, OSD_NO_DISAPPEAR); 
    	#endif 
      break; 
 
    case SV_REPEAT_TITLE: 
      #if  defined(AP) || defined(OPPO) 
    	   vOsdPosShow(wPos, OSD_MSG_ICON_RPT_TT, OSD_TIMEOUT_LONG); 
    	#else 
          vOsdPosShow(wPos, OSD_MSG_ICON_RPT_TT, OSD_NO_DISAPPEAR); 
    	#endif 
      break; 
 
    case SV_REPEAT_CHAPTER: 
      #if  defined(AP) || defined(OPPO) 
         vOsdPosShow(wPos, OSD_MSG_ICON_RPT_CH, OSD_TIMEOUT_LONG); 
      #else 
         vOsdPosShow(wPos, OSD_MSG_ICON_RPT_CH, OSD_NO_DISAPPEAR); 
      #endif 
      break; 
 
    case SV_REPEAT_SET_A: 
      vOsdPosShow(wPos, OSD_MSG_ICON_RPT_A, OSD_TIMEOUT);//10/08 
      break; 
 
    case SV_REPEAT_AB: 
      #if  defined(AP) || defined(OPPO) 
    	  vOsdPosShow(wPos, OSD_MSG_ICON_RPT_AB, OSD_TIMEOUT_LONG); 
    	#else 
         vOsdPosShow(wPos, OSD_MSG_ICON_RPT_AB, OSD_NO_DISAPPEAR); 
    	#endif 
#ifdef KARAOKE_MIC_REC 
      vMicRecCtrl(MIC_REC_CTRL_INIT); 
#endif 
      break; 
 
#if 0//def SUPPORT_MP3_RSPLAY//tide 
    case SV_RANDOM: 
      vOsdPosShow(wPos, OSD_MSG_RANDOM, OSD_NO_DISAPPEAR); 
      break; 
 
    case SV_SHUFFLE: 
      if (_rOsdStateCtx.fgRepeatShow == TRUE) 
      { 
        vOsdPosShow(wPos, OSD_MSG_SHUFFLE, OSD_NO_DISAPPEAR); 
      } 
      break; 
#endif	   
#if 0//tide 
    case SV_PROGRAM: 
      vOsdPosShow(wPos, OSD_MSG_PROGRAM, OSD_NO_DISAPPEAR); 
      break; 
 
    case SV_USR_DIGEST: 
      // show OSD 
      if (fgIsCddaPlay()) 
      { 
        vOsdPosShow(wPos, OSD_MSG_SCAN, OSD_NO_DISAPPEAR); 
      } 
      else 
      { 
#if 0 
        vOsdPosShow(wPos, OSD_MSG_DIGEST, OSD_NO_DISAPPEAR); 
#else 
        vOsdPosClear(wPos); 
#endif 
      } 
 
      // show VFD 
      if (fgIsDvdPlay()) 
      { 
#ifdef DVD_DGST_SHOW_MSG_ONLY 
 
#ifdef VFD_MESSAGE_DIGEST 
        vVfdMessage(VFD_MESSAGE_DIGEST); 
#endif 
 
#else 
        vVfdWord(VFD_WORD_TT, bHEXToBCD(bSharedInfo(SI_TT_NO)), 1); 
        vVfdWord(VFD_WORD_CH, bHEXToBCD(bSharedInfo(SI_CHAP_NO)), 1); 
        vVfdSymbol(VFD_SYM_PLAYINFO_TT_CH); 
#endif 
      } 
      else if (fgIsVcdPlay()) 
      { 
#ifdef VCD_DGST_SHOW_MSG_ONLY 
 
#ifdef VFD_MESSAGE_DIGEST 
        vVfdMessage(VFD_MESSAGE_DIGEST); 
#endif 
 
#else 
 
        wPos=(WORD) bSharedInfo(SI_TRACK_NO); 
        if (wPos <= 99) 
          vVfdWord(VFD_WORD_CH, bHEXToBCD((BYTE)wPos), 0);      	  	 
        else 
          vVfdWord(VFD_WORD_CH, 0, 0);      	  	      	 
 
        vVfdWordClr(VFD_WORD_TT); 
        vVfdSymbol(VFD_SYM_PLAYINFO_TRACK); 
 
#endif  //VCD_DGST_SHOW_MSG_ONLY 
      } 
      else if (fgIsIsoPlay() || fgIsCddaPlay()) 
      { 
        /* ? */ 
      } 
      break; 
#endif 
    default: 
      vOsdPosClear(wPos); 
      break; 
  } 
 
  if (fgIsUsrCtrlMode(bMode)) 
  { 
    if (bCurrRemainType() != OSD_SHOW_DISABLE) 
    { 
      if (fgIsDvdPlay()) 
      { 
        bDvdCheckRemainShow(FALSE, bCurrRemainType()); 
      } 
      else if (fgIsVcdPlay()) 
      { 
      #ifndef BBK_MENU 
        bVcdCheckRemainShow(FALSE, bCurrRemainType()); 
      #endif 
      } 
      else if (fgIsCddaPlay()) 
      { 
        bCddaCheckRemainShow(FALSE, bCurrRemainType()); 
      } 
    } 
  } 
} 
 
/************************************************************************ 
     Function : 
  Description : 
    Parameter : 
    Return    : 
************************************************************************/ 
BOOL fgShowRepeatMode(BYTE bMode) large 
{ 
  BOOL fgRet = FALSE; /* default is continue update */ 
  WORD wPos; 
  WORD wMsg = 0; 
 
  if (_rOsdStateCtx.fgTimePos == OSD_SHOW_TIME_LEFT) 
  { 
    if (fgIsIsoPlay()) 
    { 
      wPos = OSD_POS_ISO_REPEAT; 
    } 
    else 
    { 
      wPos = OSD_POS_REPEAT; 
    } 
  } 
  else if (_rOsdStateCtx.fgTimePos == OSD_SHOW_TIME_RIGHT) 
  { 
    if (fgIsIsoPlay()) 
    { 
      wPos = OSD_POS_ISO_REPEAT_LEFT; 
    } 
    else 
    { 
      wPos = OSD_POS_REPEAT_LEFT; 
    } 
  } 
 
  switch (bMode) 
  { 
    case SV_REPEAT_ALL: 
      wMsg = OSD_MSG_ICON_RPT_ALL; 
      fgRet = TRUE; 
      break; 
 
    case SV_REPEAT_TRACK: 
    case SV_REPEAT_LIST: 
      wMsg = OSD_MSG_ICON_RPT_TRK; 
      fgRet = TRUE; 
      break; 
 
    case SV_REPEAT_TITLE: 
      wMsg = OSD_MSG_ICON_RPT_TT; 
      fgRet = TRUE; 
      break; 
 
    case SV_REPEAT_CHAPTER: 
      wMsg = OSD_MSG_ICON_RPT_CH; 
      fgRet = TRUE; 
      break; 
 
    case SV_REPEAT_NONE: 
    case SV_REPEAT_ABNONE: 
      wMsg = 0xffff; 
      fgRet = FALSE; /* continue update PBC state */ 
      break; 
 
    default: 
      break; 
  } 
 
#ifdef PLAYER_GOTO 
  // megaa Goto 
 #ifndef NEW_WINGOTO 
  if (fgIsInGoto()) 
  { 
    if (wMsg == 0xffff) 
    { 
      vShowGotoRepeat(OSD_MSG_OFF); 
    } 
    else if (wMsg != 0) 
    { 
      vShowGotoRepeat(wMsg); 
    } 
  } 
 #endif 
#endif 
 
  if (_rOsdStateCtx.fgRepeatShow == TRUE) 
  { 
    if (wMsg == 0xffff) 
    { 
      vOsdPosClear(wPos); 
    } 
    else if (wMsg != 0) 
    { 
      #if  defined(AP) || defined(OPPO) 
       if((wMsg == OSD_MSG_ICON_RPT_ALL) || (wMsg == OSD_MSG_ICON_RPT_CH) || (wMsg == OSD_MSG_ICON_RPT_TRK) || (wMsg == OSD_MSG_ICON_RPT_TT)) 
       	vOsdPosShow(wPos, wMsg, OSD_TIMEOUT_LONG); 
       else 
    #endif 
      vOsdPosShow(wPos, wMsg, OSD_TIMEOUT);//10/08 
    } 
  } 
 
  return (fgRet); 
} 
 
/************************************************************************ 
     Function : 
  Description : 
    Parameter : 
    Return    : 
************************************************************************/ 
BOOL fgShowAuxCtrl(BYTE bMode) large 
{ 
#ifdef PLAYER_FLMENU 
  //BOOL fgFlMenuOn = fgFsMenuIsMenuOn(); 
  BOOL fgFlMenuOn = fgFlCheckStatus(FL_STATUS_IN_MENU); 
  WORD wTmp; 
#endif 
  BOOL fgRet = FALSE; /* default is continue update */ 
  WORD wPos; 
 
  if (_rOsdStateCtx.fgTimePos == OSD_SHOW_TIME_LEFT) 
  { 
    if (fgIsIsoPlay()) 
    { 
      wPos = OSD_POS_ISO_REPEAT; 
    } 
    else 
    { 
      wPos = OSD_POS_REPEAT; 
    } 
  } 
  else if (_rOsdStateCtx.fgTimePos == OSD_SHOW_TIME_RIGHT) 
  { 
    if (fgIsIsoPlay()) 
    { 
      wPos = OSD_POS_ISO_REPEAT_LEFT; 
    } 
    else 
    { 
      wPos = OSD_POS_REPEAT_LEFT; 
    } 
  } 
 
  switch (bMode) 
  { 
    case SV_REPEAT_SET_A: 
#ifdef PLAYER_FLMENU 
      if (fgFlMenuOn) 
      { 
        vFlIpShowInfo(IP_INFO_USR_AUX_CTRL, bMode, 0); 
      } 
      else 
#endif /* PLAYER_FLMENU */ 
      { 
#ifdef PLAYER_GOTO 
        if (fgIsInGoto()) 
        { 
          vShowGotoPbc(OSD_MSG_ICON_RPT_A); 
        } 
#endif /* PLAYER_GOTO */ 
        vOsdPosShow(wPos, OSD_MSG_ICON_RPT_A, OSD_NO_DISAPPEAR); 
      } 
      fgRet = TRUE; 
      break; 
 
    case SV_REPEAT_LAST_SP: // temp use A-B icon 
    case SV_REPEAT_INSTANT: // temp use A-B icon 
    case SV_REPEAT_AB: 
#ifdef PLAYER_FLMENU 
      if (fgFlMenuOn) 
      { 
        vFlIpShowInfo(IP_INFO_USR_AUX_CTRL, bMode, 0); 
      } 
      else 
#endif 
      { 
#ifdef PLAYER_GOTO 
        if (fgIsInGoto()) 
        { 
          vShowGotoPbc(OSD_MSG_ICON_RPT_AB); 
        } 
#endif 
      #if  defined(AP) || defined(OPPO) 
        vOsdPosShow(wPos, OSD_MSG_ICON_RPT_AB, OSD_TIMEOUT_LONG); 
     #else 
        vOsdPosShow(wPos, OSD_MSG_ICON_RPT_AB, OSD_NO_DISAPPEAR); 
     #endif 
      } 
      fgRet = TRUE; 
#ifdef KARAOKE_MIC_REC 
      if (bMode == SV_REPEAT_AB) 
      { 
        vMicRecCtrl(MIC_REC_CTRL_INIT); 
      } 
#endif 
      break; 
 
    case SV_REPEAT_NONE: 
    case SV_REPEAT_ABNONE: 
#ifdef PLAYER_FLMENU 
      if (fgFlMenuOn) 
      { 
        vFlIpShowInfo(IP_INFO_USR_AUX_CTRL, bMode, 0); 
      } 
      else 
#endif 
      { 
#ifdef PLAYER_GOTO 
        if (fgIsInGoto()) 
        { 
          vShowGotoPbc(OSD_MSG_NULL); 
        } 
#endif 
        vOsdPosClear(wPos); 
      } 
#ifdef KARAOKE_MIC_REC 
      vMicRecCtrl(MIC_REC_CTRL_RESET); 
#endif 
      fgRet = FALSE; /* continue update repeat mode and PBC state */ 
      break; 
 
    default: 
      break; 
  } 
 
  return (fgRet); 
} 
 
/************************************************************************ 
     Function : 
  Description : 
    Parameter : 
    Return    : 
************************************************************************/ 
static void vShowDiscType(BYTE bDiscType) large 
{ 
  /* vOsdPosClear(OSD_POS_INIT); */ /* No need, since disc type show is moved to layer 2 */ 
#ifdef VFD_HDCD_LED 
 
  vVfdLed(0, FALSE); 
 
#endif 
   
 
  switch (bDiscType) 
  { 
    case SV_DVD_VIDEO: 
      vOsdPosShow(OSD_POS_DISC_TYPE, OSD_MSG_DVD_VIDEO, OSD_TIMEOUT); 
#ifdef VFD_SUPPORT 
      vVfdSymbol(VFD_SYM_DVD_VIDEO); 
#else 
      vVfdLedSet(TRUE, TRUE, LED_DVD); 
#endif   
      break; 
 
    case SV_DVD_AUDIO: 
#ifdef SUPPORT_DVD_AUDIO 
      vOsdPosShow(OSD_POS_DISC_TYPE, OSD_MSG_DVD_AUDIO, OSD_TIMEOUT); 
#endif 
#ifdef VFD_SUPPORT 
      vVfdSymbol(VFD_SYM_DVD_AUDIO); 
#else 
      vVfdLedSet(TRUE, TRUE, LED_DVD); 
#endif   
      break; 
 
    case SV_VCD3_0: 
      vOsdPosShow(OSD_POS_DISC_TYPE, OSD_MSG_VCD30, OSD_TIMEOUT); 
#ifdef VFD_SUPPORT 
      vVfdSymbol(VFD_SYM_VCD); 
#else 
      vVfdLedSet(TRUE, TRUE, LED_VCD); 
#endif     
 
      break; 
 
    case SV_VCD2_0: 
      vOsdPosShow(OSD_POS_DISC_TYPE, OSD_MSG_VCD20, OSD_TIMEOUT); 
#ifdef VFD_SUPPORT 
      vVfdSymbol(VFD_SYM_VCD); 
#else 
      vVfdLedSet(TRUE, TRUE, LED_VCD); 
#endif        
 
      break; 
 
    case SV_VCD1_1: 
      vOsdPosShow(OSD_POS_DISC_TYPE, OSD_MSG_VCD11, OSD_TIMEOUT); 
#ifdef VFD_SUPPORT 
      vVfdSymbol(VFD_SYM_VCD); 
#else 
      vVfdLedSet(TRUE, TRUE, LED_VCD); 
#endif        
      break; 
 
    case SV_SVCD: 
      vOsdPosShow(OSD_POS_DISC_TYPE, OSD_MSG_SVCD, OSD_TIMEOUT); 
#ifdef VFD_SUPPORT 
      vVfdSymbol(VFD_SYM_SVCD); 
#else 
      vVfdLedSet(TRUE, TRUE, LED_VCD); 
#endif        
      break; 
 
    case SV_CVD: 
      vOsdPosShow(OSD_POS_DISC_TYPE, OSD_MSG_CVD, OSD_TIMEOUT); 
#ifdef VFD_SUPPORT 
      vVfdSymbol(VFD_SYM_CVD); 
#else 
      vVfdLedSet(TRUE, TRUE, LED_VCD); 
#endif        
      break; 
 
    case SV_DATA: 
      vOsdPosClear(OSD_POS_DISC_TYPE); 
#ifdef VFD_SUPPORT 
#else 
      vVfdLedSet(TRUE, TRUE, LED_VCD); 
#endif        
      break; 
 
    case SV_PCD: // - for KODAK picture CD. 
      /* FsMenu initial moved to vISOinit() */ 
      //BillDen move to play_pcd.c vOsdPosShow(OSD_POS_DISC_TYPE, OSD_MSG_PICTURE_CD, OSD_TIMEOUT); 
#ifdef VFD_SUPPORT 
#else 
      vVfdLedSet(TRUE, TRUE, LED_PCD); 
#endif        
            
      break; 
 
    case SV_CDDA: 
      vOsdPosShow(OSD_POS_DISC_TYPE, OSD_MSG_CD, OSD_TIMEOUT); 
#ifndef CDDA_AUTO_PLAY 
      vOsdShowTrack(OSD_TOTAL, 0, bSharedInfo(SI_TRACK_NS), OSD_NO_DISAPPEAR); 
#endif 
#ifdef VFD_SUPPORT 
      vVfdSymbol(VFD_SYM_A_CODE_PCM); 
      vVfdSymbol(VFD_SYM_CDDA); 
#else 
      vVfdLedSet(TRUE, TRUE, LED_VCD); 
#endif        
      break; 
 
    case SV_DTS_CS: 
#ifdef DTS_NO_DISPLAY //BillDen 
      vOsdPosShow(OSD_POS_DISC_TYPE, OSD_MSG_CD, OSD_TIMEOUT); 
#else     
      vOsdPosShow(OSD_POS_DISC_TYPE, OSD_MSG_DTS_CD, OSD_TIMEOUT); 
#endif       
      vOsdShowTrack(OSD_TOTAL, 0, bSharedInfo(SI_TRACK_NS), OSD_NO_DISAPPEAR); 
#ifndef DTS_NO_DISPLAY //BillDen 
      vVfdSymbol(VFD_SYM_A_CODE_DTS); 
#endif       
      vVfdSymbol(VFD_SYM_DTS_CD); 
      break; 
#if 0 //10/09 
    case SV_CDG: 
      vOsdPosShow(OSD_POS_DISC_TYPE, OSD_MSG_CD_G, OSD_TIMEOUT); 
      vOsdShowTrack(OSD_TOTAL, 0, bSharedInfo(SI_TRACK_NS), OSD_NO_DISAPPEAR); 
#ifdef VFD_SUPPORT 
      vVfdSymbol(VFD_SYM_CDDA); 
#else 
      vVfdLedSet(TRUE, TRUE, LED_VCD); 
#endif        
 
      break; 
#endif 
    case SV_HDCD: 
#ifdef HDCD_EN 
      vOsdPosShow(OSD_POS_DISC_TYPE, OSD_MSG_HDCD, OSD_TIMEOUT); 
#else 
      vOsdPosShow(OSD_POS_DISC_TYPE, OSD_MSG_CD, OSD_TIMEOUT); 
#endif 
      vOsdShowTrack(OSD_TOTAL, 0, bSharedInfo(SI_TRACK_NS), OSD_NO_DISAPPEAR); 
#ifdef VFD_SUPPORT 
//bywhy 2003/03/28 for LCD display "HDCD" 
    #ifdef VFD_HDCD_DISP 
      vVfdSymbol(VFD_SYM_HDCD); 
    #else 
      vVfdSymbol(VFD_SYM_CDDA); 
    #endif 
//bywhy end 
#else 
      vVfdLedSet(TRUE, TRUE, LED_VCD); 
#endif        
 
 
#ifdef VFD_HDCD_LED 
 
      vVfdLed(0, TRUE); 
#endif 
      break; 
 
    case SV_MINI_DVD: 
      vOsdPosShow(OSD_POS_DISC_TYPE, OSD_MSG_MINI_DVD, OSD_TIMEOUT); 
#ifdef VFD_SUPPORT 
      vVfdSymbol(VFD_SYM_DVCD); 
#else 
      vVfdLedSet(TRUE, TRUE, LED_VCD); 
#endif        
      break; 
#ifdef SUPPORT_SACD//0 //10/09 
    case SV_SACD: 
      vOsdPosShow(OSD_POS_DISC_TYPE, OSD_MSG_SACD, OSD_TIMEOUT); 
#ifdef VFD_SUPPORT 
      vVfdSymbol(VFD_SYM_SACD); 
#else 
      vVfdLedSet(TRUE, TRUE, LED_VCD); 
#endif        
      break; 
#endif 
    case SV_AUDIO_IN: 
      /* don't clear OSD */ 
      break; 
 
    default: 
      vOsdPosClear(OSD_POS_DISC_TYPE); 
      break; 
  } 
} 
 
/************************************************************************ 
     Function : 
  Description : 
    Parameter : 
    Return    : 
************************************************************************/ 
static void vShowAudioAppl(BYTE bType) large 
{ 
  BYTE bVocalMode = bAdspCurrVocal(); 
 
  switch (bType) 
  { 
    case SV_A_APPL_KARA: 
      break; 
 
    case SV_A_APPL_SURR: 
    case SV_A_APPL_NONE: 
    default: 
      if (fgIsAc3Vocal(bVocalMode)) 
      { 
#ifdef PLAYER_KARAOKE 
        vAdspVocalAssist(VOCAL_NO_ASSIST); 
#endif 
      } 
      break; 
  } 
} 
 
/************************************************************************ 
     Function : 
  Description : 
    Parameter : 
    Return    : 
************************************************************************/ 
static void vShowVideoFormat(void) large 
{ 
} 
 
/************************************************************************ 
     Function : 
  Description : 
    Parameter : 
    Return    : 
************************************************************************/ 
static void vShowVideoBitrate(void) large 
{ 
#ifdef PLAYER_GOTO 
  if (fgIsInGoto()) 
  { 
    vUpdateGotoShow(GOTO_SHOW_PANEL_BITRATE); 
  } 
#endif 
} 
 
/************************************************************************ 
     Function : 
  Description : 
    Parameter : 
    Return    : 
************************************************************************/ 
static void vShowAudioBitrate(void) large 
{ 
#ifdef AUDIO_IN_EN 
  if (fgIsAinPlay()) 
  { 
    vAINUpdateBitRate(); 
  } 
#endif /* AUDIO_IN_EN */ 
#ifdef PLAYER_FLMENU 
  if (fgIsIsoPlay()) 
  { 
    vFlIpShowInfo(IP_INFO_BITRATE, 0,  
                  bSharedInfo(SI_A_BITRATE0) + bSharedInfo(SI_A_BITRATE1) * 256); 
  } 
#endif 
} 
 
/************************************************************************ 
     Function : 
  Description : 
    Parameter : 
    Return    : 
************************************************************************/ 
static void vShowAudioFreqBitLen(void) large 
{ 
#ifdef AUDIO_IN_EN 
  if (fgIsAinPlay()) 
  { 
    vAINUpdateBitLen(); 
  } 
#endif /* AUDIO_IN_EN */ 
} 
 
/************************************************************************ 
     Function : 
  Description : UOP return dispatch 
    Parameter : 
    Return    : 
************************************************************************/ 
BYTE bHandleUopRet(BYTE bUopId, BYTE bUopRet) large 
{ 
  BYTE bResult = UOP_UPDATE; 
 
  /* if ((bUopId > UOP_LAST_GENERIC_UOP) || (bUopId < UOP_PLAYBACK_START)) */ 
  if ((bUopId > UOP_LAST_RISC_UOP) && (bUopId != UOP_NONE)) 
  { 
    return (UOP_OK); /* not show ERROR */ 
  } 
 
  /* clear last sync UOP flag here */ 
  if (bUopId == _bLastSyncUop) 
  { 
    /* check servo stop */ 
#ifdef PLAYER_STOP_SRV_STOP 
    if (fgSrvStopCheck() == TRUE) 
    { 
      _bUISrvStatus = PLAYER_SRV_STOP; 
    } 
#endif 
 
    _bLastSyncUop = UOP_NONE; 
  } 
 
  /* dispatch the UOP return */ 
  if ((bUopId >= UOP_SYSTEM_START) && (bUopId <= UOP_SYSTEM_MAX)) 
  { 
    bResult = bCOMHandleUopRet(bUopId, bUopRet); 
  } 
  /* else if ((bUopId >= UOP_PLAYBACK_START) && (bUopId <= UOP_PLAYBACK_MAX)) */ 
  /* else if ((bUopId >= UOP_PLAYBACK_START) && (bUopId <= UOP_LAST_RISC_UOP)) */ 
  else if ((bUopId != UOP_NONE) && (bUopId <= UOP_LAST_RISC_UOP)) 
  { 
    if (fgIsDvdPlay()) 
    { 
      bResult = bDVDHandleUopRet(bUopId, bUopRet); 
    } 
    else if (fgIsVcdPlay()) 
    { 
      bResult = bVCDHandleUopRet(bUopId, bUopRet); 
    } 
#ifdef SUPPORT_DATA_DISC 
    else if (fgIsIsoPlay()) 
    { 
      bResult = bISOHandleUopRet(bUopId, bUopRet); 
    } 
    else if (fgIsPcdPlay()) 
    { 
      bResult = bPCDHandleUopRet(bUopId, bUopRet); 
    } 
#endif /* SUPPORT_DATA_DISC */ 
    else if (fgIsCddaPlay()) 
    { 
      bResult = bCDDAHandleUopRet(bUopId, bUopRet); 
    } 
    else if (fgIsAinPlay()) 
    { 
      bResult = bAINHandleUopRet(bUopId, bUopRet); 
    } 
  } 
 
  if (bResult == UOP_FAIL) 
  { 
    vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT); 
  } 
  else /* UOP O.K. */ 
  { 
    vOsdShowError(OSD_ERROR_CLEAR, 0); 
  } 
 
  return (bResult); 
} 
 
/************************************************************************ 
     Function : 
  Description : Error return dispatch 
    Parameter : 
    Return    : 
************************************************************************/ 
BYTE bHandleErrRet(BYTE bItem) large 
{ 
  BYTE bRet = UOP_OK; 
 
  switch (bItem) 
  { 
    case bSIItemIndex(SI_OSD_ERR_RET): 
    { 
      if (bSharedInfo(SI_OSD_ERR_RET) == SV_ERR_OSD_MEM_FULL) 
      { 
        vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT); 
      } 
      break; 
    } 
 
    case bSIItemIndex(SI_UOP_ID): 
    case bSIItemIndex(SI_UOP_RET_VAL): 
    case bSIItemIndex(SI_UOP_SUB_ID): 
    { 
      bRet = bHandleUopRet(_rOsdStateCtx.bUopRetId, _rOsdStateCtx.bUopRetVal); 
      break; 
    } 
 
    default: 
      /* not a valid item, ignore it! */ 
      break; 
  } /* switch (bItem) */ 
 
  if (bRet == UOP_FAIL) 
  { 
    vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT); 
  } 
  else /* UOP O.K. */ 
  { 
    vOsdShowError(OSD_ERROR_CLEAR, 0); 
  } 
 
  return (bRet); 
} 
 
/************************************************************************ 
     Function : 
  Description : Share info update handle 
    Parameter : 
    Return    : 
************************************************************************/ 
void vGroupPbcUpdateUsrCtrl(BYTE bItem) large 
{ 
  BYTE bAuxCtrl = bSharedInfo(SI_USR_AUX_CTRL); 
  BYTE bRepeatMode = bSharedInfo(SI_REPEAT_MODE); 
  BYTE bUsrPbc = bSharedInfo(SI_USR_PBC_CTRL); 
 
  switch (bItem) 
  { 
    case bSIItemIndex(SI_USR_AUX_CTRL): 
    case bSIItemIndex(SI_REPEAT_MODE): 
    case bSIItemIndex(SI_USR_PBC_CTRL): 
    { 
      if (fgShowAuxCtrl(bAuxCtrl)) 
      { 
        break; 
      } 
 
      /* for ISO play, we do not need to show repeat mode and user control mode */ 
      if (fgIsIsoPlay() || fgIsPcdPlay()) 
      { 
        if (_rOsdStateCtx.fgTimePos == OSD_SHOW_TIME_LEFT) 
        { 
          vOsdPosClear(OSD_POS_ISO_REPEAT); 
        } 
        else if (_rOsdStateCtx.fgTimePos == OSD_SHOW_TIME_RIGHT) 
        { 
          vOsdPosClear(OSD_POS_ISO_REPEAT_LEFT); 
        } 
        break; 
      } 
 
      if (fgShowRepeatMode(bRepeatMode)) 
      { 
        break; 
      } 
      vShowUsrPbcCtrl(bUsrPbc); 
      break; 
    } 
  } /* switch (bItem) */ 
 
  if (bItem == bSIItemIndex(SI_USR_PBC_CTRL)) 
  { 
    if (fgIsInputStateValid(INPUT_STATE_PROGRAM)) 
    { 
      vSelMenuUsrPbcChange(); 
    } 
    else if (fgIsInputStateValid(INPUT_STATE_DIGEST)) 
    { 
      vDigestUsrPbcChange(); 
    } 
  } 
  vVfdUpdateUsrMode(); 
} 
 
/************************************************************************ 
     Function : 
  Description : Share info update handle 
    Parameter : 
    Return    : 
************************************************************************/ 
void vGroupPbcUpdate(BYTE bItem) large 
{ 
  BYTE bTmp1, bTmp2; 
#ifdef PLAYER_GOTO 
  BYTE pbStr[] = { 0 }; 
#endif 
 
  switch (bItem) 
  { 
  	 
 #ifdef MT1379_MANUFACTURE_TEST     
    case bSIItemIndex(SI_MANU_TEST_ST): 
    { 
      vCheckTestStatus(); 
      _bPlayPostKey = IR_EJECT;    
      return; 
    } 
#endif     
 
    case bSIItemIndex(SI_INIT_STATE): 
    { 
      bTmp1 = bSharedInfo(SI_INIT_STATE); 
 
   #ifdef VFD_SUPPORT 
      vVfdShowInitStatus(bTmp1);  
   #endif 
      vShowInitState(bTmp1); 
      break; 
    } 
 
    case bSIItemIndex(SI_DISC_TYPE): 
    { 
      bTmp1 = bSharedInfo(SI_DISC_TYPE); 
      vAdspAudioTypeChange(SV_A_CODE_NONE, bTmp1, SV_DISC_IDENTIFIED); 
      /* vShowDiscType(bTmp); */ /* move to vSetPlayType() */ 
      break; 
    } 
  
    case bSIItemIndex(SI_UPGRADE_ST): 
    { 
      vUpgShowState(bSharedInfo(SI_UPGRADE_ST)); 
      return; 
    } 
  } 
 
  if (fgIsNonPlay()) 
  { 
#ifdef EN_DISC_ID_CHK 
    if ((bItem == bSIItemIndex(SI_PBC_STATE)) && 
        fgIsDiscInitFlagSet(DISC_INIT_DISC_TYPE)) 
    { 
      if ((bSharedInfo(SI_PBC_STATE) == SV_REGION_ERR) && 
          (bSharedInfo(SI_DISC_TYPE) == SV_DVD_VIDEO)) 
      { 
        // reset init flag 
        vResetDiscInitFlag(); 
        // clear play type 
        if (!fgIsNonPlay()) 
        { 
          vClearPlayType(); 
        } 
        // clear OSD 
        vOsdShowInitState(SV_DISC_IDENTIFIED); 
        // sho error message 
        vOsdPosShow(OSD_POS_ERROR, OSD_MSG_WRONG_REGION, OSD_NO_DISAPPEAR); 
        vOsdShowPbcState(SV_STOP, 0, OSD_NO_DISAPPEAR); 
      } 
    } 
#endif /* EN_DISC_ID_CHK */ 
    return; /* not a good method! */ 
  } 
 
  switch (bItem) 
  { 
#ifdef KARAOKE_MIC_REC 
    case bSIItemIndex(SI_REC_PROGRESS): 
    { 
      if (bEepromReadByte(MIC_SW_POS) == EV_ON) 
      { 
        vMicRecProgressUpdate(); 
      } 
 
      break; 
    } 
    case bSIItemIndex(SI_AB_STATE): 
    { 
      if (bEepromReadByte(MIC_SW_POS) == EV_ON) 
      { 
        vMicRecStateChange(bSharedInfo(SI_AB_STATE)); 
      } 
 
      break; 
    } 
#endif /* KARAOKE_MIC_REC */ 
 
    case bSIItemIndex(SI_PBC_SWITCH): /* only usefule for disc play startup */ 
    { 
      if (fgIsVcdPlay()) 
      { 
        bTmp1 = bSharedInfo(SI_PBC_SWITCH); 
 
        if (bTmp1== SV_PBC_ON) 
          vVfdSymbol(VFD_SYM_PBC_ON); 
        else 
          vVfdSymbol(VFD_SYM_PBC_OFF);					 
 
        if (bCurrRemainType() != OSD_SHOW_DISABLE) 
        { 
        #ifndef BBK_MENU 
          bVcdCheckRemainShow(FALSE, bCurrRemainType()); 
        #endif 
        } 
      } 
      break; 
    } 
 
    case bSIItemIndex(SI_PBC_STATE): 
    case bSIItemIndex(SI_PBC_SPEED): 
    { 
      bTmp1 = bSharedInfo(SI_PBC_STATE); 
 
#ifdef PLAYER_GOTO 
      if (fgIsInGoto()) 
      { 
        if (fgChkGotoExit() == TRUE) 
        { 
        #ifndef BBK 
          fgSetPlayPostKey(IR_GOTO); 
        #else 
          fgSetPlayPostKey(IR_WIN_GOTO); 
        #endif 
        } 
        else if (bTmp1 == SV_PLAY) 
        { 
          vGotoShowIcon(OSD_MSG_ICON_PLAY, pbStr); 
        } 
      } 
#endif /* PLAYER_GOTO */ 
 
      vChangePbcState(bTmp1); 
      vShowPbcState(bTmp1); 
      vAdspPbcChange(bTmp1); 
      break; 
    } 
 
    case bSIItemIndex(SI_USR_AUX_CTRL): 
    case bSIItemIndex(SI_REPEAT_MODE): 
    case bSIItemIndex(SI_USR_PBC_CTRL): 
    { 
      vGroupPbcUpdateUsrCtrl(bItem); 
      break; 
    } 
 
#ifdef PLAYER_ZOOMIN_INDICATOR 
    case bSIItemIndex(SI_ZOOM_OFST_X_HI): 
    case bSIItemIndex(SI_ZOOM_OFST_X_LO): 
    case bSIItemIndex(SI_ZOOM_OFST_Y_HI): 
    case bSIItemIndex(SI_ZOOM_OFST_Y_LO): 
    { 
      if (fgIsZoomBrShow()) 
      { 
        vZoomBrUpdate(); 
      } 
      break; 
    } 
#endif /* PLAYER_ZOOMIN_INDICATOR */ 
     
    case bSIItemIndex(SI_ZOOM_SWITCH): 
    { 
      bTmp1 = bSharedInfo(SI_ZOOM_SWITCH); 
      bTmp2 = bSharedInfo(SI_ISO_ITEM_TYPE); 
 
#ifdef DDISC_FTYPE_JPEG_SUPPORT 
      if (fgIsPcdPlay() || 
          (fgIsIsoPlay() && (fgFlCheckStatus(FL_STATUS_IN_JPEG)))) 
      { 
        vOsdShowZoomPct(bTmp1); 
        vVfdSymbol(VFD_SYM_ZOOM_ON); 
 
        if ((bTmp1 == 0) && fgIsInputStateValid(INPUT_STATE_PCD_ZOOM)) 
        { 
          /* need to escape zoom control mode */ 
          fgSetPlayPostKey(IR_ZOOM_IN); 
          vVfdSymbol(VFD_SYM_ZOOM_OFF); 
        } 
      } 
      else 
#endif 
      { 
#ifdef DDISC_FTYPE_JPEG_SUPPORT 
        if ((fgIsIsoPlay() && (!fgFlCheckStatus(FL_STATUS_IN_JPEG))) && 
            fgIsInputStateValid(INPUT_STATE_PCD_ZOOM)) 
        { 
          /* need to escape zoom control mode */ 
          fgSetPlayPostKey(IR_ZOOM_IN); 
          vVfdSymbol(VFD_SYM_ZOOM_OFF); 
        } 
        else 
#endif 
        { 
          vOsdShowZoom(bTmp1); 
 
#ifdef PLAYER_ZOOMIN_INDICATOR 
          if ((bTmp1 >= SV_ZOOM_IN_MIN) &&  
              (bTmp1 <= SV_ZOOM_IN_MAX)) 
          { 
            if (fgIsZoomBrShow()) 
            { 
              vZoomBrUpdate(); 
            } 
            else 
            { 
              vZoomBrOn(); 
            } 
          } 
          else // not in zoom-in mode 
          { 
            if (fgIsZoomBrShow()) 
            { 
              vZoomBrOff(); 
            } 
          } 
#endif /* PLAYER_ZOOMIN_INDICATOR */ 
 
 
          if ((bTmp1 == SV_ZOOM_OFF) || (bTmp1 >= SV_ZOOM_MODE_MAX)) 
          { 
            vVfdSymbol(VFD_SYM_ZOOM_OFF); 
          } 
          else 
          { 
            vVfdSymbol(VFD_SYM_ZOOM_ON); 
          } 
        } 
      } 
      break; 
    } 
 
    default: 
      break; 
  } 
} 
 
/************************************************************************ 
     Function : 
  Description : Share info update handle 
    Parameter : 
    Return    : 
************************************************************************/ 
void vGroupTimeUpdate(BYTE bItem) large 
{ 
#ifdef KARAOKE_SCORING 
  BOOL fgShow = FALSE; 
  BOOL fgRmn2Sec = FALSE; 
  BOOL fgRmnLast2Sec = FALSE; 
  BYTE bKScore; 
  #ifdef KARAOKE_SCORE_TEST 
  BYTE pbStr[13]; 
  WORD wHit0; 
  WORD wHit1; 
  WORD wMiss; 
  #else 
  BYTE pbStr[4]; 
  #endif 
#endif 
 
  switch (bItem) 
  { 
    case bSIItemIndex(SI_TIME_SS): 
    { 
      vOsdDisplayChange(DISP_TIME_MARK, 0); 
#ifdef KARAOKE_SCORING 
      if (fgIsDvdPlay() && bSharedInfo(SI_DVD_DOM) == SV_VTSTT_DOM) 
      { 
        fgShow = TRUE; 
        if (bSharedInfo(SI_TIME_CHAPTER_RMN_SS) <= 2) 
        { 
          fgRmn2Sec = TRUE; 
          if (bSharedInfo(SI_TIME_CHAPTER_RMN_HH) == 0 && 
              bSharedInfo(SI_TIME_CHAPTER_RMN_MM) == 0) 
            fgRmnLast2Sec = TRUE; 
        } 
      } 
      else if (fgIsVcdPlay() || fgIsCddaPlay()) 
      { 
        fgShow = TRUE; 
        if (bSharedInfo(SI_TIME_TRACK_RMN_SS) <= 2) 
        { 
          fgRmn2Sec = TRUE; 
          if (bSharedInfo(SI_TIME_TRACK_RMN_HH) == 0 && 
              bSharedInfo(SI_TIME_TRACK_RMN_MM) == 0) 
            fgRmnLast2Sec = TRUE; 
        } 
      } 
      if (fgShow) 
      { 
        bKScore = bAdspGetKScore(); 
        pbStr[0] = 3; 
        pbStr[1] = '0'; 
        pbStr[2] = BCD_HI(bKScore) + '0'; 
        pbStr[3] = BCD_LO(bKScore) + '0'; 
        if(fgAdspKscoreSupport()) 
        { 
        vOsdPosShowArg(OSD_POS_KSCORE, OSD_MSG_KSCORE, OSD_TIMEOUT, pbStr); 
        } 
  #ifdef KARAOKE_SCORE_TEST 
        vAdspGetKSHitMiss(&wHit0,&wHit1, &wMiss); 
        pbStr[0] = 12; 
        pbStr[1] = bDigToAsc(wHit0 / 0x1000); 
        wHit0 %= 0x1000; 
        pbStr[2] = bDigToAsc(wHit0 / 0x100); 
        wHit0 %= 0x100; 
        pbStr[3] = bDigToAsc(wHit0 / 0x10); 
        wHit0 %= 0x10; 
        pbStr[4] = bDigToAsc(wHit0); 
        pbStr[5] = bDigToAsc(wHit1 / 0x1000); 
        wHit1 %= 0x1000; 
        pbStr[6] = bDigToAsc(wHit1 / 0x100); 
        wHit1 %= 0x100; 
        pbStr[7] = bDigToAsc(wHit1 / 0x10); 
        wHit1 %= 0x10; 
        pbStr[8] = bDigToAsc(wHit1); 
        pbStr[9] = bDigToAsc(wMiss / 0x1000); 
        wMiss %= 0x1000; 
        pbStr[10] = bDigToAsc(wMiss / 0x100); 
        wMiss %= 0x100; 
        pbStr[11] = bDigToAsc(wMiss / 0x10); 
        wMiss %= 0x10; 
        pbStr[12] = bDigToAsc(wMiss); 
        vOsdPosShowArg(OSD_POS_KSINFO, OSD_MSG_KSHITMISS, OSD_TIMEOUT, pbStr); 
  #endif 
      } 
#endif /* KARAOKE_SCORING */ 
      break; 
    } 
 
    default: 
      break; 
  } 
} 
 
/************************************************************************ 
     Function : 
  Description : 
    Parameter : 
    Return    : 
************************************************************************/ 
void vGroupNvUpdateAngle(BYTE bAglNo, BYTE bAglNs) large 
{ 
  if (bAglNs > 9) 
  { 
    bAglNs = 0; 
  } 
 
  if (bAglNs > 1) 
    vVfdSymbol(VFD_SYM_ANGLE_ON);  	 
  else 
    vVfdSymbol(VFD_SYM_ANGLE_OFF);  	 
 
 
  if (fgIsInputStateValid(INPUT_STATE_ANGLE_CHANGE)) 
  { 
    if (bAglNs > 1) 
    { 
      vOsdShowAngle(OSD_ANGLE_HILI, bAglNo, bAglNs); 
    } 
    else 
    { 
      fgSetPlayPostKey(IR_TIME_OUT); 
    } 
  } 
  else if (fgIsAngleShow()) 
  { 
    vOsdShowAngle(OSD_ANGLE_NORMAL, bAglNo, bAglNs); 
  } 
  else 
  { 
    vOsdShowAngle(OSD_ANGLE_CLEAR, 0, 0); 
  } 
} 
 
/************************************************************************ 
     Function : 
  Description : 
    Parameter : 
    Return    : 
************************************************************************/ 
void vGroupNvUpdate(BYTE bItem) large 
{ 
  BYTE bMode, bDefMode; 
 
  switch (bItem) 
  { 
    case bSIItemIndex(SI_AGL_NS): 
    case bSIItemIndex(SI_AGL_NO): 
    { 
      vGroupNvUpdateAngle(bSharedInfo(SI_AGL_NO), bSharedInfo(SI_AGL_NS)); 
       
#ifdef PLAYER_GOTO 
      if (fgIsInGoto())  // megaa Goto 
      { 
        vShowGotoAngle(); 
      } 
#endif 
       
      break; 
    } 
 
    case bSIItemIndex(SI_TT_NO):   /* SI_FILE_NS_HI */ 
    case bSIItemIndex(SI_TT_NS):   /* SI_FILE_NS_LO */ 
    case bSIItemIndex(SI_CHAP_NO): /* SI_TRACK_NO, SI_FILE_NO_HI */ 
    case bSIItemIndex(SI_CHAP_NS): /* SI_TRACK_NS, SI_FILE_NO_LO */ 
    { 
      vOsdDisplayChange(DISP_PLAY_INFO, bItem); 
       
#ifdef PLAYER_GOTO 
      if (fgIsInGoto())  // megaa Goto 
      { 
  #ifdef GOTO_IN_TRACK_ONLY 
        if (fgIsVcdPlay() && (fgChkGotoExit() == TRUE)) 
        { 
        #ifndef BBK 
          fgSetPlayPostKey(IR_GOTO); 
        #else 
          fgSetPlayPostKey(IR_WIN_GOTO); 
        #endif 
 
        } 
        else 
  #endif /* GOTO_IN_TRACK_ONLY */ 
        { 
          vUpdateGotoShow(GOTO_SHOW_PANEL_ALL); 
          vShowGotoChapter(); 
          vShowGotoTitle(); 
          vShowGotoTime(); 
          vShowGotoTimeCH(); 
        } 
      } /* fgIsInGoto() */ 
#endif /* PLAYER_GOTO */ 
#ifdef KARAOKE_SCORING 
      vAdspResetKScore(); 
#endif /* KARAOKE_SCORING */ 
      break; 
    } 
 
    case bSIItemIndex(SI_DVD_DOM): /* SI_VCD_DOM */ 
#ifdef PLAYER_GOTO 
      // megaa Goto begin 
      if (fgIsInGoto()) 
      { 
  #ifdef GOTO_VTSTT_DOM_ONLY 
        if (fgChkGotoExit() == TRUE) 
        { 
        #ifndef BBK 
          fgSetPlayPostKey(IR_GOTO); 
        #else 
          fgSetPlayPostKey(IR_WIN_GOTO); 
        #endif 
 
        } 
        else 
  #endif 
        { 
          vShowGotoChapter(); 
          vShowGotoTitle(); 
          vShowGotoAngle(); 
          vDealGotoAudio(FALSE); 
          if (bSharedInfo(SI_DVD_DOM) == SV_VTSTT_DOM) 
          { 
            vDealGotoSubtitle(FALSE); 
          } 
          else 
          { 
            vShowGotoSubtitle(OSD_MSG_OFF); 
          } 
        } 
      } /* fgIsInGoto() */ 
#endif /* PLAYER_GOTO */ 
 
      if (fgIsDvdPlay()) 
      { 
        vDVDShowDomainInfo(); 
      } 
      else if (fgIsVcdPlay()) 
      { 
        vVCDShowDomainInfo(); 
      } 
      break; 
 
    case bSIItemIndex(SI_DVD_MENU_TYPE): 
      /* vDVDShowMenuType(); */ 
       
#ifdef PLAYER_GOTO 
      if (fgIsInGoto())  // megaa Goto !!!!!!!!!!!! 
      { 
        vUpdateGotoShow(GOTO_SHOW_PANEL_ALL); 
        vShowGotoSubtitle(OSD_MSG_OFF); 
        vShowGotoTime(); 
        vShowGotoTimeCH(); 
        #ifndef NEW_WINGOTO		 
        vShowGotoRepeat(OSD_MSG_OFF); 
	#endif	 
      } 
#endif /* PLAYER_GOTO */ 
       
      break; 
 
    /* case bSIItemIndex(SI_STILL_SWITCH): */ 
#ifdef PLAYER_GOTO 
    case bSIItemIndex(SI_HLI_STATE): 
    { 
  #ifdef GOTO_VTSTT_DOM_ONLY 
      if (fgIsInGoto()) 
      { 
        if (fgChkGotoExit() == TRUE) 
        { 
        #ifndef BBK 
          fgSetPlayPostKey(IR_GOTO); 
        #else 
          fgSetPlayPostKey(IR_WIN_GOTO); 
        #endif 
 
        } 
      } 
  #endif /* GOTO_VTSTT_DOM_ONLY */ 
      break; 
    } 
#endif /* PLAYER_GOTO */ 
 
    case bSIItemIndex(SI_PBC_CTRL_VALID): 
    { 
      /* assume only SVCD/VCD notify this */ 
      if ((bSharedInfo(SI_PBC_CTRL_VALID) == SV_PBC_OFF) || 
          (bSharedInfo(SI_VCD_PBC_OFF) == TRUE)) 
      { 
        vOsdPosShow(OSD_POS_PBC_2, OSD_MSG_PBC_OFF, OSD_TIMEOUT_SHORT); 
      } 
      else /* disc with PBC and allow it on */ 
      { 
        vOsdPosShow(OSD_POS_PBC_2, OSD_MSG_PBC_ON, OSD_TIMEOUT_SHORT); 
      } 
      break; 
    } 
 
    case bSIItemIndex(SI_ASPECT_CHG_VALID): 
    { 
      /* redraw general page 
         1. if setup menu on & 
         2. current show page is general page 
       */ 
      vSetupAspChg(); 
/* 
      bDefMode = bSharedInfo(SI_ASPECT_CHG_VALID) ; 
      bMode = bEepromReadByte(ASPECT_POSITION); 
 
#ifdef TREAT_PS_LB_AS_THE_SAME 
      if ((bMode == SV_4_3_PS) && (!(SV_PSCAN_ON & bDefMode))) 
        bMode = SV_4_3_LB ; 
      else if ((bMode == SV_4_3_LB) && (!(SV_LB_ON & bDefMode))) 
        bMode = SV_4_3_PS ; 
#endif 
      vSetSharedInfo(SI_FORCE_ASPECT_RATIO, bMode); 
      vSetSharedInfo(SI_ASPECT_RATIO, bMode); 
 
      if (SV_BLOCK_ON & bDefMode) 
        vNotifySharedInfo(SI_FORCE_ASPECT_RATIO, 0, 0); 
      else 
        vNotifySharedInfo(SI_ASPECT_RATIO, 0, 0); 
*/ 
      break; 
    } 
 
    default: 
      break; 
  } 
} 
 
/************************************************************************ 
     Function : 
  Description : 
    Parameter : 
    Return    : 
************************************************************************/ 
void vGroupStreamUpdate(BYTE bItem) large 
{ 
  BYTE bTmp1, bTmp2; 
 
  vVfdUpdateAudCh(bItem); 
  switch (bItem) 
  { 
#ifdef PLAYER_GOTO 
    // megaa Goto begin 
    case bSIItemIndex(SI_AST_NO): 
    { 
      if (fgIsInGoto()) 
      { 
        vDealGotoAudio(FALSE); 
      } 
      break; 
    } 
    case bSIItemIndex(SI_SPST_NO): 
    { 
      if (fgIsInGoto()) 
      { 
        vDealGotoSubtitle(FALSE); 
      } 
      break; 
    } 
    // megaa Goto end 
#endif 
     
    case bSIItemIndex(SI_A_CODE_MODE): 
    { 
      bTmp1 = bSharedInfo(SI_A_CODE_MODE); 
      bTmp2 = bSharedInfo(SI_DISC_TYPE); 
 
      vVfdUpdateAudType(); 
      vAdspAudioTypeChange(bTmp1, bTmp2, SV_DISC_IDENTIFIED); 
 
#ifdef PLAYER_GOTO 
      if (fgIsInGoto())  // megaa Goto 
      { 
        vDealGotoAudio(FALSE); 
      } 
#endif 
 
      if (fgIsVcdPlay()) 
      { 
        /* update panel L/R icon, not show OSD */ 
        vVCDShowAudioLR(FALSE); 
      } 
      else if (fgIsCddaPlay()) 
      { 
        /* update panel L/R icon, not show OSD */ 
        vVCDShowAudioLR(FALSE); 
 
#ifdef SHOW_CD_STREAM_TYPE 
        if (bTmp1 == SV_A_CODE_HDCD) 
        { 
          vOsdPosShow(OSD_POS_DISC_TYPE, OSD_MSG_HDCD, OSD_TIMEOUT); 
//bywhy 2003/04/21 for LCD display "HDCD" 
	#ifdef VFD_HDCD_DISP 
	  vVfdSymbol(VFD_SYM_HDCD); 
	#endif 
        } 
        else if (bTmp1 == SV_A_CODE_PCM) 
        { 
          vOsdPosShow(OSD_POS_DISC_TYPE, OSD_MSG_CD, OSD_TIMEOUT); 
//bywhy 2003/04/21 for LCD display "HDCD" 
	#ifdef VFD_HDCD_DISP 
	  vVfdSymbol(VFD_SYM_CDDA); 
	#endif 
        } 
#endif /* SHOW_CD_STREAM_TYPE */ 
#ifdef VFD_HDCD_LED 
        if (bSharedInfo(SI_TRACK_NO) > 1) 
        { 
          if (bTmp1 == SV_A_CODE_HDCD) 
          { 
             vVfdLed(0, TRUE); 
          } 
          else 
          { 
            vVfdLed(0, FALSE);             
          } /* SI_A_CODE_MODE */ 
        } 
#endif /* VFD_HDCD_LED */ 
      } 
#ifdef AUDIO_IN_EN 
      else if (fgIsAinPlay()) 
      { 
        vAINShowSwitchType(bTmp1); 
      } 
#endif /* AUDIO_IN_EN */ 
 
      break; 
    } /* SI_A_CODE_MODE */ 
 
    case bSIItemIndex(SI_A_CH_CFG): 
    { 
      /* assume audio code is valid */ 
      bTmp1 = bSharedInfo(SI_A_CH_CFG); 
      bTmp2 = bSharedInfo(SI_A_CODE_MODE); 
 
#ifdef PLAYER_GOTO 
      if (fgIsInGoto())  // megaa Goto 
      { 
        vDealGotoAudio(FALSE); 
      } 
#endif 
 
      if (fgIsVcdPlay() || fgIsCddaPlay()) 
      { 
        vVCDShowAudioLR(FALSE); 
      } 
      break; 
    } /* SI_A_CH_CFG */ 
 
#ifdef AUDIO_IN_EN 
    case bSIItemIndex(SI_DSP_CH_CFG): 
    { 
      if (fgIsAinPlay()) 
      { 
        vAINUpdateChInfo(); 
      } 
      break; 
    } 
#endif /* AUDIO_IN_EN */ 
 
    case bSIItemIndex(SI_A_APPL_MODE): 
    { 
      bTmp1 = bSharedInfo(SI_A_APPL_MODE); 
 
      if (fgIsDvdPlay()) 
      { 
        vShowAudioAppl(bTmp1); 
      } 
#ifdef AUDIO_IN_EN 
      else if (fgIsAinPlay()) 
      { 
        vAINShowKaraFlag(bTmp1); 
      } 
#endif /* AUDIO_IN_EN */ 
      break; 
    } /* SI_A_APPL_MODE */ 
 
    case bSIItemIndex(SI_ISO_ITEM_TYPE): /* SI_VCD_ITEM_TYPE */ 
    { 
      bTmp1 = bSharedInfo(SI_ISO_ITEM_TYPE); 
 
      if (fgIsVcdPlay()) 
      { 
        /* not impletement yet! */ 
      } 
#ifdef SUPPORT_DATA_DISC 
      else if (fgIsIsoPlay()) 
      { 
        if ((fgIsIsoItemAOnly(bTmp1) && fgFlCheckStatus(FL_STATUS_IN_MENU)) || 
            (fgIsIsoItemStill(bTmp1) && fgFlCheckStatus(FL_STATUS_IN_JPEG)) || 
            (fgIsIsoItemAV(bTmp1) && fgFlCheckStatus(FL_STATUS_IN_MPEG))) 
        vISOShowItemType(bTmp1); 
      } 
#endif 
      break; 
    } /* SI_ISO_ITEM_TYPE */ 
 
    case bSIItemIndex(SI_V_FRAMERATE): 
    case bSIItemIndex(SI_V_HSIZE_L): 
    case bSIItemIndex(SI_V_HSIZE_H): 
    case bSIItemIndex(SI_V_VSIZE_L): 
    case bSIItemIndex(SI_V_VSIZE_H): 
    { 
      vShowVideoFormat(); 
      break; 
    } /* SI_V_FRAMERATE SI_V_HSIZE, SI_V_VSIZE */ 
 
    case bSIItemIndex(SI_V_BITRATE0): 
    case bSIItemIndex(SI_V_BITRATE1): 
    { 
      vShowVideoBitrate(); 
      break; 
    } /* SI_V_BITRATE */ 
 
    case bSIItemIndex(SI_NTSC_PAL): 
    { 
      bTmp1 = bSharedInfo(SI_PBC_STATE); 
 
#ifdef SUPPORT_DATA_DISC 
      if (fgIsPcdPlay()) 
      { 
        //if (fgIsInDigest(bTmp1)) 
        if (fgFlCheckStatus(FL_STATUS_IN_JPGDGST)) 
        { 
        #ifdef PLAYER_FLMENU 
          vFlRecover(); 
        #else 
          vFsMenuRecoverMenus(); 
        #endif 
        } 
      } 
      else if (fgIsIsoPlay()) 
      { 
        if (bSharedInfo(SI_ISO_ITEM_TYPE) == SV_ISO_JPG) 
        { 
          //if (fgIsInDigest(bTmp1)) 
          if (fgFlCheckStatus(FL_STATUS_IN_JPGDGST)) 
          { 
          #ifdef PLAYER_FLMENU 
            vFlRecover(); 
          #else 
            vFsMenuRecoverMenus(); 
          #endif 
          } 
        } 
      } 
#endif 
      break; 
    } /* SI_NTSC_PAL */ 
 
    default: 
      break; 
  } 
} 
 
/************************************************************************ 
     Function : 
  Description : 
    Parameter : 
    Return    : 
************************************************************************/ 
void vGroupAudioStatusUpdate(BYTE bItem) large 
{ 
  switch (bItem) 
  { 
    case bSIItemIndex(SI_A_FREQ): 
      break; 
 
    case bSIItemIndex(SI_A_SRC_FREQ): 
    case bSIItemIndex(SI_A_BITLEN): 
    { 
      vShowAudioFreqBitLen(); 
    } 
 
    case bSIItemIndex(SI_A_UPSAMPLING): 
    { 
#ifdef AUDIO_IN_EN 
      if (fgIsAinPlay()) 
      { 
        vAINUpdateUpsmapling(); 
      } 
#endif /* AUDIO_IN_EN */ 
      break; 
    } 
 
    case bSIItemIndex(SI_A_BITRATE0): 
    case bSIItemIndex(SI_A_BITRATE1): 
    { 
      vShowAudioBitrate(); 
      break; 
    } /* SI_A_BITRATE */ 
 
    case bSIItemIndex(SI_A_EFFECT_0): 
    case bSIItemIndex(SI_A_EFFECT_1): 
    case bSIItemIndex(SI_A_EFFECT_2): 
    case bSIItemIndex(SI_A_EFFECT_3): 
    { 
#ifdef AUDIO_IN_EN 
      if (fgIsAinPlay()) 
      { 
        vAINShow3DMark(); 
      } 
#endif /* AUDIO_IN_EN */ 
      break; 
    } /* SI_A_EFFECT_0 */ 
 
    default: 
      break; 
  } 
} 
 
/************************************************************************ 
     Function : 
  Description : 
    Parameter : 
    Return    : 
************************************************************************/ 
void vGroupUsrCtrlUpdate(BYTE bItem) large 
{ 
  switch (bItem) 
  { 
    case bSIItemIndex(SI_USR_PROGRAM_NO): 
      break; 
 
    case bSIItemIndex(SI_USR_DIGEST_NO): 
      if (fgIsInputStateValid(INPUT_STATE_DIGEST)) 
      { 
        vDigestHandleUpdate(DGST_UPD_NO, bSharedInfo(SI_USR_DIGEST_NO)); 
      } 
      break; 
 
    default: 
      break; 
  } 
} 
 
/************************************************************************ 
     Function : 
  Description : 
    Parameter : 
    Return    : 
************************************************************************/ 
void vGroupMemoryUpdate(BYTE bItem) large 
{ 
  BYTE bTmp1; 
   
  switch (bItem) 
  { 
#if 0 
    case bSIItemIndex(SI_LASTMEM_NS): 
      /* the SI_LASTMEM_NS contain the valid slot no. */ 
#if (defined(VCD_LAST_MEM) || defined(DVD_LAST_MEM) || defined(CDDA_LAST_MEM)) 
      if ((bSharedInfo(SI_LASTMEM_NS) > 0) && (bSharedInfo(SI_LAST_MEM) == EV_ON)) 
      { 
        if (fgIsIsoPlay()) 
        { 
          //vOsdPosShow(OSD_POS_DISC_TYPE, OSD_MSG_LAST_MEMORY, OSD_TIMEOUT); 
 
        } 
  #ifdef AUDIO_IN_EN 
        else if (fgIsAinPlay()) 
        { 
          /* do nothing */ 
        } 
  #endif /* AUDIO_IN_EN */ 
        else /* if (fgIsNonPlay() == FALSE) */ 
        { 
          //vOsdPosShow(OSD_POS_LAST_MEM, OSD_MSG_LAST_MEMORY, OSD_TIMEOUT); 
 
        } 
      } 
#endif 
      break; 
 
#ifdef MEMORY_SUPPORT 
    case bSIItemIndex(SI_MEMORY_RES): 
    { 
        bTmp1 = bSharedInfo(SI_MEMORY_RES); 
 
        switch (bTmp1) 
        { 
          case SV_MEM_STORE: 
            //vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_MEMORY_STORE, OSD_TIMEOUT_SHORT); 
             
            break; 
 
          case SV_MEM_PLAY: 
            //vOsdPosShow(OSD_POS_NORMAL, OSD_MSG_MEMORY_PLAY, OSD_TIMEOUT_SHORT); 
            break; 
 
          case SV_MEM_ERR: 
          default: 
            break; 
        } 
      break; 
    } 
#endif /* MEMORY_SUPPORT */ 
#endif 
 
#ifdef BBK_LAST_MEMORY 
    case bSIItemIndex(SI_LASTMEM_NS): 
    	 
    if(!_fgPlayFromMemory && bSharedInfo(SI_LASTMEM_NS)) 
    { 
      _fgPlayFromMemory = TRUE; 
      _bInputState = INPUT_STATE_LAST_MEMORY; 
      _bJYTimer = 250; //BillDen   
      vOsdPosShow(OSD_POS_LAYER2_LINE2, OSD_MSG_JIYITISI1, OSD_NO_DISAPPEAR); 
      vOsdPosShow(OSD_POS_LAYER2_LINE3, OSD_MSG_JIYITISI2, OSD_NO_DISAPPEAR); 
    }         
    break; 
#endif 
 
#ifdef EN_DISC_ID_CHK 
    case bSIItemIndex(SI_DISC_ID): 
      vSetDiscInitFlag(DISC_INIT_DISC_ID); 
      if (fgIsDiscInitFinished()) 
      { 
        vSendPeriCmd(MISC_CMD_EEPROM_SVC, EEPROM_CMD_CHK_DISC_ID, 0); 
      } 
      break; 
#endif /* EN_DISC_ID_CHK */ 
       
    default: 
      break; 
  } 
} 
 
/************************************************************************ 
     Function : 
  Description : 
    Parameter : 
    Return    : 
************************************************************************/ 
void vHandleInfoUpdate(BYTE bGroup, BYTE *pbItem) large 
{ 
  BYTE i; 
 
  void (code *pfUpdate)(BYTE) large; 
 
  pfUpdate = 0; 
 
  switch (bGroup) 
  { 
    case SI_PBC_GRP: 
      /* the play type check is in the vGroupPbcUpdate() */ 
      pfUpdate = vGroupPbcUpdate; 
      break; 
 
    case SI_NV_GRP: 
      if (!fgIsNonPlay()) 
      { 
        pfUpdate = vGroupNvUpdate; 
      } 
      break; 
 
    case SI_STREAM_STATUS_GRP: 
      if (!fgIsNonPlay()) 
      { 
        pfUpdate = vGroupStreamUpdate; 
      } 
      break; 
 
    case SI_AUDIO_STATUS_GRP: 
      if (!fgIsNonPlay()) 
      { 
        pfUpdate = vGroupAudioStatusUpdate; 
      } 
      break; 
 
    case SI_USR_CTRL_GRP: 
      if (!fgIsNonPlay()) 
      { 
        pfUpdate = vGroupUsrCtrlUpdate; 
      } 
      break; 
 
    case SI_TIME_INFO_GRP: 
      if (!fgIsNonPlay()) 
      { 
        pfUpdate = vGroupTimeUpdate; 
      } 
      break; 
 
#ifdef LOAD_USR_PWD_FILE 
    case SI_PWD_FILENAME_GRP: 
      break; 
#endif 
 
    case SI_MEMORY_GRP: 
      pfUpdate = vGroupMemoryUpdate; 
      break; 
 
    default: 
      return; 
  } 
 
  if (pfUpdate != 0) 
  { 
    for (i = 0; i < 3; i++) 
    { 
      if (pbItem[i] == 0xff) 
      { 
        continue; 
      } 
      else 
      { 
        pfUpdate(pbItem[i]); 
 
        /* check update info count */ 
#ifdef ACCEL_SI_PROC 
        if (_bShmUpdCnt > 0) 
        { 
          _bShmUpdCnt--; 
        } 
#endif 
      } 
    } 
  } /* if (pfUpdate != 0) */ 
} 
 
/** 
 *  Update the DFI information from the shared info provided by RISC. 
 * 
 *  NOTE: We handle the information for data range only. 
 *  1. update start offset from 0x30000 
 *  2. update max lb_addr and end position of layer 0 
 *  3. update end position of layer 1 if necessary 
 * 
 *  UPDATE GLOBAL: 
 *  _dEndPSN0, _dEndPSN1, _dMaxLBA, _fgTwoLayer, _fgPTP 
 */ 
static void vUpdateDfi(void) large 
{ 
  /* access the external variables defined in channel decoding module */ 
  extern DWRD xdata _dwDataAreaOfst; 
  extern DWRD xdata _dEndPSN0, _dEndPSN1; 
  extern DWRD idata _dMaxLBA; 
  extern BIT _fgTwoLayer, _fgPTP; 
 
  BYTE bDs; /* disc structur */ 
 
  /* update data area offset */ 
  bHiByte(wHiWord(_dwDataAreaOfst)) = bSharedInfo(SI_UPDATE_DFI_START + 4); 
  bLoByte(wHiWord(_dwDataAreaOfst)) = bSharedInfo(SI_UPDATE_DFI_START + 5); 
  bHiByte(wLoWord(_dwDataAreaOfst)) = bSharedInfo(SI_UPDATE_DFI_START + 6); 
  bLoByte(wLoWord(_dwDataAreaOfst)) = bSharedInfo(SI_UPDATE_DFI_START + 7); 
  _dwDataAreaOfst -= 0x030000L; 
 
  /* update the max lb_addr */ 
  bHiByte(wHiWord(_dMaxLBA)) = bSharedInfo(SI_UPDATE_DFI_START + 8); 
  bLoByte(wHiWord(_dMaxLBA)) = bSharedInfo(SI_UPDATE_DFI_START + 9); 
  bHiByte(wLoWord(_dMaxLBA)) = bSharedInfo(SI_UPDATE_DFI_START + 10); 
  bLoByte(wLoWord(_dMaxLBA)) = bSharedInfo(SI_UPDATE_DFI_START + 11); 
 
  /* assign the max lb_addr to layer 0 end */ 
  _dEndPSN0 = _dMaxLBA; 
 
  bDs = bSharedInfo(SI_UPDATE_DFI_START + 2); 
  _fgTwoLayer = (bDs & 0x60) ? TRUE : FALSE; 
  _fgPTP = (bDs & 0x10) ? FALSE : TRUE; 
  if (_fgTwoLayer) { 
    /* case for DL */ 
    if (!_fgPTP) { 
      /* not PTP, then OTP */ 
      _dEndPSN1 = _dEndPSN0; 
      bHiByte(wHiWord(_dEndPSN0)) = bSharedInfo(SI_UPDATE_DFI_START + 12); 
      bLoByte(wHiWord(_dEndPSN0)) = bSharedInfo(SI_UPDATE_DFI_START + 13); 
      bHiByte(wLoWord(_dEndPSN0)) = bSharedInfo(SI_UPDATE_DFI_START + 14); 
      bLoByte(wLoWord(_dEndPSN0)) = bSharedInfo(SI_UPDATE_DFI_START + 15); 
 
      /* calculate the MAX lb_addr from layer 0 end */ 
      bHiByte(wHiWord(_dMaxLBA)) = 0xff; 
      _dMaxLBA = _dEndPSN0 + _dEndPSN0 - (~_dMaxLBA) + 1; 
    } 
    else { 
      /* PTP, don't care now */ 
    } 
  } 
  else { 
    /* case for SL and HL, do nothing here */ 
  } 
 
  return; 
} 
 
/************************************************************************ 
     Function : 
  Description : Dispatch share info update 
    Parameter : 
    Return    : 
************************************************************************/ 
void vSmUpdate(BYTE *pbInfo) large 
{ 
  BYTE bResult = UOP_UPDATE; 
 
  _dwIrDoneParm = 0x0; 
  _rOsdStateCtx.fgUopUpdate = ((pbInfo[0] & 0x80) != 0); 
 
  /* Jacob: for data area range update */ 
  if (pbInfo[0] == SI_DFI_GRP) { 
    vUpdateDfi(); 
  } 
 
#ifndef PLAYER_BASIC 
  #ifndef SUPPORT_DRM 
  if (fgIsFsMenuUpdate(pbInfo[0])) 
  #else 
  if ((fgIsDRMUpdate(pbInfo[0]))||(fgIsFsMenuUpdate(pbInfo[0]))) 
  #endif 
  { 
    _bIRKey = IR_CMD_DONE; 
    _dwIrDoneParm = (*(WORD *)pbInfo); 
    _dwIrDoneParm = _dwIrDoneParm << 16; 
    _dwIrDoneParm |= ((WORD)pbInfo[2] << 8); 
    _dwIrDoneParm |= pbInfo[3]; 
    #ifdef SUPPORT_DRM 
    if(fgIsDRMUpdate(pbInfo[0])) 
	{ 
		vDRMJudgeState(); 
		_bIRKey = IR_NONE; 
	} 
    else if(fgFsMenuState()) 
    { 
		_bIRKey = IR_NONE; // - clear the IR key. 
    } 
    #else	 
    // - enter state machine. 
    if (fgFsMenuState()) 
    { 
      _bIRKey = IR_NONE; // - clear the IR key. 
    } 
    #endif 
    /* don't continue to update info */ 
    vClearShmUpdCnt(); 
  } 
  else 
#endif /* PLAYER_BASIC */ 
  { 
    if (pbInfo[0] & 0x80) 
    { 
#if defined(NO_SM_NOTIFY) 
      _rOsdStateCtx.bUopRetId = bSharedInfo(SI_UOP_FIFO_START + _bShmRp * 4); 
      _rOsdStateCtx.bUopRetVal = bSharedInfo(SI_UOP_FIFO_START + _bShmRp * 4 + 1); 
#else 
      _rOsdStateCtx.bUopRetId = bSharedInfo(SI_UOP_ID); 
      _rOsdStateCtx.bUopRetVal = bSharedInfo(SI_UOP_RET_VAL); 
#endif 
 
      bResult = bHandleUopRet(_rOsdStateCtx.bUopRetId, _rOsdStateCtx.bUopRetVal); 
 
      /* don't continue to update info */ 
      vClearShmUpdCnt(); 
    } 
    else if (pbInfo[0] == SI_UOP_ERR_RET_GRP) 
    { 
#if defined(NO_SM_NOTIFY) 
      _rOsdStateCtx.bUopRetId = bSharedInfo(SI_UOP_FIFO_START + _bShmRp * 4); 
      _rOsdStateCtx.bUopRetVal = bSharedInfo(SI_UOP_FIFO_START + _bShmRp * 4 + 1); 
#else 
      _rOsdStateCtx.bUopRetId = bSharedInfo(SI_UOP_ID); 
      _rOsdStateCtx.bUopRetVal = bSharedInfo(SI_UOP_RET_VAL); 
#endif 
 
      bResult = bHandleErrRet(pbInfo[1]); 
 
      /* don't continue to update info */ 
      vClearShmUpdCnt(); 
    } 
 
    if (bResult == UOP_UPDATE) 
    { 
      vHandleInfoUpdate(pbInfo[0] & ~0x80, pbInfo + 1); 
    } 
  } 
 
  _rOsdStateCtx.fgUopUpdate = FALSE; 
  _rOsdStateCtx.bUopRetId = UOP_NONE; 
  _rOsdStateCtx.bUopRetVal = SV_NO_ERROR; 
} 
 
/************************************************************************ 
     Function : 
  Description : recall all displayed information 
    Parameter : 
    Return    : 
************************************************************************/ 
void vStatusDispRecall(void) large 
{ 
  BYTE bTmp; 
  BOOL fgRet; 
 
  /* recall display mode and info */ 
  vOsdDisplayChange(DISP_RECALL, 0); 
 
  /* recall repeat mode and user PBC state */ 
  vGroupPbcUpdateUsrCtrl(bSIItemIndex(SI_USR_AUX_CTRL)); 
 
  /* recall zoom mode */ 
  vOsdShowZoom(bSharedInfo(SI_ZOOM_SWITCH)); 
 
#ifdef PLAYER_ZOOMIN_INDICATOR 
  if (fgIsZoomBrShow()) 
  { 
    vZoomBrUpdate(); 
  } 
#endif /* PLAYER_ZOOMIN_INDICATOR */ 
 
  /* recall angle mark */ 
  vGroupNvUpdateAngle(bSharedInfo(SI_AGL_NO), bSharedInfo(SI_AGL_NS)); 
 
  /* recall audio stream status */ 
  //vGroupStreamUpdate(bSIItemIndex(SI_A_CODE_MODE)); 
  vGroupStreamUpdate(bSIItemIndex(SI_A_CH_CFG)); 
} 
 
// ********************************************************************* 
// Player display mode 
// ********************************************************************* 
static code const strucDisplayState prDisplayState[TOTAL_PLAY_TYPE] = 
{ 
  /* PLAY_TYPE_NONE */ 
  { 
    vResetOsdState, 
    0, 
    0, 
    0, 
    0, 
    0, 
    0, 
    0, 
    0 
  }, 
  /* PLAY_TYPE_DVD  */ 
  { 
    vDVDShowInit, 
    vDVDShowTimeMark, 
    vDVDShowRemainMsg, 
    vDVDShowPlayInfo, 
    vDVDShowTrick, 
    vDVDShowStopResumeState, 
    vDVDShowStopState, 
    vDVDStatusDispRecall, 
    vDVDChangeRemainType 
  }, 
  /* PLAY_TYPE_VCD  */ 
  { 
    vVCDShowInit, 
    vVCDShowTimeMark, 
    vVCDShowRemainMsg, 
    vVCDShowPlayInfo, 
    vVCDShowTrick, 
    vVCDShowStopResumeState, 
    vVCDShowStopState, 
    vVCDStatusDispRecall, 
    vVCDChangeRemainType 
  }, 
  /* PLAY_TYPE_ISO  */ 
#ifdef SUPPORT_DATA_DISC 
  { 
    vISOShowInit, 
    vISOShowTimeMark, 
    vISOShowRemainMsg, 
    vISOShowPlayInfo, 
    vISOShowTrick, 
    0, 
    vISOShowStopState, 
    vISOStatusDispRecall, 
    vISOChangeRemainType 
  }, 
#else 
  { 
    0, 
    0, 
    0, 
    0, 
    0, 
    0, 
    0, 
    0, 
    0 
  }, 
#endif 
#if (defined(SUPPORT_DATA_DISC) && defined(DDISC_FTYPE_JPEG_SUPPORT)) 
  /* PLAY_TYPE_PCD  */ 
  { 
    vPCDShowInit, 
    0, 
    0, 
0,//10/17am    vPCDShowPlayInfo, 
    0, 
    0, 
    vPCDShowStopState, 
    0, 
    0 
  }, 
#else 
  { 
    0, 
    0, 
    0, 
    0, 
    0, 
    0, 
    0, 
    0, 
    0 
  }, 
#endif 
  /* PLAY_TYPE_CDDA */ 
  { 
    vCDDAShowInit, 
    vVCDShowTimeMark, 
    vVCDShowRemainMsg, 
    vCDDAShowPlayInfo, 
    vCDDAShowTrick, 
    vCDDAShowStopResumeState, 
    vCDDAShowStopState, 
    vCDDAStatusDispRecall, 
    vVCDChangeRemainType 
  }, 
  /* PLAY_TYPE_AIN */ 
  { 
    vAINShowInit, 
    0, 
    0, 
    0, 
    0, 
    0, 
    0, 
    0, 
    0 
  } 
}; 
 
void vOsdDisplayChange(BYTE bIndex, BYTE bOption) large 
{ 
  /* check error condition */ 
  if (_bPlayType >= TOTAL_PLAY_TYPE) 
  { 
    return; 
  } 
 
  switch (bIndex) 
  { 
    case DISP_INIT: 
      if ((prDisplayState[_bPlayType]).vShowInit != 0) 
      { 
        (prDisplayState[_bPlayType]).vShowInit(); 
      } 
      break; 
 
    case DISP_TIME_MARK: 
#ifdef PLAYER_GOTO 
      // megaa Goto 
      if (fgIsInGoto()) 
      { 
        vUpdateGotoShow(GOTO_SHOW_PANEL_ALL); 
      } 
#endif 
 
      if ((prDisplayState[_bPlayType]).vShowTimeMark != 0) 
      { 
        (prDisplayState[_bPlayType]).vShowTimeMark(FALSE); 
      } 
       break; 
 
    case DISP_REMAIN_MSG: 
      if ((prDisplayState[_bPlayType]).vShowRemainMsg != 0) 
      { 
        (prDisplayState[_bPlayType]).vShowRemainMsg(bOption); 
      } 
       break; 
 
    case DISP_PLAY_INFO: 
      if ((prDisplayState[_bPlayType]).vShowPlayInfo != 0) 
      { 
        (prDisplayState[_bPlayType]).vShowPlayInfo(bOption); 
      } 
       break; 
 
    case DISP_TRICK: 
      if ((prDisplayState[_bPlayType]).vShowTrick != 0) 
      { 
        (prDisplayState[_bPlayType]).vShowTrick(bOption); 
      } 
      break; 
 
    case DISP_STOP_RESUME: 
      if ((prDisplayState[_bPlayType]).vShowStopResumeState != 0) 
      { 
        (prDisplayState[_bPlayType]).vShowStopResumeState(); 
      } 
      break; 
 
    case DISP_STOP: 
      if ((prDisplayState[_bPlayType]).vShowStopState != 0) 
      { 
        (prDisplayState[_bPlayType]).vShowStopState(); 
      } 
      break; 
 
    case DISP_RECALL: 
      if ((prDisplayState[_bPlayType]).vStatusDispRecall != 0) 
      { 
        (prDisplayState[_bPlayType]).vStatusDispRecall(); 
      } 
      break; 
 
    case DISP_REMAIN_CHG: 
      if ((prDisplayState[_bPlayType]).vChangeRemainType != 0) 
      { 
        _rOsdStateCtx.bTimeType = bOption; 
        (prDisplayState[_bPlayType]).vChangeRemainType(bOption); 
      } 
      break; 
 
    case DISP_REMAIN_CHG_INIT: 
      if ((prDisplayState[_bPlayType]).vChangeRemainType != 0) 
      { 
        _rOsdStateCtx.bTimeType = bOption; 
        (prDisplayState[_bPlayType]).vChangeRemainType(OSD_SHOW_DISP_CHG_INIT); 
      } 
      break; 
 
    case DISP_REMAIN_CHG_EXIT: 
      if ((prDisplayState[_bPlayType]).vChangeRemainType != 0) 
      { 
        (prDisplayState[_bPlayType]).vChangeRemainType(OSD_SHOW_DISP_CHG_EXIT); 
      } 
      break; 
 
    default: 
      return; 
  } 
}