CPU卡程序设计实例(十)读、写二进制文件-amr文件

CPU卡程序设计实例(十)读、写二进制文件-amr文件

1、读二进制文件

/*******************************************

函数名称:ReadBinFile

函数功能:读二进制文件

输入参数:cReadFileTitle,文件标识符,

cReadByteOffect,欲读取数据在文件中的偏移量

cReadByteLen需要返回的数据长度

输出参数:无

描述:

*******************************************/

void ReadBinFile(unsigned char cReadFileTitle,unsigned char cReadByteOffect,

unsigned int cReadByteLen)

{

int itemp;

unsigned int iTemp;

delay_ms2M(5);

iTemp=cReadByteLen;

cCommandLen=0x05;

TxAndRxBuff[0]=0x00;

TxAndRxBuff[1]=0xb0;

//要读取的文件01(短文件标识符)

TxAndRxBuff[2]=cReadFileTitle;

//读取偏移量

TxAndRxBuff[3]=cReadByteOffect;

//要读取的数据长度

TxAndRxBuff[4]=(unsigned char)iTemp;

SendCommandHead_Pro();

//Delay1XETU(4);

//读卡

if(CardORESAM&CardWorkFlag)

{

for(itemp=0;itemp<cReadByteLen+2;itemp++)

{

TxAndRxBuff[itemp]=CardReceChar();

if(ErrorRWBIT&CardError) break;

}

}

//读模块

else

{

for(itemp=0;itemp<cReadByteLen+2;itemp++)

{

TxAndRxBuff[itemp]=EsamReceChar();

if(ErrorRWBIT&CardError) break;

}

}

if((TxAndRxBuff[cReadByteLen]!=0x90)&&(TxAndRxBuff[cReadByteLen+1]!=0x00))

CardError=ErrorRWBIT|CardError;

delay_ms2M(5);

}

2、写二进制文件

/*******************************************

函数名称:WriteBinFile

函数功能:写二进制文件

输入参数:cWriteFileTitle--要写的文件名,WriteByteOffect--数据在文件中的偏移量,

cWriteByteLen--数据长度,*cTransDataBuff--要写的数据

输出参数:

描述:

*******************************************/

void WriteBinFile(unsigned char cWriteFileTitle,unsigned char cWriteByteOffect,

unsigned char cWriteByteLen,unsigned char *cTransDataBuff)

{

DelayX1ms(5);

cCommandLen=0x05;

TxAndRxBuff[0]=0x00;

TxAndRxBuff[1]=0xd6;

//要写的文件标识符

TxAndRxBuff[2]=cWriteFileTitle;

//要写的数据在文件中的偏移量

TxAndRxBuff[3]=cWriteByteOffect;

//要写的数据长度

TxAndRxBuff[4]=cWriteByteLen;

SendCommandHead_Pro();

if(ErrorRWBIT&CardError) goto WriteBinFileEnd;

Delay1XETU(4);

cCommandLen=cWriteByteLen;

memcpy(&TxAndRxBuff[0],cTransDataBuff,cWriteByteLen);

SendCommand(cCommandLen);

if(ErrorRWBIT&CardError) goto WriteBinFileEnd;

if(CardORESAM&CardWorkFlag)

{

TxAndRxBuff[0]=CardReceChar();

TxAndRxBuff[1]=CardReceChar();

}

else

{

TxAndRxBuff[0]=EsamReceChar();

TxAndRxBuff[1]=EsamReceChar();

}

if((TxAndRxBuff[0]!=0x90)||(TxAndRxBuff[1]!=0x00))

CardError=ErrorRWBIT|CardError;

WriteBinFileEnd:;

}

推荐阅读