byte PN532::mifare_AuthenticateBlock(word blkn, const byte * keyData) { // uint8_t len; byte tmp[16]; #ifdef MIFAREDEBUG Serial.println("In: mifare_AuthenticateBlock"); #endif // Prepare the authentication command // memcpy(tmp, keyData + 1, 6); // memcpy(tmp + 6, uid, max(4, uidLen)); memcpy(tmp + 6, target.UID, max(4, target.IDLength)); byte authcmd; // byte rescount; switch (keyData[0]) { case 0: case 0xaa: case 0x0a: case 'A': case 'a': authcmd = MIFARE_CMD_AUTH_A; break; case 1: case 0x0b: case 0xbb: case 'B': case 'b': default: authcmd = MIFARE_CMD_AUTH_B; break; } return InDataExchange(1, authcmd, blkn, tmp, target.IDLength + 6); }
byte PN532::mifare_WriteBlock(uint8_t blockNumber, uint8_t * data) { Serial.print("Try to write a block "); Serial.println(blockNumber); if (!InDataExchange(1, MIFARE_CMD_WRITE, blockNumber, data, 16)) { Serial.println("Failed to receive ACK for write command"); } byte c = getCommandResponse(packet); if (! c) { Serial.println("Unexpected response"); Serial.printBytes(packet, 26); Serial.println(); return 0; } Serial.print("Packet "); Serial.printBytes(packet, c); Serial.println(); if (packet[0] != 0) { // error. return 0; } memcpy(data, packet + 1, 16); Serial.print("data "); Serial.println(blockNumber); Serial.printBytes(data, 16); Serial.println(); return 16; }
byte PN532::mifare_ReadDataBlock(uint8_t blockNumber, uint8_t * data) { #ifdef MIFAREDEBUG Serial.print("Try to read 16 bytes from block "); Serial.println(blockNumber); #endif // Access the Target 1 after polling by InList or AutoPoll // Authentication must be succeeded so the uid (and its length) is // stored in target.UID /* Send the command */ if (!InDataExchange(1, MIFARE_CMD_READ, blockNumber, packet, 0)) { #ifdef MIFAREDEBUG Serial.println("Failed to receive ACK for read command"); #endif } byte c = getCommandResponse(packet); if (!c ) { #ifdef MIFAREDEBUG Serial.println("Unexpected response"); printHexString(packet, 26); Serial.println(); #endif return 0; } //#define MIFAREDEBUG #ifdef MIFAREDEBUG Serial.print("Packet "); printHexString(packet, c); Serial.println(); #endif if (packet[0] != 0) { // error. return 0; } memcpy(data, packet + 1, 16); #ifdef MIFAREDEBUG Serial.print("data "); Serial.println(blockNumber); printHexString(data, 16); Serial.println(); #endif //#undef MIFAREDEBUG return 16; }