F´ Flight Software - C/C++ Documentation  devel
A framework for building embedded system applications to NASA flight quality standards.
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 
58  init(
59  const NATIVE_INT_TYPE instance
60  )
61  {
63  }
64 
67  {
68 
69  }
70 
71  void AssertFatalAdapterComponentImpl::AssertFatalAdapter::reportAssert(
72  FILE_NAME_ARG file,
73  NATIVE_UINT_TYPE lineNo,
74  NATIVE_UINT_TYPE numArgs,
75  FwAssertArgType arg1,
76  FwAssertArgType arg2,
77  FwAssertArgType arg3,
78  FwAssertArgType arg4,
79  FwAssertArgType arg5,
80  FwAssertArgType arg6
81  ) {
82 
83  if (m_compPtr) {
84  m_compPtr->reportAssert(file,lineNo,numArgs,
85  arg1,arg2,arg3,arg4,arg5,arg6);
86  } else {
87  // Can't assert, what else can we do? Maybe somebody will see it.
88  Fw::Logger::logMsg("Svc::AssertFatalAdapter not registered!\n");
89  assert(0);
90  }
91  }
92 
93  void AssertFatalAdapterComponentImpl::AssertFatalAdapter::regAssertReporter(AssertFatalAdapterComponentImpl* compPtr) {
94  this->m_compPtr = compPtr;
95  }
96 
98  }
99 
100  AssertFatalAdapterComponentImpl::AssertFatalAdapter::~AssertFatalAdapter() {
101  }
102 
103  void AssertFatalAdapterComponentImpl::AssertFatalAdapter::doAssert() {
104  // do nothing since there will be a FATAL
105  }
106 
108  FILE_NAME_ARG file,
109  NATIVE_UINT_TYPE lineNo,
110  NATIVE_UINT_TYPE numArgs,
111  FwAssertArgType arg1,
112  FwAssertArgType arg2,
113  FwAssertArgType arg3,
114  FwAssertArgType arg4,
115  FwAssertArgType arg5,
116  FwAssertArgType arg6
117  ) {
118 
119 
120 #if FW_ASSERT_LEVEL == FW_FILEID_ASSERT
121  Fw::LogStringArg fileArg;
122  fileArg.format("0x%08" PRIX32,file);
123 #else
124  Fw::LogStringArg fileArg(file);
125 #endif
126 
128  Fw::defaultReportAssert(file,lineNo,numArgs,arg1,arg2,arg3,arg4,arg5,arg6,msg,sizeof(msg));
129  // fprintf(stderr... allocates large buffers on stack as stderr is unbuffered by the OS
130  // and this can conflict with the traditionally smaller stack sizes.
131  printf("%s\n", msg);
132 
133  // Handle the case where the ports aren't connected yet
134  if (not this->isConnected_Log_OutputPort(0)) {
135  assert(0);
136  return;
137  }
138 
139  switch (numArgs) {
140  case 0:
141  this->log_FATAL_AF_ASSERT_0(
142  fileArg,
143  lineNo);
144  break;
145  case 1:
146  this->log_FATAL_AF_ASSERT_1(
147  fileArg,
148  lineNo,
149  static_cast<U32>(arg1));
150  break;
151  case 2:
152  this->log_FATAL_AF_ASSERT_2(
153  fileArg,
154  lineNo,
155  static_cast<U32>(arg1),
156  static_cast<U32>(arg2));
157  break;
158  case 3:
159  this->log_FATAL_AF_ASSERT_3(
160  fileArg,
161  lineNo,
162  static_cast<U32>(arg1),
163  static_cast<U32>(arg2),
164  static_cast<U32>(arg3));
165  break;
166  case 4:
167  this->log_FATAL_AF_ASSERT_4(
168  fileArg,
169  lineNo,
170  static_cast<U32>(arg1),
171  static_cast<U32>(arg2),
172  static_cast<U32>(arg3),
173  static_cast<U32>(arg4));
174  break;
175  case 5:
176  this->log_FATAL_AF_ASSERT_5(
177  fileArg,
178  lineNo,
179  static_cast<U32>(arg1),
180  static_cast<U32>(arg2),
181  static_cast<U32>(arg3),
182  static_cast<U32>(arg4),
183  static_cast<U32>(arg5));
184  break;
185  case 6:
186  this->log_FATAL_AF_ASSERT_6(
187  fileArg,
188  lineNo,
189  static_cast<U32>(arg1),
190  static_cast<U32>(arg2),
191  static_cast<U32>(arg3),
192  static_cast<U32>(arg4),
193  static_cast<U32>(arg5),
194  static_cast<U32>(arg6));
195  break;
196  default:
197  this->log_FATAL_AF_UNEXPECTED_ASSERT(fileArg,lineNo,numArgs);
198  break;
199  }
200 
201  }
202 } // end namespace Svc
#define FILE_NAME_ARG
Definition: Assert.hpp:16
PlatformIntType NATIVE_INT_TYPE
Definition: BasicTypes.h:51
char CHAR
Definition: BasicTypes.h:28
PlatformUIntType NATIVE_UINT_TYPE
Definition: BasicTypes.h:52
PlatformAssertArgType FwAssertArgType
Definition: FpConfig.h:34
#define FW_ASSERT_TEXT_SIZE
Size of string used to store assert description.
Definition: FpConfig.h:224
C++-compatible configuration header for fprime configuration.
static void logMsg(const char *fmt, POINTER_CAST a0=0, POINTER_CAST a1=0, POINTER_CAST a2=0, POINTER_CAST a3=0, POINTER_CAST a4=0, POINTER_CAST a5=0, POINTER_CAST a6=0, POINTER_CAST a7=0, POINTER_CAST a8=0, POINTER_CAST a9=0)
Definition: Logger.cpp:18
void init()
Object initializer.
Definition: ObjBase.cpp:27
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:40
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:20
AssertFatalAdapterComponentImpl AssertFatalAdapter