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