📄 magneticread.c
字号:
nReadTrack1Len = READ_NODATA;
return;
}
nReadTrack1Len = i+1;
// [ LRC ] + [ End Code ] + [ Data ] + [ Start Code ]
if( !fTrack1Direction )
{
for(i=0;i<8;i++)
{
nTemp = nTemp << 1;
if( ( chTrack1Buffer[0] >> i ) & 0x01 )
nTemp++;
}
chTrack1Buffer[0] = nTemp >> 1;
for(i=2;i<nReadTrack1Len;i++)
{
chTrack1Buffer[i] = chTrack1Buffer[i] >> 1;
}
j = nReadTrack1Len>>1;
k = nReadTrack1Len-1;
for(i=0;i<j;i++)
{
nTemp = chTrack1Buffer[i];
chTrack1Buffer[i] = chTrack1Buffer[k];
chTrack1Buffer[k] = nTemp;
k--;
}
}
// Check Start Code ( Error Code = 0xF4 )
if( chTrack1Buffer[0] != READ_TRACK1_STARTCODE )
{
nReadTrack1Len = READ_NOSTARTCODE;
return;
}
// Check End Code ( Error Code = 0xF3 )
if( chTrack1Buffer[nReadTrack1Len-2] != 0x1F )
{
nReadTrack1Len = READ_NOENDCODE;
return;
}
// Check Parity ( Error Code = 0xF2 )
for(i=0;i<nReadTrack1Len;i++)
{
nTemp = chTrack1Buffer[i];
ACC = nTemp;
if( !P )
{
nReadTrack1Len = READ_PARITYERROR;
return;
}
}
// Check LRC ( Error Code = 0xF1 )
nTemp = chTrack1Buffer[0];
for(i=1;i<nReadTrack1Len-1;i++)
{
nTemp = nTemp ^ chTrack1Buffer[i];
}
nTemp = nTemp & 0x3F;
if( nTemp != ( chTrack1Buffer[nReadTrack1Len-1] & 0x3F ) )
{
nReadTrack1Len = READ_LRCERROR;
return;
}
// Data Process
for(i=0;i<nReadTrack1Len-1;i++)
{
chTrack1Buffer[i] = ( chTrack1Buffer[i] & 0x3F ) + 0x20;
}
nReadTrack1Len--;
}
void Track2Check()
{
int i=0,j=0,k=0,nTemp=0;
for(i=chTrack2Index;i>1;i--)
{
if( chTrack2Buffer[i] != 0x00 )
break;
}
if( i < 2 )
{
nReadTrack2Len = READ_NODATA;
return;
}
nReadTrack2Len = i+1;
// [ Start Code ] + [ End Code ] + [ LRC ]
// or [ LRC ] = [ Start Code ]
if( fTrack2StartEnd && ( nReadTrack2Len > 3 ) )
{
// LRC
for(i=0;i<5;i++)
{
nTemp = nTemp << 1;
if( ( chTrack2Buffer[0] >> i ) & 0x01 )
nTemp++;
}
chTrack2Buffer[0] = nTemp;
for(i=2;i<nReadTrack2Len;i++)
{
nTemp = 0;
for(j=0;j<5;j++)
{
nTemp = nTemp << 1;
if( ( chTrack2Buffer[i] >> j ) & 0x01 )
nTemp++;
}
chTrack2Buffer[i] = nTemp;
}
j = nReadTrack2Len>>1;
k = nReadTrack2Len-1;
for(i=0;i<j;i++)
{
nTemp = chTrack2Buffer[i];
chTrack2Buffer[i] = chTrack2Buffer[k];
chTrack2Buffer[k] = nTemp;
k--;
}
}
// Reverse
// [ LRC ] + [ End Code ] + [ Data ] + [ Start Code ]
if( !fTrack2Direction )
{
// LRC Process
for(i=0;i<5;i++)
{
nTemp = nTemp << 1;
if( ( chTrack2Buffer[0] >> i ) & 0x01 )
nTemp++;
}
chTrack2Buffer[0] = nTemp;
// Data Process
for(i=2;i<nReadTrack2Len;i++)
{
chTrack2Buffer[i] = chTrack2Buffer[i] >> 1;
}
j = nReadTrack2Len>>1;
k = nReadTrack2Len-1;
for(i=0;i<j;i++)
{
nTemp = chTrack2Buffer[i];
chTrack2Buffer[i] = chTrack2Buffer[k];
chTrack2Buffer[k] = nTemp;
k--;
}
for(j=0;j<2;j++)
{
// Check Start Code ( Error Code = 0xF4 )
if( chTrack2Buffer[0] != READ_TRACK23_STARTCODE )
{
for(i=nReadTrack2Len-1;i>0;i--)
{
nTemp = ( chTrack2Buffer[i-1] >> 3 ) & 0x03;
chTrack2Buffer[i] = ( ( chTrack2Buffer[i] << 2 ) + nTemp ) & 0x1F;
}
chTrack2Buffer[0] = ( chTrack2Buffer[0] << 2 ) & 0x1F;
if( chTrack2Buffer[0] == 0x00 )
{
for(i=0;i<nReadTrack2Len;i++)
chTrack2Buffer[i] = chTrack2Buffer[i+1];
nReadTrack2Len--;
}
}
}
}
// Check Start Code ( Error Code = 0xF4 )
if( chTrack2Buffer[0] != READ_TRACK23_STARTCODE )
{
nReadTrack2Len = READ_NOSTARTCODE;
return;
}
// Check End Code ( Error Code = 0xF3 )
if( chTrack2Buffer[nReadTrack2Len-2] != READ_TRACK23_ENDCODE )
{
nReadTrack2Len = READ_NOENDCODE;
return;
}
// Check Parity ( Error Code = 0xF2 )
for(i=0;i<nReadTrack2Len;i++)
{
nTemp = chTrack2Buffer[i];
ACC = nTemp;
if( !P )
{
nReadTrack2Len = READ_PARITYERROR;
return;
}
}
// Check LRC ( Error Code = 0xF1 )
nTemp = chTrack2Buffer[0];
for(i=1;i<nReadTrack2Len-1;i++)
{
nTemp = nTemp ^ chTrack2Buffer[i];
}
nTemp = nTemp & 0x0F;
if( nTemp != ( chTrack2Buffer[nReadTrack2Len-1] & 0x0F ) )
{
nReadTrack2Len = READ_LRCERROR;
return;
}
// Data Process
for(i=0;i<nReadTrack2Len-1;i++)
{
chTrack2Buffer[i] = ( chTrack2Buffer[i] & 0x0F ) + 0x30;
}
nReadTrack2Len--;
}
void Track3Check()
{
int i=0,j=0,k=0,nTemp=0;
for(i=chTrack3Index;i>1;i--)
{
if( chTrack3Buffer[i] != 0x00 )
break;
}
if( i < 2 )
{
nReadTrack3Len = READ_NODATA;
return;
}
nReadTrack3Len = i+1;
// [ Start Code ] + [ End Code ] + [ LRC ]
// or [ LRC ] = [ Start Code ]
if( fTrack3StartEnd && ( nReadTrack3Len > 3 ) )
{
// LRC
for(i=0;i<5;i++)
{
nTemp = nTemp << 1;
if( ( chTrack3Buffer[0] >> i ) & 0x01 )
nTemp++;
}
chTrack3Buffer[0] = nTemp;
for(i=2;i<nReadTrack3Len;i++)
{
nTemp = 0;
for(j=0;j<5;j++)
{
nTemp = nTemp << 1;
if( ( chTrack3Buffer[i] >> j ) & 0x01 )
nTemp++;
}
chTrack3Buffer[i] = nTemp;
}
j = nReadTrack3Len>>1;
k = nReadTrack3Len-1;
for(i=0;i<j;i++)
{
nTemp = chTrack3Buffer[i];
chTrack3Buffer[i] = chTrack3Buffer[k];
chTrack3Buffer[k] = nTemp;
k--;
}
}
// Reverse
// [ LRC ] + [ End Code ] + [ Data ] + [ Start Code ]
if( !fTrack3Direction )
{
// LRC
for(i=0;i<5;i++)
{
nTemp = nTemp << 1;
if( ( chTrack3Buffer[0] >> i ) & 0x01 )
nTemp++;
}
chTrack3Buffer[0] = nTemp;
for(i=2;i<nReadTrack3Len;i++)
{
chTrack3Buffer[i] = chTrack3Buffer[i] >> 1;
}
j = nReadTrack3Len>>1;
k = nReadTrack3Len-1;
for(i=0;i<j;i++)
{
nTemp = chTrack3Buffer[i];
chTrack3Buffer[i] = chTrack3Buffer[k];
chTrack3Buffer[k] = nTemp;
k--;
}
for(j=0;j<2;j++)
{
// Check Start Code ( Error Code = 0xF4 )
if( chTrack3Buffer[0] != READ_TRACK23_STARTCODE )
{
for(i=nReadTrack3Len-1;i>0;i--)
{
nTemp = ( chTrack3Buffer[i-1] >> 3 ) & 0x03;
chTrack3Buffer[i] = ( ( chTrack3Buffer[i] << 2 ) + nTemp ) & 0x1F;
}
chTrack3Buffer[0] = ( chTrack3Buffer[0] << 2 ) & 0x1F;
if( chTrack3Buffer[0] == 0x00 )
{
for(i=0;i<nReadTrack3Len;i++)
chTrack3Buffer[i] = chTrack3Buffer[i+1];
nReadTrack3Len--;
}
}
}
}
// Check Start Code ( Error Code = 0xF4 )
if( chTrack3Buffer[0] != READ_TRACK23_STARTCODE )
{
nReadTrack3Len = READ_NOSTARTCODE;
return;
}
// Check End Code ( Error Code = 0xF3 )
if( chTrack3Buffer[nReadTrack3Len-2] != READ_TRACK23_ENDCODE )
{
nReadTrack3Len = READ_NOENDCODE;
return;
}
// Check Parity ( Error Code = 0xF2 )
for(i=0;i<nReadTrack3Len;i++)
{
nTemp = chTrack3Buffer[i];
ACC = nTemp;
if( !P )
{
nReadTrack3Len = READ_PARITYERROR;
return;
}
}
// Check LRC ( Error Code = 0xF1 )
nTemp = chTrack3Buffer[0];
for(i=1;i<nReadTrack3Len-1;i++)
{
nTemp = nTemp ^ chTrack3Buffer[i];
}
nTemp = nTemp & 0x0F;
if( nTemp != ( chTrack3Buffer[nReadTrack3Len-1] & 0x0F ) )
{
nReadTrack3Len = READ_LRCERROR;
return;
}
// Data Process
for(i=0;i<nReadTrack3Len-1;i++)
{
chTrack3Buffer[i] = ( chTrack3Buffer[i] & 0x0F ) + 0x30;
}
nReadTrack3Len--;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -