F´ Flight Software - C/C++ Documentation  NASA-v1.5.0
A framework for building embedded system applications to NASA flight quality standards.
PolyPortAc.cpp
Go to the documentation of this file.
1 #include <FpConfig.hpp>
2 #include <Fw/Types/Assert.hpp>
4 
6 namespace Svc {
7 
8 
9  namespace {
10 
11  class PolyPortBuffer : 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 InputPolyPort::init(void) {
40  }
41 
42  void InputPolyPort::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 InputPolyPort::invoke(U32 entry, MeasurementStatus &status, Fw::Time &time, Fw::PolyType &val) {
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, entry, status, time, val);
60  }
61 
62 #if FW_PORT_SERIALIZATION == 1
63  Fw::SerializeStatus InputPolyPort::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  U32 entry;
73  _status = buffer.deserialize(entry);
74  if (Fw::FW_SERIALIZE_OK != _status) {
75  return _status;
76  }
77  FwEnumStoreType status_val;
78  _status = buffer.deserialize(status_val);
79  if (Fw::FW_SERIALIZE_OK != _status) {
80  return _status;
81  }
82  MeasurementStatus status = static_cast<MeasurementStatus>(status_val);
83 
84  Fw::Time time;
85  _status = buffer.deserialize(time);
86  if (Fw::FW_SERIALIZE_OK != _status) {
87  return _status;
88  }
89 
90  Fw::PolyType val;
91  _status = buffer.deserialize(val);
92  if (Fw::FW_SERIALIZE_OK != _status) {
93  return _status;
94  }
95 
96  this->m_func(this->m_comp, this->m_portNum, entry, status, time, val);
97 
98  return Fw::FW_SERIALIZE_OK;
99  }
100 #endif
101 
103  Fw::OutputPortBase(),
104  m_port(0) {
105 }
106 
109 }
110 
112  FW_ASSERT(callPort);
113 
114  this->m_port = callPort;
115  this->m_connObj = callPort;
116 #if FW_PORT_SERIALIZATION == 1
117  this->m_serPort = 0;
118 #endif
119 }
120 
121 void OutputPolyPort::invoke(U32 entry, MeasurementStatus &status, Fw::Time &time, Fw::PolyType &val) {
122 #if FW_PORT_TRACING == 1
123  this->trace();
124 #endif
125 
126 #if FW_PORT_SERIALIZATION
127  FW_ASSERT(this->m_port||this->m_serPort);
128 #else
129  FW_ASSERT(this->m_port);
130 #endif
131 
132  if (this->m_port) {
133  this->m_port->invoke(entry, status, time, val);
134 #if FW_PORT_SERIALIZATION
135  } else if (this->m_serPort) {
136 
137  Fw::SerializeStatus status;
138 
139  PolyPortBuffer _buffer;
140  status = _buffer.serialize(entry);
141  FW_ASSERT(Fw::FW_SERIALIZE_OK == status,static_cast<AssertArg>(status));
142 
143  status = _buffer.serialize(static_cast<NATIVE_INT_TYPE>(status));
144  FW_ASSERT(Fw::FW_SERIALIZE_OK == status,static_cast<AssertArg>(status));
145 
146  status = _buffer.serialize(time);
147  FW_ASSERT(Fw::FW_SERIALIZE_OK == status,static_cast<AssertArg>(status));
148 
149  status = _buffer.serialize(val);
150  FW_ASSERT(Fw::FW_SERIALIZE_OK == status,static_cast<AssertArg>(status));
151 
152  status = this->m_serPort->invokeSerial(_buffer);
153  FW_ASSERT(Fw::FW_SERIALIZE_OK == status,static_cast<AssertArg>(status));
154  }
155 #else
156  }
157 #endif
158 
159 } // end OutputPolyPort::invoke(...)
160 
161 } // end namespace Svc
Fw::Time
Definition: Time.hpp:10
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
Svc::OutputPolyPort::OutputPolyPort
OutputPolyPort(void)
Definition: PolyPortAc.cpp:102
Fw::OutputPortBase::init
virtual void init(void)
Definition: OutputPortBase.cpp:23
U8
uint8_t U8
8-bit unsigned integer
Definition: BasicTypes.hpp:76
FwEnumStoreType
#define FwEnumStoreType
Type representation for an enumeration value.
Definition: FpConfig.hpp:84
Svc::InputPolyPort::invoke
void invoke(U32 entry, MeasurementStatus &status, Fw::Time &time, Fw::PolyType &val)
invoke port interface
Definition: PolyPortAc.cpp:52
Svc::OutputPolyPort::init
void init(void)
Definition: PolyPortAc.cpp:107
Assert.hpp
Fw::FW_SERIALIZE_OK
@ FW_SERIALIZE_OK
Serialization/Deserialization operation was successful.
Definition: Serializable.hpp:15
Svc::OutputPolyPort::invoke
void invoke(U32 entry, MeasurementStatus &status, Fw::Time &time, Fw::PolyType &val)
Definition: PolyPortAc.cpp:121
Fw::PassiveComponentBase
Definition: PassiveComponentBase.hpp:10
Svc::InputPolyPort::InputPolyPort
InputPolyPort(void)
constructor
Definition: PolyPortAc.cpp:33
Svc::InputPolyPort::init
void init(void)
initialization function
Definition: PolyPortAc.cpp:38
NATIVE_UINT_TYPE
unsigned int NATIVE_UINT_TYPE
native unsigned integer type declaration
Definition: BasicTypes.hpp:30
Svc::MeasurementStatus
MeasurementStatus
Definition: PolyPortAc.hpp:26
FW_ASSERT
#define FW_ASSERT(...)
Definition: Assert.hpp:9
PolyPortAc.hpp
Fw::SerializeBufferBase::deserialize
SerializeStatus deserialize(U8 &val)
deserialize 8-bit unsigned int
Definition: Serializable.cpp:292
FpConfig.hpp
ISF configuration file.
Fw::PolyType
Definition: PolyType.hpp:12
Svc::InputPolyPort
Definition: PolyPortAc.hpp:36
Svc
Definition: ActiveLoggerComponentAc.cpp:22
Fw::InputPortBase::m_comp
PassiveComponentBase * m_comp
Definition: InputPortBase.hpp:28
Fw::InputPortBase::init
virtual void init(void)
Definition: InputPortBase.cpp:20
Svc::InputPolyPort::SERIALIZED_SIZE
@ SERIALIZED_SIZE
serialized size of port arguments
Definition: PolyPortAc.hpp:39
Fw::PortBase::m_connObj
Fw::ObjBase * m_connObj
Definition: PortBase.hpp:33
NATIVE_INT_TYPE
int NATIVE_INT_TYPE
native integer type declaration
Definition: BasicTypes.hpp:29
AssertArg
#define AssertArg
Definition: FpConfig.hpp:51
Fw
Definition: BufferGetPortAc.cpp:6
Svc::InputPolyPort::addCallComp
void addCallComp(Fw::PassiveComponentBase *callComp, CompFuncPtr funcPtr)
call to register a component
Definition: PolyPortAc.cpp:42
Svc::OutputPolyPort::addCallPort
void addCallPort(InputPolyPort *callPort)
Definition: PolyPortAc.cpp:111