Code:
uint8_t getCard()
{
uint8_t failed = 0;
// Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle.
if ( ! mfrc522.PICC_IsNewCardPresent())
return;
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial())
return;
// Show some details of the PICC (that is: the tag/card)
Serial.print(F("Card UID:"));
dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
Serial.println();
Serial.print(F("PICC type: "));
MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);
Serial.println(mfrc522.PICC_GetTypeName(piccType));
// Check for compatibility
if ( piccType != MFRC522::PICC_TYPE_MIFARE_MINI
&& piccType != MFRC522::PICC_TYPE_MIFARE_1K
&& piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
Serial.println(F("This sample only works with MIFARE Classic cards."));
failed = 0;
return;
}
// In this sample we use the second sector,
// that is: sector #1, covering block #4 up to and including block #7
byte sector = 5;
byte blockAddr = 20;
byte dataBlock[] = {
0x01, 0x02, 0x03, 0x04, // 1, 2, 3, 4,
0x05, 0x06, 0x07, 0x08, // 5, 6, 7, 8,
0x09, 0x0a, 0xff, 0x0b, // 9, 10, 255, 11,
0x0c, 0x0d, 0x0e, 0x0f // 12, 13, 14, 15
};
byte trailerBlock = 23;
MFRC522::StatusCode status;
byte buffer[18];
byte size = sizeof(buffer);
// Authenticate using key A
Serial.println(F("Authenticating using key A..."));
status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
Serial.print(F("PCD_Authenticate() failed: "));
vga_command("f,4"); //11JULY19
Serial1.println(F("PCD_Authenticate() failed: "));//11JULY19
Serial.println(mfrc522.GetStatusCodeName(status));//11JULY19
Serial1.println(mfrc522.GetStatusCodeName(status));
failed = 0;
return ;
}
// Show the whole sector as it currently is
Serial.println(F("Current data in sector:"));
mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector);
Serial.println();
// Read data from the block
Serial.print(F("Reading data from block ")); Serial.print(blockAddr);
Serial.println(F(" ..."));
status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size);
if (status != MFRC522::STATUS_OK) {
vga_command("f,4"); //11JULY19
Serial1.println(F("MIFARE_Read() failed: "));//11JULY19
Serial1.println(mfrc522.GetStatusCodeName(status));//11JULY19
Serial.print(F("MIFARE_Read() failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
failed = 0;
return;
}
Serial.print(F("Data in block ")); Serial.print(blockAddr); Serial.println(F(":"));
dump_byte_array(buffer, 16); Serial.println();
Serial.println();
//get the crands**************************************************************
for(int z = 0; z<16; z++)
{
pdata[0].crand[z] = buffer[z];
tBuff[z] = buffer[z];
}
Serial1.print("crand 1 = :");
//Serial1.println(tBuff);
//get the crand fin**********************************************************
sector = 5;
blockAddr = 21;
trailerBlock = 23;
// Show the whole sector as it currently is
Serial.println(F("Current data in sector:"));
mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector);
Serial.println();
// Read data from the block
Serial.print(F("Reading data from block ")); Serial.print(blockAddr);
Serial.println(F(" ..."));
status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size);
if (status != MFRC522::STATUS_OK) {
vga_command("f,4"); //11JULY19
Serial1.println(F("MIFARE_Read() failed: "));//11JULY19
Serial1.println(mfrc522.GetStatusCodeName(status));//11JULY19
Serial.print(F("MIFARE_Read() failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
failed = 0;
return;
}
Serial.print(F("Data in block ")); Serial.print(blockAddr); Serial.println(F(":"));
dump_byte_array(buffer, 16); Serial.println();
Serial.println();
//get the crands**************************************************************
for(int z = 0; z<16; z++)
{
pdata[1].crand[z] = buffer[z];
tBuff[z] = buffer[z];
}
Serial1.print("crand 1 = :");
//Serial1.println(tBuff);
//get the crand fin**********************************************************
sector = 5;
blockAddr = 22;
trailerBlock = 23;
// Show the whole sector as it currently is
Serial.println(F("Current data in sector:"));
mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector);
Serial.println();
// Read data from the block
Serial.print(F("Reading data from block ")); Serial.print(blockAddr);
Serial.println(F(" ..."));
status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size);
if (status != MFRC522::STATUS_OK) {
vga_command("f,4"); //11JULY19
Serial1.println(F("MIFARE_Read() failed: "));//11JULY19
Serial1.println(mfrc522.GetStatusCodeName(status));//11JULY19
Serial.print(F("MIFARE_Read() failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
failed = 0;
return ;
}
Serial.print(F("Data in block ")); Serial.print(blockAddr); Serial.println(F(":"));
dump_byte_array(buffer, 16); Serial.println();
Serial.println();
//get the crands**************************************************************
for(int z = 0; z<16; z++)
{
pdata[2].crand[z] = buffer[z];
tBuff[z] = buffer[z];
}
Serial1.print("crand 1 = :");
//Serial1.println(tBuff);
//get the crand fin**********************************************************
sector = 7;
blockAddr = 28;
trailerBlock = 31;
// Show the whole sector as it currently is
Serial.println(F("Current data in sector:"));
mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector);
Serial.println();
// Read data from the block
Serial.print(F("Reading data from block ")); Serial.print(blockAddr);
Serial.println(F(" ..."));
status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size);
if (status != MFRC522::STATUS_OK) {
vga_command("f,4"); //11JULY19
Serial1.println(F("MIFARE_Read() failed: "));//11JULY19
Serial1.println(mfrc522.GetStatusCodeName(status));//11JULY19
Serial.print(F("MIFARE_Read() failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
failed = 0;
return;
}
else
{
pwStat =1; //passwords read.
if(screenStat == 0)
{bootScreen(); bpreviousMillis = millis(); screenStat = 1;}
vga_command("f,3"); // Set Window4 as focus
Serial1.println("Card Read OK");
}
Serial.print(F("Data in block ")); Serial.print(blockAddr); Serial.println(F(":"));
dump_byte_array(buffer, 16); Serial.println();
Serial.println();
//get the crands**************************************************************
for(int z = 0; z<16; z++)
{
pdata[3].crand[z] = buffer[z];
tBuff[z] = buffer[z];
}
Serial1.print("crand 1 = :");
// Dump the sector data
Serial.println(F("Current data in sector:"));
mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector);
Serial.println();
// Halt PICC
mfrc522.PICC_HaltA();
// Stop encryption on PCD
mfrc522.PCD_StopCrypto1();
return failed ;
}