📄 cderr.c
字号:
cd_seek_error=0;
}else
{
if( (!( psd_state&PSD_SEL_LIST ))&&(!( psd_state&PSD_PLAY_SEG )) )
{
#ifdef MONE_CDERR_LEVEL1
printf("not menu\n");
#endif
t_msf = addmsf_ss(s_msf,q);
}else
{
#ifdef MONE_CDERR_LEVEL1
printf("menu\n");
#endif
t_msf = addmsf(s_msf,1);
}
}
}
if((play_state==VCD_STATE_SLOW) || (play_state==VCD_STATE_STEP)) //kevinlu 01-6-12 11:57
t_msf=addmsf_ss(t_msf,1); //test 01-6-13 14:39
else
t_msf=addmsf_ss(t_msf,adv_search_time*5);
if( !(psd_state&PSD_PLAY_TRACK)||ChkTrkTmByMSF(t_msf&0x00ffffff) )
{//terry,2001/3/3 05:53PM
s_msf=t_msf;
do_cd_seek(-4);
}else
cd_seek_error=0;
}else
{
UINT32 now,max,min;
now=s_msf&0x00ffffff;
max=gettrkmsf_leadout();
min=gettrkmsf(1)&0x00FFFFFF;
if( (now<max)&&(now>=min) )
{
if(IsAVDData())
{
cd_seek_error=0;
do_cd_seek(-4);
}else
{
if(cd_seek_error>cd_seek_error_max)
{
cd_seek_error=0;
#ifndef MP3_NEW_ERR_HANDLER
s_msf=addmsf_ss(s_msf,1+adv_search_time*5);
do_cd_seek(-4);
#else
Mp3Seek(3,1);
#endif
}else
{
#ifndef MP3_NEW_ERR_HANDLER
s_msf=addmsf(s_msf,cd_seek_error-1+adv_search_time*5);
do_cd_seek(-4);
#else
Mp3Seek(cd_seek_error-1+adv_search_time*5,1);
#endif
}
}
}else
{
cd_seek_error=0xff;
}
}
}
/*
** default: giveup.
*/
timestamp_cd = regs0->rtc_15_0;
return 0;
}
/*
** FUNCTION
** ServoRecoverFail
**
** DESCRIPTION
**
*/
void ServoRecoverFail(void)
{//terry 11/04
UINT32 t_msf;
#ifdef CDERR_RECOVER
printf("recover\n");
#endif
RetryFlyingDisk++;
if( IsAVDData() || dsa_state )
{
switch(dsa_state)
{
case DSA_READTOC:
#ifdef CDERR_RECOVER
printf("recover toc\n");
#endif
dsaSendCommand(DSA_READ_TOC|SessionNs);
break;
case DSA_READLONGTOC:
#ifdef CDERR_RECOVER
printf("recover long toc\n");
#endif
dsaSendCommand(DSA_READ_LONG_TOC|SessionNs);
break;
default:
#ifdef CDERR_RECOVER
printf("recover data\n");
#endif
if(RetryFlyingDisk>1)
{
RetryFlyingDisk=0;
StopSeek();
}else
cd_func_gotomsf(s_msf);
}
}else
{
//int i;
if(RetryFlyingDisk>50)
{
#ifdef CDERR_RECOVER
printf("recover4\n");
#endif
RetryFlyingDisk=0;
ircmd_stop();
}else
{
#ifdef CDERR_RECOVER
printf("recover2\n");
#endif
if(play_state==VCD_STATE_PAUSE)
{
t_msf=s_msf;
}
else
{
if( (psd_state==(PSD_SEL_LIST|PSD_PLAY_SEG)) )
{
#ifdef CDERR_RECOVER
printf("recover2-1\n");
#endif
t_msf = addmsf_ss(s_msf,1);
}else
{
if(RetryFlyingDisk<4)
{
#ifdef CDERR_RECOVER
printf("recover2-2\n");
#endif
t_msf = addmsf_ss(s_msf,RetryFlyingDisk+adv_search_time*5);
#ifdef MP3_NEW_ERR_HANDLER
if(cd_type_loaded==CDROM)
{
Mp3Seek(3*RetryFlyingDisk,1);
return;
}
#endif
}else
{
#ifdef CDERR_RECOVER
printf("recover2-3\n");
#endif
#ifdef MP3_NEW_ERR_HANDLER
t_msf = addmsf_ss(s_msf,RetryFlyingDisk*2+adv_search_time*5);
if(cd_type_loaded==CDROM)
{
Mp3Seek(3*RetryFlyingDisk*5,1);
return;
}
#else
t_msf = addmsf_ss(s_msf,RetryFlyingDisk*5+adv_search_time*5);
#endif
}
}
}
if(cd_type_loaded==CDROM)
{
if(RetryFlyingDisk>5)
{
#ifdef CDERR_RECOVER
printf("recover timeout\n");
#endif
s_len=0;
//RetryFlyingDisk=0;
return;
}
}
if((cd_type_loaded==CDROM) || ChkTrkTmByMSF(t_msf&0x00ffffff))
{
#ifdef CDERR_RECOVER
printf("recover3-1\n");
#endif
s_msf=t_msf;
if( !((play_state==VCD_STATE_PAUSE)&&(cd_type_loaded==CDDA)) )
{
#ifdef CDERR_RECOVER
printf("goto:%ld\n",s_msf);
#endif
//reset_audio();
if(cd_type_loaded!=CDDA)
cd_func_stop();
cd_func_gotomsf(addmsf(s_msf, -6));
}
}
#ifdef CDERR_RECOVER
else
printf("err msf:%ld\n",s_msf);
#endif
}
}
}
void ServoFocusFail(void)
{
UINT32 t_msf;
#ifdef CDERR_RECOVER
printf("focus fail (%d):%ld\n",RetryFlyingDisk,s_msf);
#endif
if(dsa_state)
{
regs0->rtc_31_16 = 0;/*jhuang 2001/5/7 05:31PM FOCUS fail reset rtc timer*/
ServoRecoverFail();
}else
RetryFlyingDisk++;
switch(system_state)
{
case SYSTEM_READ_TITLE:
if(RetryFlyingDisk>2)//wctseng suggest
{
//cd_func_stop();//terry,2000/12/21 07:22PM
play_state = VCD_STATE_IDLE;
}
break;
case SYSTEM_BROWSE:
if(dsa_state)
break;
if(RetryFlyingDisk>1)
{
if(RetryFlyingDisk<50)
{
BYTE i;
if(cd_type_loaded!=CDDA)
{
cd_func_stop();
for(i=0;i<100;i++)
{
polling();
}
}
#ifdef MP3_NEW_ERR_HANDLER
if(cd_type_loaded==CDROM)
{
Mp3Seek(3*RetryFlyingDisk*5,1);
return;
}
#endif
t_msf = addmsf_ss(s_msf,RetryFlyingDisk+adv_search_time*5);
if((cd_type_loaded==CDROM)||ChkTrkTmByMSF(t_msf&0x00ffffff))
{
#ifdef CDERR_RECOVER
printf("focus fail goto:%ld\n",t_msf);
#endif
s_msf=t_msf;
cd_func_gotomsf(addmsf(s_msf, -6));
}
}else
ircmd_stop();
}else
{
#ifdef CDERR_RECOVER
printf("focus fail retry:%ld\n",s_msf);
#endif
goto_active=1;
do_cd_seek(-6);
}
break;
}
}
void ChkCdTLErr(int mode)
{//terry,2000/12/19 05:29PM
if( (system_state!=SYSTEM_BROWSE)&&(system_state!=SYSTEM_READ_TITLE) )
{
//printf("&");
return;
}
switch(play_state)
{
case VCD_STATE_STEP:
if(P_frame)
break;
case VCD_STATE_PAUSE:
case VCD_STATE_STOP:
//printf("a");
return;
}
if(mode)
{
UINT16 stmp = regs0->rtc_15_0;
UINT16 diff = (stmp-timestamp_cd) & 0xffff;
if (diff > MaxTL_tm)
{
if(cd_type_loaded==CDROM)
MaxTL_tm=300;
else
MaxTL_tm=200;
if(mode==2)
{
continue_audio();
RetryFlyingDisk=0;
cderr_clear_seekerr();
}else
{
goto_active=0x01;
cderr_handler(CDERR_SEEK_TOO_LONG);
}
}//else
// printf("%d,",diff);
}else
{
#ifndef PHILIPS_SERVO
cderr_clear_seekerr();
#endif
RetryFlyingDisk=0;
timestamp_cd = regs0->rtc_15_0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -