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
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:292
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: BufferGetPortAc.cpp:6