Description
Source
Call Graph
Start Line: 357
void ISO7816_Datablock_ATR(unsigned char *pAtr, unsigned char *pLength)
{
unsigned int i;
unsigned int j;
unsigned int y;
*pLength = 0;
// Read ATR TS
ISO7816_GetChar(&pAtr[0]);
// Read ATR T0
ISO7816_GetChar(&pAtr[1]);
y = pAtr[1] & 0xF0;
i = 2;
// Read ATR Ti
while (y) {
if (y & 0x10) { // TA[i]
ISO7816_GetChar(&pAtr[i++]);
}
if (y & 0x20) { // TB[i]
ISO7816_GetChar(&pAtr[i++]);
}
if (y & 0x40) { // TC[i]
ISO7816_GetChar(&pAtr[i++]);
}
if (y & 0x80) { // TD[i]
ISO7816_GetChar(&pAtr[i]);
y = pAtr[i++] & 0xF0;
}
else {
y = 0;
}
}
// Historical Bytes
y = pAtr[1] & 0x0F;
for( j=0; j < y; j++ ) {
ISO7816_GetChar(&pAtr[i++]);
}
TRACE_DEBUG_WP("Length = %d", i);
TRACE_DEBUG_WP("ATR = ");
for (j=0; j < i; j++) {
TRACE_DEBUG_WP("%02x ", pAtr[j]);
}
TRACE_DEBUG_WP("\n\r");
*pLength = i;
}