📄 runin.c
字号:
/*=============================================================================
* Copyright (C) 2001 Acer Labs, Inc. All Rights Reserved.
*
* File: RUNIN.C
*
* Contents: -
*
* History:
* 04/18/2001 develop 5705
******************************************************************************/
#include <reg52.h>
#include "typedef.h"
#include "defs.h"
#include "extern.h"
#include "function.h"
#include "bufalloc.h" //1828a01j
#include "macro.h"
#include "regdef.h"
BYTE idata bBurnInTimes=0; //[runin]***
/*-----------------------------------------------------------------------------
Function: doing burnin (life test) or gitter measure
Input: -
Output: -
-----------------------------------------------------------------------------*/
void RuninState(void)
{
if(!fRuninJ)
{
fDisSleep=1;
if(fMaster)
BurnIn();
else
{ //gitter measure mode
while(1)
{
ChkEject();
ServoState();
}
}
}
}
/*-----------------------------------------------------------------------------
Function: gitter measure mode
Input: -
Output: -
-----------------------------------------------------------------------------*/
void ChkEject(void)
{
if(!fDVDDisc && (ibCurrentSpeed!=0x01) && (bServoState==MONITOR_STATE))
{ //set CD cav 1XS
SetSpeed(1);
fDisRdQ=1;
}
if(fEjectPressed&&fTOC)
{
fEjectPressed=0;
fTrayDir=~fTrayDir;
bBOFCount++;
switch(bBOFCount)
{
case 1:
if(fDVDDisc)
Seek(0x03,0x01,0x45);
else
{
if(ibCurrentSpeed!=0x04)
SetSpeed(4);
fDisRdQ=0;
Seek(0x00,0x08,0x3a);
}
break;
case 2:
if(fDVDDisc)
Seek(0x0f,0x7f,0x43);
else
{
if(ibCurrentSpeed!=0x04)
SetSpeed(4);
fDisRdQ=0;
Seek(0x12,0x0a,0x40);
}
break;
case 3:
if(fDVDDisc)
Seek(0x25,0x34,0x6c);
else
{
if(ibCurrentSpeed!=0x04)
SetSpeed(4);
fDisRdQ=0;
Seek(0x2a,0x0d,0x2f);
}
break;
default:
fEjectPressed=1;
fTrayDir=~fTrayDir;
bBOFCount=0;
}
}
}
/*-----------------------------------------------------------------------------
Function: life test
Input: -
Output: -
-----------------------------------------------------------------------------*/
void BurnIn(void)
{
BYTE i;
switch(bBOFPhase)
{
case 0://tray out
if(bBOFCount)
{
if(bServoState==MONITOR_STATE)
{
bBOFCount=1;
bBOFPhase=2;
return;
}
else if(bServoState!=IDLE_STATE)
{
iwHostCmdTimer=400;
return;
}
else if(iwHostCmdTimer)
return;
}
for(i=1;i<12;i++)
bCommandPacket[i]=0;
bCommandPacket[0]=0x1B; //ATAPI start stop unit
bCommandPacket[4]=0x02; //tray out
StartStopUnit();
bBOFPhase=1;
break;
case 1://tray in
if(bBOFCount>10)
{
bBOFPhase=0xFF;
return;
}
else if(bServoState!=IDLE_STATE)
{
iwHostCmdTimer=400;
}
else if(!iwHostCmdTimer)
{
for(i=1;i<12;i++)
bCommandPacket[i]=0;
bCommandPacket[0]=0x1B; //ATAPI start stop unit
bCommandPacket[4]=0x03; //tray in
StartStopUnit();
bBOFCount++;
bBOFPhase=0;
}
break;
case 2://check sum
if(bBOFCount%2)
{
TP_DWORD_0=((ilLeadOut-200)/2)*(bBOFCount/4)+100;
for(i=1;i<12;i++)
bCommandPacket[i]=0;
bCommandPacket[0]=0x28;
bCommandPacket[3]=TP_BYTE_1;
bCommandPacket[4]=TP_BYTE_2;
bCommandPacket[8]=0x01;
fRead10Exed=0;
fReadCDExed=0;
iwHostCmdTimer=CMD_TIMEOUT;
Read10();
bBOFCount++;
}
else
{
TP_BYTE_0=CheckSum();
if(TP_BYTE_0==READY)
bBOFCount++;
else if(TP_BYTE_0==ERROR)
{
while(1)
{
LED=0;
Delay10ms(10);
LED=1;
Delay10ms(10);
LED=0;
Delay10ms(10);
LED=1;
Delay10ms(100);
}
}
}
if(bBOFCount>12)
{
bBOFCount=0;
bBOFPhase=0xFF;
}
break;
case 3://random seek
TP_DWORD_0+=Q.Min*1127+Q.Sec*Q.Frm*1139+Q.AMin*Q.ASec+Q.AFrm+0x00100000;
while(TP_DWORD_0>ilLeadOut-100){TP_DWORD_0-=(ilLeadOut-100);}
for(i=1;i<12;i++)
bCommandPacket[i]=0;
bCommandPacket[0]=0x2B;
bCommandPacket[3]=TP_BYTE_1;
bCommandPacket[4]=TP_BYTE_2;
bCommandPacket[5]=TP_BYTE_3;
iwHostCmdTimer=CMD_TIMEOUT;
HostSeek();
bBOFCount++;
if(bBOFCount>100)
{
bBOFCount=0;
bBOFPhase=0xFF;
}
break;
case 0xFF:
default:
break;
}
}
/*-----------------------------------------------------------------------------
Function: -
Input: -
Output: -
-----------------------------------------------------------------------------*/
BYTE CheckSum(void)
{
TP_BYTE_0=RdReg(URLSCNT);
TP_BYTE_1=RdReg(LRLSCNT);
if(TP_WORD_0>=200)
{
if(fDVDDisc)
return RdDVDChkSum();
else
return RdCDChkSum();
}
else
return BUSY;
}
/*-----------------------------------------------------------------------------
Function: -
Input: -
Output: -
-----------------------------------------------------------------------------*/
BYTE RdCDChkSum(void)
{
TP_WORD_1=0; //use for sum of data
SetAddressReg(4); //read from 4~2047
for(TP_WORD_2=0;TP_WORD_2<1022;TP_WORD_2++)
{
RdReg(UP_TRIG);
while(!(RdReg(UPCTL)&0x01));
TP_BYTE_0=RdReg(UUPDATA);
TP_BYTE_1=RdReg(LUPDATA);
TP_WORD_1+=TP_WORD_0;
}
SetAddressReg(CD_PROGRAM_ADDRESS); //1828a01j
RdReg(UP_TRIG);
while(!(RdReg(UPCTL)&0x01));
TP_BYTE_0=RdReg(UUPDATA);
TP_BYTE_1=RdReg(LUPDATA);
TP_WORD_1+=TP_WORD_0;
SetAddressReg(413698);
RdReg(UP_TRIG);
while(!(RdReg(UPCTL)&0x01));
TP_BYTE_0=RdReg(UUPDATA);
TP_BYTE_1=RdReg(LUPDATA);
TP_WORD_1+=TP_WORD_0;
if(!(bBOFCount%4))
iwLastHIPtr=TP_WORD_1;
else if(TP_WORD_1!=iwLastHIPtr)
return ERROR;
return READY;
}
/*-----------------------------------------------------------------------------
Function: -
Input: -
Output: -
Note: 1sector = 12row * 172column
-----------------------------------------------------------------------------*/
BYTE RdDVDChkSum(void)
{
TP_WORD_1=0; //use for sum of data
TP_BYTE_4=0; //use for row
TP_BYTE_5=0; //use for column
TP_BYTE_6=0; //use for sector
WrReg(UPCTL,0x14);
for(TP_BYTE_6=0;TP_BYTE_6<200;TP_BYTE_6++)
{
for(TP_BYTE_4=0;TP_BYTE_4<12;TP_BYTE_4++)
{
for(TP_BYTE_5=0;TP_BYTE_5<172;TP_BYTE_5+=2)
{
WrReg(UUPPTR,0); //sector hi
WrReg(LUPPTR,TP_BYTE_6);//sector lo
WrReg(UPROW,TP_BYTE_4);
WrReg(UPCOL,TP_BYTE_5);
RdReg(UP_TRIG);
while(!(RdReg(UPCTL)&0x01));
if(!((TP_BYTE_4==0)&&(TP_BYTE_4<12)) && !((TP_BYTE_4==11)&&(TP_BYTE_5>167)))
{ //ID IED CPRMAI 12 bytes, EDC 4 bytes
TP_BYTE_0=RdReg(UUPDATA);
TP_BYTE_1=RdReg(LUPDATA);
TP_WORD_1+=TP_WORD_0;
}
}
}
}
if(!(bBOFCount%4))
iwLastHIPtr=TP_WORD_1;
else if(TP_WORD_1!=iwLastHIPtr)
return ERROR;
return READY;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -