11 #if FW_ENABLE_TEXT_LOGGING
36 class ComponentIpcSerializableBuffer :
51 return sizeof(m_buff);
58 const U8* getBuffAddr()
const {
64 U8 m_buff[SERIALIZATION_SIZE];
88 this->m_cmdIn_InputPort[port].
init();
93 this->m_cmdIn_InputPort[port].
setPortNum(port);
95 #if FW_OBJECT_NAMES == 1
110 this->m_cmdIn_InputPort[port].setObjName(portName);
120 this->m_Run_InputPort[port].
init();
127 #if FW_OBJECT_NAMES == 1
142 this->m_Run_InputPort[port].setObjName(portName);
152 this->m_TlmRecv_InputPort[port].
init();
157 this->m_TlmRecv_InputPort[port].
setPortNum(port);
159 #if FW_OBJECT_NAMES == 1
174 this->m_TlmRecv_InputPort[port].setObjName(portName);
184 this->m_pingIn_InputPort[port].
init();
189 this->m_pingIn_InputPort[port].
setPortNum(port);
191 #if FW_OBJECT_NAMES == 1
206 this->m_pingIn_InputPort[port].setObjName(portName);
216 this->m_cmdRegOut_OutputPort[port].
init();
218 #if FW_OBJECT_NAMES == 1
233 this->m_cmdRegOut_OutputPort[port].setObjName(portName);
243 this->m_cmdResponseOut_OutputPort[port].
init();
245 #if FW_OBJECT_NAMES == 1
260 this->m_cmdResponseOut_OutputPort[port].setObjName(portName);
270 this->m_eventOut_OutputPort[port].
init();
272 #if FW_OBJECT_NAMES == 1
287 this->m_eventOut_OutputPort[port].setObjName(portName);
291 #if FW_ENABLE_TEXT_LOGGING == 1
295 port < static_cast<PlatformIntType>(this->getNum_textEventOut_OutputPorts());
298 this->m_textEventOut_OutputPort[port].
init();
300 #if FW_OBJECT_NAMES == 1
315 this->m_textEventOut_OutputPort[port].setObjName(portName);
326 this->m_timeGetOut_OutputPort[port].
init();
328 #if FW_OBJECT_NAMES == 1
343 this->m_timeGetOut_OutputPort[port].setObjName(portName);
353 this->m_tlmOut_OutputPort[port].
init();
355 #if FW_OBJECT_NAMES == 1
370 this->m_tlmOut_OutputPort[port].setObjName(portName);
380 this->m_PktSend_OutputPort[port].
init();
382 #if FW_OBJECT_NAMES == 1
397 this->m_PktSend_OutputPort[port].setObjName(portName);
407 this->m_pingOut_OutputPort[port].
init();
409 #if FW_OBJECT_NAMES == 1
424 this->m_pingOut_OutputPort[port].setObjName(portName);
430 ComponentIpcSerializableBuffer::SERIALIZATION_SIZE
450 return &this->m_cmdIn_InputPort[portNum];
465 return &this->m_Run_InputPort[portNum];
476 return &this->m_TlmRecv_InputPort[portNum];
487 return &this->m_pingIn_InputPort[portNum];
505 this->m_cmdRegOut_OutputPort[portNum].
addCallPort(port);
519 this->m_cmdResponseOut_OutputPort[portNum].
addCallPort(port);
533 this->m_eventOut_OutputPort[portNum].
addCallPort(port);
536 #if FW_ENABLE_TEXT_LOGGING == 1
538 void TlmPacketizerComponentBase ::
539 set_textEventOut_OutputPort(
545 portNum < this->getNum_textEventOut_OutputPorts(),
549 this->m_textEventOut_OutputPort[portNum].addCallPort(port);
565 this->m_timeGetOut_OutputPort[portNum].
addCallPort(port);
579 this->m_tlmOut_OutputPort[portNum].
addCallPort(port);
597 this->m_PktSend_OutputPort[portNum].
addCallPort(port);
611 this->m_pingOut_OutputPort[portNum].
addCallPort(port);
614 #if FW_PORT_SERIALIZATION
623 Fw::InputSerializePort* port
631 this->m_cmdRegOut_OutputPort[portNum].registerSerialPort(port);
637 Fw::InputSerializePort* port
645 this->m_cmdResponseOut_OutputPort[portNum].registerSerialPort(port);
651 Fw::InputSerializePort* port
659 this->m_eventOut_OutputPort[portNum].registerSerialPort(port);
662 #if FW_ENABLE_TEXT_LOGGING == 1
664 void TlmPacketizerComponentBase ::
665 set_textEventOut_OutputPort(
667 Fw::InputSerializePort* port
671 portNum < this->getNum_textEventOut_OutputPorts(),
675 this->m_textEventOut_OutputPort[portNum].registerSerialPort(port);
683 Fw::InputSerializePort* port
691 this->m_timeGetOut_OutputPort[portNum].registerSerialPort(port);
697 Fw::InputSerializePort* port
705 this->m_tlmOut_OutputPort[portNum].registerSerialPort(port);
710 #if FW_PORT_SERIALIZATION
719 Fw::InputSerializePort* port
727 this->m_PktSend_OutputPort[portNum].registerSerialPort(port);
733 Fw::InputSerializePort* port
741 this->m_pingOut_OutputPort[portNum].registerSerialPort(port);
753 FW_ASSERT(this->m_cmdRegOut_OutputPort[0].isConnected());
755 this->m_cmdRegOut_OutputPort[0].
invoke(
759 this->m_cmdRegOut_OutputPort[0].
invoke(
770 Fw::ActiveComponentBase(compName)
835 #if FW_ENABLE_TEXT_LOGGING == 1
838 getNum_textEventOut_OutputPorts()
const
885 return this->m_cmdRegOut_OutputPort[portNum].
isConnected();
896 return this->m_cmdResponseOut_OutputPort[portNum].
isConnected();
907 return this->m_eventOut_OutputPort[portNum].
isConnected();
910 #if FW_ENABLE_TEXT_LOGGING == 1
912 bool TlmPacketizerComponentBase ::
916 portNum < this->getNum_textEventOut_OutputPorts(),
920 return this->m_textEventOut_OutputPort[portNum].isConnected();
933 return this->m_timeGetOut_OutputPort[portNum].
isConnected();
944 return this->m_tlmOut_OutputPort[portNum].
isConnected();
959 return this->m_PktSend_OutputPort[portNum].
isConnected();
970 return this->m_pingOut_OutputPort[portNum].
isConnected();
996 ComponentIpcSerializableBuffer msg;
1000 _status = msg.serialize(
1009 _status = msg.serialize(portNum);
1016 _status = msg.serialize(context);
1072 ComponentIpcSerializableBuffer msg;
1076 _status = msg.serialize(
1085 _status = msg.serialize(portNum);
1092 _status = msg.serialize(key);
1149 this->m_PktSend_OutputPort[portNum].
invoke(
1165 this->m_pingOut_OutputPort[portNum].
invoke(
1181 FW_ASSERT(this->m_cmdResponseOut_OutputPort[0].isConnected());
1182 this->m_cmdResponseOut_OutputPort[0].
invoke(opCode, cmdSeq, response);
1203 ComponentIpcSerializableBuffer msg;
1216 _status = msg.serialize(port);
1222 _status = msg.serialize(opCode);
1228 _status = msg.serialize(cmdSeq);
1234 _status = msg.serialize(args);
1262 ComponentIpcSerializableBuffer msg;
1275 _status = msg.serialize(port);
1281 _status = msg.serialize(opCode);
1287 _status = msg.serialize(cmdSeq);
1293 _status = msg.serialize(args);
1348 if (this->m_timeGetOut_OutputPort[0].isConnected()) {
1349 this->m_timeGetOut_OutputPort[0].
invoke(_logTime);
1357 if (this->m_eventOut_OutputPort[0].isConnected()) {
1361 #if FW_AMPCS_COMPATIBLE
1370 #if FW_AMPCS_COMPATIBLE
1373 static_cast<U8>(
sizeof(U32))
1386 this->m_eventOut_OutputPort[0].
invoke(
1395 #if FW_ENABLE_TEXT_LOGGING
1396 if (this->m_textEventOut_OutputPort[0].isConnected()) {
1397 #if FW_OBJECT_NAMES == 1
1398 const char* _formatString =
1399 "(%s) %s: Telemetry ID 0x%" PRIx32
" not packetized";
1401 const char* _formatString =
1402 "%s: Telemetry ID 0x%" PRIx32
" not packetized";
1421 this->m_textEventOut_OutputPort[0].invoke(
1436 if (this->m_timeGetOut_OutputPort[0].isConnected()) {
1437 this->m_timeGetOut_OutputPort[0].
invoke(_logTime);
1445 if (this->m_eventOut_OutputPort[0].isConnected()) {
1449 #if FW_AMPCS_COMPATIBLE
1458 #if FW_AMPCS_COMPATIBLE
1461 static_cast<U8>(
sizeof(U32))
1474 this->m_eventOut_OutputPort[0].
invoke(
1483 #if FW_ENABLE_TEXT_LOGGING
1484 if (this->m_textEventOut_OutputPort[0].isConnected()) {
1485 #if FW_OBJECT_NAMES == 1
1486 const char* _formatString =
1487 "(%s) %s: Telemetry send level to %" PRIu32
"";
1489 const char* _formatString =
1490 "%s: Telemetry send level to %" PRIu32
"";
1509 this->m_textEventOut_OutputPort[0].invoke(
1527 if (this->m_timeGetOut_OutputPort[0].isConnected()) {
1528 this->m_timeGetOut_OutputPort[0].
invoke(_logTime);
1536 if (this->m_eventOut_OutputPort[0].isConnected()) {
1540 #if FW_AMPCS_COMPATIBLE
1549 #if FW_AMPCS_COMPATIBLE
1552 static_cast<U8>(
sizeof(U32))
1565 #if FW_AMPCS_COMPATIBLE
1568 static_cast<U8>(
sizeof(U32))
1581 this->m_eventOut_OutputPort[0].
invoke(
1590 #if FW_ENABLE_TEXT_LOGGING
1591 if (this->m_textEventOut_OutputPort[0].isConnected()) {
1592 #if FW_OBJECT_NAMES == 1
1593 const char* _formatString =
1594 "(%s) %s: Requested send level %" PRIu32
" higher than max packet level of %" PRIu32
"";
1596 const char* _formatString =
1597 "%s: Requested send level %" PRIu32
" higher than max packet level of %" PRIu32
"";
1617 this->m_textEventOut_OutputPort[0].invoke(
1632 if (this->m_timeGetOut_OutputPort[0].isConnected()) {
1633 this->m_timeGetOut_OutputPort[0].
invoke(_logTime);
1641 if (this->m_eventOut_OutputPort[0].isConnected()) {
1645 #if FW_AMPCS_COMPATIBLE
1654 #if FW_AMPCS_COMPATIBLE
1657 static_cast<U8>(
sizeof(U32))
1670 this->m_eventOut_OutputPort[0].
invoke(
1679 #if FW_ENABLE_TEXT_LOGGING
1680 if (this->m_textEventOut_OutputPort[0].isConnected()) {
1681 #if FW_OBJECT_NAMES == 1
1682 const char* _formatString =
1683 "(%s) %s: Sent packet ID %" PRIu32
"";
1685 const char* _formatString =
1686 "%s: Sent packet ID %" PRIu32
"";
1705 this->m_textEventOut_OutputPort[0].invoke(
1720 if (this->m_timeGetOut_OutputPort[0].isConnected()) {
1721 this->m_timeGetOut_OutputPort[0].
invoke(_logTime);
1729 if (this->m_eventOut_OutputPort[0].isConnected()) {
1733 #if FW_AMPCS_COMPATIBLE
1742 #if FW_AMPCS_COMPATIBLE
1745 static_cast<U8>(
sizeof(U32))
1758 this->m_eventOut_OutputPort[0].
invoke(
1767 #if FW_ENABLE_TEXT_LOGGING
1768 if (this->m_textEventOut_OutputPort[0].isConnected()) {
1769 #if FW_OBJECT_NAMES == 1
1770 const char* _formatString =
1771 "(%s) %s: Could not find packet ID %" PRIu32
"";
1773 const char* _formatString =
1774 "%s: Could not find packet ID %" PRIu32
"";
1793 this->m_textEventOut_OutputPort[0].invoke(
1813 if (this->m_tlmOut_OutputPort[0].isConnected()) {
1815 this->m_timeGetOut_OutputPort[0].isConnected() &&
1818 this->m_timeGetOut_OutputPort[0].
invoke(_tlmTime);
1832 this->m_tlmOut_OutputPort[0].
invoke(
1847 if (this->m_timeGetOut_OutputPort[0].isConnected()) {
1849 this->m_timeGetOut_OutputPort[0].
invoke(_time);
1864 ComponentIpcSerializableBuffer msg;
1887 MsgTypeEnum msgType =
static_cast<MsgTypeEnum
>(desMsg);
1889 if (msgType == TLMPACKETIZER_COMPONENT_EXIT) {
1894 deserStatus = msg.deserialize(portNum);
1905 deserStatus = msg.deserialize(context);
1923 deserStatus = msg.deserialize(key);
1938 case CMD_SET_LEVEL: {
1941 deserStatus = msg.deserialize(opCode);
1949 deserStatus = msg.deserialize(cmdSeq);
1970 if (this->m_cmdResponseOut_OutputPort[0].isConnected()) {
1983 #if FW_CMD_CHECK_RESIDUAL
1985 if (this->m_cmdResponseOut_OutputPort[0].isConnected()) {
2003 case CMD_SEND_PKT: {
2006 deserStatus = msg.deserialize(opCode);
2014 deserStatus = msg.deserialize(cmdSeq);
2035 if (this->m_cmdResponseOut_OutputPort[0].isConnected()) {
2048 #if FW_CMD_CHECK_RESIDUAL
2050 if (this->m_cmdResponseOut_OutputPort[0].isConnected()) {
2078 void TlmPacketizerComponentBase ::
2090 const U32 idBase = callComp->
getIdBase();
2091 FW_ASSERT(opCode >= idBase, opCode, idBase);
2094 switch (opCode - idBase) {
2096 compPtr->SET_LEVEL_cmdHandlerBase(
2105 compPtr->SEND_PKT_cmdHandlerBase(
2119 void TlmPacketizerComponentBase ::
2128 compPtr->Run_handlerBase(
2134 void TlmPacketizerComponentBase ::
2145 compPtr->TlmRecv_handlerBase(
2153 void TlmPacketizerComponentBase ::
2162 compPtr->pingIn_handlerBase(
PlatformIntType NATIVE_INT_TYPE
uint8_t U8
8-bit unsigned integer
#define FW_NUM_ARRAY_ELEMENTS(a)
number of elements in an array
PlatformUIntType NATIVE_UINT_TYPE
int PlatformIntType
DefaultTypes.hpp provides fallback defaults for the platform types.
#define PRI_PlatformIntType
@ TB_NONE
No time base has been established.
PlatformAssertArgType FwAssertArgType
#define FW_LOG_TEXT_BUFFER_SIZE
Max size of string for text log message.
#define FW_OBJ_NAME_MAX_SIZE
Size of object name (if object names enabled). AC Limits to 80, truncation occurs above 80.
#define FW_OBJECT_NAMES
Indicates whether or not object names are stored (more memory, can be used for tracking objects)
@ ACTIVE_COMPONENT_EXIT
message to exit active component task
Enum representing a command response.
@ FORMAT_ERROR
Command failed to deserialize.
@ ACTIVITY_HI
Important informational events.
@ WARNING_LO
A less serious but recoverable event.
@ ACTIVITY_LO
Less important informational events.
void init()
Object initializer.
void addCallPort(InputCmdRegPort *callPort)
Register an input port.
void invoke(FwOpcodeType opCode)
Invoke a port interface.
void init()
Initialization function.
void init()
Initialization function.
void addCallPort(InputCmdResponsePort *callPort)
Register an input port.
void invoke(FwOpcodeType opCode, U32 cmdSeq, const Fw::CmdResponse &response)
Invoke a port interface.
void addCallPort(InputComPort *callPort)
Register an input port.
void init()
Initialization function.
void invoke(Fw::ComBuffer &data, U32 context)
Invoke a port interface.
void init()
Initialization function.
void invoke(FwEventIdType id, Fw::Time &timeTag, const Fw::LogSeverity &severity, Fw::LogBuffer &args)
Invoke a port interface.
void addCallPort(InputLogPort *callPort)
Register an input port.
void addCallPort(InputTimePort *callPort)
Register an input port.
void invoke(Fw::Time &time)
Invoke a port interface.
void init()
Initialization function.
void addCallPort(InputTlmPort *callPort)
Register an input port.
void init()
Initialization function.
void invoke(FwChanIdType id, Fw::Time &timeTag, Fw::TlmBuffer &val)
Invoke a port interface.
Os::Queue::QueueStatus createQueue(NATIVE_INT_TYPE depth, NATIVE_INT_TYPE msgSize)
Os::Queue m_queue
queue object for active component
@ MSG_DISPATCH_OK
Dispatch was normal.
@ MSG_DISPATCH_EXIT
A message was sent requesting an exit of the loop.
@ MSG_DISPATCH_ERROR
Errors dispatching messages.
NATIVE_UINT_TYPE getBuffLeft() const
returns how much deserialization buffer is left
void resetDeser()
reset deserialization to beginning
SerializeStatus deserialize(U8 &val)
deserialize 8-bit unsigned int
SerializeStatus serialize(U8 val)
serialize 8-bit unsigned int
@ QUEUE_OK
message sent/received okay
QueueStatus send(const Fw::SerializeBufferBase &buffer, NATIVE_INT_TYPE priority, QueueBlocking block)
send a message
QueueStatus receive(Fw::SerializeBufferBase &buffer, NATIVE_INT_TYPE &priority, QueueBlocking block)
receive a message
@ QUEUE_BLOCKING
Queue receive blocks until a message arrives.
@ QUEUE_NONBLOCKING
Queue receive always returns even if there is no message.
void invoke(U32 key)
Invoke a port interface.
void init()
Initialization function.
void addCallPort(InputPingPort *callPort)
Register an input port.
virtual void pingIn_preMsgHook(NATIVE_INT_TYPE portNum, U32 key)
Pre-message hook for async input port pingIn.
void cmdResponse_out(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdResponse response)
Emit command response.
@ CHANNELID_SENDLEVEL
Channel ID for SendLevel.
virtual void TlmRecv_handler(NATIVE_INT_TYPE portNum, FwChanIdType id, Fw::Time &timeTag, Fw::TlmBuffer &val)=0
Handler for input port TlmRecv.
void set_eventOut_OutputPort(NATIVE_INT_TYPE portNum, Fw::InputLogPort *port)
Connect port to eventOut[portNum].
void pingOut_out(NATIVE_INT_TYPE portNum, U32 key)
Invoke output port pingOut.
void pingIn_handlerBase(NATIVE_INT_TYPE portNum, U32 key)
Handler base-class function for input port pingIn.
NATIVE_INT_TYPE getNum_tlmOut_OutputPorts() const
Fw::InputTlmPort * get_TlmRecv_InputPort(NATIVE_INT_TYPE portNum)
void set_timeGetOut_OutputPort(NATIVE_INT_TYPE portNum, Fw::InputTimePort *port)
Connect port to timeGetOut[portNum].
void regCommands()
Register commands with the Command Dispatcher.
NATIVE_INT_TYPE getNum_cmdIn_InputPorts() const
void set_PktSend_OutputPort(NATIVE_INT_TYPE portNum, Fw::InputComPort *port)
Connect port to PktSend[portNum].
NATIVE_INT_TYPE getNum_Run_InputPorts() const
NATIVE_INT_TYPE getNum_eventOut_OutputPorts() const
virtual void SET_LEVEL_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command SET_LEVEL.
@ EVENTID_NOCHAN
Telemetry channel is not part of a telemetry packet.
@ EVENTID_LEVELSET
Telemetry send level set.
@ EVENTID_PACKETSENT
Packet manually sent.
@ EVENTID_PACKETNOTFOUND
Couldn't find the packet to send.
@ EVENTID_MAXLEVELEXCEED
Telemetry send level set.
NATIVE_INT_TYPE getNum_cmdRegOut_OutputPorts() const
void set_cmdRegOut_OutputPort(NATIVE_INT_TYPE portNum, Fw::InputCmdRegPort *port)
Connect port to cmdRegOut[portNum].
void set_tlmOut_OutputPort(NATIVE_INT_TYPE portNum, Fw::InputTlmPort *port)
Connect port to tlmOut[portNum].
Svc::InputSchedPort * get_Run_InputPort(NATIVE_INT_TYPE portNum)
void set_pingOut_OutputPort(NATIVE_INT_TYPE portNum, Svc::InputPingPort *port)
Connect port to pingOut[portNum].
NATIVE_INT_TYPE getNum_timeGetOut_OutputPorts() const
NATIVE_INT_TYPE getNum_pingOut_OutputPorts() const
void tlmWrite_SendLevel(U32 arg, Fw::Time _tlmTime=Fw::Time())
void PktSend_out(NATIVE_INT_TYPE portNum, Fw::ComBuffer &data, U32 context)
Invoke output port PktSend.
virtual void Run_handler(NATIVE_INT_TYPE portNum, NATIVE_UINT_TYPE context)=0
Handler for input port Run.
bool isConnected_cmdRegOut_OutputPort(NATIVE_INT_TYPE portNum)
virtual void pingIn_handler(NATIVE_INT_TYPE portNum, U32 key)=0
Handler for input port pingIn.
void log_WARNING_LO_PacketNotFound(U32 id)
virtual void SEND_PKT_cmdHandler(FwOpcodeType opCode, U32 cmdSeq, U32 id)=0
Svc::InputPingPort * get_pingIn_InputPort(NATIVE_INT_TYPE portNum)
bool isConnected_tlmOut_OutputPort(NATIVE_INT_TYPE portNum)
void log_WARNING_LO_NoChan(U32 Id)
void log_ACTIVITY_LO_PacketSent(U32 id)
void SET_LEVEL_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
virtual ~TlmPacketizerComponentBase()
Destroy TlmPacketizerComponentBase object.
NATIVE_INT_TYPE getNum_PktSend_OutputPorts() const
bool isConnected_pingOut_OutputPort(NATIVE_INT_TYPE portNum)
bool isConnected_timeGetOut_OutputPort(NATIVE_INT_TYPE portNum)
@ OPCODE_SEND_PKT
Force a packet to be sent.
@ OPCODE_SET_LEVEL
Set telemetry send level.
bool isConnected_PktSend_OutputPort(NATIVE_INT_TYPE portNum)
void log_ACTIVITY_HI_LevelSet(U32 id)
bool isConnected_cmdResponseOut_OutputPort(NATIVE_INT_TYPE portNum)
void log_WARNING_LO_MaxLevelExceed(U32 level, U32 max)
NATIVE_INT_TYPE getNum_pingIn_InputPorts() const
TlmPacketizerComponentBase(const char *compName="")
Construct TlmPacketizerComponentBase object.
NATIVE_INT_TYPE getNum_cmdResponseOut_OutputPorts() const
virtual void SEND_PKT_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command SEND_PKT.
void Run_handlerBase(NATIVE_INT_TYPE portNum, NATIVE_UINT_TYPE context)
Handler base-class function for input port Run.
void set_cmdResponseOut_OutputPort(NATIVE_INT_TYPE portNum, Fw::InputCmdResponsePort *port)
Connect port to cmdResponseOut[portNum].
bool isConnected_eventOut_OutputPort(NATIVE_INT_TYPE portNum)
void TlmRecv_handlerBase(NATIVE_INT_TYPE portNum, FwChanIdType id, Fw::Time &timeTag, Fw::TlmBuffer &val)
Handler base-class function for input port TlmRecv.
void SEND_PKT_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
Fw::InputCmdPort * get_cmdIn_InputPort(NATIVE_INT_TYPE portNum)
virtual void Run_preMsgHook(NATIVE_INT_TYPE portNum, NATIVE_UINT_TYPE context)
Pre-message hook for async input port Run.
virtual void SET_LEVEL_cmdHandler(FwOpcodeType opCode, U32 cmdSeq, U32 level)=0
NATIVE_INT_TYPE getNum_TlmRecv_InputPorts() const
SerializeStatus
forward declaration for string
@ FW_SERIALIZE_OK
Serialization/Deserialization operation was successful.