Files
common/nfc_protocol.cpp
2026-05-03 23:20:16 -07:00

69 lines
2.0 KiB
C++

#include "nfc_protocol.h"
uint16_t calculateChecksum(const uint8_t* data, size_t length) {
uint16_t checksum = 0;
for (size_t i = 0; i < length; i++) {
checksum += data[i];
}
return checksum;
}
bool validateMessage(const CommMessage* msg) {
if (msg == nullptr) return false;
// Calculate checksum excluding the checksum field itself
size_t data_size = sizeof(CommMessage) - sizeof(msg->checksum);
uint16_t calculated_checksum = calculateChecksum((const uint8_t*)msg, data_size);
return calculated_checksum == msg->checksum;
}
void printNFCData(const NFCData* data) {
if (data == nullptr) return;
Serial.println("=== NFC Data ===");
Serial.print("UID: ");
for (int i = 0; i < data->uid_length; i++) {
if (data->uid[i] < 0x10) Serial.print("0");
Serial.print(data->uid[i], HEX);
if (i < data->uid_length - 1) Serial.print(" ");
}
Serial.println();
Serial.print("UID Length: ");
Serial.println(data->uid_length);
Serial.print("SAK: 0x");
if (data->sak < 0x10) Serial.print("0");
Serial.println(data->sak, HEX);
Serial.print("ATQA: 0x");
if (data->atqa[0] < 0x10) Serial.print("0");
Serial.print(data->atqa[0], HEX);
Serial.print(" 0x");
if (data->atqa[1] < 0x10) Serial.print("0");
Serial.println(data->atqa[1], HEX);
Serial.print("Tag Type: ");
Serial.println(data->tag_type);
Serial.print("Data Length: ");
Serial.println(data->data_length);
Serial.print("Timestamp: ");
Serial.println(data->timestamp);
if (data->data_length > 0) {
Serial.print("Raw Data: ");
for (int i = 0; i < data->data_length && i < 32; i++) {
if (data->raw_data[i] < 0x10) Serial.print("0");
Serial.print(data->raw_data[i], HEX);
Serial.print(" ");
}
if (data->data_length > 32) {
Serial.print("... (truncated)");
}
Serial.println();
}
Serial.println("================");
}