F´ Flight Software - C/C++ Documentation  NASA-v2.0.1
A framework for building embedded system applications to NASA flight quality standards.
LogString.cpp
Go to the documentation of this file.
3 #include <Fw/Log/LogString.hpp>
4 #include <Fw/Types/Assert.hpp>
5 #include <string.h>
6 #include <stdio.h>
7 #include <stdlib.h>
8 
9 namespace Fw {
10 
11  LogStringArg::LogStringArg(const char* src)
12  : StringBase(), m_maxSer(FW_LOG_STRING_MAX_SIZE) {
13  this->copyBuff(src,sizeof(this->m_buf));
14  }
15 
17  : StringBase(), m_maxSer(FW_LOG_STRING_MAX_SIZE) {
18  this->copyBuff(src.toChar(),sizeof(this->m_buf));
19  }
20 
22  : StringBase(), m_maxSer(FW_LOG_STRING_MAX_SIZE) {
23  this->copyBuff(src.m_buf,sizeof(this->m_buf));
24  }
25 
27  : StringBase(), m_maxSer(FW_LOG_STRING_MAX_SIZE) {
28  this->m_buf[0] = 0;
29  }
30 
32  }
33 
35  return (NATIVE_UINT_TYPE) strnlen(this->m_buf,sizeof(m_buf));
36  }
37 
38  const char* LogStringArg::toChar(void) const {
39  return this->m_buf;
40  }
41 
42  void LogStringArg::copyBuff(const char* buff, NATIVE_UINT_TYPE size) {
43  FW_ASSERT(buff);
44  // check for self copy
45  if (buff != this->m_buf) {
46  (void)strncpy(this->m_buf,buff,size);
47  // NULL terminate
48  this->terminate(sizeof(this->m_buf));
49  }
50  }
51 
53  // serialize string
54  NATIVE_UINT_TYPE strSize = FW_MIN(this->m_maxSer,static_cast<NATIVE_UINT_TYPE>(strnlen(this->m_buf,sizeof(this->m_buf))));
55 #if FW_AMPCS_COMPATIBLE
56  // serialize string in AMPC compatible way
57  // AMPC requires an 8-bit argument size value before the string
58 
59  // Omit the null terminator character because AMPCS does not like
60  // \0 in its strings. So subtract 1 from strSize
61  strSize--;
62 
63  // serialize 8-bit size
64  // cap at 8 bit size value if higher
65  if (strSize > 256) {
66  strSize = 256;
67  }
68  SerializeStatus stat = buffer.serialize(static_cast<U8>(strSize));
69  if (stat != FW_SERIALIZE_OK) {
70  return stat;
71  }
72  return buffer.serialize((U8*)this->m_buf,strSize,true);
73 #else
74  return buffer.serialize((U8*)this->m_buf,strSize);
75 #endif
76  }
77 
79  SerializeStatus stat;
80 #if FW_AMPCS_COMPATIBLE
81  // serialize string in AMPC compatible way
82  // AMPCS requires an 8-bit argument size value before the string
83 
84  // deserialize 8-bit size
85  U8 deserSize;
86  stat = buffer.deserialize(deserSize);
87  if (stat != FW_SERIALIZE_OK) {
88  return stat;
89  }
90 
91  NATIVE_UINT_TYPE deserSize_native = static_cast<NATIVE_UINT_TYPE>(deserSize);
92  buffer.deserialize((U8*)this->m_buf,deserSize_native,true);
93  this->m_buf[deserSize_native] = 0;
94  return stat;
95 #else
96  NATIVE_UINT_TYPE maxSize = sizeof(this->m_buf);
97  // deserialize string
98  stat = buffer.deserialize((U8*)this->m_buf,maxSize);
99  // make sure it is null-terminated
100  this->terminate(maxSize);
101 
102 #endif
103  return stat;
104  }
105 
107  this->m_maxSer = FW_MIN(size,FW_LOG_STRING_MAX_SIZE);
108  }
109 
110  NATIVE_UINT_TYPE LogStringArg::getCapacity(void) const {
111  return FW_LOG_STRING_MAX_SIZE;
112  }
113 
114  void LogStringArg::terminate(NATIVE_UINT_TYPE size) {
115  // null terminate the string
116  this->m_buf[size < sizeof(this->m_buf)?size:sizeof(this->m_buf)-1] = 0;
117  }
118 
120  this->copyBuff(other.m_buf,this->getCapacity());
121  return *this;
122  }
123 
124 #if FW_SERIALIZABLE_TO_STRING
125  void LogStringArg::toString(StringBase& text) const {
126  text = this->m_buf;
127  }
128 #endif
129 
130 }
StringType.hpp
Declares ISF string base class.
Fw::LogStringArg::~LogStringArg
~LogStringArg(void)
Definition: LogString.cpp:31
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
Assert.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:38
Fw::LogStringArg::operator=
const LogStringArg & operator=(const LogStringArg &other)
equal operator for other strings
Definition: LogString.cpp:119
LogString.hpp
FW_MIN
#define FW_MIN(a, b)
MIN macro.
Definition: BasicTypes.hpp:106
Fw::LogStringArg::deserialize
SerializeStatus deserialize(SerializeBufferBase &buffer)
deserialize to contents
Definition: LogString.cpp:78
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:52
FW_ASSERT
#define FW_ASSERT(...)
Definition: Assert.hpp:9
Fw::LogStringArg::setMaxSerialize
void setMaxSerialize(NATIVE_UINT_TYPE size)
Definition: LogString.cpp:106
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:251
Fw::LogStringArg::LogStringArg
LogStringArg(void)
Definition: LogString.cpp:26
Fw::LogStringArg::length
NATIVE_UINT_TYPE length(void) const
Get length of string.
Definition: LogString.cpp:34
BasicTypes.hpp
Declares ISF basic types.
Fw
Definition: Buffer.cpp:21