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)
615 static_cast<FwAssertArgType>(portNum)
618 return this->m_Log_OutputPort[portNum].
isConnected();
621 #if FW_ENABLE_TEXT_LOGGING == 1 623 bool ComQueueComponentBase ::
624 isConnected_LogText_OutputPort(
FwIndexType portNum)
627 (0 <= portNum) && (portNum < this->getNum_LogText_OutputPorts()),
628 static_cast<FwAssertArgType>(portNum)
631 return this->m_LogText_OutputPort[portNum].isConnected();
641 static_cast<FwAssertArgType>(portNum)
644 return this->m_Time_OutputPort[portNum].
isConnected();
652 static_cast<FwAssertArgType>(portNum)
655 return this->m_Tlm_OutputPort[portNum].
isConnected();
667 static_cast<FwAssertArgType>(portNum)
670 return this->m_bufferReturnOut_OutputPort[portNum].
isConnected();
678 static_cast<FwAssertArgType>(portNum)
681 return this->m_dataOut_OutputPort[portNum].
isConnected();
699 static_cast<FwAssertArgType>(portNum)
707 ComponentIpcSerializableBuffer msg;
711 _status = msg.serializeFrom(
712 static_cast<FwEnumStoreType>(BUFFERQUEUEIN_BUFFERSEND)
716 static_cast<FwAssertArgType>(_status)
720 _status = msg.serializeFrom(portNum);
723 static_cast<FwAssertArgType>(_status)
727 _status = msg.serializeFrom(fwBuffer);
730 static_cast<FwAssertArgType>(_status)
737 if (qStatus == Os::Queue::Status::FULL) {
744 static_cast<FwAssertArgType>(qStatus)
758 static_cast<FwAssertArgType>(portNum)
767 ComponentIpcSerializableBuffer msg;
771 _status = msg.serializeFrom(
772 static_cast<FwEnumStoreType>(COMPACKETQUEUEIN_COM)
776 static_cast<FwAssertArgType>(_status)
780 _status = msg.serializeFrom(portNum);
783 static_cast<FwAssertArgType>(_status)
787 _status = msg.serializeFrom(data);
790 static_cast<FwAssertArgType>(_status)
794 _status = msg.serializeFrom(context);
797 static_cast<FwAssertArgType>(_status)
804 if (qStatus == Os::Queue::Status::FULL) {
811 static_cast<FwAssertArgType>(qStatus)
824 static_cast<FwAssertArgType>(portNum)
832 ComponentIpcSerializableBuffer msg;
836 _status = msg.serializeFrom(
837 static_cast<FwEnumStoreType>(COMSTATUSIN_SUCCESSCONDITION)
841 static_cast<FwAssertArgType>(_status)
845 _status = msg.serializeFrom(portNum);
848 static_cast<FwAssertArgType>(_status)
852 _status = msg.serializeFrom(condition);
855 static_cast<FwAssertArgType>(_status)
864 static_cast<FwAssertArgType>(qStatus)
878 static_cast<FwAssertArgType>(portNum)
898 static_cast<FwAssertArgType>(portNum)
906 ComponentIpcSerializableBuffer msg;
910 _status = msg.serializeFrom(
911 static_cast<FwEnumStoreType>(RUN_SCHED)
915 static_cast<FwAssertArgType>(_status)
919 _status = msg.serializeFrom(portNum);
922 static_cast<FwAssertArgType>(_status)
926 _status = msg.serializeFrom(context);
929 static_cast<FwAssertArgType>(_status)
936 if (qStatus == Os::Queue::Status::FULL) {
943 static_cast<FwAssertArgType>(qStatus)
1004 static_cast<FwAssertArgType>(portNum)
1008 this->m_bufferReturnOut_OutputPort[portNum].isConnected(),
1009 static_cast<FwAssertArgType>(portNum)
1011 this->m_bufferReturnOut_OutputPort[portNum].
invoke(
1025 static_cast<FwAssertArgType>(portNum)
1029 this->m_dataOut_OutputPort[portNum].isConnected(),
1030 static_cast<FwAssertArgType>(portNum)
1032 this->m_dataOut_OutputPort[portNum].
invoke(
1050 if (this->m_Time_OutputPort[0].isConnected()) {
1051 this->m_Time_OutputPort[0].
invoke(_logTime);
1059 if (this->m_Log_OutputPort[0].isConnected()) {
1063 #if FW_AMPCS_COMPATIBLE 1068 static_cast<FwAssertArgType>(_status)
1072 #if FW_AMPCS_COMPATIBLE 1079 static_cast<FwAssertArgType>(_status)
1085 static_cast<FwAssertArgType>(_status)
1088 #if FW_AMPCS_COMPATIBLE 1091 static_cast<U8>(
sizeof(U32))
1095 static_cast<FwAssertArgType>(_status)
1101 static_cast<FwAssertArgType>(_status)
1104 this->m_Log_OutputPort[0].
invoke(
1113 #if FW_ENABLE_TEXT_LOGGING 1114 if (this->m_LogText_OutputPort[0].isConnected()) {
1115 #if FW_OBJECT_NAMES == 1 1116 const char* _formatString =
1117 "(%s) %s: The %s queue at index %" PRIu32
" overflowed";
1119 const char* _formatString =
1120 "%s: The %s queue at index %" PRIu32
" overflowed";
1124 queueType.toString(queueTypeStr);
1130 this->m_objName.toChar(),
1137 this->m_LogText_OutputPort[0].invoke(
1157 if (this->m_Tlm_OutputPort[0].isConnected()) {
1159 this->m_Time_OutputPort[0].isConnected() &&
1162 this->m_Time_OutputPort[0].
invoke(_tlmTime);
1169 static_cast<FwAssertArgType>(_stat)
1176 this->m_Tlm_OutputPort[0].
invoke(
1190 if (this->m_Tlm_OutputPort[0].isConnected()) {
1192 this->m_Time_OutputPort[0].isConnected() &&
1195 this->m_Time_OutputPort[0].
invoke(_tlmTime);
1202 static_cast<FwAssertArgType>(_stat)
1209 this->m_Tlm_OutputPort[0].
invoke(
1224 if (this->m_Time_OutputPort[0].isConnected()) {
1226 this->m_Time_OutputPort[0].
invoke(_time);
1241 ComponentIpcSerializableBuffer _msg;
1251 static_cast<FwAssertArgType>(_msgStatus)
1261 static_cast<FwAssertArgType>(_deserStatus)
1264 MsgTypeEnum _msgType =
static_cast<MsgTypeEnum
>(_desMsg);
1266 if (_msgType == COMQUEUE_COMPONENT_EXIT) {
1271 _deserStatus = _msg.deserializeTo(portNum);
1274 static_cast<FwAssertArgType>(_deserStatus)
1279 case BUFFERQUEUEIN_BUFFERSEND: {
1282 _deserStatus = _msg.deserializeTo(fwBuffer);
1285 static_cast<FwAssertArgType>(_deserStatus)
1297 case COMPACKETQUEUEIN_COM: {
1300 _deserStatus = _msg.deserializeTo(data);
1303 static_cast<FwAssertArgType>(_deserStatus)
1308 _deserStatus = _msg.deserializeTo(context);
1311 static_cast<FwAssertArgType>(_deserStatus)
1324 case COMSTATUSIN_SUCCESSCONDITION: {
1327 _deserStatus = _msg.deserializeTo(condition);
1330 static_cast<FwAssertArgType>(_deserStatus)
1345 _deserStatus = _msg.deserializeTo(context);
1348 static_cast<FwAssertArgType>(_deserStatus)
1370 void ComQueueComponentBase ::
1371 m_p_bufferQueueIn_in(
1379 compPtr->bufferQueueIn_handlerBase(
1385 void ComQueueComponentBase ::
1386 m_p_comPacketQueueIn_in(
1395 compPtr->comPacketQueueIn_handlerBase(
1402 void ComQueueComponentBase ::
1411 compPtr->comStatusIn_handlerBase(
1417 void ComQueueComponentBase ::
1418 m_p_dataReturnIn_in(
1427 compPtr->dataReturnIn_handlerBase(
1434 void ComQueueComponentBase ::
1443 compPtr->run_handlerBase(
Serialization/Deserialization operation was successful.
virtual void comStatusIn_handler(FwIndexType portNum, Fw::Success &condition)=0
Handler for input port comStatusIn.
static constexpr FwIndexType getNum_Tlm_OutputPorts()
void addCallPort(InputTimePort *callPort)
Register an input port.
virtual ~ComQueueComponentBase()
Destroy ComQueueComponentBase object.
static constexpr FwIndexType getNum_dataReturnIn_InputPorts()
SerializeStatus serializeFrom(U8 val, Endianness mode=Endianness::BIG) override
Serialize an 8-bit unsigned integer value.
static constexpr FwIndexType getNum_bufferReturnOut_OutputPorts()
FwIdType getIdBase() 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
const char * toChar() const
Convert to a C-style char*.
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.
void dataReturnIn_handlerBase(FwIndexType portNum, Fw::Buffer &data, const ComCfg::FrameContext &context)
Handler base-class function for input port dataReturnIn.
Svc::InputSchedPort * get_run_InputPort(FwIndexType portNum)
static constexpr FwIndexType getNum_comPacketQueueIn_InputPorts()
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].
No time base has been established (Required)
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.
void comStatusIn_handlerBase(FwIndexType portNum, Fw::Success &condition)
Handler base-class function for input port comStatusIn.
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.
FwIdType FwEventIdType
The type of an event identifier.
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.
static constexpr FwIndexType getNum_bufferQueueIn_InputPorts()
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
Convert to a C-style char*.
FwIdType FwChanIdType
The type of a telemetry channel identifier.
void invoke(Fw::Buffer &data, const ComCfg::FrameContext &context) const
Invoke a port interface.
Channel ID for buffQueueDepth.
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)
The size of the serial representation.
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.
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
static constexpr FwIndexType getNum_dataOut_OutputPorts()
void init()
Initialization function.
PlatformQueuePriorityType FwQueuePriorityType
The type of queue priorities used.
void init()
Initialization function.
static constexpr FwIndexType getNum_comStatusIn_InputPorts()
static constexpr FwIndexType getNum_Log_OutputPorts()
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.
A message was sent requesting an exit of the loop.
bool isConnected_Tlm_OutputPort(FwIndexType portNum)
ComQueueComponentBase(const char *compName="")
Construct ComQueueComponentBase object.
PlatformIndexType FwIndexType
void addCallPort(InputLogPort *callPort)
Register an input port.
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
static constexpr FwIndexType getNum_Time_OutputPorts()
message to exit active component task
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.
Implementation of malloc based allocator.
virtual void bufferQueueIn_overflowHook(FwIndexType portNum, Fw::Buffer &fwBuffer)=0
Overflow hook for async input port bufferQueueIn.
bool isConnected_dataOut_OutputPort(FwIndexType portNum)
Channel ID for comQueueDepth.
static constexpr FwIndexType getNum_run_InputPorts()
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.