37 #ifndef HDLCD_PACKET_DATA_H 38 #define HDLCD_PACKET_DATA_H 45 static HdlcdPacketData CreatePacket(
const std::vector<unsigned char> a_Payload,
bool a_bReliable,
bool a_bInvalid =
false,
bool a_bWasSent =
false) {
48 l_PacketData.
m_Buffer = std::move(a_Payload);
49 l_PacketData.m_bReliable = a_bReliable;
50 l_PacketData.m_bInvalid = a_bInvalid;
51 l_PacketData.m_bWasSent = a_bWasSent;
57 auto l_PacketData(std::shared_ptr<HdlcdPacketData>(
new HdlcdPacketData));
58 l_PacketData->m_eDeserialize = DESERIALIZE_HEADER;
59 l_PacketData->m_BytesRemaining = 3;
63 const std::vector<unsigned char>&
GetData()
const {
64 assert(m_eDeserialize == DESERIALIZE_FULL);
69 assert(m_eDeserialize == DESERIALIZE_FULL);
74 assert(m_eDeserialize == DESERIALIZE_FULL);
79 assert(m_eDeserialize == DESERIALIZE_FULL);
85 HdlcdPacketData(): m_bReliable(
false), m_bInvalid(
false), m_bWasSent(
false), m_eDeserialize(DESERIALIZE_FULL) {
92 const std::vector<unsigned char> Serialize()
const {
93 assert(m_eDeserialize == DESERIALIZE_FULL);
94 std::vector<unsigned char> l_Buffer;
97 unsigned char l_Type = 0x00;
98 if (m_bReliable) { l_Type |= 0x04; }
99 if (m_bInvalid) { l_Type |= 0x02; }
100 if (m_bWasSent) { l_Type |= 0x01; }
101 l_Buffer.emplace_back(l_Type);
104 l_Buffer.emplace_back((
m_Buffer.size() >> 8) & 0xFF);
105 l_Buffer.emplace_back((
m_Buffer.size() >> 0) & 0xFF);
115 switch (m_eDeserialize) {
116 case DESERIALIZE_HEADER: {
121 const unsigned char &l_Control =
m_Buffer[0];
122 if (l_Control & 0x08) {
124 m_eDeserialize = DESERIALIZE_ERROR;
128 m_bReliable = (l_Control & 0x04);
129 m_bInvalid = (l_Control & 0x02);
130 m_bWasSent = (l_Control & 0x01);
136 m_eDeserialize = DESERIALIZE_BODY;
139 m_eDeserialize = DESERIALIZE_FULL;
144 case DESERIALIZE_BODY: {
146 m_eDeserialize = DESERIALIZE_FULL;
149 case DESERIALIZE_ERROR:
150 case DESERIALIZE_FULL:
164 DESERIALIZE_ERROR = 0,
165 DESERIALIZE_HEADER = 1,
166 DESERIALIZE_BODY = 2,
169 E_DESERIALIZE m_eDeserialize;
172 #endif // HDLCD_PACKET_DATA_H
E_HDLCD_PACKET
The enum E_HDLCD_PACKET to specify all possible HDLCd packet types.
static HdlcdPacketData CreatePacket(const std::vector< unsigned char > a_Payload, bool a_bReliable, bool a_bInvalid=false, bool a_bWasSent=false)
static std::shared_ptr< HdlcdPacketData > CreateDeserializedPacket()
This file contains the header declaration of class HdlcdPacket.
const std::vector< unsigned char > & GetData() const
A data packet of the HDLCd access protocol.
std::vector< unsigned char > m_Buffer
The buffer containing partly received frames or higher-layer payload.
size_t m_BytesRemaining
The amount of bytes required to finalize frame assembly during reception.