Example #1
0
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);
}
Example #2
0
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;
}
Example #3
0
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;
}