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