F´ Flight Software - C/C++ Documentation  devel
A framework for building embedded system applications to NASA flight quality standards.
ComStub.cpp
Go to the documentation of this file.
1 // ======================================================================
2 // \title ComStub.cpp
3 // \author mstarch
4 // \brief cpp file for ComStub component implementation class
5 // ======================================================================
6 
8 #include "Fw/Types/Assert.hpp"
10 
11 namespace Svc {
12 
13 // ----------------------------------------------------------------------
14 // Construction, initialization, and destruction
15 // ----------------------------------------------------------------------
16 
17 ComStub::ComStub(const char* const compName) : ComStubComponentBase(compName), m_reinitialize(true) {}
18 
19 void ComStub::init(const NATIVE_INT_TYPE instance) {
21 }
22 
24 
25 // ----------------------------------------------------------------------
26 // Handler implementations for user-defined typed input ports
27 // ----------------------------------------------------------------------
28 
29 Drv::SendStatus ComStub::comDataIn_handler(const NATIVE_INT_TYPE portNum, Fw::Buffer& sendBuffer) {
30  FW_ASSERT(!this->m_reinitialize || !this->isConnected_comStatus_OutputPort(0)); // A message should never get here if we need to reinitialize is needed
32  for (NATIVE_UINT_TYPE i = 0; driverStatus == Drv::SendStatus::SEND_RETRY && i < RETRY_LIMIT; i++) {
33  driverStatus = this->drvDataOut_out(0, sendBuffer);
34  }
35  FW_ASSERT(driverStatus != Drv::SendStatus::SEND_RETRY); // If it is still in retry state, there is no good answer
37  this->m_reinitialize = driverStatus.e != Drv::SendStatus::SEND_OK;
38  if (this->isConnected_comStatus_OutputPort(0)) {
39  this->comStatus_out(0, comSuccess);
40  }
41  return Drv::SendStatus::SEND_OK; // Always send ok to deframer as it does not handle this anyway
42 }
43 
44 void ComStub::drvConnected_handler(const NATIVE_INT_TYPE portNum) {
45  Fw::Success radioSuccess = Fw::Success::SUCCESS;
46  if (this->isConnected_comStatus_OutputPort(0) && m_reinitialize) {
47  this->m_reinitialize = false;
48  this->comStatus_out(0, radioSuccess);
49  }
50 }
51 
52 void ComStub::drvDataIn_handler(const NATIVE_INT_TYPE portNum,
53  Fw::Buffer& recvBuffer,
54  const Drv::RecvStatus& recvStatus) {
55  this->comDataOut_out(0, recvBuffer, recvStatus);
56 }
57 
58 } // end namespace Svc
#define FW_ASSERT(...)
Definition: Assert.hpp:14
PlatformIntType NATIVE_INT_TYPE
Definition: BasicTypes.h:51
PlatformUIntType NATIVE_UINT_TYPE
Definition: BasicTypes.h:52
C++ header for working with basic fprime types.
Status associated with the received data.
Status returned by the send call.
T e
The raw enum value.
@ SEND_RETRY
Data send should be retried.
@ SEND_OK
Send worked as expected.
void init()
Object initializer.
Definition: ObjBase.cpp:27
Success/Failure.
@ FAILURE
Representing failure.
@ SUCCESS
Representing success.
Auto-generated base for ComStub component.
Drv::SendStatus drvDataOut_out(NATIVE_INT_TYPE portNum, Fw::Buffer &sendBuffer)
Invoke output port drvDataOut.
void comStatus_out(NATIVE_INT_TYPE portNum, Fw::Success &condition)
Invoke output port comStatus.
void comDataOut_out(NATIVE_INT_TYPE portNum, Fw::Buffer &recvBuffer, const Drv::RecvStatus &recvStatus)
Invoke output port comDataOut.
bool isConnected_comStatus_OutputPort(NATIVE_INT_TYPE portNum)
const NATIVE_UINT_TYPE RETRY_LIMIT
Definition: ComStub.hpp:16
~ComStub() override
Definition: ComStub.cpp:23
ComStub(const char *const compName)
Definition: ComStub.cpp:17