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

📄 svostate.c

📁 一个完整DVDROM代码(使用日立PICKUP)
💻 C
📖 第 1 页 / 共 5 页
字号:
            bServoState=IDLE_STATE;
            bPhase=bSubPhase=0;
			break;    		
    		}
//	PowerSave mode &&&
#endif
        LDOff();
        HoldVCO();
        WrDSP(0x5F,0x80);  //1c13a02b
        TurnOffAudio();
#if PORTABLE_DEVICE
#else        
        TrayOff();//1912a01j
#endif
        //1912a01j bbCurrentFrmType=NO_DISC;
        bPStatus=ERROR;
        ibMediaEvent=0x03;
        fTOC=FALSE;

        bSUSubPhase=0;
        bPhase++;
#if PORTABLE_DEVICE
		fSB=1;
#elif SHINWA_SLOTIN
		fMiniDisc = SW2_OFF;
//		fNoSledHome=0;
//		if( (bbCurrentFrmType==NO_DISC) && SW3_OFF )
//			fSB=0;
//		else
			fSB=1;
            if(SW1_ON && SW2_OFF&& SW3_OFF)//3b13a01j***
            {
            	fDiscWait =1;
            	fTrayFail =0;
	        bServoState=IDLE_STATE;
	        bPhase=bSubPhase=0;
	        break;
            }
            fSBvsSH=1;
#else        
        
        //1a04a04m*** chane
       if((bbCurrentFrmType==NO_DISC)&&TrayInSW&&TrayOutSW)            //1912a01j***
            fSB=0;
        else
            fSB=1;
        //1a04a04m&&&
#endif
        bbCurrentFrmType=NO_DISC;                //1912a01j&&&  

#if PORTABLE_DEVICE
    case 1:
        if((fSBvsSH)&&(SBwithSH()!=BUSY))
        {
//	PowerSave mode ***        
            WrDSP(LDONOFF,0x00);
			WrSSI(PDCR,0x17);
			fDisSleep=1;
//	PowerSave mode &&&
            bServoState=IDLE_STATE;
            bPhase=bSubPhase=0;
        }
#elif SHINWA_SLOTIN
	case 1:
        if( (fSBvsSH) && (SBwithSH()!=BUSY) )
        {
            TrayOut();                          
            ibServoTimer=100;
            bPhase++;
        }
        break;
    case 2: 
        if(SW3_OFF || !ibServoTimer)
        {
//			if(!ibServoTimer)	fTrayFail=1;
			
            ibServoTimer=250;
            bPhase++;
        	}
		break; 
	
    case 3:
		if(fMiniDisc)
			{
#if 1
	        if(SW1_ON || !ibServoTimer)
    	    	{
//				if(!ibServoTimer)	fTrayFail=1;

            	ibServoTimer=250;
            	bPhase++;
        		}
#else
		        while(SW1_OFF && ibServoTimer);
            	ibServoTimer=250;
            	bPhase++;
#endif
			}
	    else
	    	{
	        if(SW1_OFF || SW2_OFF || !ibServoTimer)
    	    	{
				if(!ibServoTimer)	//fTrayFail=1;
            		ibServoTimer=150;
//				else
//					ibServoTimer=0;
				if(SW1_OFF&&SW2_ON) 
					{
					while(SW2_ON);
					TrayOff();		// debug
					bPhase=5;
					}
				else if(SW1_ON&&SW2_OFF)
					{
					TrayOff();
					bPhase=5;
					}
				else
	            	bPhase++;
        		}
	    	}
		break;    
    case 4:
		if(fMiniDisc)
			{
	        if(SW2_ON || !ibServoTimer)
    	    	{
				if(!ibServoTimer)	fTrayFail=1;

            	ibServoTimer=250;
            	bPhase++;
        		}
			}
	    else
	    	{
	        if(SW1_OFF || SW2_OFF || !ibServoTimer)	//SW1_ON
    	    	{
				if(!ibServoTimer)	fTrayFail=1;

            	ibServoTimer=50;	//250
				if(SW2_OFF) TrayOff();		// debug
            	bPhase++;
        		}
	    	}
		break;        
    case 5:
	        if(SW2_OFF || !ibServoTimer)
    	    	{
//				if(!ibServoTimer)
//					fTrayFail=1;
/*
				if(fMiniDisc)
					Delay1ms(30);
				else
					{
					Delay1ms(3);
					}
//*/
//				if(!fMiniDisc)
					{
					TrayIn();
					Delay1ms(10);
					TrayOff();
					}
				if(SW2_OFF && SW1_ON) fDiscWait =1;

				fTrayFail =0;
//				fMiniDisc=0;
	            bServoState=IDLE_STATE;
	            bPhase=bSubPhase=0;
        		}
		break;        

