📄 ty514cpu.c
字号:
}
sw2 = CARD2recvbyte();
if(STATE_FLAG)
{
IC_RST2 = 0;
IC_IO2 = 0;
IC_PWR2 = 1;
CPU2_REST_FLAG = 0;
command = IFD_ICC_TypeError;return;}
if(((sw1&0xf0)!=0x60)&&((sw1&0xf0)!=0x90))
{
IC_RST2 = 0;
IC_IO2 = 0;
IC_PWR2 = 1;
CPU2_REST_FLAG = 0;
command = IFD_ICC_TypeError;
return;
}
XBYTE[pointer] = sw1;
pointer++;
XBYTE[pointer] = sw2;
pointer ++;
length = pointer;
return;
}
//======================================================================================
//SAM1
/*
void transSAM1_t0(void) //using 0
{
if(length <= 5) case3 = 0;
else case3 = 1;
if(length < 5) {XBYTE[4] = 0; pp3 = 0;}
ET0 = 0;
//send APDU header
for(LEN = 0; LEN < 5; LEN++)
{
temp = XBYTE[LEN];
SAM1sendbyte(temp);
if (STATE_FLAG)
{ command = IFD_ICC_TypeError;return;}
}
//receive sw1
while(1)
{
sw1 = SAM1recvbyte();
if(STATE_FLAG)
{command = sw1;return;}
if(sw1 != 0x60) break;
sPC60();
}
sw2 = sw1&0xf0;
if((sw2 == 0x60)||(sw2 == 0x90))
{
sw2 = SAM1recvbyte();
if(STATE_FLAG)
{ command = IFD_ICC_TypeError;return;}
XBYTE[0] = sw1;
XBYTE[1] =sw2;
length = 2;
return;
}
//sw1 != ins
if((sw1 != ins)&&((sw1+ins) != 0xff))
{
// sw2 = SAM1recvbyte();
// if(STATE_FLAG)
// { command = IFD_ICC_TypeError;return;}
// XBYTE[0] = sw1;XBYTE[1] =sw2;
// length = 2;
// return;
STATE_FLAG = 1;
command = IFD_ICC_TypeError;return;
}
//sw1 == ins
//case3
if(case3)
{
pointer = 5;
Detu(); //方向字符为16 ETU
Detu(); //方向字符为16 ETU
Detu(); //方向字符为16 ETU
while((sw1+ins) == 0xff)
{
temp = XBYTE[pointer];
pointer ++;
SAM1sendbyte(temp);
if (STATE_FLAG)
{ command = temp; return;}
do{
sw1 = SAM1recvbyte();
if (STATE_FLAG)
{ command = IFD_ICC_TypeError; return;}
if(sw1 == 0x60) sPC60();
} while( sw1 == 0x60);
if(--pp3 == 0) break;
}
if(sw1 == ins)
{
while(pp3)
{
temp = XBYTE[pointer];
SAM1sendbyte(temp);
pointer++;
pp3--;
if (STATE_FLAG)
{ command = sw1; return;}
}
while(1)
{
sw1 = SAM1recvbyte();
if(STATE_FLAG)
{ command = IFD_ICC_TypeError;return;}
if(sw1 != 0x60) break;
sPC60();
}
}
sw2 = SAM1recvbyte();
if(STATE_FLAG)
{ command = IFD_ICC_TypeError;return;}
XBYTE[0] = sw1;
XBYTE[1] =sw2;
length = 2;
return;
}
//case1,2
//指针复位
pointer = 0;
while((sw1+ins) == 0xff) // 20040720 add
{
temp = SAM1recvbyte();
if(STATE_FLAG)
{ command = temp;return;}
XBYTE[pointer] = temp;
pointer++;
while(1) // 200407012 modify
{
sw1 = SAM1recvbyte();
if(STATE_FLAG)
{command = IFD_ICC_TypeError;return;}
if(sw1 != 0x60) break;
sPC60();
}
if(--pp3 == 0) break;
}
if(sw1 == ins)
{
do
{
temp = SAM1recvbyte();
if(STATE_FLAG)
{ command = temp;return;}
XBYTE[pointer] = temp;
pointer++;
pp3--;
}while(pp3);
}
// sw1 = SAM1recvbyte();
// if(STATE_FLAG)
// { command = sw1;return;}
while(1) // 200407012 modify
{
sw1 = SAM1recvbyte();
if(STATE_FLAG)
{command = IFD_ICC_TypeError;return;}
if(sw1 != 0x60) break;
sPC60();
}
sw2 = SAM1recvbyte();
if(STATE_FLAG)
{ command = IFD_ICC_TypeError;return;}
XBYTE[pointer] = sw1;
pointer++;
XBYTE[pointer] = sw2;
pointer ++;
length = pointer;
return;
}
*/
//======================================================================================
//SAM2
/*
void transSAM2_t0(void) //using 0
{
if(length <= 5) case3 = 0;
else case3 = 1;
if(length < 5) {XBYTE[4] = 0; pp3 = 0;}
ET0 = 0;
//send APDU header
for(LEN = 0; LEN < 5; LEN++)
{
temp = XBYTE[LEN];
SAM2sendbyte(temp);
if (STATE_FLAG)
{ command = IFD_ICC_TypeError;return;}
}
//receive sw1
while(1)
{
sw1 = SAM2recvbyte();
if(STATE_FLAG)
{command = sw1;return;}
if(sw1 != 0x60) break;
sPC60();
}
sw2 = sw1&0xf0;
if((sw2 == 0x60)||(sw2 == 0x90))
{
sw2 = SAM2recvbyte();
if(STATE_FLAG)
{ command = IFD_ICC_TypeError;return;}
XBYTE[0] = sw1;
XBYTE[1] =sw2;
length = 2;
return;
}
//sw1 != ins
if((sw1 != ins)&&((sw1+ins) != 0xff))
{
// sw2 = SAM2recvbyte();
// if(STATE_FLAG)
// { command = IFD_ICC_TypeError;return;}
// XBYTE[0] = sw1;XBYTE[1] =sw2;
// length = 2;
// return;
STATE_FLAG = 1;
command = IFD_ICC_TypeError;return;
}
//sw1 == ins
//case3
if(case3)
{
pointer = 5;
Detu(); //方向字符为16 ETU
Detu(); //方向字符为16 ETU
Detu(); //方向字符为16 ETU
while((sw1+ins) == 0xff)
{
temp = XBYTE[pointer];
pointer ++;
SAM2sendbyte(temp);
if (STATE_FLAG)
{ command = temp; return;}
do{
sw1 = SAM2recvbyte();
if (STATE_FLAG)
{ command = IFD_ICC_TypeError; return;}
if(sw1 == 0x60) sPC60();
} while( sw1 == 0x60);
if(--pp3 == 0) break;
}
if(sw1 == ins)
{
while(pp3)
{
temp = XBYTE[pointer];
SAM2sendbyte(temp);
pointer++;
pp3--;
if (STATE_FLAG)
{ command = sw1; return;}
}
while(1)
{
sw1 = SAM2recvbyte();
if(STATE_FLAG)
{ command = IFD_ICC_TypeError;return;}
if(sw1 != 0x60) break;
sPC60();
}
}
sw2 = SAM2recvbyte();
if(STATE_FLAG)
{ command = IFD_ICC_TypeError;return;}
XBYTE[0] = sw1;
XBYTE[1] =sw2;
length = 2;
return;
}
//case1,2
//指针复位
pointer = 0;
while((sw1+ins) == 0xff) // 20040720 add
{
temp = SAM2recvbyte();
if(STATE_FLAG)
{ command = temp;return;}
XBYTE[pointer] = temp;
pointer++;
while(1) // 200407012 modify
{
sw1 = SAM2recvbyte();
if(STATE_FLAG)
{command = IFD_ICC_TypeError;return;}
if(sw1 != 0x60) break;
sPC60();
}
if(--pp3 == 0) break;
}
if(sw1 == ins)
{
do
{
temp = SAM2recvbyte();
if(STATE_FLAG)
{ command = temp;return;}
XBYTE[pointer] = temp;
pointer++;
pp3--;
}while(pp3);
}
// sw1 = SAM2recvbyte();
// if(STATE_FLAG)
// { command = sw1;return;}
while(1) // 200407012 modify
{
sw1 = SAM2recvbyte();
if(STATE_FLAG)
{command = IFD_ICC_TypeError;return;}
if(sw1 != 0x60) break;
sPC60();
}
sw2 = SAM2recvbyte();
if(STATE_FLAG)
{ command = IFD_ICC_TypeError;return;}
XBYTE[pointer] = sw1;
pointer++;
XBYTE[pointer] = sw2;
pointer ++;
length = pointer;
return;
}
*/
//======================================================================================
//SAM3
/*
void transSAM3_t0(void) //using 0
{
if(length <= 5) case3 = 0;
else case3 = 1;
if(length < 5) {XBYTE[4] = 0; pp3 = 0;}
ET0 = 0;
//send APDU header
for(LEN = 0; LEN < 5; LEN++)
{
temp = XBYTE[LEN];
SAM3sendbyte(temp);
if (STATE_FLAG)
{ command = IFD_ICC_TypeError;return;}
}
//receive sw1
while(1)
{
sw1 = SAM3recvbyte();
if(STATE_FLAG)
{command = sw1;return;}
if(sw1 != 0x60) break;
sPC60();
}
sw2 = sw1&0xf0;
if((sw2 == 0x60)||(sw2 == 0x90))
{
sw2 = SAM3recvbyte();
if(STATE_FLAG)
{ command = IFD_ICC_TypeError;return;}
XBYTE[0] = sw1;
XBYTE[1] =sw2;
length = 2;
return;
}
//sw1 != ins
if((sw1 != ins)&&((sw1+ins) != 0xff))
{
// sw2 = SAM3recvbyte();
// if(STATE_FLAG)
// { command = IFD_ICC_TypeError;return;}
// XBYTE[0] = sw1;XBYTE[1] =sw2;
// length = 2;
// return;
STATE_FLAG = 1;
command = IFD_ICC_TypeError;return;
}
//sw1 == ins
//case3
if(case3)
{
pointer = 5;
Detu(); //方向字符为16 ETU
Detu(); //方向字符为16 ETU
Detu(); //方向字符为16 ETU
while((sw1+ins) == 0xff)
{
temp = XBYTE[pointer];
pointer ++;
SAM3sendbyte(temp);
if (STATE_FLAG)
{ command = temp; return;}
do{
sw1 = SAM3recvbyte();
if (STATE_FLAG)
{ command = IFD_ICC_TypeError; return;}
if(sw1 == 0x60) sPC60();
} while( sw1 == 0x60);
if(--pp3 == 0) break;
}
if(sw1 == ins)
{
while(pp3)
{
temp = XBYTE[pointer];
SAM3sendbyte(temp);
pointer++;
pp3--;
if (STATE_FLAG)
{ command = sw1; return;}
}
while(1)
{
sw1 = SAM3recvbyte();
if(STATE_FLAG)
{ command = IFD_ICC_TypeError;return;}
if(sw1 != 0x60) break;
sPC60();
}
}
sw2 = SAM3recvbyte();
if(STATE_FLAG)
{ command = IFD_ICC_TypeError;return;}
XBYTE[0] = sw1;
XBYTE[1] =sw2;
length = 2;
return;
}
//case1,2
//指针复位
pointer = 0;
while((sw1+ins) == 0xff) // 20040720 add
{
temp = SAM3recvbyte();
if(STATE_FLAG)
{ command = temp;return;}
XBYTE[pointer] = temp;
pointer++;
while(1) // 200407012 modify
{
sw1 = SAM3recvbyte();
if(STATE_FLAG)
{command = IFD_ICC_TypeError;return;}
if(sw1 != 0x60) break;
sPC60();
}
if(--pp3 == 0) break;
}
if(sw1 == ins)
{
do
{
temp = SAM3recvbyte();
if(STATE_FLAG)
{ command = temp;return;}
XBYTE[pointer] = temp;
pointer++;
pp3--;
}while(pp3);
}
// sw1 = SAM3recvbyte();
// if(STATE_FLAG)
// { command = sw1;return;}
while(1) // 200407012 modify
{
sw1 = SAM3recvbyte();
if(STATE_FLAG)
{command = IFD_ICC_TypeError;return;}
if(sw1 != 0x60) break;
sPC60();
}
sw2 = SAM3recvbyte();
if(STATE_FLAG)
{ command = IFD_ICC_TypeError;return;}
XBYTE[pointer] = sw1;
pointer++;
XBYTE[pointer] = sw2;
pointer ++;
length = pointer;
return;
}
*/
//======================================================================================
//SAM4
void transSAM4_t0(void) //using 0
{
if(length <= 5) case3 = 0;
else case3 = 1;
if(length < 5) {XBYTE[4] = 0; pp3 = 0;}
ET0 = 0;
//send APDU header
for(LEN = 0; LEN < 5; LEN++)
{
temp = XBYTE[LEN];
SAM4sendbyte(temp);
if (STATE_FLAG)
{ command = IFD_ICC_TypeError;return;}
}
//receive sw1
while(1)
{
sw1 = SAM4recvbyte();
if(STATE_FLAG)
{command = sw1;return;}
if(sw1 != 0x60) break;
sPC60();
}
sw2 = sw1&0xf0;
if((sw2 == 0x60)||(sw2 == 0x90))
{
sw2 = SAM4recvbyte();
if(STATE_FLAG)
{ command = IFD_ICC_TypeError;return;}
XBYTE[0] = sw1;
XBYTE[1] =sw2;
length = 2;
return;
}
//sw1 != ins
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -