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

📄 svostate.c

📁 一个完整DVDROM代码(使用日立PICKUP)
💻 C
📖 第 1 页 / 共 5 页
字号:
            TrayOff();
            Delay1ms(20);
#if 0//(SHINWA_TW0407)
#else
            if( SW3_OFF ) fTrayFail=1;
#endif
			if( SW2_ON != SW1_ON) fTrayFail=1;
			if(fPowerOnI) 
				fTrayFail=0;
			fMiniDisc = SW2_OFF;
            bPhase=14;
        }
#else  
        if(!TrayInSW || !ibServoTimer)
        {
            TrayOff();
            Delay10ms(50);
            if(!ibServoTimer){fTrayFail=1;}

            bPhase++;
        }
#endif
        break;
    case 4: 
        if(CDvsDVD()!=BUSY){bPhase++;}
        break;

    case 5: 
        if(RWvsDual()!=BUSY)
        {
            LDOff();
#if 0
            if(fCDDisc) 
            	{
	            if( RdVariable(DiscIDValue)&0x20 )
//	            if(bbCurrentFrmType==RdVariable(DiscIDValue) )
//                    bRetryTimes--;
	            	bRetryTimes=0;
	            else bECCErrTimes--;
            	WrVariable(DiscIDValue,bbCurrentFrmType);
            	}
            else if(fDVDDisc)
            	{
	            if( RdVariable(DiscIDValue)&0x80 )
//	            if(bbCurrentFrmType==RdVariable(DiscIDValue) )
                    bRetryTimes--;
                else
                	{
                    WrVariable(DiscIDValue,bbCurrentFrmType);
                    bRetryTimes=3;
                    bECCErrTimes--;
                	}
            	}
            else bRetryTimes--;
            if( !bECCErrTimes )
            	{
            	bbCurrentFrmType=NO_DISC;
            	bRetryTimes=0;
            	}
/*
            TP_BYTE_0=RdVariable(DiscIDValue);
            if(bbCurrentFrmType==DVD_ROM)
            {
            	if(TP_BYTE_0&0x80)
                    bRetryTimes=3;
                else
                    WrVariable(DiscIDValue,TP_BYTE_0|0x80);
            }
            else if(bbCurrentFrmType==DVD_DUAL)
            {
            	if(TP_BYTE_0&0x40)
                    bRetryTimes=3;
                else
                    WrVariable(DiscIDValue,TP_BYTE_0|0x40);
            }
            else if(bbCurrentFrmType==CD_ROM)
            {
                if(TP_BYTE_0&0x20)
                    bRetryTimes=3;
                else
                    WrVariable(DiscIDValue,TP_BYTE_0|0x20);
            }
            else if(bbCurrentFrmType==CD_RW)
            {
                if(TP_BYTE_0&0x10)
                    bRetryTimes=3;
                else
                    WrVariable(DiscIDValue,TP_BYTE_0|0x10);
            }
            else
                bRetryTimes++;
            
//			bRetryTimes=3;

            if(bRetryTimes<3)
            {
                bSubPhase=0;
                bPhase=4;  //[1930a08j]
            }
*/            
#endif
// disc id only start
			if((bbCurrentFrmType==NO_DISC)&&(bRetryTimes>0))
				bRetryTimes--;			
			else
				bRetryTimes=0;
//	disc id only end
            if(bRetryTimes)
            {
                bSubPhase=0;
                bPhase=4;  //[1930a08j]
            }
            else
            {
//            	bRetryTimes=3;
#if 1
                if(bbCurrentFrmType==NO_DISC)
                {
                    bPhase=bSubPhase=0;
					bRetryTimes=0;
                    bServoState=IDLE_STATE;
//	PowerSave mode *** 
					SpindleBreak();
			        while(RdStatus(CMD_COMP,700)==BUSY); //polling spindle break
		            SpindleOff();
		            WrDSP(LDONOFF,0x00);
					WrSSI(PDCR,0x17);
					fDisSleep=1;
//	PowerSave mode &&&
                    fSB=0;
                
                }
                else
#endif
#if 0
                if(bbCurrentFrmType==NO_DISC)
                {
				if(SW3_OFF)
                {
                	bbCurrentFrmType=NO_DISC;
		            WrDSP(LDONOFF,0x00);
					WrSSI(PDCR,0x17);
					fDisSleep=1;
                    fSB=0;
                    bServoState=IDLE_STATE;
                }
				else
					{
                bSubPhase=0;
                bPhase=4;  //[1930a08j]
                
					}
                	}
                if(bbCurrentFrmType!=NO_DISC)
#endif
                {
//					bRetryTimes=0;
                    fSB=1;//1a04a04m chane
                    fChkHead=1;
                    fUnitAttention=1;
                    ibMediaEvent=0x02;

                    iwIdleTimer=12000;//1926a01j
                    if(fDVDDual)
                        bASUState=SAVE_LGAIN;
                    else if(fDVDDisc)
                    {
                        iwErrorRate=0x80;
                        bASUState=TURN_ERR_RATE;
                    }
                    else
                    {
                        iwIdleTimer=3000;//1926a01j    
                        bASUState=READ_TOC_STATE;
                    }

                    bServoState=START_UP_STATE;
                    bSUPhase=bSUSubPhase=0;
                }

                bRetryTimes=0;
                bPhase=bSubPhase=0;
            }
        }
    }
}
/*
BYTE JudgeError(void)
{
BYTE    status=BUSY;

    switch(bSubPhase)
    {
    case 0:
        SpindleKick();

        bbCurrentFrmType=0;
        ibServoSubTimer=4;
        bSubPhase++;

    case 1:
        if(ibServoSubTimer)      break;

        SpindleOff();
        InitPA4ID();
        LDOn();

        WrCoeff(KFSRCH,0x1200);//0x2400);         //tjc //1905a02m
        WrDSP(FACTION,0x13);            //move down

        ibServoSubTimer=30;
        bSubPhase++;
        break;

    case 2:
        if(!ibServoSubTimer)
        {
            WrDSP(INITR,0x01);

            fS0=fS1=0;
            bSubPhase++;
        }
        break;

    case 3:
        if(RdStatus(CMD_COMP,250)!=BUSY)//offset adjust in disc ID//[010110a02]
        {
            WrDSP(DISCID_LEVEL1,0x08);//0x05	0x0A);
            WrDSP(DISCID_LEVEL2,0x20);//0x18	0x30);
            WrDSP(DISCID_LEVEL3,0x0d); //R1726_COM_01
            WrDSP(DISCID_DELAY,0x68);  //1905a02m
            WrCoeff(DISCIDSEL,0x100); //0x0500); // 2#---0x045b  1#---0x5d8 0x3c0);//0x02C0);

            WrDSP(FACTION,0x2B);        //move up,start disc ID
            ibServoSubTimer=10;
            bSubPhase++;
        }
        break;

    case 4:
        if(!ibServoSubTimer)
        {
            WrDSP(DISCID_VALUE,0x01);   //read discid_value(only CD/DVD)
            fS0=fS1=0;
            bSubPhase++;
        }
        break;

    case 5:
        if(RdStatus(CMD_READY,250)!=BUSY)//read disc ID value//[010110a02]
        {
            TP_BYTE_0=RdReg(SVOTDATAL);

            if(TP_BYTE_0==0x01)
				fDiscError=0;
//            	bbCurrentFrmType=CD_ROM;
            else if(TP_BYTE_0==0x03)
				fDiscError=1;
//            	bbCurrentFrmType=DVD_ROM;
            else
                bbCurrentFrmType=UNKNOW_FRM;
/*
            if(bbCurrentFrmType==UNKNOW_FRM)
            {
                SledOut();
                Delay1ms(20);	//	---50
                SledOff();
            }
* /
            bSubPhase=0;
            status=READY;
        }

    }

    return status;
}

*/
#if 0
/*-----------------------------------------------------------------------------
 Function:  judgement CD or DVD disc
 Input:     -
 Output:    -
-----------------------------------------------------------------------------*/
BYTE CDvsDVD(void)
{
BYTE    status=BUSY;

    switch(bSubPhase)
    {
    case 0:
        SpindleKick();

        bbCurrentFrmType=0;
        ibServoSubTimer=4;
        bSubPhase++;

    case 1:
        if(ibServoSubTimer)      break;

        SpindleOff();
        InitPA4ID();
        LDOn();
//        if(fDiscError)
//            WrCoeff(KFSRCH,0x900);//0x2400);         //tjc //1905a02m
//		else
	        WrCoeff(KFSRCH,0x1200);//0x2400);         //tjc //1905a02m
        WrDSP(FACTION,0x13);            //move down

        ibServoSubTimer=30;
        bSubPhase++;
        break;

    case 2:
        if(!ibServoSubTimer)
        {
            WrDSP(INITR,0x01);

            fS0=fS1=0;
            bSubPhase++;
        }
        break;

    case 3:
        if(RdStatus(CMD_COMP,250)!=BUSY)//offset adjust in disc ID//[010110a02]
        {
//	        bbCurrentFrmType=RdVariable(DiscIDValue);
            WrDSP(DISCID_LEVEL1,0x08);//0x05	0x0A);
            WrDSP(DISCID_LEVEL2,0x20);//0x18	0x30);
            WrDSP(DISCID_LEVEL3,0x0d); //R1726_COM_01
            WrDSP(DISCID_DELAY,0x68);  //1905a02m
//            if(fDiscError)
//	            WrCoeff(DISCIDSEL,0x90); //0x0500); // 2#---0x045b  1#---0x5d8 0x3c0);//0x02C0);
//    		else        	
	            WrCoeff(DISCIDSEL,0x540); //0x0500); // 2#---0x045b  1#---0x5d8 0x3c0);//0x02C0);

            WrDSP(FACTION,0x2B);        //move up,start disc ID
            ibServoSubTimer=10;
            bSubPhase++;
        }
        break;

    case 4:
        if(!ibServoSubTimer)
        {
            WrDSP(DISCID_VALUE,0x01);   //read discid_value(only CD/DVD)
            fS0=fS1=0;
            bSubPhase++;
        }
        break;

    case 5:
        if(RdStatus(CMD_READY,250)!=BUSY)//read disc ID value//[010110a02]
        {
            TP_BYTE_0=RdReg(SVOTDATAL);
/*
        	if(fDVDDisc)
        		{
            if(TP_BYTE_0==0x01)
                bbCurrentFrmType=DVD_ROM;
            else if(TP_BYTE_0==0x03)
                bbCurrentFrmType=CD_ROM;
            else
                bbCurrentFrmType=UNKNOW_FRM;
        		}
        	else
*/
        		{
            if(TP_BYTE_0==0x01)
                bbCurrentFrmType=CD_ROM;
            else if(TP_BYTE_0==0x03)
                bbCurrentFrmType=DVD_ROM;
            else
                bbCurrentFrmType=UNKNOW_FRM;
        		}
/*
			if(fDVDDisc)	// bbCurrentFrmType==DVD_ROM)
				{
				bSubPhase=10;
				break;
				}
*/				
            if(bbCurrentFrmType==UNKNOW_FRM)
            {
                SledOut();
                Delay1ms(20);	//	---50
                SledOff();
            }

            bSubPhase=0;
            status=READY;
        }
/*
    case 10:
        bbCurrentFrmType=0;
/*
        ibServoSubTimer=4;
        SpindleKick();
        Delay1ms(5);
		SpindleOff();
/* /		
        ibServoSubTimer=5;
        bSubPhase++;

    case 11:
//        if(ibServoSubTimer)  break;
//        SpindleOff();
        InitPA4ID();
        LDOn();

        WrCoeff(KFSRCH,0x1200);//0x2400);         //tjc //1905a02m
        WrDSP(FACTION,0x13);            //move down

        ibServoSubTimer=80;
        bSubPhase++;
        break;

    case 12:
        if(!ibServoSubTimer)
        {
            WrDSP(INITR,0x01);

            fS0=fS1=0;
            bSubPhase++;
        }
        break;

    case 13:
        if(RdStatus(CMD_COMP,250)!=BUSY)//offset adjust in disc ID//[010110a02]
        {
            WrDSP(DISCID_LEVEL1,0x08);//0x05	0x0A);
            WrDSP(DISCID_LEVEL2,0x20);//0x18	0x30);
            WrDSP(DISCID_LEVEL3,0x0d); //R1726_COM_01
            WrDSP(DISCID_DELAY,0x68);  //1905a02m
            WrCoeff(DISCIDSEL,0x080); //0x0110); // 2#---0x045b  1#---0x5d8 0x3c0);//0x02C0);

            WrDSP(FACTION,0x2B);        //move up,start disc ID
            ibServoSubTimer=10;
            bSubPhase++;
        }
        break;

    case 14:
        if(!ibServoSubTimer)
        {
            WrDSP(DISCID_VALUE,0x01);   //read discid_value(only CD/DVD)
            fS0=fS1=0;
            bSubPhase++;
        }
        break;
	case 15:
        if(RdStatus(CMD_READY,250)!=BUSY)//read disc ID value//[010110a02]
        {
            TP_BYTE_0=RdReg(SVOTDATAL);
            if(TP_BYTE_0==0x01)
                bbCurrentFrmType=DVD_ROM;
            else if(TP_BYTE_0==0x03)
                bbCurrentFrmType=CD_ROM;
            else
                bbCurrentFrmType=UNKNOW_FRM;
//            WrCoeff(DISCIDSEL,0x500); //0x0500); // 2#---0x045b  1#---0x5d8 0x3c0);//0x02C0);

            bSubPhase=0;
            status=READY;
        }        
/**/        
    }

    return status;
}

/*-----------------------------------------------------------------------------
 Function:  judgement CD/RW or DVD/Dual disc
 Input:     -
 Output:    -
-----------------------------------------------------------------------------*/
BYTE RWvsDual(void)
{
BYTE    status=BUSY;

    switch(bSubPhase)
    {
    case 0:
        if(fDVDDisc)
        {   
            InitPA4DVD();
            LDOn(); //R1606_COM_06
            WrDSP(DUAL_SEL,0x60);//0x6b);
            ibCurrentSpeed=2;	//	2;
        }
        else if(fCDDisc)
        {
            WrSSI(SIGR,0x01);
            WrDSP(CDRW_SEL,0x50); //R1606_COM_06
            WrSSI(CER,0x0a);      //R1606_COM_06
            ibCurrentSpeed=4;	//	4;
        }
        else
            return READY;

        WrDSP(FACTION,0x50);
        ibServoSubTimer=20;
        bSubPhase++;
        break;

    case 1:
        if(!ibServoSubTimer)
        {
            
            WrDSP(FACTION,0x58);
            ibServoSubTimer=20;
            bSubPhase++;
        }
        break;

⌨️ 快捷键说明

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