F´ Flight Software - C/C++ Documentation  NASA-v2.0.0
A framework for building embedded system applications to NASA flight quality standards.
Buffer.cpp
Go to the documentation of this file.
1 // ======================================================================
2 // \title Buffer.cpp
3 // \author mstarch
4 // \brief cpp file for Fw::Buffer implementation
5 //
6 // \copyright
7 // Copyright 2009-2020, by the California Institute of Technology.
8 // ALL RIGHTS RESERVED. United States Government Sponsorship
9 // acknowledged.
10 //
11 // ======================================================================
12 #include <Fw/Buffer/Buffer.hpp>
13 #include <Fw/Types/Assert.hpp>
14 #include <Fw/Types/BasicTypes.hpp>
15 
16 #if FW_SERIALIZABLE_TO_STRING
18 #endif
19 #include <cstring>
20 
21 namespace Fw {
22 
24  m_serialize_repr(),
25  m_data(NULL),
26  m_size(0),
27  m_context(0xFFFFFFFF)
28 {}
29 
31  m_serialize_repr(src.m_data, src.m_size),
32  m_data(src.m_data),
33  m_size(src.m_size),
34  m_context(src.m_context)
35 {}
36 
37 Buffer::Buffer(U8* data, U32 size, U32 context) : Serializable(),
38  m_serialize_repr(data, size),
39  m_data(data),
40  m_size(size),
41  m_context(context)
42 {}
43 
45  // Ward against self-assignment
46  if (this != &src) {
47  this->set(src.m_data, src.m_size, src.m_context);
48  }
49  return *this;
50 }
51 
52 bool Buffer::operator==(const Buffer& src) const {
53  return (this->m_data == src.m_data) && (this->m_size == src.m_size) && (this->m_context == src.m_context);
54 }
55 
56 U8* Buffer::getData() const {
57  return this->m_data;
58 }
59 
60 U32 Buffer::getSize() const {
61  return this->m_size;
62 }
63 
64 U32 Buffer::getContext() const {
65  return this->m_context;
66 }
67 
68 void Buffer::setData(U8* const data) {
69  this->m_data = data;
70  if (m_data != NULL) {
71  this->m_serialize_repr.setExtBuffer(m_data, m_size);
72  }
73 }
74 
75 void Buffer::setSize(const U32 size) {
76  this->m_size = size;
77  if (m_data != NULL) {
78  this->m_serialize_repr.setExtBuffer(m_data, m_size);
79  }
80 }
81 
82 void Buffer::setContext(const U32 context) {
83  this->m_context = context;
84 }
85 
86 void Buffer::set(U8* const data, const U32 size, const U32 context) {
87  this->m_data = data;
88  this->m_size = size;
89  if (m_data != NULL) {
90  this->m_serialize_repr.setExtBuffer(m_data, m_size);
91  }
92  this->m_context = context;
93 }
94 
96  return m_serialize_repr;
97 }
98 
100  Fw::SerializeStatus stat;
101 #if FW_SERIALIZATION_TYPE_ID
102  stat = buffer.serialize((U32)Buffer::TYPE_ID);
103  if (stat != Fw::FW_SERIALIZE_OK) {
104  return stat;
105  }
106 #endif
107  stat = buffer.serialize(reinterpret_cast<POINTER_CAST>(this->m_data));
108  if (stat != Fw::FW_SERIALIZE_OK) {
109  return stat;
110  }
111  stat = buffer.serialize(this->m_size);
112  if (stat != Fw::FW_SERIALIZE_OK) {
113  return stat;
114  }
115  stat = buffer.serialize(this->m_context);
116  if (stat != Fw::FW_SERIALIZE_OK) {
117  return stat;
118  }
119  return stat;
120 }
121 
123  Fw::SerializeStatus stat;
124 
125 #if FW_SERIALIZATION_TYPE_ID
126  U32 typeId;
127 
128  stat = buffer.deserialize(typeId);
129  if (stat != Fw::FW_SERIALIZE_OK) {
130  return stat;
131  }
132 
133  if (typeId != Buffer::TYPE_ID) {
135  }
136 #endif
137  POINTER_CAST pointer;
138  stat = buffer.deserialize(pointer);
139  if (stat != Fw::FW_SERIALIZE_OK) {
140  return stat;
141  }
142  this->m_data = reinterpret_cast<U8*>(pointer);
143 
144  stat = buffer.deserialize(this->m_size);
145  if (stat != Fw::FW_SERIALIZE_OK) {
146  return stat;
147  }
148  stat = buffer.deserialize(this->m_context);
149  if (stat != Fw::FW_SERIALIZE_OK) {
150  return stat;
151  }
152  return stat;
153 }
154 
155 #if FW_SERIALIZABLE_TO_STRING || BUILD_UT
156 void Buffer::toString(Fw::StringBase& text) const {
157  static const char * formatString = "(data = %p, size = %u,context = %u)";
158  char outputString[FW_SERIALIZABLE_TO_STRING_BUFFER_SIZE];
159 
160  (void)snprintf(outputString, FW_SERIALIZABLE_TO_STRING_BUFFER_SIZE, formatString, this->m_data, this->m_size,
161  this->m_context);
162  // Force NULL termination
163  outputString[FW_SERIALIZABLE_TO_STRING_BUFFER_SIZE-1] = 0;
164  text = outputString;
165 }
166 #endif
167 
168 #ifdef BUILD_UT
169  std::ostream& operator<<(std::ostream& os, const Buffer& obj) {
171  obj.toString(str);
172  os << str.toChar();
173  return os;
174  }
175 #endif
176 } // end namespace Fw
Fw::EightyCharString::toChar
const char * toChar(void) const
gets char buffer
Definition: EightyCharString.cpp:34
Fw::SerializeBufferBase
Definition: Serializable.hpp:43
Fw::SerializeStatus
SerializeStatus
forward declaration for string
Definition: Serializable.hpp:14
Fw::Buffer::operator=
Buffer & operator=(const Buffer &src)
Definition: Buffer.cpp:44
Fw::Buffer::setContext
void setContext(U32 context)
Definition: Buffer.cpp:82
Fw::Buffer::getData
U8 * getData() const
Definition: Buffer.cpp:56
Fw::SerializeBufferBase::serialize
SerializeStatus serialize(U8 val)
serialize 8-bit unsigned int
Definition: Serializable.cpp:67
Fw::StringBase
Definition: StringType.hpp:23
U8
uint8_t U8
8-bit unsigned integer
Definition: BasicTypes.hpp:76
Buffer.hpp
Fw::Buffer::setData
void setData(U8 *data)
Definition: Buffer.cpp:68
Fw::EightyCharString
Definition: EightyCharString.hpp:10
Fw::Buffer::getContext
U32 getContext() const
Definition: Buffer.cpp:64
Fw::Buffer
Definition: Buffer.hpp:43
Fw::Serializable
forward declaration
Definition: Serializable.hpp:26
Assert.hpp
Fw::FW_SERIALIZE_OK
@ FW_SERIALIZE_OK
Serialization/Deserialization operation was successful.
Definition: Serializable.hpp:15
Fw::Buffer::getSerializeRepr
SerializeBufferBase & getSerializeRepr()
Definition: Buffer.cpp:95
EightyCharString.hpp
Fw::Buffer::getSize
U32 getSize() const
Definition: Buffer.cpp:60
FW_SERIALIZABLE_TO_STRING_BUFFER_SIZE
#define FW_SERIALIZABLE_TO_STRING_BUFFER_SIZE
Size of string to store toString() string output.
Definition: FpConfig.hpp:302
Fw::Buffer::setSize
void setSize(U32 size)
Definition: Buffer.cpp:75
Fw::Buffer::set
void set(U8 *data, U32 size, U32 context=NO_CONTEXT)
Definition: Buffer.cpp:86
Fw::ExternalSerializeBuffer::setExtBuffer
void setExtBuffer(U8 *buffPtr, NATIVE_UINT_TYPE size)
Set the external buffer.
Definition: Serializable.cpp:705
Fw::SerializeBufferBase::deserialize
SerializeStatus deserialize(U8 &val)
deserialize 8-bit unsigned int
Definition: Serializable.cpp:290
Fw::FW_DESERIALIZE_TYPE_MISMATCH
@ FW_DESERIALIZE_TYPE_MISMATCH
Deserialized type ID didn't match.
Definition: Serializable.hpp:21
Fw::Buffer::Buffer
Buffer()
Definition: Buffer.cpp:23
BasicTypes.hpp
Declares ISF basic types.
Fw::Buffer::operator==
bool operator==(const Buffer &src) const
Definition: Buffer.cpp:52
Fw::Buffer::serialize
Fw::SerializeStatus serialize(Fw::SerializeBufferBase &serialBuffer) const
Definition: Buffer.cpp:99
Fw::Buffer::deserialize
Fw::SerializeStatus deserialize(Fw::SerializeBufferBase &buffer)
Definition: Buffer.cpp:122
NULL
#define NULL
NULL.
Definition: BasicTypes.hpp:100
Fw
Definition: Buffer.cpp:21