#else        

    case 1:
        if(SBwithSH()!=BUSY)
        {
        
            //Delay10ms(20);//R1606_COM_06        //1912a01j***            
            //TrayOut();                          
//1906a02j
            //ibServoTimer=250;                   
            ibServoTimer=10;                      //1912a01j&&&
            bPhase++;

        }
        break;
 //1906a02j
 
    case 2:                                       //1912a01j***            
        if(!ibServoTimer)
        {
            TrayOut();
            ibServoTimer=250;
            bPhase++;
        }
        break;
 
    case 3:                                       //1912a01j&&&            
        if(!TrayOutSW || !ibServoTimer)
        {
            if(!ibServoTimer)     //[1930a08j]***
            {
            	ibServoTimer=250;
            	bPhase++;
            	break;
            } 			  //[1930a08j]&&&
            TrayOff();
//          if(!ibServoTimer){fTrayFail=1;}  //[1930a08j]

            bServoState=IDLE_STATE;
            bPhase=bSubPhase=0;
        }
    case 4:                                       //[1930a08j]***
        if(!TrayOutSW || !ibServoTimer)
        {
            TrayOff();
            if(!ibServoTimer){fTrayFail=1;}

            bServoState=IDLE_STATE;
            bPhase=bSubPhase=0;
        }				          //[1930a08j]&&&
#endif

    }
}

/*-----------------------------------------------------------------------------
 Function:  spindle break with sled home
 Input:     -
 Output:    -
-----------------------------------------------------------------------------*/
BYTE SBwithSH(void)
{
BYTE    status=BUSY;

    switch(bSUSubPhase)
    {
    case 0:
        fSBvsSH=1;
        
        if(fSB)                      //1912a01j
            SpindleBreak();
        if(!fNoSledHome){SledIn();}
        ibServoSubTimer=60;	// 100

        fS0=fS1=0;
        bSUSubPhase++;

    case 1:
        if(SLED_SW==CLOSE)
        {
            SledOff();
        }
        if(!fSB||(RdStatus(CMD_COMP,700)!=BUSY))//polling spindle break //1912a01j
        {
            SpindleOff();

            if(fNoSledHome)
            {
                fSBvsSH=0;
                bSUSubPhase=0;
                status=READY;
            }
            else
                bSUSubPhase++;
        }

    case 2:
        if(!ibServoSubTimer||SLED_SW==CLOSE)
        {
            SledOff();
            if(bSUSubPhase==2)
            {
                SledOut();
                ibServoSubTimer=36;	//100 36
                bSUSubPhase++;
            }
        }
        break;

    case 3:
        if(!ibServoSubTimer||SLED_SW==OPEN)
        {
            Delay1ms(5);  //R1808_COM_04
            SledOff();

            fSB=1;        //1912a01j
            fSBvsSH=0;
            bSUSubPhase=0;
            status=READY;
        }
    }

    return status;
}

