Fixed CRC

This commit is contained in:
TheJoKlLa 2022-10-31 16:23:58 +01:00
parent b747c07945
commit 2e9b11afc4
2 changed files with 19 additions and 5 deletions

View File

@ -116,19 +116,24 @@ MFRC522::StatusCode NFC::Transceive(byte* command, byte command_len, byte* respo
pcb = 0x0A; pcb = 0x0A;
// Calculate CRC_A // Calculate CRC_A
state = rfid->PCD_CalculateCRC(request_buffer, request_buffer_size, &request_buffer[request_buffer_size - 2]); state = rfid->PCD_CalculateCRC(request_buffer, request_buffer_size - 2, &request_buffer[request_buffer_size - 2]);
if (state != MFRC522::STATUS_OK) if (state != MFRC522::STATUS_OK)
{ {
return state; return state;
} }
byte response_buffer[APDU_BUFFER_SIZE + 4]; // APDU Size + PCB + CID + 2x CRC
byte response_buffer_size;
printbytes(request_buffer, request_buffer_size); printbytes(request_buffer, request_buffer_size);
state = rfid->PCD_TransceiveData(request_buffer, request_buffer_size, response_buffer, &response_buffer_size);
state = rfid->PCD_TransceiveData(request_buffer, request_buffer_size, response, response_len); if (state != MFRC522::STATUS_OK)
if (state != MFRC522::STATUS_OK)
{ {
return state; return state;
} }
memcpy(response, response_buffer + 2, response_buffer_size - 4);
*response_len = response_buffer_size - 4;
return state; return state;
} }

View File

@ -29,7 +29,7 @@ void loop()
byte request_buffer[APDU_BUFFER_SIZE] = {0x90, 0x5A, 0x00, 0x00, 0x03, 0x42, 0x41, 0x46, 0x00}; byte request_buffer[APDU_BUFFER_SIZE] = {0x90, 0x5A, 0x00, 0x00, 0x03, 0x42, 0x41, 0x46, 0x00};
byte request_buffer_size = 9; byte request_buffer_size = 9;
byte response_buffer[APDU_BUFFER_SIZE]; byte response_buffer[APDU_BUFFER_SIZE] = {0};
byte response_buffer_size; byte response_buffer_size;
printbytes(request_buffer, request_buffer_size); printbytes(request_buffer, request_buffer_size);
@ -42,6 +42,15 @@ void loop()
Serial.println("Data Exchange complete"); Serial.println("Data Exchange complete");
printbytes(response_buffer, response_buffer_size); printbytes(response_buffer, response_buffer_size);
state = nfc->Transceive(request_buffer, request_buffer_size, response_buffer, &response_buffer_size);
if (state != MFRC522::STATUS_OK)
{
Serial.println("Data Exchange failed");
Serial.println(state);
}
Serial.println("Data Exchange complete");
printbytes(response_buffer, response_buffer_size);
nfc->disconnectCard(); nfc->disconnectCard();
Serial.println("Card disconnected"); Serial.println("Card disconnected");
} }