Skip to content

Commit

Permalink
Fix nasa#142, Standardize command responses
Browse files Browse the repository at this point in the history
  • Loading branch information
thnkslprpt committed Jun 9, 2024
1 parent 1805d10 commit 32ade75
Show file tree
Hide file tree
Showing 10 changed files with 129 additions and 58 deletions.
7 changes: 4 additions & 3 deletions config/default_sc_fcncodes.h
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@
* Successful execution of this command may be verified with
* the following telemetry:
* - #SC_HkTlm_Payload_t.CmdCtr will increment
* - The #SC_DISABLE_RTS_DEB_EID will be sent
* - The #SC_DISABLE_RTS_INF_EID will be sent
*
* \par Error Conditions
* This command may fail for the following reason(s):
Expand Down Expand Up @@ -269,7 +269,7 @@
* Successful execution of this command may be verified with
* the following telemetry:
* - #SC_HkTlm_Payload_t.CmdCtr will increment
* - The #SC_ENABLE_RTS_DEB_EID will be sent
* - The #SC_ENABLE_RTS_INF_EID will be sent
*
* \par Error Conditions
* This command may fail for the following reason(s):
Expand Down Expand Up @@ -362,7 +362,7 @@
* Successful execution of this command may be verified with
* the following telemetry:
* - #SC_HkTlm_Payload_t.CmdCtr will increment
* - The #SC_CONT_CMD_DEB_EID will be sent
* - The #SC_CONT_CMD_INF_EID will be sent
*
* \par Error Conditions
* This command may fail for the following reason(s):
Expand Down Expand Up @@ -430,6 +430,7 @@
* \par Command Verification
* Successful execution of this command may be verified via:
* - cFE Table Services housekeeping telemetry
* - The #SC_TABLE_MANAGE_INF_EID will be sent
*
* \par Error Conditions
* This command may fail for the following reason(s):
Expand Down
36 changes: 25 additions & 11 deletions fsw/inc/sc_events.h
Original file line number Diff line number Diff line change
Expand Up @@ -414,13 +414,13 @@
/**
* \brief SC Continue ATS On Failure Command Event ID
*
* \par Type: DEBUG
* \par Type: INFORMATIONAL
*
* \par Cause:
* This event message is issued when the #SC_CONTINUE_ATS_ON_FAILURE_CC command was received and
* the state was changed successfully
*/
#define SC_CONT_CMD_DEB_EID 43
#define SC_CONT_CMD_INF_EID 43

/**
* \brief SC ATS Command Skipped Checksum Failed Event ID
Expand Down Expand Up @@ -503,12 +503,13 @@
/**
* \brief SC Reset Counters Command Event ID
*
* \par Type: DEBUG
* \par Type: INFORMATIONAL
*
* \par Cause:
* This event message is issued when the #SC_RESET_COUNTERS_CC command was received
* This event message is issued when the #SC_RESET_COUNTERS_CC command was
* received
*/
#define SC_RESET_DEB_EID 51
#define SC_RESET_INF_EID 51

/**
* \brief SC No-op Command Event ID
Expand Down Expand Up @@ -751,12 +752,13 @@
/**
* \brief SC Disable RTS Command Event ID
*
* \par Type: DEBUG
* \par Type: INFORMATIONAL
*
* \par Cause:
* This event message is issued when a #SC_DISABLE_RTS_CC command was received, and executed successfully
* This event message is issued when a #SC_DISABLE_RTS_CC command was received,
* and executed successfully
*/
#define SC_DISABLE_RTS_DEB_EID 80
#define SC_DISABLE_RTS_INF_EID 80

/**
* \brief SC Disable RTS Rejected RTS ID Invalid Event ID
Expand All @@ -772,12 +774,13 @@
/**
* \brief SC Enable RTS Command ID Event ID
*
* \par Type: DEBUG
* \par Type: INFORMATIONAL
*
* \par Cause:
* This event message is issued when a #SC_ENABLE_RTS_CC command was received, and executed successfully
* This event message is issued when a #SC_ENABLE_RTS_CC command was received,
* and executed successfully
*/
#define SC_ENABLE_RTS_DEB_EID 82
#define SC_ENABLE_RTS_INF_EID 82

/**
* \brief SC Enable RTS Rejected RTS ID Invalid Event ID
Expand Down Expand Up @@ -1351,6 +1354,17 @@
*/
#define SC_AUTOSTART_RTS_INV_ID_ERR_EID 138

/**
* \brief SC Manage Table Command Event ID
*
* \par Type: INFORMATION
*
* \par Cause:
* This event message is issued when the #SC_MANAGE_TABLE_CC command
* was received and processed successfully.
*/
#define SC_TABLE_MANAGE_INF_EID 139

