11 #if FW_ENABLE_TEXT_LOGGING
33 class ComponentIpcSerializableBuffer :
48 return sizeof(m_buff);
55 const U8* getBuffAddr()
const {
61 U8 m_buff[SERIALIZATION_SIZE];
85 this->m_CycleIn_InputPort[port].
init();
90 this->m_CycleIn_InputPort[port].
setPortNum(port);
92 #if FW_OBJECT_NAMES == 1
107 this->m_CycleIn_InputPort[port].setObjName(portName);
117 this->m_PingIn_InputPort[port].
init();
122 this->m_PingIn_InputPort[port].
setPortNum(port);
124 #if FW_OBJECT_NAMES == 1
139 this->m_PingIn_InputPort[port].setObjName(portName);
149 this->m_Log_OutputPort[port].
init();
151 #if FW_OBJECT_NAMES == 1
166 this->m_Log_OutputPort[port].setObjName(portName);
170 #if FW_ENABLE_TEXT_LOGGING == 1
174 port < static_cast<PlatformIntType>(this->getNum_LogText_OutputPorts());
177 this->m_LogText_OutputPort[port].
init();
179 #if FW_OBJECT_NAMES == 1
194 this->m_LogText_OutputPort[port].setObjName(portName);
205 this->m_Time_OutputPort[port].
init();
207 #if FW_OBJECT_NAMES == 1
222 this->m_Time_OutputPort[port].setObjName(portName);
232 this->m_Tlm_OutputPort[port].
init();
234 #if FW_OBJECT_NAMES == 1
249 this->m_Tlm_OutputPort[port].setObjName(portName);
259 this->m_PingOut_OutputPort[port].
init();
261 #if FW_OBJECT_NAMES == 1
276 this->m_PingOut_OutputPort[port].setObjName(portName);
286 this->m_RateGroupMemberOut_OutputPort[port].
init();
288 #if FW_OBJECT_NAMES == 1
303 this->m_RateGroupMemberOut_OutputPort[port].setObjName(portName);
309 ComponentIpcSerializableBuffer::SERIALIZATION_SIZE
329 return &this->m_CycleIn_InputPort[portNum];
340 return &this->m_PingIn_InputPort[portNum];
361 #if FW_ENABLE_TEXT_LOGGING == 1
363 void ActiveRateGroupComponentBase ::
364 set_LogText_OutputPort(
370 portNum < this->getNum_LogText_OutputPorts(),
374 this->m_LogText_OutputPort[portNum].addCallPort(port);
390 this->m_Time_OutputPort[portNum].
addCallPort(port);
422 this->m_PingOut_OutputPort[portNum].
addCallPort(port);
436 this->m_RateGroupMemberOut_OutputPort[portNum].
addCallPort(port);
439 #if FW_PORT_SERIALIZATION
448 Fw::InputSerializePort* port
456 this->m_Log_OutputPort[portNum].registerSerialPort(port);
459 #if FW_ENABLE_TEXT_LOGGING == 1
461 void ActiveRateGroupComponentBase ::
462 set_LogText_OutputPort(
464 Fw::InputSerializePort* port
468 portNum < this->getNum_LogText_OutputPorts(),
472 this->m_LogText_OutputPort[portNum].registerSerialPort(port);
480 Fw::InputSerializePort* port
488 this->m_Time_OutputPort[portNum].registerSerialPort(port);
494 Fw::InputSerializePort* port
502 this->m_Tlm_OutputPort[portNum].registerSerialPort(port);
507 #if FW_PORT_SERIALIZATION
516 Fw::InputSerializePort* port
524 this->m_PingOut_OutputPort[portNum].registerSerialPort(port);
530 Fw::InputSerializePort* port
538 this->m_RateGroupMemberOut_OutputPort[portNum].registerSerialPort(port);
549 Fw::ActiveComponentBase(compName)
552 this->m_first_update_RgMaxTime =
true;
553 this->m_last_RgMaxTime = 0;
556 this->m_first_update_RgCycleSlips =
true;
557 this->m_last_RgCycleSlips = 0;
592 #if FW_ENABLE_TEXT_LOGGING == 1
595 getNum_LogText_OutputPorts()
const
642 return this->m_Log_OutputPort[portNum].
isConnected();
645 #if FW_ENABLE_TEXT_LOGGING == 1
647 bool ActiveRateGroupComponentBase ::
651 portNum < this->getNum_LogText_OutputPorts(),
655 return this->m_LogText_OutputPort[portNum].isConnected();
668 return this->m_Time_OutputPort[portNum].
isConnected();
679 return this->m_Tlm_OutputPort[portNum].
isConnected();
694 return this->m_PingOut_OutputPort[portNum].
isConnected();
705 return this->m_RateGroupMemberOut_OutputPort[portNum].
isConnected();
731 ComponentIpcSerializableBuffer msg;
735 _status = msg.serialize(
744 _status = msg.serialize(portNum);
751 _status = msg.serialize(cycleStart);
789 ComponentIpcSerializableBuffer msg;
793 _status = msg.serialize(
802 _status = msg.serialize(portNum);
809 _status = msg.serialize(key);
865 this->m_PingOut_OutputPort[portNum].
invoke(
880 this->m_RateGroupMemberOut_OutputPort[portNum].
invoke(
894 if (this->m_Time_OutputPort[0].isConnected()) {
895 this->m_Time_OutputPort[0].
invoke(_logTime);
903 if (this->m_Log_OutputPort[0].isConnected()) {
906 #if FW_AMPCS_COMPATIBLE
916 this->m_Log_OutputPort[0].
invoke(
925 #if FW_ENABLE_TEXT_LOGGING
926 if (this->m_LogText_OutputPort[0].isConnected()) {
927 #if FW_OBJECT_NAMES == 1
928 const char* _formatString =
929 "(%s) %s: Rate group started.";
931 const char* _formatString =
932 "%s: Rate group started.";
950 this->m_LogText_OutputPort[0].invoke(
965 if (this->m_Time_OutputPort[0].isConnected()) {
966 this->m_Time_OutputPort[0].
invoke(_logTime);
974 if (this->m_Log_OutputPort[0].isConnected()) {
978 #if FW_AMPCS_COMPATIBLE
987 #if FW_AMPCS_COMPATIBLE
990 static_cast<U8>(
sizeof(U32))
1003 this->m_Log_OutputPort[0].
invoke(
1012 #if FW_ENABLE_TEXT_LOGGING
1013 if (this->m_LogText_OutputPort[0].isConnected()) {
1014 #if FW_OBJECT_NAMES == 1
1015 const char* _formatString =
1016 "(%s) %s: Rate group cycle slipped on cycle %" PRIu32
"";
1018 const char* _formatString =
1019 "%s: Rate group cycle slipped on cycle %" PRIu32
"";
1031 "RateGroupCycleSlip ",
1038 this->m_LogText_OutputPort[0].invoke(
1059 if (not this->m_first_update_RgMaxTime) {
1061 if (arg == this->m_last_RgMaxTime) {
1065 this->m_last_RgMaxTime = arg;
1069 this->m_first_update_RgMaxTime =
false;
1070 this->m_last_RgMaxTime = arg;
1073 if (this->m_Tlm_OutputPort[0].isConnected()) {
1075 this->m_Time_OutputPort[0].isConnected() &&
1078 this->m_Time_OutputPort[0].
invoke(_tlmTime);
1092 this->m_Tlm_OutputPort[0].
invoke(
1107 if (not this->m_first_update_RgCycleSlips) {
1109 if (arg == this->m_last_RgCycleSlips) {
1113 this->m_last_RgCycleSlips = arg;
1117 this->m_first_update_RgCycleSlips =
false;
1118 this->m_last_RgCycleSlips = arg;
1121 if (this->m_Tlm_OutputPort[0].isConnected()) {
1123 this->m_Time_OutputPort[0].isConnected() &&
1126 this->m_Time_OutputPort[0].
invoke(_tlmTime);
1140 this->m_Tlm_OutputPort[0].
invoke(
1155 if (this->m_Time_OutputPort[0].isConnected()) {
1157 this->m_Time_OutputPort[0].
invoke(_time);
1172 ComponentIpcSerializableBuffer msg;
1195 MsgTypeEnum msgType =
static_cast<MsgTypeEnum
>(desMsg);
1197 if (msgType == ACTIVERATEGROUP_COMPONENT_EXIT) {
1202 deserStatus = msg.deserialize(portNum);
1210 case CYCLEIN_CYCLE: {
1231 deserStatus = msg.deserialize(key);
1256 void ActiveRateGroupComponentBase ::
1265 compPtr->CycleIn_handlerBase(
1271 void ActiveRateGroupComponentBase ::
1280 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
BYTE PingInPortSize[Svc::InputPingPort::SERIALIZED_SIZE]
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
@ WARNING_HI
A serious but recoverable event.
@ DIAGNOSTIC
Software diagnostic events.
void init()
Object initializer.
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
void incNumMsgDropped()
increment the number of messages dropped
@ 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.
SerializeStatus serialize(U8 val)
serialize 8-bit unsigned int
@ QUEUE_OK
message sent/received okay
@ QUEUE_FULL
queue was full when attempting to send a message
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 set_PingOut_OutputPort(NATIVE_INT_TYPE portNum, Svc::InputPingPort *port)
Connect port to PingOut[portNum].
void tlmWrite_RgMaxTime(U32 arg, Fw::Time _tlmTime=Fw::Time())
void PingIn_handlerBase(NATIVE_INT_TYPE portNum, U32 key)
Handler base-class function for input port PingIn.
void tlmWrite_RgCycleSlips(U32 arg, Fw::Time _tlmTime=Fw::Time())
virtual void CycleIn_preMsgHook(NATIVE_INT_TYPE portNum, Svc::TimerVal &cycleStart)
Pre-message hook for async input port CycleIn.
virtual void PingIn_preMsgHook(NATIVE_INT_TYPE portNum, U32 key)
Pre-message hook for async input port PingIn.
void set_Time_OutputPort(NATIVE_INT_TYPE portNum, Fw::InputTimePort *port)
Connect port to Time[portNum].
virtual ~ActiveRateGroupComponentBase()
Destroy ActiveRateGroupComponentBase object.
void RateGroupMemberOut_out(NATIVE_INT_TYPE portNum, NATIVE_UINT_TYPE context)
Invoke output port RateGroupMemberOut.
ActiveRateGroupComponentBase(const char *compName="")
Construct ActiveRateGroupComponentBase object.
NATIVE_INT_TYPE getNum_PingIn_InputPorts() const
virtual void PingIn_handler(NATIVE_INT_TYPE portNum, U32 key)=0
Handler for input port PingIn.
void set_RateGroupMemberOut_OutputPort(NATIVE_INT_TYPE portNum, Svc::InputSchedPort *port)
Connect port to RateGroupMemberOut[portNum].
NATIVE_INT_TYPE getNum_Log_OutputPorts() const
void log_WARNING_HI_RateGroupCycleSlip(U32 cycle)
bool isConnected_PingOut_OutputPort(NATIVE_INT_TYPE portNum)
@ EVENTID_RATEGROUPSTARTED
Informational event that rate group has started.
@ EVENTID_RATEGROUPCYCLESLIP
Warning event that rate group has had a cycle slip.
NATIVE_INT_TYPE getNum_PingOut_OutputPorts() const
Svc::InputCyclePort * get_CycleIn_InputPort(NATIVE_INT_TYPE portNum)
NATIVE_INT_TYPE getNum_Time_OutputPorts() const
void PingOut_out(NATIVE_INT_TYPE portNum, U32 key)
Invoke output port PingOut.
bool isConnected_Time_OutputPort(NATIVE_INT_TYPE portNum)
virtual void CycleIn_handler(NATIVE_INT_TYPE portNum, Svc::TimerVal &cycleStart)=0
Handler for input port CycleIn.
NATIVE_INT_TYPE getNum_Tlm_OutputPorts() const
bool isConnected_RateGroupMemberOut_OutputPort(NATIVE_INT_TYPE portNum)
void log_DIAGNOSTIC_RateGroupStarted()
void set_Tlm_OutputPort(NATIVE_INT_TYPE portNum, Fw::InputTlmPort *port)
Connect port to Tlm[portNum].
bool isConnected_Tlm_OutputPort(NATIVE_INT_TYPE portNum)
Svc::InputPingPort * get_PingIn_InputPort(NATIVE_INT_TYPE portNum)
void CycleIn_handlerBase(NATIVE_INT_TYPE portNum, Svc::TimerVal &cycleStart)
Handler base-class function for input port CycleIn.
NATIVE_INT_TYPE getNum_CycleIn_InputPorts() const
void set_Log_OutputPort(NATIVE_INT_TYPE portNum, Fw::InputLogPort *port)
Connect port to Log[portNum].
bool isConnected_Log_OutputPort(NATIVE_INT_TYPE portNum)
NATIVE_INT_TYPE getNum_RateGroupMemberOut_OutputPorts() const
@ CHANNELID_RGMAXTIME
Channel ID for RgMaxTime.
@ CHANNELID_RGCYCLESLIPS
Channel ID for RgCycleSlips.
void invoke(U32 key)
Invoke a port interface.
void init()
Initialization function.
void addCallPort(InputPingPort *callPort)
Register an input port.
void invoke(NATIVE_UINT_TYPE context)
Invoke a port interface.
void init()
Initialization function.
void addCallPort(InputSchedPort *callPort)
Register an input port.
Serializable class for carrying timer values.
Fw::SerializeStatus deserialize(Fw::SerializeBufferBase &buffer)
Deserialization function.
SerializeStatus
forward declaration for string
@ FW_SERIALIZE_OK
Serialization/Deserialization operation was successful.