/*******************************************
函数名称:SelectFile
函数功能:选择文件目录
输入参数:无
输出参数:无
描述:先根据变量选择是对卡还是ESAM操作
选择文件,CPU卡的主目录3F 01,ESAM的主目录3F 00
用于选择卡或ESAM的主工作目录,主目录选择成功后才能继续对卡或ESAM操作
*******************************************/
void SelectFile(void)
{
unsigned char ctemp;
unsigned char ucTransBuf[2]={0};
if(ICSAM&icflag1)
{
ucTransBuf[0]=MainDir;
ucTransBuf[1]=CardMainDir;
}
else
{
ucTransBuf[0]=MainDir;
ucTransBuf[1]=EsamMainDir;
}
TxAndRxBuff[0]=0x00;
TxAndRxBuff[1]=0xA4;
TxAndRxBuff[2]=0x00;
TxAndRxBuff[3]=0x00;
TxAndRxBuff[4]=0x02;
cCommandLen=0x05;
SendCommandHead_Pro();
if(ErrorReadWriteBIT&iErrorRWrCard) goto SelectFileEnd;
Delay1XETU(4);
if(ReceINSRightBIT&cTxAndRxStatus)
{
TxAndRxBuff[0]=ucTransBuf[0];
TxAndRxBuff[1]=ucTransBuf[1];
cCommandLen=2;
SendCommand(cCommandLen);
}
if(ErrorReadWriteBIT&iErrorRWrCard) goto SelectFileEnd;
if(ICSAM&icflag1) //从卡上取数
{
for(ctemp=0;ctemp<2;ctemp++)
{
TxAndRxBuff[ctemp]=CardReceChar();
if(ErrorReadWriteBIT&iErrorRWrCard) break;
}
if(ErrorReadWriteBIT&iErrorRWrCard)
{
iErrorRWrCard=ErrorResetBIT|iErrorRWrCard;
iErrorRWrCard=~ErrorReadWriteBIT&iErrorRWrCard;
goto SelectFileEnd;
}
}
else //从ESAM取数
{
for(ctemp=0;ctemp<2;ctemp++)
{
TxAndRxBuff[ctemp]=EsamReceChar();
if(ErrorReadWriteBIT&iErrorRWrCard) break;
}
if(ErrorReadWriteBIT&iErrorRWrCard)
{
iErrorRWrCard=ErrorResetBIT|iErrorRWrCard;
iErrorRWrCard=~ErrorReadWriteBIT&iErrorRWrCard;
goto SelectFileEnd;
}
}
//
if((TxAndRxBuff[0]!=RespondStateByte3)&&(TxAndRxBuff[0]!=RespondStateByte1))
iErrorRWrCard=ErrorReadWriteBIT|iErrorRWrCard;
SelectFileEnd:
delay_ms2M(5);
}