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