4 #ifndef _3ESPACKETWRITER_H_ 5 #define _3ESPACKETWRITER_H_ 9 #include "3espacketstream.h" 62 PacketWriter(uint8_t *buffer, uint16_t bufferSize, uint16_t routingId = 0, uint16_t messageId = 0);
81 void reset(uint16_t routingId, uint16_t messageId);
86 void setRoutingId(uint16_t routingId);
89 const uint8_t *data()
const;
93 inline void invalidateCrc() { _status &= ~CrcValid; }
98 uint16_t bytesRemaining()
const;
103 uint16_t maxPayloadSize()
const;
127 size_t writeElement(
const uint8_t *bytes,
size_t elementSize);
141 size_t writeArray(
const uint8_t *bytes,
size_t elementSize,
size_t elementCount);
153 size_t writeRaw(
const uint8_t *bytes,
size_t byteCount);
159 template <
typename T>
160 size_t writeElement(
const T &element);
162 template <
typename T>
163 size_t writeArray(
const T *elements,
size_t elementCount);
165 template <
typename T>
169 uint8_t *payloadWritePtr();
170 void incrementPayloadSize(
size_t inc);
172 uint16_t _bufferSize;
175 inline void PacketWriter::setRoutingId(uint16_t routingId)
177 _packet.routingId = routingId;
185 inline const uint8_t *PacketWriter::data()
const 187 return reinterpret_cast<uint8_t*
>(&_packet);
190 inline uint8_t *PacketWriter::payload()
192 return reinterpret_cast<uint8_t*
>(&_packet) +
sizeof(
PacketHeader);
195 template <
typename T>
198 return writeElement(reinterpret_cast<const uint8_t *>(&element),
sizeof(T));
201 template <
typename T>
204 return writeArray(reinterpret_cast<const uint8_t *>(elements),
sizeof(T), elementCount);
208 template <
typename T>
211 int written = writeElement(val);
212 _status |= !(written ==
sizeof(T)) * Fail;
217 inline uint8_t *PacketWriter::payloadWritePtr()
219 return payload() + _payloadPosition;
223 #endif // _3ESPACKETWRITER_H_ size_t writeArray(const uint8_t *bytes, size_t elementSize, size_t elementCount)
Writes an array of data items from the current position.
Definition: 3esbounds.h:13
A utility class used for managing read/write operations to a PacketHeader payload.
Definition: 3espacketstream.h:19
void reset()
Definition: 3espacketwriter.h:84
A utility class for writing payload data to a PacketHeader.
Definition: 3espacketwriter.h:34
size_t writeElement(const uint8_t *bytes, size_t elementSize)
Writes a single data element from the current position.
uint16_t CrcType
Defies the packet CRC type.
Definition: 3espacketstream.h:23