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
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