📄 svostate.c
字号:
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 + -