/**\}*/

#endif
3 changes: 2 additions & 1 deletion fsw/src/sc_atsrq.c
Original file line number Diff line number Diff line change
Expand Up @@ -656,7 +656,8 @@ void SC_ContinueAtsOnFailureCmd(const SC_ContinueAtsOnFailureCmd_t *Cmd)

SC_OperData.HkPacket.Payload.CmdCtr++;

CFE_EVS_SendEvent(SC_CONT_CMD_DEB_EID, CFE_EVS_EventType_DEBUG, "Continue-ATS-On-Failure command, State: %lu",
CFE_EVS_SendEvent(SC_CONT_CMD_INF_EID, CFE_EVS_EventType_INFORMATION,
"Continue-ATS-On-Failure command, State: %lu",
(unsigned long)State);
}
}
Expand Down
63 changes: 40 additions & 23 deletions fsw/src/sc_cmds.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,12 @@ void SC_ProcessAtpCmd(void)
SC_CommandIndex_t CmdIndex; /* ATS command index */
CFE_Status_t Result;
bool AbortATS = false;
SC_AtsEntry_t * EntryPtr;
SC_AtsEntry_t *EntryPtr;
CFE_SB_MsgId_t MessageID = CFE_SB_INVALID_MSG_ID;
CFE_MSG_FcnCode_t CommandCode = 0;
bool ChecksumValid;
SC_AtsCmdEntryOffsetRecord_t *CmdOffsetRec; /* ATS entry location in table */
SC_AtsCmdStatusEntry_t * StatusEntryPtr;
SC_AtsCmdStatusEntry_t *StatusEntryPtr;

/*
** The following conditions must be met before the ATS command will be
Expand Down Expand Up @@ -289,7 +289,7 @@ void SC_ProcessAtpCmd(void)

void SC_ProcessRtpCommand(void)
{
SC_RtsEntry_t * EntryPtr; /* a pointer to an RTS entry header */
SC_RtsEntry_t *EntryPtr; /* a pointer to an RTS entry header */
SC_RtsIndex_t RtsIndex; /* the RTS index for the cmd */
SC_EntryOffset_t CmdOffset; /* the location of the cmd */
CFE_Status_t Result;
Expand Down Expand Up @@ -518,7 +518,7 @@ void SC_SendHkCmd(const SC_SendHkCmd_t *Cmd)

