F´ Flight Software - C/C++ Documentation  NASA-v1.5.0
A framework for building embedded system applications to NASA flight quality standards.
TlmPortAc.cpp
Go to the documentation of this file.
1 #include <FpConfig.hpp>
2 #include <Fw/Types/Assert.hpp>
4 
5 #include <Fw/Tlm/TlmPortAc.hpp>
6 namespace Fw {
7 
8 
9  namespace {
10 
11  class TlmPortBuffer : 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 InputTlmPort::init(void) {
40  }
41 
42  void InputTlmPort::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
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, id, timeTag, val);
60  }
61 
62 #if FW_PORT_SERIALIZATION == 1
63  Fw::SerializeStatus InputTlmPort::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  FwChanIdType id;
73  _status = buffer.deserialize(id);
74  if (Fw::FW_SERIALIZE_OK != _status) {
75  return _status;
76  }
77 
78  Fw::Time timeTag;
79  _status = buffer.deserialize(timeTag);
80  if (Fw::FW_SERIALIZE_OK != _status) {
81  return _status;
82  }
83 
84  TlmBuffer val;
85  _status = buffer.deserialize(val);
86  if (Fw::FW_SERIALIZE_OK != _status) {
87  return _status;
88  }
89 
90  this->m_func(this->m_comp, this->m_portNum, id, timeTag, val);
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 
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(id, timeTag, val);
128 #if FW_PORT_SERIALIZATION
129  } else if (this->m_serPort) {
130 
131  Fw::SerializeStatus status;
132 
133  TlmPortBuffer _buffer;
134  status = _buffer.serialize(id);
135  FW_ASSERT(Fw::FW_SERIALIZE_OK == status,static_cast<AssertArg>(status));
136 
137  status = _buffer.serialize(timeTag);
138  FW_ASSERT(Fw::FW_SERIALIZE_OK == status,static_cast<AssertArg>(status));
139 
140  status = _buffer.serialize(val);
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 OutputTlmPort::invoke(...)
151 
152 } // end namespace Fw
Fw::InputTlmPort
Definition: TlmPortAc.hpp:29
Fw::InputTlmPort::addCallComp
void addCallComp(Fw::PassiveComponentBase *callComp, CompFuncPtr funcPtr)
call to register a component
Definition: TlmPortAc.cpp:42
Fw::Time
Definition: Time.hpp:10
TlmPortAc.hpp
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::TlmBuffer
Definition: TlmBuffer.hpp:21
FwChanIdType
#define FwChanIdType
Type representation for a channel id.
Definition: FpConfig.hpp:66
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::InputTlmPort::init
void init(void)
initialization function
Definition: TlmPortAc.cpp:38
Fw::InputTlmPort::SERIALIZED_SIZE
@ SERIALIZED_SIZE
serialized size of port arguments
Definition: TlmPortAc.hpp:32
Assert.hpp
Fw::FW_SERIALIZE_OK
@ FW_SERIALIZE_OK
Serialization/Deserialization operation was successful.
Definition: Serializable.hpp:15
Fw::InputTlmPort::InputTlmPort
InputTlmPort(void)
constructor
Definition: TlmPortAc.cpp:33
Fw::PassiveComponentBase
Definition: PassiveComponentBase.hpp:10
Fw::OutputTlmPort::addCallPort
void addCallPort(InputTlmPort *callPort)
Definition: TlmPortAc.cpp:105
Fw::InputPortBase
Definition: InputPortBase.hpp:14
NATIVE_UINT_TYPE
unsigned int NATIVE_UINT_TYPE
native unsigned integer type declaration
Definition: BasicTypes.hpp:30
Fw::OutputTlmPort::invoke
void invoke(FwChanIdType id, Fw::Time &timeTag, TlmBuffer &val)
Definition: TlmPortAc.cpp:115
Fw::OutputTlmPort::OutputTlmPort
OutputTlmPort(void)
Definition: TlmPortAc.cpp:96
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::OutputTlmPort::init
void init(void)
Definition: TlmPortAc.cpp:101
FpConfig.hpp
ISF configuration file.
Fw::OutputPortBase
Definition: OutputPortBase.hpp:13
Fw::InputTlmPort::invoke
void invoke(FwChanIdType id, Fw::Time &timeTag, TlmBuffer &val)
invoke port interface
Definition: TlmPortAc.cpp:52
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
AssertArg
#define AssertArg
Definition: FpConfig.hpp:51
Fw
Definition: BufferGetPortAc.cpp:6