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