37 #ifndef HDLCD_PACKET_CTRL_H 38 #define HDLCD_PACKET_CTRL_H 56 auto l_PacketCtrl(std::shared_ptr<HdlcdPacketCtrl>(
new HdlcdPacketCtrl));
57 l_PacketCtrl->m_eDeserialize = DESERIALIZE_BODY;
58 l_PacketCtrl->m_BytesRemaining = 2;
66 l_PacketCtrl.m_bLockSerialPort = a_bLockSerialPort;
73 l_PacketCtrl.m_bAlive = a_bIsAlive;
74 l_PacketCtrl.m_bLockedByOthers = a_bIsLockedByOthers;
75 l_PacketCtrl.m_bLockedBySelf = a_bIsLockedBySelf;
99 assert(m_eDeserialize == DESERIALIZE_FULL);
105 assert(m_eDeserialize == DESERIALIZE_FULL);
111 assert(m_eDeserialize == DESERIALIZE_FULL);
112 return m_bLockedByOthers;
117 assert(m_eDeserialize == DESERIALIZE_FULL);
118 return m_bLockedBySelf;
123 assert(m_eDeserialize == DESERIALIZE_FULL);
124 return m_bLockSerialPort;
129 HdlcdPacketCtrl(): m_bAlive(
false), m_bLockedByOthers(
false), m_bLockedBySelf(
false), m_bLockSerialPort(
false),
137 const std::vector<unsigned char> Serialize()
const {
138 assert(m_eDeserialize == DESERIALIZE_FULL);
139 std::vector<unsigned char> l_Buffer;
140 l_Buffer.emplace_back(0x10);
143 unsigned char l_Control = 0x00;
144 switch (m_eCtrlType) {
147 if (m_bAlive) { l_Control |= 0x04; }
148 if (m_bLockedByOthers) { l_Control |= 0x02; }
149 if (m_bLockedBySelf) { l_Control |= 0x01; }
150 if (m_bLockSerialPort) { l_Control |= 0x01; }
165 l_Buffer.emplace_back(l_Control);
172 switch (m_eDeserialize) {
173 case DESERIALIZE_BODY: {
178 m_eDeserialize = DESERIALIZE_ERROR;
182 const unsigned char &l_Control =
m_Buffer[1];
184 switch (l_Control & 0xF0) {
188 if (l_Control & 0x08) {
190 m_eDeserialize = DESERIALIZE_ERROR;
194 m_bAlive = (l_Control & 0x04);
195 m_bLockedByOthers = (l_Control & 0x02);
196 m_bLockedBySelf = (l_Control & 0x01);
197 m_bLockSerialPort = (l_Control & 0x01);
213 m_eDeserialize = DESERIALIZE_ERROR;
218 m_eDeserialize = DESERIALIZE_FULL;
221 case DESERIALIZE_ERROR:
222 case DESERIALIZE_FULL:
233 bool m_bLockedByOthers;
234 bool m_bLockedBySelf;
235 bool m_bLockSerialPort;
239 DESERIALIZE_ERROR = 0,
240 DESERIALIZE_BODY = 1,
243 E_DESERIALIZE m_eDeserialize;
246 #endif // HDLCD_PACKET_CTRL_H
E_HDLCD_PACKET
The enum E_HDLCD_PACKET to specify all possible HDLCd packet types.
This file contains the header declaration of class HdlcdPacket.
static HdlcdPacketCtrl CreateEchoRequest()
static HdlcdPacketCtrl CreatePortKillRequest()
A control packet of the HDLCd access protocol.
static HdlcdPacketCtrl CreatePortStatusRequest(bool a_bLockSerialPort)
static std::shared_ptr< HdlcdPacketCtrl > CreateDeserializedPacket()
bool GetDesiredLockState() const
static HdlcdPacketCtrl CreatePortStatusResponse(bool a_bIsAlive, bool a_bIsLockedByOthers, bool a_bIsLockedBySelf)
std::vector< unsigned char > m_Buffer
The buffer containing partly received frames or higher-layer payload.
E_CTRL_TYPE GetPacketType() const
static HdlcdPacketCtrl CreateKeepAliveRequest()
bool GetIsLockedBySelf() const
bool GetIsLockedByOthers() const