/*-----------------------------------------------------------------------------
 Function:  -
 Input:     -
 Output:    -
-----------------------------------------------------------------------------*/
void TrayInState(void)
{
    switch(bPhase)
    {
    case 14: //[1930a08j]
//        if(JudgeError()!=BUSY)
#if SHINWA_SLOTIN
			fMiniDisc = SW2_OFF;
			fPowerOnI=0;
	#if 0//(SHINWA_TW0407)		// for display "no disc" @ front panel.
			if(fTrayFail)
				{
				fTrayFail=0;
	            bbCurrentFrmType=NO_DISC;
    	        fSB=0;
//		        TrayOut();                          
//    	        ibServoTimer=100;
//        	    bPhase=16;
    	        break;
				}				

	#else
		#if 1
			if(fTrayFail)
				{
				fTrayFail=0;
				fNeedDiscOut=1;
				}				
		#elif 1
			if(fTrayFail)
				{
				fTrayFail=0;
				fNeedDiscOut=1;
	            bbCurrentFrmType=NO_DISC;
    	        fSB=0;
	            bServoState=IDLE_STATE;		//TRAY_OUT_STATE;
    	        bPhase=bSubPhase=0;
    	        break;
				}				
		#else
			if(fTrayFail)
				{
				fTrayFail=0;
            	bRetryTimes=3;
                bbCurrentFrmType=NO_DISC;
                fSB=0;
                bServoState=IDLE_STATE;
                bPhase=bSubPhase=0;
                TrayOut();
                Delay10ms(150);
                Delay10ms(200);
                TrayOff();
                break;
				}
		#endif
	#endif
#endif
        	bPhase=4;
			bRetryTimes=3;
			bECCErrTimes=3;
        break;
        
	case 15:
#if SHINWA_SLOTIN
        if( SW3_ON || !ibServoTimer )
        {
            if( !ibServoTimer && SW3_OFF ) 
            {
				if(fPowerOnI)
	            	ibServoTimer=250;	// 50
				else
	            	ibServoTimer=250;
				bPhase = 3;
//            	bPhase++;
            	break;
            }
            Delay1ms(6); 
            TrayOff();
			fMiniDisc = SW2_OFF;
            bPhase=14;
        }
        break;
#endif
    case 0:
// PowerSavemode ***    	
    	if(fDisSleep)
    		{
			WrSSI(PDCR,0x00);
	    	WrDSP(LDONOFF,0x01);
//	    	Delay10ms(5);
	    	fDisSleep=0;
    		}
// PowerSavemode &&&    	
        LDOff();
#if PORTABLE_DEVICE
#elif SHINWA_SLOTIN
		fTrayFail =0;
		fMiniDisc=1;
		TrayOff();
#else        
        TrayOff();//1912a01j    
#endif
        WrVariable(DiscIDValue,0x00);
        bRetryTimes=0;
        bSUSubPhase=0;
		bPhase++;
#if PORTABLE_DEVICE
		fSB=0;
//		break;
#else  
		fSB=1;
		fSBvsSH=1;
/*
        if(!fTrayInSPBRK)    //1912a01j***
            fSB=0;
        else
        {
            fSB=1;
            fTrayInSPBRK=0;  //1912a01j&&& 
        }
*/
#endif            
    case 1:
//        if( (!fPowerOnI) || (SBwithSH()!=BUSY) )
        if( (fSBvsSH) && (SBwithSH()!=BUSY) )
        {
#if PORTABLE_DEVICE
//			fSBvsSH=0;
            bPhase=14;
#elif SHINWA_SLOTIN
			if(SW3_ON)
				{
				if(SW2_ON != SW1_ON) fTrayFail=1;
				fMiniDisc = SW2_OFF;
				bPhase =14;
				}
			else
				{
				if( (SW1_ON) || (fPowerOnI) )
					{
		            TrayIn();
		            ibServoTimer=250;
		            bPhase++;
					}
				else
					{
#if 1
		            fPowerOnI=1;
					TrayIn();
		            ibServoTimer=250;	// 50
		            bPhase++;
#else
	            	bRetryTimes=3;

					fPowerOnI=0;
	                bbCurrentFrmType=NO_DISC;
	                fSB=0;
	                bServoState=IDLE_STATE;
	                bPhase=bSubPhase=0;
#endif
					}
				}
#else
            TrayIn();
            ibServoTimer=250;
            bPhase++;
#endif
        }
        break;
    case 2:  					//[1930a08j]***
#if PORTABLE_DEVICE
#elif SHINWA_SLOTIN
        if( SW3_ON || !ibServoTimer )
        {
            if( !ibServoTimer && SW3_OFF ) 
            {
				if(fPowerOnI)
	            	ibServoTimer=250;	// 50
				else
	            	ibServoTimer=250;
//				bPhase = 15;
            	bPhase++;
            	break;
            }
            Delay1ms(6); 
            TrayOff();
			fMiniDisc = SW2_OFF;
            bPhase=14;
        }
        break;

#else  
        if(!TrayInSW || !ibServoTimer)
        {
            if(!ibServoTimer&&TrayInSW) //1b02a17j
            {
            	ibServoTimer=250;
            	bPhase++;
            	break;
            }
            Delay10ms(10); //1b02a17j
            TrayOff();
            bPhase=14;
        }
        break;
#endif
    case 3:
#if PORTABLE_DEVICE
		bPhase=14;
#elif SHINWA_SLOTIN
        if( SW3_ON || !ibServoTimer )
        {
			Delay1ms(6);

⌨️ 快捷键说明

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