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