F´ Flight Software - C/C++ Documentation  NASA-v2.0.1
A framework for building embedded system applications to NASA flight quality standards.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 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.