F´ Flight Software - C/C++ Documentation
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 #include <Fw/FPrimeBasicTypes.hpp>
14 #include <Fw/Logger/Logger.hpp>
15 #include <Fw/Types/Assert.hpp>
17 #include <cassert>
18 #include <cstdio>
19 
20 namespace Fw {
22  FwSizeType lineNo,
23  FwSizeType numArgs,
24  FwAssertArgType arg1,
25  FwAssertArgType arg2,
26  FwAssertArgType arg3,
27  FwAssertArgType arg4,
28  FwAssertArgType arg5,
29  FwAssertArgType arg6,
30  CHAR* destBuffer,
31  FwSizeType buffSize);
32 
33 }
34 
35 namespace Svc {
36 
37 // ----------------------------------------------------------------------
38 // Construction, initialization, and destruction
39 // ----------------------------------------------------------------------
40 
43  // register component with adapter
44  this->m_adapter.regAssertReporter(this);
45  // register adapter
46  this->m_adapter.registerHook();
47 }
48 
50 
51 void AssertFatalAdapterComponentImpl::AssertFatalAdapter::reportAssert(FILE_NAME_ARG file,
52  FwSizeType lineNo,
53  FwSizeType numArgs,
54  FwAssertArgType arg1,
55  FwAssertArgType arg2,
56  FwAssertArgType arg3,
57  FwAssertArgType arg4,
58  FwAssertArgType arg5,
59  FwAssertArgType arg6) {
60  if (m_compPtr) {
61  m_compPtr->reportAssert(file, lineNo, numArgs, arg1, arg2, arg3, arg4, arg5, arg6);
62  } else {
63  // Can't assert, what else can we do? Maybe somebody will see it.
64  Fw::Logger::log("Svc::AssertFatalAdapter not registered!\n");
65  assert(0);
66  }
67 }
68 
69 void AssertFatalAdapterComponentImpl::AssertFatalAdapter::regAssertReporter(AssertFatalAdapterComponentImpl* compPtr) {
70  this->m_compPtr = compPtr;
71 }
72 
74 
75 AssertFatalAdapterComponentImpl::AssertFatalAdapter::~AssertFatalAdapter() {}
76 
77 void AssertFatalAdapterComponentImpl::AssertFatalAdapter::doAssert() {
78  // do nothing since there will be a FATAL
79 }
80 
82  FwSizeType lineNo,
83  FwSizeType numArgs,
84  FwAssertArgType arg1,
85  FwAssertArgType arg2,
86  FwAssertArgType arg3,
87  FwAssertArgType arg4,
88  FwAssertArgType arg5,
89  FwAssertArgType arg6) {
90 #if FW_ASSERT_LEVEL == FW_FILEID_ASSERT
91  Fw::LogStringArg fileArg;
92  fileArg.format("0x%08" PRIX32, file);
93 #else
94  Fw::LogStringArg fileArg(file);
95 #endif
96 
98  Fw::defaultReportAssert(file, static_cast<U32>(lineNo), numArgs, arg1, arg2, arg3, arg4, arg5, arg6, msg,
99  sizeof(msg));
100  Fw::Logger::log("%s\n", msg);
101 
102  // Handle the case where the ports aren't connected yet
103  if (not this->isConnected_Log_OutputPort(0)) {
104  assert(0);
105  return;
106  }
107 
108  switch (numArgs) {
109  case 0:
110  this->log_FATAL_AF_ASSERT_0(fileArg, static_cast<U32>(lineNo));
111  break;
112  case 1:
113  this->log_FATAL_AF_ASSERT_1(fileArg, static_cast<U32>(lineNo), static_cast<U32>(arg1));
114  break;
115  case 2:
116  this->log_FATAL_AF_ASSERT_2(fileArg, static_cast<U32>(lineNo), static_cast<U32>(arg1),
117  static_cast<U32>(arg2));
118  break;
119  case 3:
120  this->log_FATAL_AF_ASSERT_3(fileArg, static_cast<U32>(lineNo), static_cast<U32>(arg1),
121  static_cast<U32>(arg2), static_cast<U32>(arg3));
122  break;
123  case 4:
124  this->log_FATAL_AF_ASSERT_4(fileArg, static_cast<U32>(lineNo), static_cast<U32>(arg1),
125  static_cast<U32>(arg2), static_cast<U32>(arg3), static_cast<U32>(arg4));
126  break;
127  case 5:
128  this->log_FATAL_AF_ASSERT_5(fileArg, static_cast<U32>(lineNo), static_cast<U32>(arg1),
129  static_cast<U32>(arg2), static_cast<U32>(arg3), static_cast<U32>(arg4),
130  static_cast<U32>(arg5));
131  break;
132  case 6:
133  this->log_FATAL_AF_ASSERT_6(fileArg, static_cast<U32>(lineNo), static_cast<U32>(arg1),
134  static_cast<U32>(arg2), static_cast<U32>(arg3), static_cast<U32>(arg4),
135  static_cast<U32>(arg5), static_cast<U32>(arg6));
136  break;
137  default:
138  this->log_FATAL_AF_UNEXPECTED_ASSERT(fileArg, static_cast<U32>(lineNo), static_cast<U32>(numArgs));
139  break;
140  }
141 }
142 } // end namespace Svc
void log_FATAL_AF_UNEXPECTED_ASSERT(const Fw::StringBase &file, U32 line, U32 numArgs) const
void log_FATAL_AF_ASSERT_1(const Fw::StringBase &file, U32 line, U32 arg1) const
PlatformSizeType FwSizeType
void log_FATAL_AF_ASSERT_3(const Fw::StringBase &file, U32 line, U32 arg1, U32 arg2, U32 arg3) const
static void log(const char *format,...)
log a formated string with supplied arguments
Definition: Logger.cpp:21
char CHAR
Definition: BasicTypes.h:59
void log_FATAL_AF_ASSERT_2(const Fw::StringBase &file, U32 line, U32 arg1, U32 arg2) const
void defaultReportAssert(FILE_NAME_ARG file, FwSizeType lineNo, FwSizeType numArgs, FwAssertArgType arg1, FwAssertArgType arg2, FwAssertArgType arg3, FwAssertArgType arg4, FwAssertArgType arg5, FwAssertArgType arg6, CHAR *destBuffer, FwSizeType buffSize)
Definition: Assert.cpp:22
void log_FATAL_AF_ASSERT_5(const Fw::StringBase &file, U32 line, U32 arg1, U32 arg2, U32 arg3, U32 arg4, U32 arg5) const
#define FILE_NAME_ARG
Definition: Assert.hpp:16
void log_FATAL_AF_ASSERT_4(const Fw::StringBase &file, U32 line, U32 arg1, U32 arg2, U32 arg3, U32 arg4) const
void log_FATAL_AF_ASSERT_0(const Fw::StringBase &file, U32 line) const
void reportAssert(FILE_NAME_ARG file, FwSizeType lineNo, FwSizeType numArgs, FwAssertArgType arg1, FwAssertArgType arg2, FwAssertArgType arg3, FwAssertArgType arg4, FwAssertArgType arg5, FwAssertArgType arg6)
Report the assert as a FATAL.
FormatStatus format(const CHAR *formatString,...)
write formatted string to buffer
Definition: StringBase.cpp:55
#define FW_ASSERT_TEXT_SIZE
Size of string used to store assert description.
static constexpr SizeType BUFFER_SIZE(SizeType maxLength)
Get the size of a null-terminated string buffer.
Definition: StringBase.hpp:42
RateGroupDivider component implementation.
AssertFatalAdapterComponentImpl AssertFatalAdapter
Auto-generated base for AssertFatalAdapter component.
PlatformAssertArgType FwAssertArgType
The type of arguments to assert functions.
void log_FATAL_AF_ASSERT_6(const Fw::StringBase &file, U32 line, U32 arg1, U32 arg2, U32 arg3, U32 arg4, U32 arg5, U32 arg6) const