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
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