From 2e9b11afc415c7825f95fc23fa94c6543edb585f Mon Sep 17 00:00:00 2001 From: TheJoKlLa Date: Mon, 31 Oct 2022 16:23:58 +0100 Subject: [PATCH] Fixed CRC --- src/FabReader_v2/src/NFC.cpp | 13 +++++++++---- src/FabReader_v2/src/main.cpp | 11 ++++++++++- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/FabReader_v2/src/NFC.cpp b/src/FabReader_v2/src/NFC.cpp index e2a314c..c1f9383 100644 --- a/src/FabReader_v2/src/NFC.cpp +++ b/src/FabReader_v2/src/NFC.cpp @@ -116,19 +116,24 @@ MFRC522::StatusCode NFC::Transceive(byte* command, byte command_len, byte* respo pcb = 0x0A; // 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) { 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); - - state = rfid->PCD_TransceiveData(request_buffer, request_buffer_size, response, response_len); - if (state != MFRC522::STATUS_OK) + state = rfid->PCD_TransceiveData(request_buffer, request_buffer_size, response_buffer, &response_buffer_size); + if (state != MFRC522::STATUS_OK) { return state; } + memcpy(response, response_buffer + 2, response_buffer_size - 4); + *response_len = response_buffer_size - 4; + return state; } \ No newline at end of file diff --git a/src/FabReader_v2/src/main.cpp b/src/FabReader_v2/src/main.cpp index 20ccfce..78c4df5 100644 --- a/src/FabReader_v2/src/main.cpp +++ b/src/FabReader_v2/src/main.cpp @@ -29,7 +29,7 @@ void loop() byte request_buffer[APDU_BUFFER_SIZE] = {0x90, 0x5A, 0x00, 0x00, 0x03, 0x42, 0x41, 0x46, 0x00}; byte request_buffer_size = 9; - byte response_buffer[APDU_BUFFER_SIZE]; + byte response_buffer[APDU_BUFFER_SIZE] = {0}; byte response_buffer_size; printbytes(request_buffer, request_buffer_size); @@ -42,6 +42,15 @@ void loop() Serial.println("Data Exchange complete"); 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(); Serial.println("Card disconnected"); }