F´ Flight Software - C/C++ Documentation  NASA-v2.1.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
TlmString.cpp
Go to the documentation of this file.
1 #include <Fw/Tlm/TlmString.hpp>
3 #include <string.h>
4 
5 namespace Fw {
6 
7  TlmString::TlmString(const char* src) : StringBase(), m_maxSer(FW_TLM_STRING_MAX_SIZE) {
8  Fw::StringUtils::string_copy(this->m_buf, src, sizeof(this->m_buf));
9  }
10 
12  Fw::StringUtils::string_copy(this->m_buf, src.toChar(), sizeof(this->m_buf));
13  }
14 
16  Fw::StringUtils::string_copy(this->m_buf, src.toChar(), sizeof(this->m_buf));
17  }
18 
20  this->m_buf[0] = 0;
21  }
22 
24  }
25 
27  return strnlen(this->m_buf,sizeof(this->m_buf));
28  }
29 
30  const char* TlmString::toChar(void) const {
31  return this->m_buf;
32  }
33 
35  NATIVE_UINT_TYPE strSize = strnlen(this->m_buf,sizeof(this->m_buf));
36 #if FW_AMPCS_COMPATIBLE
37  // serialize string in AMPC compatible way
38  // AMPC requires an 8-bit argument size value before the string
39 
40  // Omit the null terminator character because AMPCS does not like
41  // \0 in its strings. So subtract 1 from strSize
42  strSize--;
43 
44  // serialize 8-bit size
45  SerializeStatus stat = buffer.serialize(static_cast<U8>(strSize));
46  if (stat != FW_SERIALIZE_OK) {
47  return stat;
48  }
49  return buffer.serialize((U8*)this->m_buf,strSize,true);
50 #else
51  return buffer.serialize((U8*)this->m_buf,strSize);
52 #endif
53  }
54 
56  NATIVE_UINT_TYPE maxSize = sizeof(this->m_buf);
57  // deserialize string
58 #if FW_AMPCS_COMPATIBLE
59  // AMPCS encodes 8-bit string size
60  U8 strSize;
61  SerializeStatus stat = buffer.deserialize(strSize);
62  if (stat != FW_SERIALIZE_OK) {
63  return stat;
64  }
65  NATIVE_UINT_TYPE buffSize = strSize;
66  // To make sure there is space when we add the null terminator
67  // which was omitted in the serialization of this buffer
68  strSize++;
69  stat = buffer.deserialize((U8*)this->m_buf,buffSize,true);
70  this->m_buf[strSize-1] = 0;
71 #else
72  // deserialize string
73  SerializeStatus stat = buffer.deserialize((U8*)this->m_buf,maxSize);
74 #endif
75  // make sure it is null-terminated
76  this->terminate(maxSize);
77 
78  return stat;
79  }
80 
82  this->m_maxSer = FW_MIN(size,FW_TLM_STRING_MAX_SIZE);
83  }
84 
85  NATIVE_UINT_TYPE TlmString::getCapacity(void) const {
87  }
88 
89  void TlmString::terminate(NATIVE_UINT_TYPE size) {
90  // null terminate the string
91  this->m_buf[size < sizeof(this->m_buf)?size:sizeof(this->m_buf)-1] = 0;
92  }
93 
94  const TlmString& TlmString::operator=(const TlmString& other) {
95  Fw::StringUtils::string_copy(this->m_buf, other.toChar(), sizeof(this->m_buf));
96  return *this;
97  }
98 
99 
100 #if FW_SERIALIZABLE_TO_STRING
101  void TlmString::toString(StringBase& text) const {
102  text = this->m_buf;
103  }
104 #endif
105 }
Fw::TlmString
Definition: TlmString.hpp:11
Fw::SerializeBufferBase
Definition: Serializable.hpp:43
Fw::SerializeStatus
SerializeStatus
forward declaration for string
Definition: Serializable.hpp:14
Fw::SerializeBufferBase::serialize
SerializeStatus serialize(U8 val)
serialize 8-bit unsigned int
Definition: Serializable.cpp:67
Fw::StringBase
Definition: StringType.hpp:23
Fw::TlmString::TlmString
TlmString(void)
Definition: TlmString.cpp:19
U8
uint8_t U8
8-bit unsigned integer
Definition: BasicTypes.hpp:76
Fw::TlmString::toChar
const char * toChar(void) const
Definition: TlmString.cpp:30
Fw::TlmString::deserialize
SerializeStatus deserialize(SerializeBufferBase &buffer)
deserialize to contents
Definition: TlmString.cpp:55
StringUtils.hpp
Fw::FW_SERIALIZE_OK
@ FW_SERIALIZE_OK
Serialization/Deserialization operation was successful.
Definition: Serializable.hpp:15
FW_MIN
#define FW_MIN(a, b)
MIN macro.
Definition: BasicTypes.hpp:161
Fw::TlmString::setMaxSerialize
void setMaxSerialize(NATIVE_UINT_TYPE size)
Definition: TlmString.cpp:81
Fw::StringUtils::string_copy
char * string_copy(char *destination, const char *source, U32 num)
copy string with null-termination guaranteed
Definition: StringUtils.cpp:5
TlmString.hpp
Fw::TlmString::serialize
SerializeStatus serialize(SerializeBufferBase &buffer) const
serialize contents
Definition: TlmString.cpp:34
Fw::StringBase::toChar
virtual const char * toChar(void) const =0
NATIVE_UINT_TYPE
unsigned int NATIVE_UINT_TYPE
native unsigned integer type declaration
Definition: BasicTypes.hpp:30
Fw::TlmString::length
NATIVE_UINT_TYPE length(void) const
Definition: TlmString.cpp:26
Fw::TlmString::operator=
const TlmString & operator=(const TlmString &other)
equal operator for other strings
Definition: TlmString.cpp:94
Fw::SerializeBufferBase::deserialize
SerializeStatus deserialize(U8 &val)
deserialize 8-bit unsigned int
Definition: Serializable.cpp:290
FW_TLM_STRING_MAX_SIZE
#define FW_TLM_STRING_MAX_SIZE
Max size of channelized telemetry string type.
Definition: FpConfig.hpp:265
Fw::TlmString::~TlmString
~TlmString(void)
Definition: TlmString.cpp:23
Fw
Definition: Buffer.cpp:21