Satellite-Gateway
GatewayClientError.h
Go to the documentation of this file.
1 
24 #ifndef GATEWAY_CLIENT_ERROR_H
25 #define GATEWAY_CLIENT_ERROR_H
26 
27 #include "ConfigFrame.h"
28 #include <memory>
29 
31 public:
32  static GatewayClientError Create(uint16_t a_ReferenceNbr, uint16_t a_ErrorCode) {
33  GatewayClientError l_GatewayClientError;
34  l_GatewayClientError.m_ReferenceNbr = a_ReferenceNbr;
35  l_GatewayClientError.m_ErrorCode = a_ErrorCode;
36  return l_GatewayClientError;
37  }
38 
39  static std::shared_ptr<GatewayClientError> CreateDeserializedFrame() {
40  auto l_GatewayClientError(std::shared_ptr<GatewayClientError>(new GatewayClientError));
41  l_GatewayClientError->m_eDeserialize = DESERIALIZE_BODY;
42  l_GatewayClientError->m_BytesRemaining = 5; // Next: read body including the frame type byte
43  return l_GatewayClientError;
44  }
45 
46  // Getter
47  uint16_t GetReferenceNbr() const {
48  assert(m_eDeserialize == DESERIALIZE_FULL);
49  return m_ReferenceNbr;
50  }
51 
52  uint16_t GetErrorCode() const {
53  assert(m_eDeserialize == DESERIALIZE_FULL);
54  return m_ErrorCode;
55  }
56 
57 private:
58  // Private CTOR
59  GatewayClientError(): m_ReferenceNbr(0), m_ErrorCode(0), m_eDeserialize(DESERIALIZE_FULL) {
60  }
61 
62  // Methods
63  E_CONFIG_FRAME GetConfigFrameType() const { return CONFIG_FRAME_GATEWAY_CLIENT_ERROR; }
64 
65  // Serializer
66  const std::vector<unsigned char> Serialize() const {
67  assert(m_eDeserialize == DESERIALIZE_FULL);
68  std::vector<unsigned char> l_Buffer;
69  l_Buffer.emplace_back(CONFIG_FRAME_GATEWAY_CLIENT_ERROR);
70  l_Buffer.emplace_back((m_ReferenceNbr >> 8) & 0xFF);
71  l_Buffer.emplace_back((m_ReferenceNbr >> 0) & 0xFF);
72  l_Buffer.emplace_back((m_ErrorCode >> 8) & 0xFF);
73  l_Buffer.emplace_back((m_ErrorCode >> 0) & 0xFF);
74  return l_Buffer;
75  }
76 
77  // Deserializer
78  bool Deserialize() {
79  // All requested bytes are available
80  switch (m_eDeserialize) {
81  case DESERIALIZE_BODY: {
82  // Deserialize the body including the frame type byte
83  assert(m_Buffer.size() == 5);
85  m_ReferenceNbr = ntohs(*(reinterpret_cast<const uint16_t*>(&m_Buffer[1])));
86  m_ErrorCode = ntohs(*(reinterpret_cast<const uint16_t*>(&m_Buffer[3])));
87  m_eDeserialize = DESERIALIZE_FULL;
88  break;
89  }
90  case DESERIALIZE_ERROR:
91  case DESERIALIZE_FULL:
92  default:
93  assert(false);
94  } // switch
95 
96  // No error
97  return true;
98  }
99 
100  // Members
101  uint16_t m_ReferenceNbr;
102  uint16_t m_ErrorCode;
103  typedef enum {
104  DESERIALIZE_ERROR = 0,
105  DESERIALIZE_BODY = 1,
106  DESERIALIZE_FULL = 2
107  } E_DESERIALIZE;
108  E_DESERIALIZE m_eDeserialize;
109 };
110 
111 #endif // GATEWAY_CLIENT_ERROR_H
static std::shared_ptr< GatewayClientError > CreateDeserializedFrame()
E_CONFIG_FRAME
Definition: ConfigFrame.h:29
uint16_t GetReferenceNbr() const
std::vector< unsigned char > m_Buffer
The buffer containing partly received frames or higher-layer payload.
Definition: Frame.h:154
static GatewayClientError Create(uint16_t a_ReferenceNbr, uint16_t a_ErrorCode)
uint16_t GetErrorCode() const