From c92c8ce11f7b2cc07ed8385e46d543127846968c Mon Sep 17 00:00:00 2001 From: Teo-CD Date: Tue, 5 Mar 2024 23:54:24 +0000 Subject: [PATCH 1/2] RFID: Fix buffer size for writes The RFID library expects a 16 bytes buffer for writing blocks. However, we re-use the 18 bytes buffer needed for reading blocks. Properly remove those two extra bytes when writing blocks. --- src/RFID.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/RFID.cpp b/src/RFID.cpp index 03b40d5..1c4eb2a 100644 --- a/src/RFID.cpp +++ b/src/RFID.cpp @@ -161,7 +161,8 @@ bool RFID::writeBlock(MFRC522Constants::Uid &uidToRead, byte blockAddr, uint8_t return false; } - byte size = sizeof(comData); + // Take into account the two bytes used only for the read commands. + byte size = sizeof(comData) - 2; for (byte& bufferByte: comData) bufferByte = 0; From d38b534bbe78453198bc9716706118782bda31c6 Mon Sep 17 00:00:00 2001 From: Teo-CD Date: Tue, 5 Mar 2024 23:56:00 +0000 Subject: [PATCH 2/2] RFID: Track ID changes We keep track of the detected tag UUIDs and their figurine ID, but we don't update it when a programming request succeeds. Search through the tracked tags for the programmed UUID and update the stored ID when the change suceeds. --- src/RFID.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/RFID.cpp b/src/RFID.cpp index 1c4eb2a..2b15851 100644 --- a/src/RFID.cpp +++ b/src/RFID.cpp @@ -100,6 +100,15 @@ bool RFID::programTag(Com::TagInfoRecord *tagToProgram) { Serial.println("Failed to program tag."); return false; } + + // Programming succeeded, update the tracked ID of the tag. + for (uidNode* node = activeTags; node; node = node->next) { + // The protocol does not support UIDs other than 4 bytes, so assume it + // is the case here directly. + if ( *(uint32_t*)(node->uid.uidByte) == tagToProgram->uid) + node->tag_ID = tagToProgram->figId; + } + return true; }