9 #if FW_ENABLE_TEXT_LOGGING 19 BUFFERQUEUEIN_BUFFERSEND,
21 COMSTATUSIN_SUCCESSCONDITION,
36 class ComponentIpcSerializableBuffer :
46 MAX_DATA_SIZE =
sizeof(BuffUnion),
48 SERIALIZATION_SIZE = DATA_OFFSET + MAX_DATA_SIZE
52 return sizeof(m_buff);
59 const U8* getBuffAddr()
const {
65 U8 m_buff[SERIALIZATION_SIZE];
89 this->m_bufferQueueIn_InputPort[port].
init();
94 this->m_bufferQueueIn_InputPort[port].
setPortNum(port);
96 #if FW_OBJECT_NAMES == 1 100 this->m_objName.toChar(),
103 this->m_bufferQueueIn_InputPort[port].setObjName(portName.
toChar());
113 this->m_comPacketQueueIn_InputPort[port].
init();
114 this->m_comPacketQueueIn_InputPort[port].
addCallComp(
116 m_p_comPacketQueueIn_in
118 this->m_comPacketQueueIn_InputPort[port].
setPortNum(port);
120 #if FW_OBJECT_NAMES == 1 124 this->m_objName.toChar(),
127 this->m_comPacketQueueIn_InputPort[port].setObjName(portName.
toChar());
137 this->m_comStatusIn_InputPort[port].
init();
142 this->m_comStatusIn_InputPort[port].
setPortNum(port);
144 #if FW_OBJECT_NAMES == 1 148 this->m_objName.toChar(),
151 this->m_comStatusIn_InputPort[port].setObjName(portName.
toChar());
161 this->m_dataReturnIn_InputPort[port].
init();
166 this->m_dataReturnIn_InputPort[port].
setPortNum(port);
168 #if FW_OBJECT_NAMES == 1 172 this->m_objName.toChar(),
175 this->m_dataReturnIn_InputPort[port].setObjName(portName.
toChar());
185 this->m_run_InputPort[port].
init();
192 #if FW_OBJECT_NAMES == 1 196 this->m_objName.toChar(),
199 this->m_run_InputPort[port].setObjName(portName.
toChar());
209 this->m_Log_OutputPort[port].
init();
211 #if FW_OBJECT_NAMES == 1 215 this->m_objName.toChar(),
218 this->m_Log_OutputPort[port].setObjName(portName.
toChar());
222 #if FW_ENABLE_TEXT_LOGGING == 1 226 port < static_cast<FwIndexType>(this->getNum_LogText_OutputPorts());
229 this->m_LogText_OutputPort[port].
init();
231 #if FW_OBJECT_NAMES == 1 235 this->m_objName.toChar(),
238 this->m_LogText_OutputPort[port].setObjName(portName.
toChar());
249 this->m_Time_OutputPort[port].
init();
251 #if FW_OBJECT_NAMES == 1 255 this->m_objName.toChar(),
258 this->m_Time_OutputPort[port].setObjName(portName.
toChar());
268 this->m_Tlm_OutputPort[port].
init();
270 #if FW_OBJECT_NAMES == 1 274 this->m_objName.toChar(),
277 this->m_Tlm_OutputPort[port].setObjName(portName.
toChar());
287 this->m_bufferReturnOut_OutputPort[port].
init();
289 #if FW_OBJECT_NAMES == 1 293 this->m_objName.toChar(),
296 this->m_bufferReturnOut_OutputPort[port].setObjName(portName.
toChar());
306 this->m_dataOut_OutputPort[port].
init();
308 #if FW_OBJECT_NAMES == 1 312 this->m_objName.toChar(),
315 this->m_dataOut_OutputPort[port].setObjName(portName.
toChar());
322 static_cast<FwSizeType>(ComponentIpcSerializableBuffer::SERIALIZATION_SIZE)
326 static_cast<FwAssertArgType>(qStat)
339 static_cast<FwAssertArgType>(portNum)
342 return &this->m_bufferQueueIn_InputPort[portNum];
350 static_cast<FwAssertArgType>(portNum)
353 return &this->m_comPacketQueueIn_InputPort[portNum];
361 static_cast<FwAssertArgType>(portNum)
364 return &this->m_comStatusIn_InputPort[portNum];
372 static_cast<FwAssertArgType>(portNum)
375 return &this->m_dataReturnIn_InputPort[portNum];
383 static_cast<FwAssertArgType>(portNum)
386 return &this->m_run_InputPort[portNum];
401 static_cast<FwAssertArgType>(portNum)
407 #if FW_ENABLE_TEXT_LOGGING == 1 409 void ComQueueComponentBase ::
410 set_LogText_OutputPort(
416 (0 <= portNum) && (portNum < this->getNum_LogText_OutputPorts()),
417 static_cast<FwAssertArgType>(portNum)
420 this->m_LogText_OutputPort[portNum].addCallPort(port);
433 static_cast<FwAssertArgType>(portNum)
436 this->m_Time_OutputPort[portNum].
addCallPort(port);
447 static_cast<FwAssertArgType>(portNum)
465 static_cast<FwAssertArgType>(portNum)
468 this->m_bufferReturnOut_OutputPort[portNum].
addCallPort(port);
479 static_cast<FwAssertArgType>(portNum)
482 this->m_dataOut_OutputPort[portNum].
addCallPort(port);
485 #if FW_PORT_SERIALIZATION 494 Fw::InputSerializePort* port
499 static_cast<FwAssertArgType>(portNum)
502 this->m_Log_OutputPort[portNum].registerSerialPort(port);
505 #if FW_ENABLE_TEXT_LOGGING == 1 507 void ComQueueComponentBase ::
508 set_LogText_OutputPort(
510 Fw::InputSerializePort* port
514 (0 <= portNum) && (portNum < this->getNum_LogText_OutputPorts()),
515 static_cast<FwAssertArgType>(portNum)
518 this->m_LogText_OutputPort[portNum].registerSerialPort(port);
526 Fw::InputSerializePort* port
531 static_cast<FwAssertArgType>(portNum)
534 this->m_Time_OutputPort[portNum].registerSerialPort(port);
540 Fw::InputSerializePort* port
545 static_cast<FwAssertArgType>(portNum)
548 this->m_Tlm_OutputPort[portNum].registerSerialPort(port);
553 #if FW_PORT_SERIALIZATION 562 Fw::InputSerializePort* port
567 static_cast<FwAssertArgType>(portNum)
570 this->m_bufferReturnOut_OutputPort[portNum].registerSerialPort(port);
576 Fw::InputSerializePort* port
581 static_cast<FwAssertArgType>(portNum)
584 this->m_dataOut_OutputPort[portNum].registerSerialPort(port);
595 Fw::ActiveComponentBase(compName)
650 #if FW_ENABLE_TEXT_LOGGING == 1 653 getNum_LogText_OutputPorts()
const 697 static_cast<FwAssertArgType>(portNum)
700 return this->m_Log_OutputPort[portNum].
isConnected();
703 #if FW_ENABLE_TEXT_LOGGING == 1 705 bool ComQueueComponentBase ::
706 isConnected_LogText_OutputPort(
FwIndexType portNum)
709 (0 <= portNum) && (portNum < this->getNum_LogText_OutputPorts()),
710 static_cast<FwAssertArgType>(portNum)
713 return this->m_LogText_OutputPort[portNum].isConnected();
723 static_cast<FwAssertArgType>(portNum)
726 return this->m_Time_OutputPort[portNum].
isConnected();
734 static_cast<FwAssertArgType>(portNum)
737 return this->m_Tlm_OutputPort[portNum].
isConnected();
749 static_cast<FwAssertArgType>(portNum)
752 return this->m_bufferReturnOut_OutputPort[portNum].
isConnected();
760 static_cast<FwAssertArgType>(portNum)
763 return this->m_dataOut_OutputPort[portNum].
isConnected();
781 static_cast<FwAssertArgType>(portNum)
789 ComponentIpcSerializableBuffer msg;
793 _status = msg.serialize(
794 static_cast<FwEnumStoreType>(BUFFERQUEUEIN_BUFFERSEND)
798 static_cast<FwAssertArgType>(_status)
802 _status = msg.serialize(portNum);
805 static_cast<FwAssertArgType>(_status)
809 _status = msg.serialize(fwBuffer);
812 static_cast<FwAssertArgType>(_status)
819 if (qStatus == Os::Queue::Status::FULL) {
826 static_cast<FwAssertArgType>(qStatus)
840 static_cast<FwAssertArgType>(portNum)
849 ComponentIpcSerializableBuffer msg;
853 _status = msg.serialize(
854 static_cast<FwEnumStoreType>(COMPACKETQUEUEIN_COM)
858 static_cast<FwAssertArgType>(_status)
862 _status = msg.serialize(portNum);
865 static_cast<FwAssertArgType>(_status)
869 _status = msg.serialize(data);
872 static_cast<FwAssertArgType>(_status)
876 _status = msg.serialize(context);
879 static_cast<FwAssertArgType>(_status)
886 if (qStatus == Os::Queue::Status::FULL) {
893 static_cast<FwAssertArgType>(qStatus)
906 static_cast<FwAssertArgType>(portNum)
914 ComponentIpcSerializableBuffer msg;
918 _status = msg.serialize(
919 static_cast<FwEnumStoreType>(COMSTATUSIN_SUCCESSCONDITION)
923 static_cast<FwAssertArgType>(_status)
927 _status = msg.serialize(portNum);
930 static_cast<FwAssertArgType>(_status)
934 _status = msg.serialize(condition);
937 static_cast<FwAssertArgType>(_status)
946 static_cast<FwAssertArgType>(qStatus)
960 static_cast<FwAssertArgType>(portNum)
980 static_cast<FwAssertArgType>(portNum)
988 ComponentIpcSerializableBuffer msg;
992 _status = msg.serialize(
993 static_cast<FwEnumStoreType>(RUN_SCHED)
997 static_cast<FwAssertArgType>(_status)
1001 _status = msg.serialize(portNum);
1004 static_cast<FwAssertArgType>(_status)
1008 _status = msg.serialize(context);
1011 static_cast<FwAssertArgType>(_status)
1018 if (qStatus == Os::Queue::Status::FULL) {
1025 static_cast<FwAssertArgType>(qStatus)
1086 static_cast<FwAssertArgType>(portNum)
1090 this->m_bufferReturnOut_OutputPort[portNum].isConnected(),
1091 static_cast<FwAssertArgType>(portNum)
1093 this->m_bufferReturnOut_OutputPort[portNum].
invoke(
1107 static_cast<FwAssertArgType>(portNum)
1111 this->m_dataOut_OutputPort[portNum].isConnected(),
1112 static_cast<FwAssertArgType>(portNum)
1114 this->m_dataOut_OutputPort[portNum].
invoke(
1132 if (this->m_Time_OutputPort[0].isConnected()) {
1133 this->m_Time_OutputPort[0].
invoke(_logTime);
1141 if (this->m_Log_OutputPort[0].isConnected()) {
1145 #if FW_AMPCS_COMPATIBLE 1147 _status = _logBuff.
serialize(static_cast<U8>(2));
1150 static_cast<FwAssertArgType>(_status)
1154 #if FW_AMPCS_COMPATIBLE 1161 static_cast<FwAssertArgType>(_status)
1164 _status = _logBuff.
serialize(queueType);
1167 static_cast<FwAssertArgType>(_status)
1170 #if FW_AMPCS_COMPATIBLE 1173 static_cast<U8>(
sizeof(U32))
1177 static_cast<FwAssertArgType>(_status)
1183 static_cast<FwAssertArgType>(_status)
1186 this->m_Log_OutputPort[0].
invoke(
1195 #if FW_ENABLE_TEXT_LOGGING 1196 if (this->m_LogText_OutputPort[0].isConnected()) {
1197 #if FW_OBJECT_NAMES == 1 1198 const char* _formatString =
1199 "(%s) %s: The %s queue at index %" PRIu32
" overflowed";
1201 const char* _formatString =
1202 "%s: The %s queue at index %" PRIu32
" overflowed";
1206 queueType.toString(queueTypeStr);
1212 this->m_objName.toChar(),
1219 this->m_LogText_OutputPort[0].invoke(
1239 if (this->m_Tlm_OutputPort[0].isConnected()) {
1241 this->m_Time_OutputPort[0].isConnected() &&
1244 this->m_Time_OutputPort[0].
invoke(_tlmTime);
1251 static_cast<FwAssertArgType>(_stat)
1258 this->m_Tlm_OutputPort[0].
invoke(
1272 if (this->m_Tlm_OutputPort[0].isConnected()) {
1274 this->m_Time_OutputPort[0].isConnected() &&
1277 this->m_Time_OutputPort[0].
invoke(_tlmTime);
1284 static_cast<FwAssertArgType>(_stat)
1291 this->m_Tlm_OutputPort[0].
invoke(
1306 if (this->m_Time_OutputPort[0].isConnected()) {
1308 this->m_Time_OutputPort[0].
invoke(_time);
1323 ComponentIpcSerializableBuffer _msg;
1333 static_cast<FwAssertArgType>(_msgStatus)
1343 static_cast<FwAssertArgType>(_deserStatus)
1346 MsgTypeEnum _msgType =
static_cast<MsgTypeEnum
>(_desMsg);
1348 if (_msgType == COMQUEUE_COMPONENT_EXIT) {
1353 _deserStatus = _msg.deserialize(portNum);
1356 static_cast<FwAssertArgType>(_deserStatus)
1361 case BUFFERQUEUEIN_BUFFERSEND: {
1364 _deserStatus = _msg.deserialize(fwBuffer);
1367 static_cast<FwAssertArgType>(_deserStatus)
1379 case COMPACKETQUEUEIN_COM: {
1382 _deserStatus = _msg.deserialize(data);
1385 static_cast<FwAssertArgType>(_deserStatus)
1390 _deserStatus = _msg.deserialize(context);
1393 static_cast<FwAssertArgType>(_deserStatus)
1406 case COMSTATUSIN_SUCCESSCONDITION: {
1409 _deserStatus = _msg.deserialize(condition);
1412 static_cast<FwAssertArgType>(_deserStatus)
1427 _deserStatus = _msg.deserialize(context);
1430 static_cast<FwAssertArgType>(_deserStatus)
1452 void ComQueueComponentBase ::
1453 m_p_bufferQueueIn_in(
1461 compPtr->bufferQueueIn_handlerBase(
1467 void ComQueueComponentBase ::
1468 m_p_comPacketQueueIn_in(
1477 compPtr->comPacketQueueIn_handlerBase(
1484 void ComQueueComponentBase ::
1493 compPtr->comStatusIn_handlerBase(
1499 void ComQueueComponentBase ::
1500 m_p_dataReturnIn_in(
1509 compPtr->dataReturnIn_handlerBase(
1516 void ComQueueComponentBase ::
1525 compPtr->run_handlerBase(
Serialization/Deserialization operation was successful.
virtual void comStatusIn_handler(FwIndexType portNum, Fw::Success &condition)=0
Handler for input port comStatusIn.
void addCallPort(InputTimePort *callPort)
Register an input port.
virtual ~ComQueueComponentBase()
Destroy ComQueueComponentBase object.
FwIndexType getNum_bufferReturnOut_OutputPorts() const
PlatformSizeType FwSizeType
void tlmWrite_buffQueueDepth(const Svc::BuffQueueDepth &arg, Fw::Time _tlmTime=Fw::Time()) const
Status receive(U8 *destination, FwSizeType capacity, BlockingType blockType, FwSizeType &actualSize, FwQueuePriorityType &priority) override
receive a message from the queue through delegate
void set_Log_OutputPort(FwIndexType portNum, Fw::InputLogPort *port)
Connect port to Log[portNum].
The size of the serial representation.
Status
status returned from the queue send function
SerializeStatus serialize(U8 val)
serialize 8-bit unsigned int
const char * toChar() const
virtual void dataReturnIn_handler(FwIndexType portNum, Fw::Buffer &data, const ComCfg::FrameContext &context)=0
Handler for input port dataReturnIn.
void dataOut_out(FwIndexType portNum, Fw::Buffer &data, const ComCfg::FrameContext &context)
Invoke output port dataOut.
FwIndexType getNum_bufferQueueIn_InputPorts() const
void dataReturnIn_handlerBase(FwIndexType portNum, Fw::Buffer &data, const ComCfg::FrameContext &context)
Handler base-class function for input port dataReturnIn.
FwIndexType getNum_Log_OutputPorts() const
Svc::InputSchedPort * get_run_InputPort(FwIndexType portNum)
U32 FwChanIdType
The type of a telemetry channel identifier.
FwIndexType getNum_dataOut_OutputPorts() const
void set_bufferReturnOut_OutputPort(FwIndexType portNum, Fw::InputBufferSendPort *port)
Connect port to bufferReturnOut[portNum].
bool isConnected_bufferReturnOut_OutputPort(FwIndexType portNum)
void init()
Initialization function.
void set_dataOut_OutputPort(FwIndexType portNum, Svc::InputComDataWithContextPort *port)
Connect port to dataOut[portNum].
Os::Queue m_queue
queue object for active component
void addCallPort(InputComDataWithContextPort *callPort)
Register an input port.
Array of queue depths for Fw::Com types.
void addCallPort(InputTlmPort *callPort)
Register an input port.
An enumeration of queue data types.
bool isConnected_Log_OutputPort(FwIndexType portNum)
void init()
Object initializer.
FwIndexType getNum_comPacketQueueIn_InputPorts() const
void comStatusIn_handlerBase(FwIndexType portNum, Fw::Success &condition)
Handler base-class function for input port comStatusIn.
U32 FwEventIdType
The type of an event identifier.
SerializeStatus
forward declaration for string
Message will block until space is available.
virtual void bufferQueueIn_preMsgHook(FwIndexType portNum, Fw::Buffer &fwBuffer)
Pre-message hook for async input port bufferQueueIn.
void set_Tlm_OutputPort(FwIndexType portNum, Fw::InputTlmPort *port)
Connect port to Tlm[portNum].
#define FW_OBJECT_NAMES
Indicates whether or not object names are stored (more memory, can be used for tracking objects) ...
void init()
Initialization function.
void addCallComp(Fw::PassiveComponentBase *callComp, CompFuncPtr funcPtr)
Register a component.
Os::Queue::Status createQueue(FwSizeType depth, FwSizeType msgSize)
bool isConnected_Time_OutputPort(FwIndexType portNum)
void invoke(Fw::Buffer &fwBuffer) const
Invoke a port interface.
virtual void run_handler(FwIndexType portNum, U32 context)=0
Handler for input port run.
void run_handlerBase(FwIndexType portNum, U32 context)
Handler base-class function for input port run.
void addCallPort(InputBufferSendPort *callPort)
Register an input port.
void invoke(Fw::Time &time) const
Invoke a port interface.
Array of queue depths for Fw::Buffer types.
virtual void run_preMsgHook(FwIndexType portNum, U32 context)
Pre-message hook for async input port run.
const char * toChar() const
void invoke(Fw::Buffer &data, const ComCfg::FrameContext &context) const
Invoke a port interface.
Status send(const U8 *buffer, FwSizeType size, FwQueuePriorityType priority, BlockingType blockType) override
send a message into the queue through delegate
void log_WARNING_HI_QueueOverflow(Svc::QueueType queueType, U32 index) const
void set_Time_OutputPort(FwIndexType portNum, Fw::InputTimePort *port)
Connect port to Time[portNum].
Fw::InputComPort * get_comPacketQueueIn_InputPort(FwIndexType portNum)
message to exit active component task
A serious but recoverable event.
Errors dispatching messages.
void init()
Initialization function.
void invoke(FwChanIdType id, Fw::Time &timeTag, Fw::TlmBuffer &val) const
Invoke a port interface.
virtual void bufferQueueIn_handler(FwIndexType portNum, Fw::Buffer &fwBuffer)=0
Handler for input port bufferQueueIn.
FwIndexType getNum_dataReturnIn_InputPorts() const
virtual void comPacketQueueIn_handler(FwIndexType portNum, Fw::ComBuffer &data, U32 context)=0
Handler for input port comPacketQueueIn.
void comPacketQueueIn_handlerBase(FwIndexType portNum, Fw::ComBuffer &data, U32 context)
Handler base-class function for input port comPacketQueueIn.
Svc::InputComDataWithContextPort * get_dataReturnIn_InputPort(FwIndexType portNum)
FormatStatus format(const CHAR *formatString,...)
write formatted string to buffer
void init()
Initialization function.
virtual void comPacketQueueIn_preMsgHook(FwIndexType portNum, Fw::ComBuffer &data, U32 context)
Pre-message hook for async input port comPacketQueueIn.
Fw::InputBufferSendPort * get_bufferQueueIn_InputPort(FwIndexType portNum)
uint8_t U8
8-bit unsigned integer
void init()
Initialization function.
PlatformQueuePriorityType FwQueuePriorityType
The type of queue priorities used.
void init()
Initialization function.
Fw::InputSuccessConditionPort * get_comStatusIn_InputPort(FwIndexType portNum)
void invoke(FwEventIdType id, Fw::Time &timeTag, const Fw::LogSeverity &severity, Fw::LogBuffer &args) const
Invoke a port interface.
Channel ID for buffQueueDepth.
A message was sent requesting an exit of the loop.
bool isConnected_Tlm_OutputPort(FwIndexType portNum)
FwIndexType getNum_Time_OutputPorts() const
No time base has been established.
ComQueueComponentBase(const char *compName="")
Construct ComQueueComponentBase object.
PlatformIndexType FwIndexType
#define FW_NUM_ARRAY_ELEMENTS(a)
number of elements in an array
void addCallPort(InputLogPort *callPort)
Register an input port.
FwIndexType getNum_Tlm_OutputPorts() const
Channel ID for comQueueDepth.
FwIndexType getNum_comStatusIn_InputPorts() const
Type used to pass context info between components during framing/deframing.
void incNumMsgDropped()
increment the number of messages dropped
void tlmWrite_comQueueDepth(const Svc::ComQueueDepth &arg, Fw::Time _tlmTime=Fw::Time()) const
RateGroupDivider component implementation.
message sent/received okay
virtual void comStatusIn_preMsgHook(FwIndexType portNum, Fw::Success &condition)
Pre-message hook for async input port comStatusIn.
Message will return with status when space is unavailable.
virtual void bufferQueueIn_overflowHook(FwIndexType portNum, Fw::Buffer &fwBuffer)=0
Overflow hook for async input port bufferQueueIn.
bool isConnected_dataOut_OutputPort(FwIndexType portNum)
void bufferQueueIn_handlerBase(FwIndexType portNum, Fw::Buffer &fwBuffer)
Handler base-class function for input port bufferQueueIn.
void bufferReturnOut_out(FwIndexType portNum, Fw::Buffer &fwBuffer)
Invoke output port bufferReturnOut.
FwIndexType getNum_run_InputPorts() const