F´ Flight Software - C/C++ Documentation
NASA-v1.5.0
A framework for building embedded system applications to NASA flight quality standards.
|
Go to the documentation of this file.
17 #if FW_ENABLE_TEXT_LOGGING
48 class ComponentIpcSerializableBuffer :
63 return sizeof(m_buff);
66 U8* getBuffAddr(
void) {
70 const U8* getBuffAddr(
void)
const {
76 U8 m_buff[SERIALIZATION_SIZE];
90 return &this->m_PingReturn_InputPort[
portNum];
118 this->m_PingSend_OutputPort[
portNum].addCallPort(port);
181 #if FW_ENABLE_TEXT_LOGGING == 1
182 void HealthComponentBase ::
183 set_LogText_OutputPort(
189 this->m_LogText_OutputPort[
portNum].addCallPort(port);
197 #if FW_PORT_SERIALIZATION
202 Fw::InputSerializePort *port
206 return this->m_PingSend_OutputPort[
portNum].registerSerialPort(port);
212 Fw::InputSerializePort *port
222 Fw::InputSerializePort *port
232 Fw::InputSerializePort *port
242 Fw::InputSerializePort *port
252 Fw::InputSerializePort *port
262 Fw::InputSerializePort *port
269 #if FW_ENABLE_TEXT_LOGGING == 1
270 void HealthComponentBase ::
271 set_LogText_OutputPort(
273 Fw::InputSerializePort *port
277 return this->m_LogText_OutputPort[
portNum].registerSerialPort(port);
307 #if FW_OBJECT_NAMES == 1
309 Fw::QueuedComponentBase(compName)
312 Fw::QueuedComponentBase()
334 port < this->getNum_PingReturn_InputPorts();
338 this->m_PingReturn_InputPort[port].init();
339 this->m_PingReturn_InputPort[port].addCallComp(
343 this->m_PingReturn_InputPort[port].setPortNum(port);
345 #if FW_OBJECT_NAMES == 1
350 "%s_PingReturn_InputPort[%d]",
354 this->m_PingReturn_InputPort[port].setObjName(portName);
373 #if FW_OBJECT_NAMES == 1
378 "%s_Run_InputPort[%d]",
401 #if FW_OBJECT_NAMES == 1
406 "%s_CmdDisp_InputPort[%d]",
418 port < this->getNum_PingSend_OutputPorts();
421 this->m_PingSend_OutputPort[port].
init();
423 #if FW_OBJECT_NAMES == 1
428 "%s_PingSend_OutputPort[%d]",
432 this->m_PingSend_OutputPort[port].setObjName(portName);
445 #if FW_OBJECT_NAMES == 1
450 "%s_WdogStroke_OutputPort[%d]",
467 #if FW_OBJECT_NAMES == 1
472 "%s_CmdStatus_OutputPort[%d]",
489 #if FW_OBJECT_NAMES == 1
494 "%s_CmdReg_OutputPort[%d]",
511 #if FW_OBJECT_NAMES == 1
516 "%s_Tlm_OutputPort[%d]",
533 #if FW_OBJECT_NAMES == 1
538 "%s_Time_OutputPort[%d]",
555 #if FW_OBJECT_NAMES == 1
560 "%s_Log_OutputPort[%d]",
570 #if FW_ENABLE_TEXT_LOGGING == 1
573 port < this->getNum_LogText_OutputPorts();
576 this->m_LogText_OutputPort[port].
init();
578 #if FW_OBJECT_NAMES == 1
583 "%s_LogText_OutputPort[%d]",
587 this->m_LogText_OutputPort[port].setObjName(portName);
596 ComponentIpcSerializableBuffer::SERIALIZATION_SIZE
614 void HealthComponentBase ::
621 this->m_PingSend_OutputPort[
portNum].invoke(
key);
639 getNum_PingSend_OutputPorts(
void)
642 this->m_PingSend_OutputPort
647 getNum_PingReturn_InputPorts(
void)
650 this->m_PingReturn_InputPort
718 #if FW_ENABLE_TEXT_LOGGING == 1
720 getNum_LogText_OutputPorts(
void)
723 this->m_LogText_OutputPort
732 bool HealthComponentBase ::
736 portNum < this->getNum_PingSend_OutputPorts(),
739 return this->m_PingSend_OutputPort[
portNum].isConnected();
802 #if FW_ENABLE_TEXT_LOGGING == 1
803 bool HealthComponentBase ::
807 portNum < this->getNum_LogText_OutputPorts(),
810 return this->m_LogText_OutputPort[
portNum].isConnected();
833 const U32 idBase = callComp->
getIdBase();
834 FW_ASSERT(opCode >= idBase, opCode, idBase);
835 switch (opCode - idBase) {
837 case OPCODE_HLTH_ENABLE:
838 compPtr->HLTH_ENABLE_cmdHandlerBase(
862 compPtr->cmdResponse_out(
873 void HealthComponentBase ::
888 void HealthComponentBase ::
889 HLTH_ENABLE_cmdHandlerBase(
897 this->HLTH_ENABLE_preMsgHook(opCode,
cmdSeq);
901 ComponentIpcSerializableBuffer msg;
913 _status = msg.serialize(port);
919 _status = msg.serialize(opCode);
925 _status = msg.serialize(
cmdSeq);
931 _status = msg.serialize(
args);
949 void HealthComponentBase::
950 HLTH_ENABLE_preMsgHook(
971 ComponentIpcSerializableBuffer msg;
983 _status = msg.serialize(port);
989 _status = msg.serialize(opCode);
995 _status = msg.serialize(
cmdSeq);
1001 _status = msg.serialize(
args);
1041 ComponentIpcSerializableBuffer msg;
1053 _status = msg.serialize(port);
1059 _status = msg.serialize(opCode);
1065 _status = msg.serialize(
cmdSeq);
1071 _status = msg.serialize(
args);
1102 void HealthComponentBase ::
1103 tlmWrite_PingLateWarnings(U32 arg)
1120 _id = this->
getIdBase() + CHANNELID_PINGLATEWARNINGS;
1151 void HealthComponentBase ::
1152 log_WARNING_HI_HLTH_PING_WARN(
1166 _id = this->
getIdBase() + EVENTID_HLTH_PING_WARN;
1174 #if FW_AMPCS_COMPATIBLE
1200 #if FW_ENABLE_TEXT_LOGGING
1201 if (this->m_LogText_OutputPort[0].isConnected()) {
1203 #if FW_OBJECT_NAMES == 1
1204 const char* _formatString =
1205 "(%s) %s: Ping entry %s late warning";
1207 const char* _formatString =
1208 "%s: Ping entry %s late warning";
1227 this->m_LogText_OutputPort[0].invoke(
1262 #if FW_AMPCS_COMPATIBLE
1264 _status = _logBuff.
serialize(
static_cast<U8>(1+1));
1275 _status = _logBuff.
serialize(
static_cast<U32
>(0));
1299 #if FW_ENABLE_TEXT_LOGGING
1300 if (this->m_LogText_OutputPort[0].isConnected()) {
1302 #if FW_OBJECT_NAMES == 1
1303 const char* _formatString =
1304 "(%s) %s: Ping entry %s did not respond";
1306 const char* _formatString =
1307 "%s: Ping entry %s did not respond";
1326 this->m_LogText_OutputPort[0].invoke(
1361 #if FW_AMPCS_COMPATIBLE
1363 _status = _logBuff.
serialize(
static_cast<U8>(2+1));
1374 _status = _logBuff.
serialize(
static_cast<U32
>(0));
1388 #if FW_AMPCS_COMPATIBLE
1391 static_cast<U8>(
sizeof(badKey))
1415 #if FW_ENABLE_TEXT_LOGGING
1416 if (this->m_LogText_OutputPort[0].isConnected()) {
1418 #if FW_OBJECT_NAMES == 1
1419 const char* _formatString =
1420 "(%s) %s: Ping entry %s responded with wrong key 0x%08X";
1422 const char* _formatString =
1423 "%s: Ping entry %s responded with wrong key 0x%08X";
1435 "HLTH_PING_WRONG_KEY "
1443 this->m_LogText_OutputPort[0].invoke(
1457 HealthIsEnabled enabled
1478 #if FW_AMPCS_COMPATIBLE
1487 #if FW_AMPCS_COMPATIBLE
1514 #if FW_ENABLE_TEXT_LOGGING
1515 if (this->m_LogText_OutputPort[0].isConnected()) {
1517 #if FW_OBJECT_NAMES == 1
1518 const char* _formatString =
1519 "(%s) %s: Health checking set to %d";
1521 const char* _formatString =
1522 "%s: Health checking set to %d";
1534 "HLTH_CHECK_ENABLE "
1541 this->m_LogText_OutputPort[0].invoke(
1576 #if FW_AMPCS_COMPATIBLE
1585 #if FW_AMPCS_COMPATIBLE
1619 #if FW_ENABLE_TEXT_LOGGING
1620 if (this->m_LogText_OutputPort[0].isConnected()) {
1622 #if FW_OBJECT_NAMES == 1
1623 const char* _formatString =
1624 "(%s) %s: Health checking set to %d for %s";
1626 const char* _formatString =
1627 "%s: Health checking set to %d for %s";
1647 this->m_LogText_OutputPort[0].invoke(
1682 #if FW_AMPCS_COMPATIBLE
1708 #if FW_ENABLE_TEXT_LOGGING
1709 if (this->m_LogText_OutputPort[0].isConnected()) {
1711 #if FW_OBJECT_NAMES == 1
1712 const char* _formatString =
1713 "(%s) %s: Couldn't find entry %s";
1715 const char* _formatString =
1716 "%s: Couldn't find entry %s";
1728 "HLTH_CHECK_LOOKUP_ERROR "
1735 this->m_LogText_OutputPort[0].invoke(
1770 #if FW_AMPCS_COMPATIBLE
1786 #if FW_AMPCS_COMPATIBLE
1789 static_cast<U8>(
sizeof(warn))
1803 #if FW_AMPCS_COMPATIBLE
1806 static_cast<U8>(
sizeof(fatal))
1830 #if FW_ENABLE_TEXT_LOGGING
1831 if (this->m_LogText_OutputPort[0].isConnected()) {
1833 #if FW_OBJECT_NAMES == 1
1834 const char* _formatString =
1835 "(%s) %s: Health ping for %s changed to WARN %d FATAL %d";
1837 const char* _formatString =
1838 "%s: Health ping for %s changed to WARN %d FATAL %d";
1850 "HLTH_PING_UPDATED "
1859 this->m_LogText_OutputPort[0].invoke(
1894 #if FW_AMPCS_COMPATIBLE
1910 #if FW_AMPCS_COMPATIBLE
1913 static_cast<U8>(
sizeof(warn))
1927 #if FW_AMPCS_COMPATIBLE
1930 static_cast<U8>(
sizeof(fatal))
1954 #if FW_ENABLE_TEXT_LOGGING
1955 if (this->m_LogText_OutputPort[0].isConnected()) {
1957 #if FW_OBJECT_NAMES == 1
1958 const char* _formatString =
1959 "(%s) %s: Health ping for %s invalid values: WARN %d FATAL %d";
1961 const char* _formatString =
1962 "%s: Health ping for %s invalid values: WARN %d FATAL %d";
1974 "HLTH_PING_INVALID_VALUES "
1983 this->m_LogText_OutputPort[0].invoke(
1999 void HealthComponentBase ::
2009 compPtr->PingReturn_handlerBase(
portNum,
key);
2029 void HealthComponentBase ::
2030 PingReturn_handlerBase(
2040 PingReturn_preMsgHook(
2045 ComponentIpcSerializableBuffer msg;
2048 _status = msg.serialize(
2056 _status = msg.serialize(
portNum);
2063 _status = msg.serialize(
key);
2101 void HealthComponentBase ::
2102 PingReturn_preMsgHook(
2118 ComponentIpcSerializableBuffer msg;
2141 MsgTypeEnum msgType =
static_cast<MsgTypeEnum
>(desMsg);
2143 if (msgType == HEALTH_COMPONENT_EXIT) {
2148 deserStatus = msg.deserialize(
portNum);
2157 case PINGRETURN_PING: {
2161 deserStatus = msg.deserialize(
key);
2168 this->PingReturn_handler(
2178 case CMD_HLTH_ENABLE: {
2181 deserStatus = msg.deserialize(opCode);
2189 deserStatus = msg.deserialize(
cmdSeq);
2197 deserStatus = msg.deserialize(
args);
2213 this->cmdResponse_out(
2225 #if FW_CMD_CHECK_RESIDUAL
2235 this->HLTH_ENABLE_cmdHandler(
2246 case CMD_HLTH_PING_ENABLE: {
2249 deserStatus = msg.deserialize(opCode);
2257 deserStatus = msg.deserialize(
cmdSeq);
2265 deserStatus = msg.deserialize(
args);
2279 this->cmdResponse_out(
2296 this->cmdResponse_out(
2308 #if FW_CMD_CHECK_RESIDUAL
2329 case CMD_HLTH_CHNG_PING: {
2332 deserStatus = msg.deserialize(opCode);
2340 deserStatus = msg.deserialize(
cmdSeq);
2348 deserStatus = msg.deserialize(
args);
2362 this->cmdResponse_out(
2377 this->cmdResponse_out(
2392 this->cmdResponse_out(
2404 #if FW_CMD_CHECK_RESIDUAL
2417 entry, warningValue, fatalValue
void WdogStroke_out(NATIVE_INT_TYPE portNum, U32 code)
virtual void HLTH_CHNG_PING_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
NATIVE_INT_TYPE getNum_CmdDisp_InputPorts(void)
U32 getIdBase(void) const
Auto-generated base for Health component.
void regCommands(void)
Register commands with the Command Dispatcher.
virtual void HLTH_PING_ENABLE_cmdHandler(FwOpcodeType opCode, U32 cmdSeq, const Fw::CmdStringArg &entry, PingEnabled enable)=0
Handler for command HLTH_PING_ENABLE.
Fw::OutputLogPort m_Log_OutputPort[NUM_LOG_OUTPUT_PORTS]
virtual MsgDispatchStatus doDispatch(void)=0
method to dispatch a single message in the queue.
PROTECTED OPCODE_HLTH_CHNG_PING
void addCallPort(InputCmdResponsePort *callPort)
SerializeStatus
forward declaration for string
#define FwChanIdType
Type representation for a channel id.
void resetDeser(void)
reset deserialization to beginning
void invoke(FwEventIdType id, Fw::Time &timeTag, LogSeverity severity, LogBuffer &args)
void addCallPort(InputCmdRegPort *callPort)
bool isConnected_CmdStatus_OutputPort(NATIVE_INT_TYPE portNum)
PROTECTED HealthEnabled_MAX HealthEnabled
#define FW_OBJECT_NAMES
Indicates whether or not object names are stored (more memory, can be used for tracking objects)
SerializeStatus serialize(U8 val)
serialize 8-bit unsigned int
#define FW_NUM_ARRAY_ELEMENTS(a)
number of elements in an array
BYTE cmdPort[Fw::InputCmdPort::SERIALIZED_SIZE]
uint8_t U8
8-bit unsigned integer
NATIVE_INT_TYPE getNum_Time_OutputPorts(void)
void log_WARNING_HI_HLTH_PING_INVALID_VALUES(Fw::LogStringArg &entry, U32 warn, U32 fatal)
#define FwEnumStoreType
Type representation for an enumeration value.
PROTECTED OPCODE_HLTH_PING_ENABLE
NATIVE_INT_TYPE getNum_Tlm_OutputPorts(void)
Os::Queue m_queue
queue object for active component
void set_Log_OutputPort(NATIVE_INT_TYPE portNum, Fw::InputLogPort *port)
void log_ACTIVITY_HI_HLTH_PING_UPDATED(Fw::LogStringArg &entry, U32 warn, U32 fatal)
NATIVE_INT_TYPE getNum_CmdReg_OutputPorts(void)
PROTECTED EVENTID_HLTH_CHECK_PING
void log_WARNING_LO_HLTH_CHECK_LOOKUP_ERROR(Fw::LogStringArg &entry)
void set_WdogStroke_OutputPort(NATIVE_INT_TYPE portNum, Svc::InputWatchDogPort *port)
bool isConnected_CmdReg_OutputPort(NATIVE_INT_TYPE portNum)
Svc::InputSchedPort * get_Run_InputPort(NATIVE_INT_TYPE portNum)
Fw::OutputCmdResponsePort m_CmdStatus_OutputPort[NUM_CMDSTATUS_OUTPUT_PORTS]
PRIVATE NATIVE_INT_TYPE portNum
PROTECTED EVENTID_HLTH_CHECK_ENABLE
@ FW_SERIALIZE_OK
Serialization/Deserialization operation was successful.
QueueStatus send(const Fw::SerializeBufferBase &buffer, NATIVE_INT_TYPE priority, QueueBlocking block)
send a message
NATIVE_UINT_TYPE getBuffLeft() const
returns how much deserialization buffer is left
const char * toChar(void) const
PROTECTED EVENTID_HLTH_PING_INVALID_VALUES
PROTECTED U32 HealthEnabled enable
void init(void)
Object initializer.
void set_CmdReg_OutputPort(NATIVE_INT_TYPE portNum, Fw::InputCmdRegPort *port)
@ MSG_DISPATCH_OK
Dispatch was normal.
bool isConnected_Tlm_OutputPort(NATIVE_INT_TYPE portNum)
void log_ACTIVITY_HI_HLTH_CHECK_PING(HealthPingIsEnabled enabled, Fw::LogStringArg &entry)
PROTECTED EVENTID_HLTH_PING_UPDATED
QueueStatus receive(Fw::SerializeBufferBase &buffer, NATIVE_INT_TYPE &priority, QueueBlocking block)
receive a message
void HLTH_CHNG_PING_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
void addCallPort(InputTlmPort *callPort)
void invoke(FwOpcodeType opCode)
@ ACTIVE_COMPONENT_EXIT
message to exit active component task
void log_FATAL_HLTH_PING_WRONG_KEY(Fw::LogStringArg &entry, U32 badKey)
void addCallPort(InputWatchDogPort *callPort)
#define FwOpcodeType
Type representation for a command opcode.
void log_FATAL_HLTH_PING_LATE(Fw::LogStringArg &entry)
static void m_p_Run_in(Fw::PassiveComponentBase *callComp, NATIVE_INT_TYPE portNum, NATIVE_UINT_TYPE context)
unsigned int NATIVE_UINT_TYPE
native unsigned integer type declaration
void invoke(Fw::Time &time)
void invoke(FwChanIdType id, Fw::Time &timeTag, TlmBuffer &val)
void Run_handlerBase(NATIVE_INT_TYPE portNum, NATIVE_UINT_TYPE context)
NATIVE_INT_TYPE getNum_WdogStroke_OutputPorts(void)
virtual void HLTH_PING_ENABLE_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
bool isConnected_Log_OutputPort(NATIVE_INT_TYPE portNum)
@ QUEUE_NO_MORE_MSGS
If non-blocking, all the messages have been drained.
void invoke(FwOpcodeType opCode, U32 cmdSeq, CommandResponse response)
@ MSG_DISPATCH_ERROR
Errors dispatching messages.
Svc::InputPingPort * get_PingReturn_InputPort(NATIVE_INT_TYPE portNum)
virtual ~HealthComponentBase(void)
void set_PingSend_OutputPort(NATIVE_INT_TYPE portNum, Svc::InputPingPort *port)
@ QUEUE_OK
message sent/received okay
Fw::OutputTlmPort m_Tlm_OutputPort[NUM_TLM_OUTPUT_PORTS]
PROTECTED EVENTID_HLTH_PING_WRONG_KEY
Svc::InputSchedPort m_Run_InputPort[NUM_RUN_INPUT_PORTS]
void setMaxSerialize(NATIVE_UINT_TYPE size)
SerializeStatus deserialize(U8 &val)
deserialize 8-bit unsigned int
void addCallPort(InputLogPort *callPort)
@ MSG_DISPATCH_EXIT
A message was sent requesting an exit of the loop.
void set_CmdStatus_OutputPort(NATIVE_INT_TYPE portNum, Fw::InputCmdResponsePort *port)
PROTECTED U32 Fw::CmdArgBuffer & args
BYTE port1[Svc::InputPingPort::SERIALIZED_SIZE]
NATIVE_INT_TYPE getNum_CmdStatus_OutputPorts(void)
PROTECTED U32 Fw::CommandResponse response
@ MSG_DISPATCH_EMPTY
No more messages in the queue.
void log_ACTIVITY_HI_HLTH_CHECK_ENABLE(HealthIsEnabled enabled)
@ QUEUE_NONBLOCKING
Queue receive always returns even if there is no message.
void set_Time_OutputPort(NATIVE_INT_TYPE portNum, Fw::InputTimePort *port)
bool isConnected_Time_OutputPort(NATIVE_INT_TYPE portNum)
virtual void HLTH_CHNG_PING_cmdHandler(FwOpcodeType opCode, U32 cmdSeq, const Fw::CmdStringArg &entry, U32 warningValue, U32 fatalValue)=0
Handler for command HLTH_CHNG_PING.
virtual void Run_handler(NATIVE_INT_TYPE portNum, NATIVE_UINT_TYPE context)=0
Handler for input port Run.
PROTECTED EVENTID_HLTH_CHECK_LOOKUP_ERROR
static void m_p_CmdDisp_in(Fw::PassiveComponentBase *callComp, NATIVE_INT_TYPE portNum, FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
void HLTH_PING_ENABLE_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
Fw::OutputTimePort m_Time_OutputPort[NUM_TIME_OUTPUT_PORTS]
Svc::OutputWatchDogPort m_WdogStroke_OutputPort[NUM_WDOGSTROKE_OUTPUT_PORTS]
Fw::InputCmdPort * get_CmdDisp_InputPort(NATIVE_INT_TYPE portNum)
Fw::OutputCmdRegPort m_CmdReg_OutputPort[NUM_CMDREG_OUTPUT_PORTS]
NATIVE_INT_TYPE getNum_Log_OutputPorts(void)
PROTECTED EVENTID_HLTH_PING_LATE
Fw::InputCmdPort m_CmdDisp_InputPort[NUM_CMDDISP_INPUT_PORTS]
#define FwEventIdType
Type representation for a event id.
int NATIVE_INT_TYPE
native integer type declaration
Os::Queue::QueueStatus createQueue(NATIVE_INT_TYPE depth, NATIVE_INT_TYPE msgSize)
bool isConnected_WdogStroke_OutputPort(NATIVE_INT_TYPE portNum)
@ TB_NONE
No time base has been established.
void addCallPort(InputTimePort *callPort)
NATIVE_INT_TYPE getNum_Run_InputPorts(void)
#define FW_LOG_TEXT_BUFFER_SIZE
Max size of string for text log message.
void set_Tlm_OutputPort(NATIVE_INT_TYPE portNum, Fw::InputTlmPort *port)