F´ Flight Software - C/C++ Documentation  NASA-v1.5.0
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;
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
141 
143 
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);
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 
169 
170  // no copying
173 
174  // private data
177  };
178 
179 }
180 #endif
Fw::FW_DESERIALIZE_BUFFER_EMPTY
@ FW_DESERIALIZE_BUFFER_EMPTY
Deserialization buffer was empty when trying to read more data.
Definition: Serializable.hpp:18
PRIVATE
#define PRIVATE
overridable private for unit testing
Definition: BasicTypes.hpp:118
Fw::SerializeBufferBase::getBuffAddrLeft
const U8 * getBuffAddrLeft(void) const
gets address of remaining non-deserialized data.
Definition: Serializable.cpp:658
Fw::SerializeBufferBase::getBuffAddr
virtual const U8 * getBuffAddr(void) const =0
gets buffer address for data reading, const version
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:575
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:623
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:570
PROTECTED
#define PROTECTED
overridable protected for unit testing
Definition: BasicTypes.hpp:114
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::m_buffSize
NATIVE_UINT_TYPE m_buffSize
size of external buffer
Definition: Serializable.hpp:176
Fw::ExternalSerializeBuffer::clear
void clear(void)
clear external buffer
Definition: Serializable.cpp:716
Fw::SerializeBufferBase::getBuffLeft
NATIVE_UINT_TYPE getBuffLeft() const
returns how much deserialization buffer is left
Definition: Serializable.cpp:619
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:579
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:609
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:710
Fw::SerializeBufferBase::m_serLoc
NATIVE_UINT_TYPE m_serLoc
current offset in buffer of serialized data
Definition: Serializable.hpp:150
Fw::SerializeBufferBase::getBuffLength
NATIVE_UINT_TYPE getBuffLength() const
returns current buffer size
Definition: Serializable.cpp:592
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:663
Fw::ExternalSerializeBuffer::getBuffCapacity
NATIVE_UINT_TYPE getBuffCapacity(void) const
returns capacity, not current size, of buffer
Definition: Serializable.cpp:721
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:292
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:596
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:637
Fw::Serializable::serialize
virtual SerializeStatus serialize(SerializeBufferBase &buffer) const =0
serialize contents
Fw::ExternalSerializeBuffer::ExternalSerializeBuffer
ExternalSerializeBuffer()
default constructor
Definition: Serializable.cpp:706
Fw::SerializeBufferBase::m_deserLoc
NATIVE_UINT_TYPE m_deserLoc
current offset for deserialization
Definition: Serializable.hpp:151
BasicTypes.hpp
Declares ISF basic types.
Fw::ExternalSerializeBuffer::ExternalSerializeBuffer
ExternalSerializeBuffer(ExternalSerializeBuffer *other)
Fw::ExternalSerializeBuffer::m_buff
U8 * m_buff
pointer to external buffer
Definition: Serializable.hpp:175
Fw::ExternalSerializeBuffer::getBuffAddr
U8 * getBuffAddr(void)
gets buffer address for data filling
Definition: Serializable.cpp:725
Fw
Definition: BufferGetPortAc.cpp:6
Fw::SerializeBufferBase::copyFrom
void copyFrom(const SerializeBufferBase &src)
copy data from source buffer
Definition: Serializable.cpp:48