ISO7816_Datablock_ATR
Default mainpageat91libcomponentsiso7816ISO7816_Datablock_ATR
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;

}