21 m_numCmdsDispatched(0),
24 memset(this->m_entryTable,0,
sizeof(this->m_entryTable));
25 memset(this->m_sequenceTracker,0,
sizeof(this->m_sequenceTracker));
33 bool slotFound =
false;
35 if ((not this->m_entryTable[slot].used) and (not slotFound)) {
36 this->m_entryTable[slot].opcode = opCode;
37 this->m_entryTable[slot].port = portNum;
38 this->m_entryTable[slot].used =
true;
41 }
else if ((this->m_entryTable[slot].used) &&
42 (this->m_entryTable[slot].opcode == opCode) &&
43 (this->m_entryTable[slot].port == portNum) &&
47 }
else if (this->m_entryTable[slot].used) {
48 FW_ASSERT(this->m_entryTable[slot].opcode != opCode, static_cast<FwAssertArgType>(opCode));
51 FW_ASSERT(slotFound,static_cast<FwAssertArgType>(opCode));
59 this->m_numCmdErrors++;
69 (this->m_sequenceTracker[pending].seq == cmdSeq) &&
70 (this->m_sequenceTracker[pending].used)
72 portToCall = this->m_sequenceTracker[pending].callerPort;
73 context = this->m_sequenceTracker[pending].context;
74 FW_ASSERT(opCode == this->m_sequenceTracker[pending].opCode);
76 this->m_sequenceTracker[pending].used =
false;
81 if (portToCall != -1) {
105 bool entryFound =
false;
108 if ((this->m_entryTable[entry].used) and (cmdPkt.
getOpCode() == this->m_entryTable[entry].opcode)) {
116 bool pendingFound =
false;
119 if (not this->m_sequenceTracker[pending].used) {
121 this->m_sequenceTracker[pending].used =
true;
122 this->m_sequenceTracker[pending].opCode = cmdPkt.
getOpCode();
123 this->m_sequenceTracker[pending].seq = this->m_seq;
124 this->m_sequenceTracker[pending].context = context;
125 this->m_sequenceTracker[pending].callerPort = portNum;
131 if (not pendingFound) {
141 this->m_entryTable[entry].port,
149 this->m_numCmdsDispatched++;
154 this->m_numCmdErrors++;
166 void CommandDispatcherImpl::CMD_NO_OP_cmdHandler(
FwOpcodeType opCode, U32 cmdSeq) {
180 void CommandDispatcherImpl::CMD_TEST_CMD_1_cmdHandler(
FwOpcodeType opCode, U32 cmdSeq, I32 arg1,
F32 arg2,
U8 arg3) {
185 void CommandDispatcherImpl::CMD_CLEAR_TRACKING_cmdHandler(
FwOpcodeType opCode, U32 cmdSeq) {
188 this->m_sequenceTracker[entry].used =
false;
193 void CommandDispatcherImpl::pingIn_handler(
FwIndexType portNum, U32 key) {
Serialization/Deserialization operation was successful.
void log_ACTIVITY_HI_NoOpReceived() const
void log_WARNING_HI_InvalidCommand(U32 Opcode) const
SerializeStatus deserialize(SerializeBufferBase &buffer)
deserialize to contents
Invalid opcode dispatched.
void log_WARNING_HI_TooManyCommands(U32 Opcode) const
void log_ACTIVITY_HI_TestCmd1Args(I32 arg1, F32 arg2, U8 arg3) const
void pingOut_out(FwIndexType portNum, U32 key)
Invoke output port pingOut.
Enum representing a command response.
void compCmdSend_out(FwIndexType portNum, FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
Invoke output port compCmdSend.
SerializeStatus
forward declaration for string
float F32
32-bit floating point
void log_ACTIVITY_HI_NoOpStringReceived(const Fw::StringBase &message) const
void tlmWrite_CommandsDispatched(U32 arg, Fw::Time _tlmTime=Fw::Time())
U32 FwOpcodeType
The type of a command opcode.
void log_WARNING_HI_MalformedCommand(Fw::DeserialStatus Status) const
void log_COMMAND_OpCodeDispatched(U32 Opcode, I32 port) const
Component responsible for dispatching incoming commands to registered components. ...
virtual ~CommandDispatcherImpl()
Component destructor.
void log_COMMAND_OpCodeCompleted(U32 Opcode) const
void tlmWrite_CommandErrors(U32 arg, Fw::Time _tlmTime=Fw::Time())
CommandDispatcherImpl(const char *name)
Command Dispatcher constructor.
FwOpcodeType getOpCode() const
Command successfully executed.
uint8_t U8
8-bit unsigned integer
void log_DIAGNOSTIC_OpCodeReregistered(U32 Opcode, I32 port) const
CmdArgBuffer & getArgBuffer()
Command had execution error.
const char * toChar() const
FwIndexType getNum_seqCmdStatus_OutputPorts() const
void seqCmdStatus_out(FwIndexType portNum, FwOpcodeType opCode, U32 cmdSeq, const Fw::CmdResponse &response)
Invoke output port seqCmdStatus.
PlatformIndexType FwIndexType
#define FW_NUM_ARRAY_ELEMENTS(a)
number of elements in an array
Auto-generated base for CommandDispatcher component.
bool isConnected_seqCmdStatus_OutputPort(FwIndexType portNum)
Command failed validation.
RateGroupDivider component implementation.
void log_COMMAND_OpCodeError(U32 Opcode, Fw::CmdResponse error) const
bool isConnected_compCmdSend_OutputPort(FwIndexType portNum)
void cmdResponse_out(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdResponse response)
Emit command response.
void log_DIAGNOSTIC_OpCodeRegistered(U32 Opcode, I32 port, I32 slot) const
Log event OpCodeRegistered.