F´ Flight Software - C/C++ Documentation
A framework for building embedded system applications to NASA flight quality standards.
AsyncByteStreamBufferAdapter.cpp
Go to the documentation of this file.
1 // ======================================================================
2 // \title AsyncByteStreamBufferAdapter.cpp
3 // \author shahab
4 // \brief cpp file for AsyncByteStreamBufferAdapter component implementation class
5 // ======================================================================
6 
8 
9 namespace Drv {
10 
11 // ----------------------------------------------------------------------
12 // Component construction and destruction
13 // ----------------------------------------------------------------------
14 
17 
19 
20 // ----------------------------------------------------------------------
21 // Handler implementations for typed input ports
22 // ----------------------------------------------------------------------
23 
24 void AsyncByteStreamBufferAdapter ::bufferIn_handler(FwIndexType portNum, Fw::Buffer& fwBuffer) {
25  if (this->m_driverIsReady) {
26  this->toByteStreamDriver_out(portNum, fwBuffer);
27  // ByteStreamDriver is Async; don't return buffer here but wait for toByteStreamDriverReturn
28  } else {
29  // If not ready, log warning and return buffer back immediately
31  this->bufferInReturn_out(portNum, fwBuffer);
32  }
33 }
34 
35 void AsyncByteStreamBufferAdapter ::bufferOutReturn_handler(FwIndexType portNum, Fw::Buffer& fwBuffer) {
36  this->fromByteStreamDriverReturn_out(portNum, fwBuffer);
37 }
38 
39 void AsyncByteStreamBufferAdapter ::fromByteStreamDriver_handler(FwIndexType portNum,
40  Fw::Buffer& buffer,
41  const Drv::ByteStreamStatus& status) {
42  if (status == Drv::ByteStreamStatus::OP_OK) {
43  this->bufferOut_out(portNum, buffer);
44  // buffer ownership will come back through bufferOutReturn so we do **not** return buffer here
45  } else {
46  // If error, log and return buffer back immediately
47  this->log_WARNING_LO_DataReceiveError(status);
48  this->fromByteStreamDriverReturn_out(portNum, buffer);
49  }
50 }
51 
52 void AsyncByteStreamBufferAdapter ::byteStreamDriverReady_handler(FwIndexType portNum) {
53  this->m_driverIsReady = true;
54 }
55 
56 void AsyncByteStreamBufferAdapter ::toByteStreamDriverReturn_handler(FwIndexType portNum,
57  Fw::Buffer& buffer,
58  const Drv::ByteStreamStatus& status) {
59  if (status != Drv::ByteStreamStatus::OP_OK) {
60  this->log_WARNING_LO_DataSendError(status);
61  }
62  this->bufferInReturn_out(portNum, buffer);
63 }
64 
65 } // namespace Drv
AsyncByteStreamBufferAdapter(const char *const compName)
Construct AsyncByteStreamBufferAdapter object.
void toByteStreamDriver_out(FwIndexType portNum, Fw::Buffer &fwBuffer)
Invoke output port toByteStreamDriver.
Status returned by the send call.
Operation worked as expected.
~AsyncByteStreamBufferAdapter()
Destroy AsyncByteStreamBufferAdapter object.
void bufferInReturn_out(FwIndexType portNum, Fw::Buffer &fwBuffer)
Invoke output port bufferInReturn.
Auto-generated base for AsyncByteStreamBufferAdapter component.
PlatformIndexType FwIndexType
void fromByteStreamDriverReturn_out(FwIndexType portNum, Fw::Buffer &fwBuffer)
Invoke output port fromByteStreamDriverReturn.
void bufferOut_out(FwIndexType portNum, Fw::Buffer &fwBuffer)
Invoke output port bufferOut.