F´ Flight Software - C/C++ Documentation  NASA-v1.5.0
A framework for building embedded system applications to NASA flight quality standards.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
CmdPortAc.cpp
Go to the documentation of this file.
1 #include <FpConfig.hpp>
2 #include <Fw/Types/Assert.hpp>
4 
5 #include <Fw/Cmd/CmdPortAc.hpp>
6 namespace Fw {
7 
8 
9  namespace {
10 
11  class CmdPortBuffer : public Fw::SerializeBufferBase {
12 
13  public:
14  NATIVE_UINT_TYPE getBuffCapacity(void) const {
15  return sizeof(m_buff);
16  }
17 
18  U8* getBuffAddr(void) {
19  return m_buff;
20  }
21 
22  const U8* getBuffAddr(void) const {
23  return m_buff;
24  }
25 
26  private:
27 
29 
30  };
31 
32  }
34  Fw::InputPortBase(),
35  m_func(0) {
36  }
37 
38  void InputCmdPort::init(void) {
40  }
41 
42  void InputCmdPort::addCallComp(Fw::PassiveComponentBase* callComp, CompFuncPtr funcPtr) {
43  FW_ASSERT(callComp);
44  FW_ASSERT(funcPtr);
45 
46  this->m_comp = callComp;
47  this->m_func = funcPtr;
48  this->m_connObj = callComp;
49  }
50 
51  // call virtual logging function for component
52  void InputCmdPort::invoke(FwOpcodeType opCode, U32 cmdSeq, CmdArgBuffer &args) {
53 
54 #if FW_PORT_TRACING == 1
55  this->trace();
56 #endif
57  FW_ASSERT(this->m_comp);
58  FW_ASSERT(this->m_func);
59  this->m_func(this->m_comp, this->m_portNum, opCode, cmdSeq, args);
60  }
61 
62 #if FW_PORT_SERIALIZATION == 1
63  Fw::SerializeStatus InputCmdPort::invokeSerial(Fw::SerializeBufferBase &buffer) {
64  Fw::SerializeStatus _status;
65 #if FW_PORT_TRACING == 1
66  this->trace();
67 #endif
68  FW_ASSERT(this->m_comp);
69  FW_ASSERT(this->m_func);
70 
71 
72  FwOpcodeType opCode;
73  _status = buffer.deserialize(opCode);
74  if (Fw::FW_SERIALIZE_OK != _status) {
75  return _status;
76  }
77 
78  U32 cmdSeq;
79  _status = buffer.deserialize(cmdSeq);
80  if (Fw::FW_SERIALIZE_OK != _status) {
81  return _status;
82  }
83 
84  CmdArgBuffer args;
85  _status = buffer.deserialize(args);
86  if (Fw::FW_SERIALIZE_OK != _status) {
87  return _status;
88  }
89 
90  this->m_func(this->m_comp, this->m_portNum, opCode, cmdSeq, args);
91 
92  return Fw::FW_SERIALIZE_OK;
93  }
94 #endif
95 
97  Fw::OutputPortBase(),
98  m_port(0) {
99 }
100 
103 }
104 
106  FW_ASSERT(callPort);
107 
108  this->m_port = callPort;
109  this->m_connObj = callPort;
110 #if FW_PORT_SERIALIZATION == 1
111  this->m_serPort = 0;
112 #endif
113 }
114 
115 void OutputCmdPort::invoke(FwOpcodeType opCode, U32 cmdSeq, CmdArgBuffer &args) {
116 #if FW_PORT_TRACING == 1
117  this->trace();
118 #endif
119 
120 #if FW_PORT_SERIALIZATION
121  FW_ASSERT(this->m_port||this->m_serPort);
122 #else
123  FW_ASSERT(this->m_port);
124 #endif
125 
126  if (this->m_port) {
127  this->m_port->invoke(opCode, cmdSeq, args);
128 #if FW_PORT_SERIALIZATION
129  } else if (this->m_serPort) {
130 
131  Fw::SerializeStatus status;
132 
133  CmdPortBuffer _buffer;
134  status = _buffer.serialize(opCode);
135  FW_ASSERT(Fw::FW_SERIALIZE_OK == status,static_cast<AssertArg>(status));
136 
137  status = _buffer.serialize(cmdSeq);
138  FW_ASSERT(Fw::FW_SERIALIZE_OK == status,static_cast<AssertArg>(status));
139 
140  status = _buffer.serialize(args);
141  FW_ASSERT(Fw::FW_SERIALIZE_OK == status,static_cast<AssertArg>(status));
142 
143  status = this->m_serPort->invokeSerial(_buffer);
144  FW_ASSERT(Fw::FW_SERIALIZE_OK == status,static_cast<AssertArg>(status));
145  }
146 #else
147  }
148 #endif
149 
150 } // end OutputCmdPort::invoke(...)
151 
152 } // end namespace Fw
Fw::OutputCmdPort::OutputCmdPort
OutputCmdPort(void)
Definition: CmdPortAc.cpp:96
Fw::InputPortBase::m_portNum
NATIVE_INT_TYPE m_portNum
Definition: InputPortBase.hpp:29
Fw::SerializeBufferBase
Definition: Serializable.hpp:43
Fw::SerializeStatus
SerializeStatus
forward declaration for string
Definition: Serializable.hpp:14
Serializable.hpp
Fw::OutputPortBase::init
virtual void init(void)
Definition: OutputPortBase.cpp:23
U8
uint8_t U8
8-bit unsigned integer
Definition: BasicTypes.hpp:76
Fw::InputCmdPort::InputCmdPort
InputCmdPort(void)
constructor
Definition: CmdPortAc.cpp:33
Fw::InputCmdPort::addCallComp
void addCallComp(Fw::PassiveComponentBase *callComp, CompFuncPtr funcPtr)
call to register a component
Definition: CmdPortAc.cpp:42
Assert.hpp
CmdPortAc.hpp
Fw::FW_SERIALIZE_OK
@ FW_SERIALIZE_OK
Serialization/Deserialization operation was successful.
Definition: Serializable.hpp:15
Fw::InputCmdPort::init
void init(void)
initialization function
Definition: CmdPortAc.cpp:38
Fw::OutputCmdPort::addCallPort
void addCallPort(InputCmdPort *callPort)
Definition: CmdPortAc.cpp:105
Fw::PassiveComponentBase
Definition: PassiveComponentBase.hpp:10
Fw::InputPortBase
Definition: InputPortBase.hpp:14
FwOpcodeType
#define FwOpcodeType
Type representation for a command opcode.
Definition: FpConfig.hpp:62
NATIVE_UINT_TYPE
unsigned int NATIVE_UINT_TYPE
native unsigned integer type declaration
Definition: BasicTypes.hpp:30
Fw::InputCmdPort::invoke
void invoke(FwOpcodeType opCode, U32 cmdSeq, CmdArgBuffer &args)
invoke port interface
Definition: CmdPortAc.cpp:52
Fw::OutputCmdPort::invoke
void invoke(FwOpcodeType opCode, U32 cmdSeq, CmdArgBuffer &args)
Definition: CmdPortAc.cpp:115
Fw::CmdArgBuffer
Definition: CmdArgBuffer.hpp:22
FW_ASSERT
#define FW_ASSERT(...)
Definition: Assert.hpp:9
Fw::SerializeBufferBase::deserialize
SerializeStatus deserialize(U8 &val)
deserialize 8-bit unsigned int
Definition: Serializable.cpp:292
Fw::InputCmdPort
Definition: CmdPortAc.hpp:28
FpConfig.hpp
ISF configuration file.
Fw::OutputPortBase
Definition: OutputPortBase.hpp:13
Fw::InputPortBase::m_comp
PassiveComponentBase * m_comp
Definition: InputPortBase.hpp:28
Fw::InputPortBase::init
virtual void init(void)
Definition: InputPortBase.cpp:20
Fw::OutputCmdPort::init
void init(void)
Definition: CmdPortAc.cpp:101
Fw::PortBase::m_connObj
Fw::ObjBase * m_connObj
Definition: PortBase.hpp:33
AssertArg
#define AssertArg
Definition: FpConfig.hpp:51
Fw::InputCmdPort::SERIALIZED_SIZE
@ SERIALIZED_SIZE
serialized size of port arguments
Definition: CmdPortAc.hpp:31
Fw
Definition: BufferGetPortAc.cpp:6