/ src / nfc / nfc_payload.h
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