F´ Flight Software - C/C++ Documentation  devel
A framework for building embedded system applications to NASA flight quality standards.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
AssertFatalAdapterComponentImpl.cpp
Go to the documentation of this file.
1 // ======================================================================
2 // \title AssertFatalAdapterImpl.cpp
3 // \author tcanham
4 // \brief cpp file for AssertFatalAdapter component implementation class
5 //
6 // \copyright
7 // Copyright 2009-2015, by the California Institute of Technology.
8 // ALL RIGHTS RESERVED. United States Government Sponsorship
9 // acknowledged.
10 //
11 // ======================================================================
12 
13 
15 #include <FpConfig.hpp>
16 #include <Fw/Types/Assert.hpp>
17 #include <Fw/Logger/Logger.hpp>
18 #include <cassert>
19 #include <cstdio>
20 
21 namespace Fw {
23  (
24  FILE_NAME_ARG file,
25  NATIVE_UINT_TYPE lineNo,
26  NATIVE_UINT_TYPE numArgs,
27  FwAssertArgType arg1,
28  FwAssertArgType arg2,
29  FwAssertArgType arg3,
30  FwAssertArgType arg4,
31  FwAssertArgType arg5,
32  FwAssertArgType arg6,
33  CHAR* destBuffer,
34  NATIVE_INT_TYPE buffSize
35  );
36 
37 }
38 
39 namespace Svc {
40 
41  // ----------------------------------------------------------------------
42  // Construction, initialization, and destruction
43  // ----------------------------------------------------------------------
44 
47  const char *const compName
49  {
50  // register component with adapter
51  this->m_adapter.regAssertReporter(this);
52  // register adapter
53  this->m_adapter.registerHook();
54 
55  }
56 
59  {
60 
61  }
62 
63  void AssertFatalAdapterComponentImpl::AssertFatalAdapter::reportAssert(
64  FILE_NAME_ARG file,
65  NATIVE_UINT_TYPE lineNo,
66  NATIVE_UINT_TYPE numArgs,
67  FwAssertArgType arg1,
68  FwAssertArgType arg2,
69  FwAssertArgType arg3,
70  FwAssertArgType arg4,
71  FwAssertArgType arg5,
72  FwAssertArgType arg6
73  ) {
74 
75  if (m_compPtr) {
76  m_compPtr->reportAssert(file,lineNo,numArgs,
77  arg1,arg2,arg3,arg4,arg5,arg6);
78  } else {
79  // Can't assert, what else can we do? Maybe somebody will see it.
80  Fw::Logger::log("Svc::AssertFatalAdapter not registered!\n");
81  assert(0);
82  }
83  }
84 
85  void AssertFatalAdapterComponentImpl::AssertFatalAdapter::regAssertReporter(AssertFatalAdapterComponentImpl* compPtr) {
86  this->m_compPtr = compPtr;
87  }
88 
90  }
91 
92  AssertFatalAdapterComponentImpl::AssertFatalAdapter::~AssertFatalAdapter() {
93  }
94 
95  void AssertFatalAdapterComponentImpl::AssertFatalAdapter::doAssert() {
96  // do nothing since there will be a FATAL
97  }
98 
100  FILE_NAME_ARG file,
101  NATIVE_UINT_TYPE lineNo,
102  NATIVE_UINT_TYPE numArgs,
103  FwAssertArgType arg1,
104  FwAssertArgType arg2,
105  FwAssertArgType arg3,
106  FwAssertArgType arg4,
107  FwAssertArgType arg5,
108  FwAssertArgType arg6
109  ) {
110 
111 
112 #if FW_ASSERT_LEVEL == FW_FILEID_ASSERT
113  Fw::LogStringArg fileArg;
114  fileArg.format("0x%08" PRIX32,file);
115 #else
116  Fw::LogStringArg fileArg(file);
117 #endif
118 
120  Fw::defaultReportAssert(file,lineNo,numArgs,arg1,arg2,arg3,arg4,arg5,arg6,msg,sizeof(msg));
121  // fprintf(stderr... allocates large buffers on stack as stderr is unbuffered by the OS
122  // and this can conflict with the traditionally smaller stack sizes.
123  printf("%s\n", msg);
124 
125  // Handle the case where the ports aren't connected yet
126  if (not this->isConnected_Log_OutputPort(0)) {
127  assert(0);
128  return;
129  }
130 
131  switch (numArgs) {
132  case 0:
133  this->log_FATAL_AF_ASSERT_0(
134  fileArg,
135  lineNo);
136  break;
137  case 1:
138  this->log_FATAL_AF_ASSERT_1(
139  fileArg,
140  lineNo,
141  static_cast<U32>(arg1));
142  break;
143  case 2:
144  this->log_FATAL_AF_ASSERT_2(
145  fileArg,
146  lineNo,
147  static_cast<U32>(arg1),
148  static_cast<U32>(arg2));
149  break;
150  case 3:
151  this->log_FATAL_AF_ASSERT_3(
152  fileArg,
153  lineNo,
154  static_cast<U32>(arg1),
155  static_cast<U32>(arg2),
156  static_cast<U32>(arg3));
157  break;
158  case 4:
159  this->log_FATAL_AF_ASSERT_4(
160  fileArg,
161  lineNo,
162  static_cast<U32>(arg1),
163  static_cast<U32>(arg2),
164  static_cast<U32>(arg3),
165  static_cast<U32>(arg4));
166  break;
167  case 5:
168  this->log_FATAL_AF_ASSERT_5(
169  fileArg,
170  lineNo,
171  static_cast<U32>(arg1),
172  static_cast<U32>(arg2),
173  static_cast<U32>(arg3),
174  static_cast<U32>(arg4),
175  static_cast<U32>(arg5));
176  break;
177  case 6:
178  this->log_FATAL_AF_ASSERT_6(
179  fileArg,
180  lineNo,
181  static_cast<U32>(arg1),
182  static_cast<U32>(arg2),
183  static_cast<U32>(arg3),
184  static_cast<U32>(arg4),
185  static_cast<U32>(arg5),
186  static_cast<U32>(arg6));
187  break;
188  default:
189  this->log_FATAL_AF_UNEXPECTED_ASSERT(fileArg,lineNo,numArgs);
190  break;
191  }
192 
193  }
194 } // end namespace Svc
#define FILE_NAME_ARG
Definition: Assert.hpp:16
PlatformIntType NATIVE_INT_TYPE
Definition: BasicTypes.h:55
char CHAR
Definition: BasicTypes.h:32
PlatformUIntType NATIVE_UINT_TYPE
Definition: BasicTypes.h:56
PlatformAssertArgType FwAssertArgType
Definition: FpConfig.h:39
C++-compatible configuration header for fprime configuration.
#define FW_ASSERT_TEXT_SIZE
Size of string used to store assert description.
Definition: FpConfig.hpp:19
static void log(const char *format,...)
log a formated string with supplied arguments
Definition: Logger.cpp:21
void format(const CHAR *formatString,...)
write formatted string to buffer
Definition: StringBase.cpp:56
static constexpr SizeType BUFFER_SIZE(SizeType maxLength)
Get the size of a null-terminated string buffer.
Definition: StringBase.hpp:41
Auto-generated base for AssertFatalAdapter component.
void log_FATAL_AF_ASSERT_2(const Fw::StringBase &file, U32 line, U32 arg1, U32 arg2)
void log_FATAL_AF_ASSERT_1(const Fw::StringBase &file, U32 line, U32 arg1)
void log_FATAL_AF_ASSERT_3(const Fw::StringBase &file, U32 line, U32 arg1, U32 arg2, U32 arg3)
void log_FATAL_AF_ASSERT_0(const Fw::StringBase &file, U32 line)
void log_FATAL_AF_UNEXPECTED_ASSERT(const Fw::StringBase &file, U32 line, U32 numArgs)
void log_FATAL_AF_ASSERT_5(const Fw::StringBase &file, U32 line, U32 arg1, U32 arg2, U32 arg3, U32 arg4, U32 arg5)
void log_FATAL_AF_ASSERT_6(const Fw::StringBase &file, U32 line, U32 arg1, U32 arg2, U32 arg3, U32 arg4, U32 arg5, U32 arg6)
void log_FATAL_AF_ASSERT_4(const Fw::StringBase &file, U32 line, U32 arg1, U32 arg2, U32 arg3, U32 arg4)
void reportAssert(FILE_NAME_ARG file, NATIVE_UINT_TYPE lineNo, NATIVE_UINT_TYPE numArgs, FwAssertArgType arg1, FwAssertArgType arg2, FwAssertArgType arg3, FwAssertArgType arg4, FwAssertArgType arg5, FwAssertArgType arg6)
Report the assert as a FATAL.
void defaultReportAssert(FILE_NAME_ARG file, NATIVE_UINT_TYPE lineNo, NATIVE_UINT_TYPE numArgs, FwAssertArgType arg1, FwAssertArgType arg2, FwAssertArgType arg3, FwAssertArgType arg4, FwAssertArgType arg5, FwAssertArgType arg6, CHAR *destBuffer, NATIVE_INT_TYPE buffSize)
Definition: Assert.cpp:18
AssertFatalAdapterComponentImpl AssertFatalAdapter