F´ Flight Software - C/C++ Documentation  NASA-v2.1.0
A framework for building embedded system applications to NASA flight quality standards.
Serializable.hpp
Go to the documentation of this file.
1 #ifndef SERIALIZABLE_HPP
2 #define SERIALIZABLE_HPP
3 
4 #ifdef BUILD_UT
5 #include <iostream>
6 #endif
7 
9 
10 namespace Fw {
11 
12  class StringBase;
13 
14  typedef enum {
23 
24  class SerializeBufferBase;
25 
26  class Serializable {
27  public:
28  virtual SerializeStatus serialize(SerializeBufferBase& buffer) const = 0;
29  virtual SerializeStatus deserialize(SerializeBufferBase& buffer) = 0;
30 #if FW_SERIALIZABLE_TO_STRING || BUILD_UT
31  virtual void toString(StringBase& text) const;
32 #endif
33 
34 #ifdef BUILD_UT
35  friend std::ostream& operator<<(std::ostream& os, const Serializable& val);
36 #endif
37 
38  protected:
39  Serializable();
40  virtual ~Serializable();
41  };
42 
44  public:
45 
47 
48  virtual ~SerializeBufferBase();
49 
50  // Serialization for built-in types
51 
54 
55 #if FW_HAS_16_BIT==1
56  SerializeStatus serialize(U16 val);
57  SerializeStatus serialize(I16 val);
58 #endif
59 #if FW_HAS_32_BIT==1
60  SerializeStatus serialize(U32 val);
61  SerializeStatus serialize(I32 val);
62 #endif
63 #if FW_HAS_64_BIT==1
65  SerializeStatus serialize(I64 val);
66 #endif
68 #if FW_HAS_F64
69  SerializeStatus serialize(F64 val);
70 #endif
71  SerializeStatus serialize(bool val);
72 
73  SerializeStatus serialize(const void* val);
74 
75  SerializeStatus serialize(const U8* buff, NATIVE_UINT_TYPE length, bool noLength = false);
76 
78 
80 
81  // Deserialization for built-in types
82 
85 
86 #if FW_HAS_16_BIT==1
87  SerializeStatus deserialize(U16 &val);
88  SerializeStatus deserialize(I16 &val);
89 #endif
90 
91 #if FW_HAS_32_BIT==1
92  SerializeStatus deserialize(U32 &val);
93  SerializeStatus deserialize(I32 &val);
94 #endif
95 #if FW_HAS_64_BIT==1
97  SerializeStatus deserialize(I64 &val);
98 #endif
100 #if FW_HAS_F64
101  SerializeStatus deserialize(F64 &val);
102 #endif
103  SerializeStatus deserialize(bool &val);
104 
105  SerializeStatus deserialize(void*& val);
106 
107  // length should be set to max, returned value is actual size stored. If noLength
108  // is true, use the length variable as the actual number of bytes to deserialize
109  SerializeStatus deserialize(U8* buff, NATIVE_UINT_TYPE& length, bool noLength = false);
110  // serialize/deserialize Serializable
111 
112 
114 
116 
117  void resetSer(void);
118  void resetDeser(void);
119 
121  virtual NATIVE_UINT_TYPE getBuffCapacity(void) const = 0;
123  NATIVE_UINT_TYPE getBuffLeft() const;
124  virtual U8* getBuffAddr(void) = 0;
125  virtual const U8* getBuffAddr(void) const = 0;
126  const U8* getBuffAddrLeft(void) const;
127  U8* getBuffAddrSer(void);
128  SerializeStatus setBuff(const U8* src, NATIVE_UINT_TYPE length);
131  // Will increment deserialization pointer
133  // Will increment deserialization pointer
134 
135 
136 #ifdef BUILD_UT
137  bool operator==(const SerializeBufferBase& other) const;
138  friend std::ostream& operator<<(std::ostream& os, const SerializeBufferBase& buff);
139 #endif
140  PROTECTED:
141 
143 
144  PRIVATE:
145  // A no-implementation copy constructor here will prevent the default copy constructor from being called
146  // accidentally, and without an implementation it will create an error for the developer instead.
148 
149  void copyFrom(const SerializeBufferBase& src);
150  NATIVE_UINT_TYPE m_serLoc;
151  NATIVE_UINT_TYPE m_deserLoc;
152  };
153 
154  // Helper class for building buffers with external storage
155 
157  public:
160  void setExtBuffer(U8* buffPtr, NATIVE_UINT_TYPE size);
161  void clear(void);
162 
163  // pure virtual functions
164  NATIVE_UINT_TYPE getBuffCapacity(void) const;
165  U8* getBuffAddr(void);
166  const U8* getBuffAddr(void) const ;
167 
168  PRIVATE:
169 
170  // no copying
173 
174  // private data
175  U8* m_buff;
176  NATIVE_UINT_TYPE m_buffSize;
177  };
178 
179 }
180 #endif
Fw::SerializeBufferBase::SerializeBufferBase
SerializeBufferBase()
default constructor
Definition: Serializable.cpp:41
Fw::FW_DESERIALIZE_BUFFER_EMPTY
@ FW_DESERIALIZE_BUFFER_EMPTY
Deserialization buffer was empty when trying to read more data.
Definition: Serializable.hpp:18
Fw::SerializeBufferBase
Definition: Serializable.hpp:43
Fw::SerializeStatus
SerializeStatus
forward declaration for string
Definition: Serializable.hpp:14
Fw::FW_DESERIALIZE_SIZE_MISMATCH
@ FW_DESERIALIZE_SIZE_MISMATCH
Data was left in the buffer, but not enough to deserialize.
Definition: Serializable.hpp:20
Fw::SerializeBufferBase::resetDeser
void resetDeser(void)
reset deserialization to beginning
Definition: Serializable.cpp:570
Fw::FW_SERIALIZE_FORMAT_ERROR
@ FW_SERIALIZE_FORMAT_ERROR
Data was the wrong format (e.g. wrong packet type)
Definition: Serializable.hpp:16
Fw::SerializeBufferBase::serialize
SerializeStatus serialize(U8 val)
serialize 8-bit unsigned int
Definition: Serializable.cpp:67
Fw::StringBase
Definition: StringType.hpp:23
Fw::SerializeBufferBase::copyRaw
SerializeStatus copyRaw(SerializeBufferBase &dest, NATIVE_UINT_TYPE size)
directly copies buffer without looking for a size in the stream.
Definition: Serializable.cpp:618
U8
uint8_t U8
8-bit unsigned integer
Definition: BasicTypes.hpp:76
Fw::SerializeBufferBase::~SerializeBufferBase
virtual ~SerializeBufferBase()
destructor
Definition: Serializable.cpp:45
Fw::SerializeBufferBase::resetSer
void resetSer(void)
reset to beginning of buffer to reuse for serialization
Definition: Serializable.cpp:565
Fw::Serializable
forward declaration
Definition: Serializable.hpp:26
Fw::FW_SERIALIZE_OK
@ FW_SERIALIZE_OK
Serialization/Deserialization operation was successful.
Definition: Serializable.hpp:15
Fw::ExternalSerializeBuffer::clear
void clear(void)
clear external buffer
Definition: Serializable.cpp:711
Fw::SerializeBufferBase::getBuffLeft
NATIVE_UINT_TYPE getBuffLeft() const
returns how much deserialization buffer is left
Definition: Serializable.cpp:614
Fw::SerializeBufferBase::getBuffAddr
virtual U8 * getBuffAddr(void)=0
gets buffer address for data filling
U64
#define U64(C)
Definition: sha.h:176
Fw::SerializeBufferBase::getBuffCapacity
virtual NATIVE_UINT_TYPE getBuffCapacity(void) const =0
returns capacity, not current size, of buffer
Fw::SerializeBufferBase::deserializeSkip
SerializeStatus deserializeSkip(NATIVE_UINT_TYPE numBytesToSkip)
Skips the number of specified bytes for deserialization.
Definition: Serializable.cpp:574
I8
int8_t I8
8-bit signed integer
Definition: BasicTypes.hpp:75
Fw::FW_DESERIALIZE_FORMAT_ERROR
@ FW_DESERIALIZE_FORMAT_ERROR
Deserialization data had incorrect values (unexpected data types)
Definition: Serializable.hpp:19
F32
float F32
32-bit floating point
Definition: BasicTypes.hpp:94
Fw::Serializable::~Serializable
virtual ~Serializable()
destructor
Definition: Serializable.cpp:19
Fw::Serializable::deserialize
virtual SerializeStatus deserialize(SerializeBufferBase &buffer)=0
deserialize to contents
Fw::SerializeBufferBase::setBuffLen
SerializeStatus setBuffLen(NATIVE_UINT_TYPE length)
sets buffer length manually after filling with data
Definition: Serializable.cpp:604
Fw::FW_SERIALIZE_NO_ROOM_LEFT
@ FW_SERIALIZE_NO_ROOM_LEFT
No room left in the buffer to serialize data.
Definition: Serializable.hpp:17
NATIVE_UINT_TYPE
unsigned int NATIVE_UINT_TYPE
native unsigned integer type declaration
Definition: BasicTypes.hpp:30
Fw::ExternalSerializeBuffer::setExtBuffer
void setExtBuffer(U8 *buffPtr, NATIVE_UINT_TYPE size)
Set the external buffer.
Definition: Serializable.cpp:705
Fw::SerializeBufferBase::getBuffLength
NATIVE_UINT_TYPE getBuffLength() const
returns current buffer size
Definition: Serializable.cpp:587
Fw::ExternalSerializeBuffer
Definition: Serializable.hpp:156
Fw::SerializeBufferBase::getBuffAddrSer
U8 * getBuffAddrSer(void)
gets address of end of serialization. DANGEROUS! Need to know max buffer size and adjust when done
Definition: Serializable.cpp:658
Fw::ExternalSerializeBuffer::getBuffCapacity
NATIVE_UINT_TYPE getBuffCapacity(void) const
returns capacity, not current size, of buffer
Definition: Serializable.cpp:716
Fw::Serializable::Serializable
Serializable()
Default constructor.
Definition: Serializable.cpp:16
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::SerializeBufferBase::setBuff
SerializeStatus setBuff(const U8 *src, NATIVE_UINT_TYPE length)
sets buffer contents and size
Definition: Serializable.cpp:591
Fw::SerializeBufferBase::operator=
const SerializeBufferBase & operator=(const SerializeBufferBase &src)
equal operator
Definition: Serializable.cpp:60
Fw::SerializeBufferBase::copyRawOffset
SerializeStatus copyRawOffset(SerializeBufferBase &dest, NATIVE_UINT_TYPE size)
directly copies buffer without looking for a size in the stream.
Definition: Serializable.cpp:632
Fw::Serializable::serialize
virtual SerializeStatus serialize(SerializeBufferBase &buffer) const =0
serialize contents
Fw::ExternalSerializeBuffer::ExternalSerializeBuffer
ExternalSerializeBuffer()
default constructor
Definition: Serializable.cpp:701
BasicTypes.hpp
Declares ISF basic types.
Fw::ExternalSerializeBuffer::getBuffAddr
U8 * getBuffAddr(void)
gets buffer address for data filling
Definition: Serializable.cpp:720
Fw
Definition: Buffer.cpp:21
Fw::SerializeBufferBase::getBuffAddrLeft
const U8 * getBuffAddrLeft(void) const
gets address of remaining non-deserialized data.