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

📄 svostate.c

📁 一个完整DVDROM代码(使用日立PICKUP)
💻 C
📖 第 1 页 / 共 5 页
字号:
    case 2:
        if(!ibServoSubTimer)
        {
            WrSSI(CBR,0x40);            //R1726_COM_01
            WrDSP(FACTION,0x32);        //R1726_COM_01 1901a02m
            WrDSP(DISCID_VALUE,0x02);
            ibServoSubTimer=20;         //R1726_COM_01
//            if(fDVDDisc)         //R1726_COM_01***//1b02a18j
//				LEDOn();            
            fS0=fS1=0;
            bSubPhase++;
        }
        break;

    case 3:
        if(RdStatus(CMD_READY,250)!=BUSY)//read disc ID value
        {
            TP_BYTE_0=RdReg(SVOTDATAL);
            if(TP_BYTE_0==0x01)
                bbCurrentFrmType=CD_ROM;
            else if(TP_BYTE_0==0x02)
                bbCurrentFrmType=CD_RW;
            else if(TP_BYTE_0==0x03)
                bbCurrentFrmType=DVD_ROM;
            else if(TP_BYTE_0==0x04)
                bbCurrentFrmType=DVD_DUAL;
            else
                bbCurrentFrmType=UNKNOW_FRM;
            
            if(fDVDDual)           //1b02a18j
                bSubPhase++;            
            else
            {
                bSubPhase=0;
                status=READY;
            }
        }
        break;
        
    case 4:
        if(!ibServoSubTimer)
        {
            WrDSP(READVALUE,0x26);
            bSubPhase++;
        }
        break;
        
   case 5:
        if(RdStatus(CMD_READY,250)!=BUSY)//read disc ID value
        {     
            TP_BYTE_0=RdReg(0x07B);
            if(TP_BYTE_0 > 3)
            {
                bbCurrentFrmType=DVD_DUAL;
                fDVDPlusRW=0;
            }
            else
            {
                if(bbCurrentFrmType==DVD_DUAL) //R1810_COM_01***
                    fDVDPlusRW=1;
                else
                    fDVDPlusRW=0;
                bbCurrentFrmType=DVD_ROM;
                //fDVDPlusRW=1;                //R1810_COM_01&&& 
            }
            InitPA4DVD();                 //R1726_COM_01&&&
            bSubPhase=0;
            status=READY;
        }                                 //R1726_COM_01 
        break;                            //R1726_COM_01
    }                                     //R1726_COM_01 
        
    return status;
}
#else
BYTE code bDUAL_FE=0x18;
BYTE CDvsDVD(void)
{
BYTE    status=BUSY;

    switch(bSubPhase)
    {
    case 0:
        SpindleKick();
//	    WrDSP(SPD_FIX,0xe8);	//0xee
//	    WrDSP(DMEA,0x01);
//	    WrDSP(SPD_FIX,0xb0);
//	    WrDSP(SPD_MODE,0x01);
		fDVDPlusRW=0;
        f2discid=0;				//1 hanyc d3811
        ibBkCurrentFrmType=0;	//1 hanyc d3811
        bbCurrentFrmType=0;
        ibServoSubTimer=8;
        bSubPhase++;

    case 1:
        if(ibServoSubTimer)      break;

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

        WrCoeff(KFSRCH,0x1900);	//1200);//0x2400); hanyc d3922
        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); 0x20---0.52v
//            WrDSP(DISCID_LEVEL3,0x0d); //
            WrDSP(DISCID_LEVEL3,bDUAL_FE); //
            WrDSP(DISCID_DELAY,0x80);  //
//            WrCoeff(0x99,0x090);		// d030603
//            WrCoeff(DISCIDSEL,0x478); 	// 0x478 0x4b0---d030310
            			//0x0500); // 2#---0x045b  1#---0x5d8 0x3c0);//0x02C0);
            WrCoeff(0x99,0x0b0);		// 0xe0 0x1200 &0x29
            WrCoeff(DISCIDSEL,0x7c5);//0x7f8);	//0x7f8);	// 0x1200 & 0x29
            WrDSP(FACTION,0x29);        //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)
                bbCurrentFrmType=CD_ROM;
            else if(TP_BYTE_0==0x03)
                bbCurrentFrmType=DVD_ROM;
            else
                bbCurrentFrmType=UNKNOW_FRM;
#if 1	// d030603 ***
//			if(bbCurrentFrmType==DVD_ROM)
				{
				WrDSP(READVALUE,0x0e);		//	ID counter
				while(RdStatus(CMD_READY,250)==BUSY);

				iwErrorRate = RdReg(0x07A);		// high byte
				iwErrorRate <<= 8;
				iwErrorRate += RdReg(0x07B);		// low byte
//				if( (iwErrorRate<0x98/*0x160*/) || (iwErrorRate>0xc00) )
				if( (iwErrorRate<0x2c0) || (iwErrorRate>0x1200) )	//0x2c0
					{
					bbCurrentFrmType = UNKNOW_FRM;
					}
/*
				else
					if(iwErrorRate>0x810)
						bbCurrentFrmType = CD_ROM;
					else
						bbCurrentFrmType = DVD_ROM;
*/
				}
	            WrDSP(FACTION,0x00);
#endif 	// d030603 &&&

            if(bbCurrentFrmType==UNKNOW_FRM)	//1 hanyc d3811 ***
            {
            	if(bRetryTimes<=2)
            	{
            		if( ( (iwErrorRate<0x2c0) && (iwErrorRate>0x78) )	//>0xd0	//<0x100
            		 ||( (iwErrorRate>0x1200) && (iwErrorRate<0x1900) )
            		)
	            	{
					WrDSP(READVALUE,0x2d);		//	ID counter
					while(RdStatus(CMD_READY,250)==BUSY);
					iwErrorRate = RdReg(0x07A);		// high byte
					iwErrorRate <<= 8;
					iwErrorRate += RdReg(0x07B);		// low byte
	//				if(iwErrorRate>0xa5e)
					if(iwErrorRate>0xc00)	// 0xb00
						{
	            		bbCurrentFrmType=CD_ROM;
						}
					else
						{
	            		bbCurrentFrmType=DVD_ROM;
						}
            		ibBkCurrentFrmType=bbCurrentFrmType;
					f2discid=1;
	            	}
            	}
            }//1 hanyc d3811 &&&
            bSubPhase=0;
            status=READY;
        }
    }
    return status;
}

