F´ Flight Software - C/C++ Documentation
A framework for building embedded system applications to NASA flight quality standards.
CmdSplitter.cpp
Go to the documentation of this file.
1 // ======================================================================
2 // \title CmdSplitter.cpp
3 // \author watney
4 // \brief cpp file for CmdSplitter component implementation class
5 // ======================================================================
6 
7 #include <limits>
8 
9 #include <Fw/Cmd/CmdPacket.hpp>
10 #include <Fw/FPrimeBasicTypes.hpp>
11 #include <Fw/Types/Assert.hpp>
14 
15 namespace Svc {
16 
17 // ----------------------------------------------------------------------
18 // Construction, initialization, and destruction
19 // ----------------------------------------------------------------------
20 
21 CmdSplitter ::CmdSplitter(const char* const compName)
22  : CmdSplitterComponentBase(compName), m_remoteBase(std::numeric_limits<FwOpcodeType>::max()) {}
23 
25 
26 void CmdSplitter ::configure(const FwOpcodeType remoteBaseOpcode) {
27  this->m_remoteBase = remoteBaseOpcode;
28 }
29 
30 // ----------------------------------------------------------------------
31 // Handler implementations for user-defined typed input ports
32 // ----------------------------------------------------------------------
33 
34 void CmdSplitter ::CmdBuff_handler(const FwIndexType portNum, Fw::ComBuffer& data, U32 context) {
35  Fw::CmdPacket cmdPkt;
36  Fw::SerializeStatus stat = cmdPkt.deserializeFrom(data);
37 
38  FW_ASSERT(portNum < CmdSplitterPorts);
39  if (stat != Fw::FW_SERIALIZE_OK) {
40  // Let the local command dispatcher deal with it
41  this->LocalCmd_out(portNum, data, context);
42  } else {
43  // Check if local or remote
44  if (cmdPkt.getOpCode() < this->m_remoteBase) {
45  this->LocalCmd_out(portNum, data, context);
46  } else {
47  this->RemoteCmd_out(portNum, data, context);
48  }
49  }
50 }
51 
52 void CmdSplitter ::seqCmdStatus_handler(const FwIndexType portNum,
53  FwOpcodeType opCode,
54  U32 cmdSeq,
55  const Fw::CmdResponse& response) {
56  FW_ASSERT(portNum < CmdSplitterPorts);
57  // Forward the command status
58  this->forwardSeqCmdStatus_out(portNum, opCode, cmdSeq, response);
59 }
60 
61 } // end namespace Svc
Serialization/Deserialization operation was successful.
FwIdType FwOpcodeType
The type of a command opcode.
CmdSplitter(const char *const compName)
Definition: CmdSplitter.cpp:21
Enum representing a command response.
void forwardSeqCmdStatus_out(FwIndexType portNum, FwOpcodeType opCode, U32 cmdSeq, const Fw::CmdResponse &response) const
Invoke output port forwardSeqCmdStatus.
SerializeStatus
forward declaration for string
SerializeStatus deserializeFrom(SerialBufferBase &buffer, Fw::Endianness mode=Fw::Endianness::BIG) override
Deserialize the contents of this object from a buffer.
Definition: CmdPacket.cpp:27
Auto-generated base for CmdSplitter component.
FwOpcodeType getOpCode() const
Definition: CmdPacket.cpp:57
void RemoteCmd_out(FwIndexType portNum, Fw::ComBuffer &data, U32 context) const
Invoke output port RemoteCmd.
PlatformIndexType FwIndexType
void LocalCmd_out(FwIndexType portNum, Fw::ComBuffer &data, U32 context) const
Invoke output port LocalCmd.
RateGroupDivider component implementation.
void configure(const FwOpcodeType remoteBaseOpcode)
Definition: CmdSplitter.cpp:26
#define FW_ASSERT(...)
Definition: Assert.hpp:14