10 #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_bufferReturnIn_InputPort[port].
init();
114 this->m_bufferReturnIn_InputPort[port].
addCallComp(
116 m_p_bufferReturnIn_in
118 this->m_bufferReturnIn_InputPort[port].
setPortNum(port);
120 #if FW_OBJECT_NAMES == 1 124 this->m_objName.toChar(),
127 this->m_bufferReturnIn_InputPort[port].setObjName(portName.
toChar());
137 this->m_comPacketQueueIn_InputPort[port].
init();
138 this->m_comPacketQueueIn_InputPort[port].
addCallComp(
140 m_p_comPacketQueueIn_in
142 this->m_comPacketQueueIn_InputPort[port].
setPortNum(port);
144 #if FW_OBJECT_NAMES == 1 148 this->m_objName.toChar(),
151 this->m_comPacketQueueIn_InputPort[port].setObjName(portName.
toChar());
161 this->m_comStatusIn_InputPort[port].
init();
166 this->m_comStatusIn_InputPort[port].
setPortNum(port);
168 #if FW_OBJECT_NAMES == 1 172 this->m_objName.toChar(),
175 this->m_comStatusIn_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_queueSend_OutputPort[port].
init();
308 #if FW_OBJECT_NAMES == 1 312 this->m_objName.toChar(),
315 this->m_queueSend_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_bufferReturnIn_InputPort[portNum];
361 static_cast<FwAssertArgType>(portNum)
364 return &this->m_comPacketQueueIn_InputPort[portNum];
372 static_cast<FwAssertArgType>(portNum)
375 return &this->m_comStatusIn_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_queueSend_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_queueSend_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_queueSend_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)
861 static_cast<FwAssertArgType>(portNum)
870 ComponentIpcSerializableBuffer msg;
874 _status = msg.serialize(
875 static_cast<FwEnumStoreType>(COMPACKETQUEUEIN_COM)
879 static_cast<FwAssertArgType>(_status)
883 _status = msg.serialize(portNum);
886 static_cast<FwAssertArgType>(_status)
890 _status = msg.serialize(data);
893 static_cast<FwAssertArgType>(_status)
897 _status = msg.serialize(context);
900 static_cast<FwAssertArgType>(_status)
907 if (qStatus == Os::Queue::Status::FULL) {
914 static_cast<FwAssertArgType>(qStatus)
927 static_cast<FwAssertArgType>(portNum)
935 ComponentIpcSerializableBuffer msg;
939 _status = msg.serialize(
940 static_cast<FwEnumStoreType>(COMSTATUSIN_SUCCESSCONDITION)
944 static_cast<FwAssertArgType>(_status)
948 _status = msg.serialize(portNum);
951 static_cast<FwAssertArgType>(_status)
955 _status = msg.serialize(condition);
958 static_cast<FwAssertArgType>(_status)
967 static_cast<FwAssertArgType>(qStatus)
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_queueSend_OutputPort[portNum].isConnected(),
1112 static_cast<FwAssertArgType>(portNum)
1114 this->m_queueSend_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_bufferReturnIn_in(
1477 compPtr->bufferReturnIn_handlerBase(
1484 void ComQueueComponentBase ::
1485 m_p_comPacketQueueIn_in(
1494 compPtr->comPacketQueueIn_handlerBase(
1501 void ComQueueComponentBase ::
1510 compPtr->comStatusIn_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.
virtual void bufferReturnIn_handler(FwIndexType portNum, Fw::Buffer &data, const ComCfg::FrameContext &context)=0
Handler for input port bufferReturnIn.
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].
Status
status returned from the queue send function
SerializeStatus serialize(U8 val)
serialize 8-bit unsigned int
const char * toChar() const
FwIndexType getNum_bufferQueueIn_InputPorts() const
FwIndexType getNum_Log_OutputPorts() const
Svc::InputSchedPort * get_run_InputPort(FwIndexType portNum)
U32 FwChanIdType
The type of a telemetry channel identifier.
void set_bufferReturnOut_OutputPort(FwIndexType portNum, Fw::InputBufferSendPort *port)
Connect port to bufferReturnOut[portNum].
bool isConnected_bufferReturnOut_OutputPort(FwIndexType portNum)
void init()
Initialization function.
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
Channel ID for comQueueDepth.
Message will block until space is available.
Channel ID for buffQueueDepth.
virtual void bufferQueueIn_preMsgHook(FwIndexType portNum, Fw::Buffer &fwBuffer)
Pre-message hook for async input port bufferQueueIn.
Svc::InputComDataWithContextPort * get_bufferReturnIn_InputPort(FwIndexType portNum)
void set_Tlm_OutputPort(FwIndexType portNum, Fw::InputTlmPort *port)
Connect port to Tlm[portNum].
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
No time base has been established.
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].
message to exit active component task
Fw::InputComPort * get_comPacketQueueIn_InputPort(FwIndexType portNum)
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.
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.
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
FwIndexType getNum_bufferReturnIn_InputPorts() const
void init()
Initialization function.
PlatformQueuePriorityType FwQueuePriorityType
The type of queue priorities used.
void init()
Initialization function.
Fw::InputSuccessConditionPort * get_comStatusIn_InputPort(FwIndexType portNum)
The size of the serial representation.
void invoke(FwEventIdType id, Fw::Time &timeTag, const Fw::LogSeverity &severity, Fw::LogBuffer &args) const
Invoke a port interface.
A message was sent requesting an exit of the loop.
bool isConnected_Tlm_OutputPort(FwIndexType portNum)
FwIndexType getNum_Time_OutputPorts() const
ComQueueComponentBase(const char *compName="")
Construct ComQueueComponentBase object.
PlatformIndexType FwIndexType
void queueSend_out(FwIndexType portNum, Fw::Buffer &data, const ComCfg::FrameContext &context)
Invoke output port queueSend.
void bufferReturnIn_handlerBase(FwIndexType portNum, Fw::Buffer &data, const ComCfg::FrameContext &context)
Handler base-class function for input port bufferReturnIn.
bool isConnected_queueSend_OutputPort(FwIndexType portNum)
#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
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
void set_queueSend_OutputPort(FwIndexType portNum, Svc::InputComDataWithContextPort *port)
Connect port to queueSend[portNum].
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.
#define FW_OBJECT_NAMES
Indicates whether or not object names are stored (more memory, can be used for tracking objects) ...
FwIndexType getNum_queueSend_OutputPorts() const
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