mirror of
https://github.com/xfjx/TonUINO.git
synced 2025-08-23 16:43:29 +02:00
Support für Mifare Ultralight und NTAG hinzugefügt - Danke an @ASealion!
This commit is contained in:
114
Tonuino.ino
114
Tonuino.ino
@@ -946,9 +946,23 @@ bool readCard(nfcTagObject * nfcTag) {
|
||||
byte size = sizeof(buffer);
|
||||
|
||||
// Authenticate using key A
|
||||
Serial.println(F("Authenticating using key A..."));
|
||||
status = (MFRC522::StatusCode)mfrc522.PCD_Authenticate(
|
||||
if ((piccType == MFRC522::PICC_TYPE_MIFARE_MINI ) ||
|
||||
(piccType == MFRC522::PICC_TYPE_MIFARE_1K ) ||
|
||||
(piccType == MFRC522::PICC_TYPE_MIFARE_4K ) )
|
||||
{
|
||||
Serial.println(F("Authenticating Classic using key A..."));
|
||||
status = mfrc522.PCD_Authenticate(
|
||||
MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));
|
||||
}
|
||||
else if (piccType == MFRC522::PICC_TYPE_MIFARE_UL )
|
||||
{
|
||||
byte pACK[] = {0, 0}; //16 bit PassWord ACK returned by the NFCtag
|
||||
|
||||
// Authenticate using key A
|
||||
Serial.println(F("Authenticating MIFARE UL..."));
|
||||
status = mfrc522.PCD_NTAG216_AUTH(key.keyByte, pACK);
|
||||
}
|
||||
|
||||
if (status != MFRC522::STATUS_OK) {
|
||||
returnValue = false;
|
||||
Serial.print(F("PCD_Authenticate() failed: "));
|
||||
@@ -957,11 +971,15 @@ bool readCard(nfcTagObject * nfcTag) {
|
||||
}
|
||||
|
||||
// Show the whole sector as it currently is
|
||||
Serial.println(F("Current data in sector:"));
|
||||
mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector);
|
||||
Serial.println();
|
||||
// Serial.println(F("Current data in sector:"));
|
||||
// mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector);
|
||||
// Serial.println();
|
||||
|
||||
// Read data from the block
|
||||
if ((piccType == MFRC522::PICC_TYPE_MIFARE_MINI ) ||
|
||||
(piccType == MFRC522::PICC_TYPE_MIFARE_1K ) ||
|
||||
(piccType == MFRC522::PICC_TYPE_MIFARE_4K ) )
|
||||
{
|
||||
Serial.print(F("Reading data from block "));
|
||||
Serial.print(blockAddr);
|
||||
Serial.println(F(" ..."));
|
||||
@@ -971,6 +989,45 @@ bool readCard(nfcTagObject * nfcTag) {
|
||||
Serial.print(F("MIFARE_Read() failed: "));
|
||||
Serial.println(mfrc522.GetStatusCodeName(status));
|
||||
}
|
||||
}
|
||||
else if (piccType == MFRC522::PICC_TYPE_MIFARE_UL )
|
||||
{
|
||||
byte buffer2[18];
|
||||
byte size2 = sizeof(buffer2);
|
||||
|
||||
status = (MFRC522::StatusCode)mfrc522.MIFARE_Read(8, buffer2, &size2);
|
||||
if (status != MFRC522::STATUS_OK) {
|
||||
returnValue = false;
|
||||
Serial.print(F("MIFARE_Read_1() failed: "));
|
||||
Serial.println(mfrc522.GetStatusCodeName(status));
|
||||
}
|
||||
memcpy(buffer, buffer2, 4);
|
||||
|
||||
status = (MFRC522::StatusCode)mfrc522.MIFARE_Read(9, buffer2, &size2);
|
||||
if (status != MFRC522::STATUS_OK) {
|
||||
returnValue = false;
|
||||
Serial.print(F("MIFARE_Read_2() failed: "));
|
||||
Serial.println(mfrc522.GetStatusCodeName(status));
|
||||
}
|
||||
memcpy(buffer + 4, buffer2, 4);
|
||||
|
||||
status = (MFRC522::StatusCode)mfrc522.MIFARE_Read(10, buffer2, &size2);
|
||||
if (status != MFRC522::STATUS_OK) {
|
||||
returnValue = false;
|
||||
Serial.print(F("MIFARE_Read_3() failed: "));
|
||||
Serial.println(mfrc522.GetStatusCodeName(status));
|
||||
}
|
||||
memcpy(buffer + 8, buffer2, 4);
|
||||
|
||||
status = (MFRC522::StatusCode)mfrc522.MIFARE_Read(11, buffer2, &size2);
|
||||
if (status != MFRC522::STATUS_OK) {
|
||||
returnValue = false;
|
||||
Serial.print(F("MIFARE_Read_4() failed: "));
|
||||
Serial.println(mfrc522.GetStatusCodeName(status));
|
||||
}
|
||||
memcpy(buffer + 12, buffer2, 4);
|
||||
}
|
||||
|
||||
Serial.print(F("Data in block "));
|
||||
Serial.print(blockAddr);
|
||||
Serial.println(F(":"));
|
||||
@@ -991,7 +1048,6 @@ bool readCard(nfcTagObject * nfcTag) {
|
||||
nfcTag->nfcFolderSettings.special = buffer[7];
|
||||
nfcTag->nfcFolderSettings.special2 = buffer[8];
|
||||
|
||||
myFolder = &nfcTag->nfcFolderSettings;
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
@@ -1012,9 +1068,24 @@ void writeCard(nfcTagObject nfcTag) {
|
||||
mifareType = mfrc522.PICC_GetType(mfrc522.uid.sak);
|
||||
|
||||
// Authenticate using key B
|
||||
//authentificate with the card and set card specific parameters
|
||||
if ((mifareType == MFRC522::PICC_TYPE_MIFARE_MINI ) ||
|
||||
(mifareType == MFRC522::PICC_TYPE_MIFARE_1K ) ||
|
||||
(mifareType == MFRC522::PICC_TYPE_MIFARE_4K ) )
|
||||
{
|
||||
Serial.println(F("Authenticating again using key B..."));
|
||||
status = (MFRC522::StatusCode)mfrc522.PCD_Authenticate(
|
||||
status = mfrc522.PCD_Authenticate(
|
||||
MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid));
|
||||
}
|
||||
else if (mifareType == MFRC522::PICC_TYPE_MIFARE_UL )
|
||||
{
|
||||
byte pACK[] = {0, 0}; //16 bit PassWord ACK returned by the NFCtag
|
||||
|
||||
// Authenticate using key A
|
||||
Serial.println(F("Authenticating UL..."));
|
||||
status = mfrc522.PCD_NTAG216_AUTH(key.keyByte, pACK);
|
||||
}
|
||||
|
||||
if (status != MFRC522::STATUS_OK) {
|
||||
Serial.print(F("PCD_Authenticate() failed: "));
|
||||
Serial.println(mfrc522.GetStatusCodeName(status));
|
||||
@@ -1028,7 +1099,35 @@ void writeCard(nfcTagObject nfcTag) {
|
||||
Serial.println(F(" ..."));
|
||||
dump_byte_array(buffer, 16);
|
||||
Serial.println();
|
||||
|
||||
if ((mifareType == MFRC522::PICC_TYPE_MIFARE_MINI ) ||
|
||||
(mifareType == MFRC522::PICC_TYPE_MIFARE_1K ) ||
|
||||
(mifareType == MFRC522::PICC_TYPE_MIFARE_4K ) )
|
||||
{
|
||||
status = (MFRC522::StatusCode)mfrc522.MIFARE_Write(blockAddr, buffer, 16);
|
||||
}
|
||||
else if (mifareType == MFRC522::PICC_TYPE_MIFARE_UL )
|
||||
{
|
||||
byte buffer2[16];
|
||||
byte size2 = sizeof(buffer2);
|
||||
|
||||
memset(buffer2, 0, size2);
|
||||
memcpy(buffer2, buffer, 4);
|
||||
status = (MFRC522::StatusCode)mfrc522.MIFARE_Write(8, buffer2, 16);
|
||||
|
||||
memset(buffer2, 0, size2);
|
||||
memcpy(buffer2, buffer + 4, 4);
|
||||
status = (MFRC522::StatusCode)mfrc522.MIFARE_Write(9, buffer2, 16);
|
||||
|
||||
memset(buffer2, 0, size2);
|
||||
memcpy(buffer2, buffer + 8, 4);
|
||||
status = (MFRC522::StatusCode)mfrc522.MIFARE_Write(10, buffer2, 16);
|
||||
|
||||
memset(buffer2, 0, size2);
|
||||
memcpy(buffer2, buffer + 12, 4);
|
||||
status = (MFRC522::StatusCode)mfrc522.MIFARE_Write(11, buffer2, 16);
|
||||
}
|
||||
|
||||
if (status != MFRC522::STATUS_OK) {
|
||||
Serial.print(F("MIFARE_Write() failed: "));
|
||||
Serial.println(mfrc522.GetStatusCodeName(status));
|
||||
@@ -1041,6 +1140,7 @@ void writeCard(nfcTagObject nfcTag) {
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Helper routine to dump a byte array as hex values to Serial.
|
||||
*/
|
||||
|
Reference in New Issue
Block a user