F´ Flight Software - C/C++ Documentation  NASA-v1.5.0
A framework for building embedded system applications to NASA flight quality standards.
ComPortAc.cpp
Go to the documentation of this file.
1 #include <FpConfig.hpp>
2 #include <Fw/Types/Assert.hpp>
4 
5 #include <Fw/Com/ComPortAc.hpp>
6 namespace Fw {
7 
8 
9  namespace {
10 
11  class ComPortBuffer : 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 InputComPort::init(void) {
40  }
41 
42  void InputComPort::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 InputComPort::invoke(ComBuffer &data, U32 context) {
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, data, context);
60  }
61 
62 #if FW_PORT_SERIALIZATION == 1
63  Fw::SerializeStatus InputComPort::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  ComBuffer data;
73  _status = buffer.deserialize(data);
74  if (Fw::FW_SERIALIZE_OK != _status) {
75  return _status;
76  }
77 
78  U32 context;
79  _status = buffer.deserialize(context);
80  if (Fw::FW_SERIALIZE_OK != _status) {
81  return _status;
82  }
83 
84  this->m_func(this->m_comp, this->m_portNum, data, context);
85 
86  return Fw::FW_SERIALIZE_OK;
87  }
88 #endif
89 
91  Fw::OutputPortBase(),
92  m_port(0) {
93 }
94 
95 void OutputComPort::init(void) {
97 }
98 
100  FW_ASSERT(callPort);
101 
102  this->m_port = callPort;
103  this->m_connObj = callPort;
104 #if FW_PORT_SERIALIZATION == 1
105  this->m_serPort = 0;
106 #endif
107 }
108 
109 void OutputComPort::invoke(ComBuffer &data, U32 context) {
110 #if FW_PORT_TRACING == 1
111  this->trace();
112 #endif
113 
114 #if FW_PORT_SERIALIZATION
115  FW_ASSERT(this->m_port||this->m_serPort);
116 #else
117  FW_ASSERT(this->m_port);
118 #endif
119 
120  if (this->m_port) {
121  this->m_port->invoke(data, context);
122 #if FW_PORT_SERIALIZATION
123  } else if (this->m_serPort) {
124 
125  Fw::SerializeStatus status;
126 
127  ComPortBuffer _buffer;
128  status = _buffer.serialize(data);
129  FW_ASSERT(Fw::FW_SERIALIZE_OK == status,static_cast<AssertArg>(status));
130 
131  status = _buffer.serialize(context);
132  FW_ASSERT(Fw::FW_SERIALIZE_OK == status,static_cast<AssertArg>(status));
133 
134  status = this->m_serPort->invokeSerial(_buffer);
135  FW_ASSERT(Fw::FW_SERIALIZE_OK == status,static_cast<AssertArg>(status));
136  }
137 #else
138  }
139 #endif
140 
141 } // end OutputComPort::invoke(...)
142 
143 } // end namespace Fw
Fw::OutputComPort::OutputComPort
OutputComPort(void)
Definition: ComPortAc.cpp:90
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
Fw::InputComPort::SERIALIZED_SIZE
@ SERIALIZED_SIZE
serialized size of port arguments
Definition: ComPortAc.hpp:31
Serializable.hpp
Fw::InputComPort::InputComPort
InputComPort(void)
constructor
Definition: ComPortAc.cpp:33
Fw::OutputPortBase::init
virtual void init(void)
Definition: OutputPortBase.cpp:23
U8
uint8_t U8
8-bit unsigned integer
Definition: BasicTypes.hpp:76
Fw::OutputComPort::init
void init(void)
Definition: ComPortAc.cpp:95
Fw::InputComPort::invoke
void invoke(ComBuffer &data, U32 context)
invoke port interface
Definition: ComPortAc.cpp:52
ComPortAc.hpp
Assert.hpp
Fw::FW_SERIALIZE_OK
@ FW_SERIALIZE_OK
Serialization/Deserialization operation was successful.
Definition: Serializable.hpp:15
Fw::InputComPort
Definition: ComPortAc.hpp:28
Fw::PassiveComponentBase
Definition: PassiveComponentBase.hpp:10
Fw::OutputComPort::invoke
void invoke(ComBuffer &data, U32 context)
Definition: ComPortAc.cpp:109
Fw::InputPortBase
Definition: InputPortBase.hpp:14
Fw::InputComPort::addCallComp
void addCallComp(Fw::PassiveComponentBase *callComp, CompFuncPtr funcPtr)
call to register a component
Definition: ComPortAc.cpp:42
NATIVE_UINT_TYPE
unsigned int NATIVE_UINT_TYPE
native unsigned integer type declaration
Definition: BasicTypes.hpp:30
FW_ASSERT
#define FW_ASSERT(...)
Definition: Assert.hpp:9
Fw::InputComPort::init
void init(void)
initialization function
Definition: ComPortAc.cpp:38
Fw::SerializeBufferBase::deserialize
SerializeStatus deserialize(U8 &val)
deserialize 8-bit unsigned int
Definition: Serializable.cpp:292
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::PortBase::m_connObj
Fw::ObjBase * m_connObj
Definition: PortBase.hpp:33
Fw::OutputComPort::addCallPort
void addCallPort(InputComPort *callPort)
Definition: ComPortAc.cpp:99
AssertArg
#define AssertArg
Definition: FpConfig.hpp:51
Fw::ComBuffer
Definition: ComBuffer.hpp:21
Fw
Definition: BufferGetPortAc.cpp:6