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

📄 cderr.c

📁 这是一个VCD解码的学习资料,主要是CD SERVO 的一些源代码!以供大家参考!
💻 C
📖 第 1 页 / 共 2 页
字号:
          		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 + -