Initial commit: project docs and ignore rules
This commit is contained in:
69
nfc_protocol.cpp
Normal file
69
nfc_protocol.cpp
Normal file
@@ -0,0 +1,69 @@
|
||||
#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("================");
|
||||
}
|
||||
Reference in New Issue
Block a user