42 unsigned char l_ControlField = 0;
43 bool l_bAppendPayload =
false;
46 l_ControlField = (((a_HdlcFrame.
GetSSeq() & 0x07) << 1) | ((a_HdlcFrame.
GetRSeq() & 0x07) << 5));
47 l_bAppendPayload =
true;
51 l_ControlField = (0x01 | ((a_HdlcFrame.
GetRSeq() & 0x07) << 5));
55 l_ControlField = (0x05 | ((a_HdlcFrame.
GetRSeq() & 0x07) << 5));
59 l_ControlField = (0x09 | ((a_HdlcFrame.
GetRSeq() & 0x07) << 5));
63 l_ControlField = (0x0d | ((a_HdlcFrame.
GetRSeq() & 0x07) << 5));
67 l_ControlField = 0x03;
68 l_bAppendPayload =
true;
72 l_ControlField = 0x2F;
76 l_ControlField = 0x43;
80 l_ControlField = 0x63;
84 l_ControlField = 0x83;
88 l_ControlField = 0xE3;
105 std::vector<unsigned char> l_HDLCFrame;
106 l_HDLCFrame.reserve(a_HdlcFrame.
GetPayload().size() + 6);
107 l_HDLCFrame.emplace_back(0x7E);
108 l_HDLCFrame.emplace_back(a_HdlcFrame.
GetAddress());
109 if (a_HdlcFrame.
IsPF()) {
110 l_ControlField |= 0x10;
113 l_HDLCFrame.emplace_back(l_ControlField);
114 if (l_bAppendPayload) {
119 ApplyFCS(l_HDLCFrame);
120 l_HDLCFrame.emplace_back(0x7E);
124 void FrameGenerator::ApplyFCS(std::vector<unsigned char> &a_HDLCFrame) {
127 a_HDLCFrame.emplace_back(trialfcs & 0x00ff);
128 a_HDLCFrame.emplace_back((trialfcs >> 8) & 0x00ff);
133 size_t l_NbrOfBytesToEscapeMax = 0;
134 for (
size_t l_Index = 1; l_Index < (a_HDLCFrame.size() - 1); ++l_Index) {
135 if ((a_HDLCFrame[l_Index] == 0x7D) || (a_HDLCFrame[l_Index] == 0x7E)) {
136 ++l_NbrOfBytesToEscapeMax;
141 std::vector<unsigned char> l_EscapedHDLCFrame;
142 l_EscapedHDLCFrame.reserve(a_HDLCFrame.size() + l_NbrOfBytesToEscapeMax);
143 l_EscapedHDLCFrame.emplace_back(0x7E);
144 for (std::vector<unsigned char>::const_iterator it = (a_HDLCFrame.begin() + 1); it < (a_HDLCFrame.end() - 1); ++it) {
146 l_EscapedHDLCFrame.emplace_back(0x7D);
147 l_EscapedHDLCFrame.emplace_back(0x5D);
148 }
else if (*it == 0x7E) {
149 l_EscapedHDLCFrame.emplace_back(0x7D);
150 l_EscapedHDLCFrame.emplace_back(0x5E);
152 l_EscapedHDLCFrame.emplace_back(*it);
156 l_EscapedHDLCFrame.emplace_back(0x7E);
157 return l_EscapedHDLCFrame;
static std::vector< unsigned char > EscapeFrame(const std::vector< unsigned char > &a_HDLCFrame)
static const std::vector< unsigned char > SerializeFrame(const HdlcFrame &a_HdlcFrame)
Copyright (c) 2016, Florian Evers, florian-evers@gmx.de All rights reserved.
E_HDLC_FRAMETYPE GetHDLCFrameType() const
Copyright (c) 2016, Florian Evers, florian-evers@gmx.de All rights reserved.
unsigned char GetSSeq() const
unsigned char GetRSeq() const
uint16_t pppfcs16(uint16_t fcs, unsigned char *cp, size_t len)
unsigned char GetAddress() const
const std::vector< unsigned char > & GetPayload() const