nfc_payload.h
1 #pragma once 2 3 #include <cstdint> 4 #include <cstddef> 5 6 namespace nfc 7 { 8 class Payload 9 { 10 public: 11 Payload() = delete; 12 Payload(const uint8_t* initialData, size_t initalDataLength) 13 : data(initialData), writableData(nullptr), dataLength(initalDataLength), writable(false) 14 { } 15 Payload(uint8_t* initialData, size_t initalDataLength) 16 : data(initialData), writableData(initialData), dataLength(initalDataLength), writable(true) 17 { } 18 virtual ~Payload() = default; 19 Payload(const Payload&) = delete; 20 Payload& operator=(const Payload&) = delete; 21 virtual size_t GetDataLength() const; 22 virtual const uint8_t* GetData() const; 23 virtual void SetData(const uint8_t* data, size_t length); 24 virtual bool GetUniqueIdBytes(uint8_t* idOutput, size_t* idOutputLength) const; 25 protected: 26 27 const uint8_t* data = nullptr; 28 uint8_t* writableData = nullptr; 29 size_t dataLength = 0; 30 bool writable = false; 31 }; 32 33 template<size_t capacity> 34 class ContainedPayload : public Payload 35 { 36 uint8_t tagMemory[capacity] = { 0 }; 37 public: 38 ContainedPayload() : Payload(payloadMemory, capacity) 39 { 40 41 } 42 43 ContainedPayload(const uint8_t* initialPayloadMemory, size_t initialPayloadLength) : ContainedPayload() 44 { 45 SetData(initialPayloadMemory, initialPayloadLength); 46 } 47 48 static constexpr size_t TagMemoryCapacity = capacity; 49 protected: 50 uint8_t payloadMemory[capacity] = { 0 }; 51 }; 52 53 } // namespace nfc