void SC_ResetCountersCmd(const SC_ResetCountersCmd_t *Cmd)
{
CFE_EVS_SendEvent(SC_RESET_DEB_EID, CFE_EVS_EventType_DEBUG, "Reset counters command");
CFE_EVS_SendEvent(SC_RESET_INF_EID, CFE_EVS_EventType_INFORMATION, "Reset counters command");

SC_OperData.HkPacket.Payload.CmdCtr = 0;
SC_OperData.HkPacket.Payload.CmdErrCtr = 0;
Expand Down Expand Up @@ -606,56 +606,62 @@ void SC_NoopCmd(const SC_NoopCmd_t *Cmd)

void SC_ManageTableCmd(const SC_ManageTableCmd_t *Cmd)
{
int32 ArrayIndex;
int32 TableID = Cmd->Payload.Parameter;
int32 ArrayIndex;
int32 TableID = Cmd->Payload.Parameter;
CFE_Status_t Status = SC_ERROR;

/* Manage selected table as appropriate for each table type */
if ((TableID >= SC_TBL_ID_ATS_0) && (TableID < (SC_TBL_ID_ATS_0 + SC_NUMBER_OF_ATS)))
{
ArrayIndex = TableID - SC_TBL_ID_ATS_0;
SC_ManageAtsTable(ArrayIndex);
Status = SC_ManageAtsTable(ArrayIndex);
}
else if (TableID == SC_TBL_ID_APPEND)
{
SC_ManageTable(APPEND, -1);
Status = SC_ManageTable(APPEND, -1);
}
else if ((TableID >= SC_TBL_ID_RTS_0) && (TableID < (SC_TBL_ID_RTS_0 + SC_NUMBER_OF_RTS)))
{
ArrayIndex = TableID - SC_TBL_ID_RTS_0;
SC_ManageRtsTable(ArrayIndex);
Status = SC_ManageRtsTable(ArrayIndex);
}
else if (TableID == SC_TBL_ID_RTS_INFO)
{
/* No need to release dump only table pointer */
CFE_TBL_Manage(SC_OperData.RtsInfoHandle);
Status = CFE_TBL_Manage(SC_OperData.RtsInfoHandle);
}
else if (TableID == SC_TBL_ID_RTP_CTRL)
{
/* No need to release dump only table pointer */
CFE_TBL_Manage(SC_OperData.RtsCtrlBlckHandle);
Status = CFE_TBL_Manage(SC_OperData.RtsCtrlBlckHandle);
}
else if (TableID == SC_TBL_ID_ATS_INFO)
{
/* No need to release dump only table pointer */
CFE_TBL_Manage(SC_OperData.AtsInfoHandle);
Status = CFE_TBL_Manage(SC_OperData.AtsInfoHandle);
}
else if (TableID == SC_TBL_ID_ATP_CTRL)
{
/* No need to release dump only table pointer */
CFE_TBL_Manage(SC_OperData.AtsCtrlBlckHandle);
Status = CFE_TBL_Manage(SC_OperData.AtsCtrlBlckHandle);
}
else if ((TableID >= SC_TBL_ID_ATS_CMD_0) && (TableID < (SC_TBL_ID_ATS_CMD_0 + SC_NUMBER_OF_ATS)))
{
/* No need to release dump only table pointer */
ArrayIndex = TableID - SC_TBL_ID_ATS_CMD_0;
CFE_TBL_Manage(SC_OperData.AtsCmdStatusHandle[ArrayIndex]);
Status = CFE_TBL_Manage(SC_OperData.AtsCmdStatusHandle[ArrayIndex]);
}
else
{
/* Invalid table ID */
CFE_EVS_SendEvent(SC_TABLE_MANAGE_ID_ERR_EID, CFE_EVS_EventType_ERROR,
"Table manage command packet error: table ID = %d", (int)TableID);
}

if (Status >= CFE_SUCCESS)
{
CFE_EVS_SendEvent(SC_TABLE_MANAGE_INF_EID, CFE_EVS_EventType_INFORMATION, "Table manage command.");
}
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
Expand All @@ -664,17 +670,22 @@ void SC_ManageTableCmd(const SC_ManageTableCmd_t *Cmd)
/* */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

void SC_ManageRtsTable(int32 ArrayIndex)
CFE_Status_t SC_ManageRtsTable(int32 ArrayIndex)
{
CFE_Status_t Status = SC_ERROR;

/* validate array index */
if (ArrayIndex >= SC_NUMBER_OF_RTS)
{
CFE_EVS_SendEvent(SC_TABLE_MANAGE_RTS_INV_INDEX_ERR_EID, CFE_EVS_EventType_ERROR,
"RTS table manage error: invalid RTS index %d", (int)ArrayIndex);
return;
}
else
{
Status = SC_ManageTable(RTS, ArrayIndex);
}

SC_ManageTable(RTS, ArrayIndex);
return Status;
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
Expand All @@ -683,17 +694,22 @@ void SC_ManageRtsTable(int32 ArrayIndex)
/* */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

void SC_ManageAtsTable(int32 ArrayIndex)
CFE_Status_t SC_ManageAtsTable(int32 ArrayIndex)
{
CFE_Status_t Status = SC_ERROR;

/* validate array index */
if (ArrayIndex >= SC_NUMBER_OF_ATS)
{
CFE_EVS_SendEvent(SC_TABLE_MANAGE_ATS_INV_INDEX_ERR_EID, CFE_EVS_EventType_ERROR,
"ATS table manage error: invalid ATS index %d", (int)ArrayIndex);
return;
}
else
{
Status = SC_ManageTable(ATS, ArrayIndex);
}

SC_ManageTable(ATS, ArrayIndex);
return Status;
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
Expand All @@ -702,12 +718,12 @@ void SC_ManageAtsTable(int32 ArrayIndex)
/* */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

void SC_ManageTable(SC_TableType type, int32 ArrayIndex)
CFE_Status_t SC_ManageTable(SC_TableType type, int32 ArrayIndex)
{
CFE_Status_t Result;
CFE_TBL_Handle_t TblHandle;
uint32 ** TblAddr;
void * TblPtrNew;
uint32 **TblAddr;
void *TblPtrNew;

switch (type)
{
Expand Down Expand Up @@ -773,4 +789,5 @@ void SC_ManageTable(SC_TableType type, int32 ArrayIndex)
}
}

return Result;
} /* End SC_ManageTable() */
15 changes: 12 additions & 3 deletions fsw/src/sc_cmds.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,12 @@ void SC_ManageTableCmd(const SC_ManageTableCmd_t *Cmd);
*
* \param [in] ArrayIndex index into array of RTS tables
*
* \return CFE_SUCCESS on success, a non-negative informational return
* code (e.g. CFE_TBL_INFO_UPDATED) or a (negative) error code
*
* \sa #SC_ManageTableCmd
*/
void SC_ManageRtsTable(int32 ArrayIndex);
CFE_Status_t SC_ManageRtsTable(int32 ArrayIndex);

/**
* \brief Manage pending update to an ATS table
Expand All @@ -88,9 +91,12 @@ void SC_ManageRtsTable(int32 ArrayIndex);
*
* \param [in] ArrayIndex index into array of ATS tables
*
* \return CFE_SUCCESS on success, a non-negative informational return
* code (e.g. CFE_TBL_INFO_UPDATED) or a (negative) error code
*
* \sa #SC_ManageTableCmd
*/
void SC_ManageAtsTable(int32 ArrayIndex);
CFE_Status_t SC_ManageAtsTable(int32 ArrayIndex);

/**
* \brief Manage pending update to a table
Expand All @@ -105,9 +111,12 @@ void SC_ManageAtsTable(int32 ArrayIndex);
* \par Assumptions, External Events, and Notes:
* None
*
* \return CFE_SUCCESS on success, a non-negative informational return
* code (e.g. CFE_TBL_INFO_UPDATED) or a (negative) error code
*
* \sa #SC_ManageTableCmd
*/
void SC_ManageTable(SC_TableType type, int32 ArrayIndex);
CFE_Status_t SC_ManageTable(SC_TableType type, int32 ArrayIndex);

/**
* \brief Sends out an Event message
Expand Down
7 changes: 4 additions & 3 deletions fsw/src/sc_rtsrq.c
Original file line number Diff line number Diff line change
Expand Up @@ -367,8 +367,8 @@ void SC_DisableRtsCmd(const SC_DisableRtsCmd_t *Cmd)
/* update the command status */
SC_OperData.HkPacket.Payload.CmdCtr++;

CFE_EVS_SendEvent(SC_DISABLE_RTS_DEB_EID, CFE_EVS_EventType_DEBUG, "Disabled RTS %03u",
SC_IDNUM_AS_UINT(RtsNum));
CFE_EVS_SendEvent(SC_DISABLE_RTS_INF_EID, CFE_EVS_EventType_INFORMATION,
"Disabled RTS %03u", SC_IDNUM_AS_UINT(RtsNum));
}
else
{ /* it is not a valid RTS id */
Expand Down Expand Up @@ -458,7 +458,8 @@ void SC_EnableRtsCmd(const SC_EnableRtsCmd_t *Cmd)
/* update the command status */
SC_OperData.HkPacket.Payload.CmdCtr++;

CFE_EVS_SendEvent(SC_ENABLE_RTS_DEB_EID, CFE_EVS_EventType_DEBUG, "Enabled RTS %03u", SC_IDNUM_AS_UINT(RtsNum));
CFE_EVS_SendEvent(SC_ENABLE_RTS_INF_EID, CFE_EVS_EventType_INFORMATION,
"Enabled RTS %03u", SC_IDNUM_AS_UINT(RtsNum));
}
else
{ /* it is not a valid RTS id */
Expand Down
6 changes: 4 additions & 2 deletions unit-test/sc_atsrq_tests.c
Original file line number Diff line number Diff line change
Expand Up @@ -952,7 +952,8 @@ void ContinueAtsOnFailureCmd_Test_Nominal(void)
UtAssert_BOOL_TRUE(SC_OperData.HkPacket.Payload.ContinueAtsOnFailureFlag);
UtAssert_True(SC_OperData.HkPacket.Payload.CmdCtr == 1, "SC_OperData.HkPacket.Payload.CmdCtr == 1");

UtAssert_INT32_EQ(context_CFE_EVS_SendEvent[0].EventID, SC_CONT_CMD_DEB_EID);
UtAssert_INT32_EQ(context_CFE_EVS_SendEvent[0].EventID,
SC_CONT_CMD_INF_EID);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
}

Expand All @@ -974,7 +975,8 @@ void ContinueAtsOnFailureCmd_Test_FalseState(void)
"SC_OperData.HkPacket.Payload.ContinueAtsOnFailureFlag == false");
UtAssert_True(SC_OperData.HkPacket.Payload.CmdCtr == 1, "SC_OperData.HkPacket.Payload.CmdCtr == 1");

UtAssert_INT32_EQ(context_CFE_EVS_SendEvent[0].EventID, SC_CONT_CMD_DEB_EID);
UtAssert_INT32_EQ(context_CFE_EVS_SendEvent[0].EventID,
SC_CONT_CMD_INF_EID);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
}

Expand Down
Loading

0 comments on commit 32ade75

Please sign in to comment.