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 
127  CHAR msg[FW_ASSERT_TEXT_SIZE] = {0};
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(fileArg,lineNo);
142  break;
143  case 1:
144  this->log_FATAL_AF_ASSERT_1(fileArg,lineNo,arg1);
145  break;
146  case 2:
147  this->log_FATAL_AF_ASSERT_2(fileArg,lineNo,arg1,arg2);
148  break;
149  case 3:
150  this->log_FATAL_AF_ASSERT_3(fileArg,lineNo,arg1,arg2,arg3);
151  break;
152  case 4:
153  this->log_FATAL_AF_ASSERT_4(fileArg,lineNo,arg1,arg2,arg3,arg4);
154  break;
155  case 5:
156  this->log_FATAL_AF_ASSERT_5(fileArg,lineNo,arg1,arg2,arg3,arg4,arg5);
157  break;
158  case 6:
159  this->log_FATAL_AF_ASSERT_6(fileArg,lineNo,arg1,arg2,arg3,arg4,arg5,arg6);
160  break;
161  default:
162  this->log_FATAL_AF_UNEXPECTED_ASSERT(fileArg,lineNo,numArgs);
163  break;
164  }
165 
166  }
167 } // 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:21
#define FW_ASSERT_TEXT_SIZE
Size of string used to store assert description.
Definition: FpConfig.h:176
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: StringType.cpp:60
Auto-generated base for AssertFatalAdapter component.
void log_FATAL_AF_UNEXPECTED_ASSERT(const Fw::LogStringArg &file, U32 line, U32 numArgs)
void log_FATAL_AF_ASSERT_2(const Fw::LogStringArg &file, U32 line, U32 arg1, U32 arg2)
void log_FATAL_AF_ASSERT_4(const Fw::LogStringArg &file, U32 line, U32 arg1, U32 arg2, U32 arg3, U32 arg4)
void log_FATAL_AF_ASSERT_1(const Fw::LogStringArg &file, U32 line, U32 arg1)
void log_FATAL_AF_ASSERT_3(const Fw::LogStringArg &file, U32 line, U32 arg1, U32 arg2, U32 arg3)
void log_FATAL_AF_ASSERT_6(const Fw::LogStringArg &file, U32 line, U32 arg1, U32 arg2, U32 arg3, U32 arg4, U32 arg5, U32 arg6)
bool isConnected_Log_OutputPort(NATIVE_INT_TYPE portNum)
void log_FATAL_AF_ASSERT_0(const Fw::LogStringArg &file, U32 line)
void log_FATAL_AF_ASSERT_5(const Fw::LogStringArg &file, U32 line, U32 arg1, U32 arg2, U32 arg3, U32 arg4, U32 arg5)
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:21
AssertFatalAdapterComponentImpl AssertFatalAdapter