/*-----------------------------------------------------------------------------
 Function:  judgement CD/RW or DVD/Dual disc
 Input:     -
 Output:    -
-----------------------------------------------------------------------------*/
//#define F2DISCID	1
BYTE code bDUAL_SEL=0x50;	// 0x60 hanyc 3801
BYTE RWvsDual(void)
{
BYTE    status=BUSY;

    switch(bSubPhase)
    {
    case 0:
#if 0//ndef F2DISCID
    	if(f2discid
//    		&& fCDDisc
    		)
    		{ f2discid=0; return READY; }
//    		bbCurrentFrmType=DVD_ROM;
#endif
        if(fDVDDisc)
        {   
            InitPA4DVD();
            LDOn(); //R1606_COM_06
            WrDSP(DUAL_SEL,bDUAL_SEL);// 0x60 0x6b);
//            if(fPowerSavemode)
//            	ibCurrentSpeed=1;	//	2;
//            else
	            ibCurrentSpeed=2;	// 15;	//	2;
        }
        else if(fCDDisc)
        {
/*				// hanyc cancel d3814
			if(f2discid) 	//1 hanyc d3811 ***
				{
				f2discid=0;
            	ibCurrentSpeed=4;
				return READY;
				}			//1 hanyc d3811 &&&
*/
            WrSSI(SIGR,0x01);
            WrDSP(CDRW_SEL,0x50); //R1606_COM_06
            WrSSI(CER,0x0a);      //R1606_COM_06
//            if(fPowerSavemode)
//            	ibCurrentSpeed=3;	//	2;
//            else	
            	ibCurrentSpeed=4;	// 3;	//	4;
        }
        else
            return READY;
        
//		f2discid=0;		//1 hanyc d3811
		
        WrDSP(FACTION,0x50);
        ibServoSubTimer=20;
        bSubPhase++;
        break;

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

    case 2:
        if(!ibServoSubTimer)
        {
            WrSSI(CBR,0x40);            //R1726_COM_01
            WrDSP(FACTION,0x32);        //R1726_COM_01 1901a02m
            WrDSP(DISCID_VALUE,0x02);
            ibServoSubTimer=20;         //R1726_COM_01
            fS0=fS1=0;
            bSubPhase++;
        }
        break;

    case 3:
        if(RdStatus(CMD_READY,250)!=BUSY)//read disc ID value
        {
            TP_BYTE_0=RdReg(SVOTDATAL);
            
            if(TP_BYTE_0==0x01)
                bbCurrentFrmType=CD_ROM;
            else if(TP_BYTE_0==0x02)
                bbCurrentFrmType=CD_RW;
            else if(TP_BYTE_0==0x03)
                bbCurrentFrmType=DVD_ROM;
            else if(TP_BYTE_0==0x04)
                bbCurrentFrmType=DVD_DUAL;
            else
                bbCurrentFrmType=UNKNOW_FRM;
            
            if(f2discid)	//1 hanyc d3811 ***
            {				//1 hanyc add d3814 ***
#if 1//def F2DISCID
//				bbCurrentFrmType=ibBkCurrentFrmType;

				if(ibBkCurrentFrmType==DVD_ROM)
					{
					WrDSP(READVALUE,0x02);/*
												// FE-p2p */
					while(RdStatus(CMD_READY,250)==BUSY);
					TP_BYTE_0 = RdReg(0x07A);
					if(TP_BYTE_0>bDUAL_SEL)
		                bbCurrentFrmType=DVD_ROM;
					else
		                bbCurrentFrmType=DVD_DUAL;
					}
				else //if(ibBkCurrentFrmType==CD_ROM)
					{
					WrDSP(READVALUE,0x01);	/*
												// PI-p2p */
					while(RdStatus(CMD_READY,250)==BUSY);
					TP_BYTE_0 = RdReg(0x07A);
					if(TP_BYTE_0>0x50)
		                bbCurrentFrmType=CD_ROM;
					else
		                bbCurrentFrmType=CD_RW;
					}
#else
            	if( (bbCurrentFrmType==DVD_ROM) 
            		&& (ibBkCurrentFrmType!=DVD_ROM) )
            	{
            		bbCurrentFrmType=ibBkCurrentFrmType;
            	}
            				//1 hanyc add d3814 &&&
            	if(bbCurrentFrmType==UNKNOW_FRM)
            	{
            		bbCurrentFrmType=ibBkCurrentFrmType;
            	}
#endif
				f2discid=0;
            	ibBkCurrentFrmType=0;
            }				//1 hanyc d3811 &&&
            
            if(fDVDDual)
                bSubPhase++;            
            else
            {
/*
            	if(fCDRW)// && fCDDisc)
            		ibCurrentSpeed=4;	// 3;	//	4;
            	else if(fCDDisc)
            		ibCurrentSpeed=4;
				else if(fDVDDual)// && fDVDDisc)
					ibCurrentSpeed=2;
				else //if(fDVDDisc)
					ibCurrentSpeed=15; 	// 15
*/
                bSubPhase=0;
                status=READY;
            }
        }
        break;
        
    case 4:
        if(!ibServoSubTimer)
        {
            WrDSP(READVALUE,0x26);
            bSubPhase++;
        }
        break;
        
   case 5:
        if(RdStatus(CMD_READY,250)!=BUSY)//read disc ID value
        {     
            TP_BYTE_0=RdReg(0x07B);
            if(TP_BYTE_0 > 3)
            {
                bbCurrentFrmType=DVD_DUAL;
                fDVDPlusRW=0;
            }
            else
            {
                if(bbCurrentFrmType==DVD_DUAL) //R1810_COM_01***
                    fDVDPlusRW=1;
                else
                    fDVDPlusRW=0;
                bbCurrentFrmType=DVD_ROM;
                //fDVDPlusRW=1;                //R1810_COM_01&&& 
            }
/*
            if(fDVDDual)// && fDVDDisc)
				ibCurrentSpeed=2;
			else if(fDVDDisc)
				ibCurrentSpeed=15;	// 15
			if (fDVDPlusRW) ibCurrentSpeed=2;
*/
			InitPA4DVD();                 //R1726_COM_01&&&
            bSubPhase=0;
            status=READY;
        }                                 //R1726_COM_01 
        break;                            //R1726_COM_01
    }                                     //R1726_COM_01 
        
    return status;
}
#endif
/*-----------------------------------------------------------------------------
 Function:  -
 Input:     -
 Output:    -
-----------------------------------------------------------------------------*/
void SaveLGain(void)
{
    fJumpTrack=0;
    fJumpLayer=0;

    if(!fNewID){return;}

    if(fSaveNum)
    {
        bServoState=START_UP_STATE;
        if(fCurrentLayer==fLayerNumber)
        {
            if(fCurrentLayer)
            {
                WrDSP(LGAINSW,0x11);    //save layer 1
                //R1606_COM_03 ibTRCR_1=RdSSI(TRCR);
            }
            else
            {
                WrDSP(LGAINSW,0x01);    //save layer 0
                //R1606_COM_03 ibTRCR=RdSSI(TRCR);
            }
            fSaveNum=0;
            fS0=fS1=0;
            bSUPhase=4;
        }
        else
            bSUPhase=5;
    }
    else
    {
        if(fCurrentLayer)
        {
            WrDSP(LGAINSW,0x11);        //save layer 1
            //R1606_COM_03 ibTRCR_1=RdSSI(TRCR);

            fLayerNumber=1;
        }
        else
        {
            WrDSP(LGAINSW,0x01);        //save layer 0
            //R1606_COM_03 ibTRCR=RdSSI(TRCR);

            fLayerNumber=0;
        }
        fSaveNum=1;
        fS0=fS1=0;
        bServoState=START_UP_STATE;
        bSUPhase=4;
    }
}

/*-----------------------------------------------------------------------------
 Function:  -
 Input:     -
 Output:    -
-----------------------------------------------------------------------------*/
#define WATCH_LOOPGAIN 1
void ProtectLoopGain(BYTE type)
{
#if WATCH_LOOPGAIN
BYTE tmp0;
#endif

    switch(type)
    {
    case 0:
        WrDSP(READVALUE,0x0C);
        fS0=fS1=0;
        while(RdStatus(CMD_READY,100)==BUSY);
#if WATCH_LOOPGAIN
        tmp0=RdReg(0x07A);
        if(tmp0==0x50)
            WrDSP(FGC,0x00);
     
        WrDSP(READVALUE,0x17);
        while(RdStatus(CMD_READY,100)==BUSY);

        tmp0=RdReg(0x07b);
#else
        if(RdReg(0x07A)==0x50)
            WrDSP(FGC,0x00);

#endif
        break;

    case 1:
        WrDSP(READVALUE,0x0D);
        fS0=fS1=0;
        while(RdStatus(CMD_READY,100)==BUSY);
#if WATCH_LOOPGAIN

⌨️ 快捷键说明

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