diff --git a/CMakeLists.txt b/CMakeLists.txt
index f0d128ef..fd53722c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -14,6 +14,7 @@ set(APP_SRC_FILES
fsw/src/cf_codec.c
fsw/src/cf_cmd.c
fsw/src/cf_crc.c
+ fsw/src/cf_dispatch.c
fsw/src/cf_timer.c
fsw/src/cf_utils.c
)
diff --git a/config/default_cf_extern_typedefs.h b/config/default_cf_extern_typedefs.h
index a5c5e3db..75db27be 100644
--- a/config/default_cf_extern_typedefs.h
+++ b/config/default_cf_extern_typedefs.h
@@ -26,7 +26,8 @@
#ifndef CF_EXTERN_TYPEDEFS_H
#define CF_EXTERN_TYPEDEFS_H
-#include "cf_platform_cfg.h"
+/* constants such as CF_FILENAME_MAX_LEN are in mission_cfg.h */
+#include "cf_mission_cfg.h"
/**
* @brief Values for CFDP file transfer class
@@ -70,4 +71,46 @@ typedef struct CF_TxnFilenames
char dst_filename[CF_FILENAME_MAX_LEN];
} CF_TxnFilenames_t;
+/**
+ * @brief Entity id size
+ *
+ * @par Description:
+ * The maximum size of the entity id as expected for all CFDP packets.
+ * CF supports the spec's variable size of EID, where the actual size is
+ * selected at runtime, and therefore the size in CFDP PDUs may be smaller
+ * than the size specified here. This type only establishes the maximum
+ * size (and therefore maximum value) that an EID may be.
+ *
+ * @note This type is used in several CF commands, and so changing the size
+ * of this type will affect the following structs:
+ * CF_ConfigTable_t, configuration table - will change size of file
+ * CF_ConfigPacket_t, set config params command
+ * CF_TxFileCmd_t, transmit file command
+ * CF_PlaybackDirCmd_t, equivalent to above
+ * CF_Transaction_Payload_t, any command that selects a transaction based on EID
+ *
+ * @par Limits
+ * Must be one of uint8, uint16, uint32, uint64.
+ */
+typedef uint32 CF_EntityId_t;
+
+/**
+ * @brief transaction sequence number size
+ *
+ * @par Description:
+ * The max size of the transaction sequence number as expected for all CFDP packets.
+ * CF supports the spec's variable size of TSN, where the actual size is
+ * selected at runtime, and therefore the size in CFDP PDUs may be smaller
+ * than the size specified here. This type only establishes the maximum
+ * size (and therefore maximum value) that a TSN may be.
+ *
+ * @note This type is used in several CF commands, and so changing the size
+ * of this type will affect the following structure:
+ * CF_Transaction_Payload_t, any command that selects a transaction based on TSN
+ *
+ * @par Limits
+ * Must be one of uint8, uint16, uint32, uint64.
+ */
+typedef uint32 CF_TransactionSeq_t;
+
#endif /* CF_EXTERN_TYPEDEFS_H */
diff --git a/config/default_cf_fcncodes.h b/config/default_cf_fcncodes.h
index f7da5030..7e946e8c 100644
--- a/config/default_cf_fcncodes.h
+++ b/config/default_cf_fcncodes.h
@@ -400,9 +400,9 @@ typedef enum
* \par Criticality
* None
*
- * \sa #CF_GET_MIB_PARAM_CC
+ * \sa #CF_GET_PARAM_CC
*/
- CF_SET_MIB_PARAM_CC = 10,
+ CF_SET_PARAM_CC = 10,
/**
* \brief Get parameter
@@ -431,9 +431,9 @@ typedef enum
* \par Criticality
* None
*
- * \sa #CF_SET_MIB_PARAM_CC
+ * \sa #CF_SET_PARAM_CC
*/
- CF_GET_MIB_PARAM_CC = 11,
+ CF_GET_PARAM_CC = 11,
/**
* \brief Write queue
diff --git a/config/default_cf_interface_cfg.h b/config/default_cf_interface_cfg.h
index bb250711..4fab3120 100644
--- a/config/default_cf_interface_cfg.h
+++ b/config/default_cf_interface_cfg.h
@@ -41,48 +41,6 @@
* \{
*/
-/**
- * @brief Entity id size
- *
- * @par Description:
- * The maximum size of the entity id as expected for all CFDP packets.
- * CF supports the spec's variable size of EID, where the actual size is
- * selected at runtime, and therefore the size in CFDP PDUs may be smaller
- * than the size specified here. This type only establishes the maximum
- * size (and therefore maximum value) that an EID may be.
- *
- * @note This type is used in several CF commands, and so changing the size
- * of this type will affect the following structs:
- * CF_ConfigTable_t, configuration table - will change size of file
- * CF_ConfigPacket_t, set config params command
- * CF_TxFileCmd_t, transmit file command
- * CF_PlaybackDirCmd_t, equivalent to above
- * CF_Transaction_Payload_t, any command that selects a transaction based on EID
- *
- * @par Limits
- * Must be one of uint8, uint16, uint32, uint64.
- */
-typedef uint32 CF_EntityId_t;
-
-/**
- * @brief transaction sequence number size
- *
- * @par Description:
- * The max size of the transaction sequence number as expected for all CFDP packets.
- * CF supports the spec's variable size of TSN, where the actual size is
- * selected at runtime, and therefore the size in CFDP PDUs may be smaller
- * than the size specified here. This type only establishes the maximum
- * size (and therefore maximum value) that a TSN may be.
- *
- * @note This type is used in several CF commands, and so changing the size
- * of this type will affect the following structure:
- * CF_Transaction_Payload_t, any command that selects a transaction based on TSN
- *
- * @par Limits
- * Must be one of uint8, uint16, uint32, uint64.
- */
-typedef uint32 CF_TransactionSeq_t;
-
/**
* @brief Number of channels
*
@@ -108,20 +66,6 @@ typedef uint32 CF_TransactionSeq_t;
*/
#define CF_NAK_MAX_SEGMENTS (58)
-/**
- * @brief Total number of chunks (tx, rx, all channels)
- *
- * @par Description:
- * Must be equal to the sum of all values input in CF_CHANNEL_NUM_RX_CHUNKS_PER_TRANSACTION
- * and CF_CHANNEL_NUM_TX_CHUNKS_PER_TRANSACTION.
- *
- * @par Limits:
- *
- */
-/* CF_TOTAL_CHUNKS must be equal to the total number of chunks per rx/tx transactions per channel */
-/* (in other words, the summation of all elements in CF_CHANNEL_NUM_R/TX_CHUNKS_PER_TRANSACTION */
-#define CF_TOTAL_CHUNKS (CF_NAK_MAX_SEGMENTS * 4)
-
/**
* @brief Max number of polling directories per channel.
*
@@ -158,14 +102,6 @@ typedef uint32 CF_TransactionSeq_t;
*/
#define CF_FILENAME_MAX_NAME CFE_MISSION_MAX_FILE_LEN
-/**
- * @brief Maximum file path (not including file name)
- *
- * @par Limits:
- *
- */
-#define CF_FILENAME_MAX_PATH (CFE_MISSION_MAX_PATH_LEN - CFE_MISSION_MAX_FILE_LEN)
-
/**
* @brief Max filename and path length.
*
@@ -196,22 +132,6 @@ typedef uint32 CF_TransactionSeq_t;
*/
#define CF_PDU_ENCAPSULATION_EXTRA_TRAILING_BYTES 0
-/**
- * \brief Mission specific version number
- *
- * \par Description:
- * An application version number consists of four parts:
- * major version number, minor version number, revision
- * number and mission specific revision number. The mission
- * specific revision number is defined here such
- * that missions can manage as a configuration definition
- *
- * \par Limits:
- * Must be defined as a numeric value that is greater than
- * or equal to zero.
- */
-#define CF_MISSION_REV 0
-
/**\}*/
#endif
diff --git a/config/default_cf_mission_cfg.h b/config/default_cf_mission_cfg.h
index 12e35876..6c0efa5a 100644
--- a/config/default_cf_mission_cfg.h
+++ b/config/default_cf_mission_cfg.h
@@ -34,4 +34,12 @@
#include "cf_interface_cfg.h"
+/**
+ * @brief Maximum file path (not including file name)
+ *
+ * @par Limits:
+ *
+ */
+#define CF_FILENAME_MAX_PATH (CFE_MISSION_MAX_PATH_LEN - CFE_MISSION_MAX_FILE_LEN)
+
#endif
diff --git a/config/default_cf_msgdefs.h b/config/default_cf_msgdefs.h
index 5b8b644d..f21b5f03 100644
--- a/config/default_cf_msgdefs.h
+++ b/config/default_cf_msgdefs.h
@@ -212,7 +212,7 @@ typedef enum
/**
* \brief Get parameter command structure
*
- * For command details see #CF_GET_MIB_PARAM_CC
+ * For command details see #CF_GET_PARAM_CC
*/
typedef struct CF_GetParam_Payload
{
@@ -223,7 +223,7 @@ typedef struct CF_GetParam_Payload
/**
* \brief Set parameter command structure
*
- * For command details see #CF_SET_MIB_PARAM_CC
+ * For command details see #CF_SET_PARAM_CC
*/
typedef struct CF_SetParam_Payload
{
diff --git a/config/default_cf_msgstruct.h b/config/default_cf_msgstruct.h
index b789d9f6..93367f56 100644
--- a/config/default_cf_msgstruct.h
+++ b/config/default_cf_msgstruct.h
@@ -187,7 +187,7 @@ typedef struct CF_PurgeQueueCmd
/**
* \brief Get parameter command structure
*
- * For command details see #CF_GET_MIB_PARAM_CC
+ * For command details see #CF_GET_PARAM_CC
*/
typedef struct CF_GetParamCmd
{
@@ -198,7 +198,7 @@ typedef struct CF_GetParamCmd
/**
* \brief Set parameter command structure
*
- * For command details see #CF_SET_MIB_PARAM_CC
+ * For command details see #CF_SET_PARAM_CC
*/
typedef struct CF_SetParamCmd
{
@@ -283,6 +283,26 @@ typedef struct CF_AbandonCmd
CF_Transaction_Payload_t Payload;
} CF_AbandonCmd_t;
+/**
+ * \brief Send Housekeeping Command
+ *
+ * Internal notification from SCH with no payload
+ */
+typedef struct CF_SendHkCmd
+{
+ CFE_MSG_CommandHeader_t CommandHeader; /**< \brief Command header */
+} CF_SendHkCmd_t;
+
+/**
+ * \brief Wake Up Command
+ *
+ * Internal notification from SCH with no payload
+ */
+typedef struct CF_WakeupCmd
+{
+ CFE_MSG_CommandHeader_t CommandHeader; /**< \brief Command header */
+} CF_WakeupCmd_t;
+
/**\}*/
#endif
diff --git a/config/default_cf_platform_cfg.h b/config/default_cf_platform_cfg.h
index 53641d00..1580a393 100644
--- a/config/default_cf_platform_cfg.h
+++ b/config/default_cf_platform_cfg.h
@@ -39,4 +39,34 @@
#include "cf_mission_cfg.h"
#include "cf_internal_cfg.h"
+/**
+ * @brief Total number of chunks (tx, rx, all channels)
+ *
+ * @par Description:
+ * Must be equal to the sum of all values input in CF_CHANNEL_NUM_RX_CHUNKS_PER_TRANSACTION
+ * and CF_CHANNEL_NUM_TX_CHUNKS_PER_TRANSACTION.
+ *
+ * @par Limits:
+ *
+ */
+/* CF_TOTAL_CHUNKS must be equal to the total number of chunks per rx/tx transactions per channel */
+/* (in other words, the summation of all elements in CF_CHANNEL_NUM_R/TX_CHUNKS_PER_TRANSACTION */
+#define CF_TOTAL_CHUNKS (CF_NAK_MAX_SEGMENTS * 4)
+
+/**
+ * \brief Mission specific version number
+ *
+ * \par Description:
+ * An application version number consists of four parts:
+ * major version number, minor version number, revision
+ * number and mission specific revision number. The mission
+ * specific revision number is defined here such
+ * that missions can manage as a configuration definition
+ *
+ * \par Limits:
+ * Must be defined as a numeric value that is greater than
+ * or equal to zero.
+ */
+#define CF_MISSION_REV 0
+
#endif
diff --git a/docs/dox_src/cfs_cf.dox b/docs/dox_src/cfs_cf.dox
index b7a6b79d..0d5d9138 100644
--- a/docs/dox_src/cfs_cf.dox
+++ b/docs/dox_src/cfs_cf.dox
@@ -960,7 +960,7 @@ CF_UnionArgs_Payload_t;
Set MIB Parameter Command
The CF Set MIB Parameter command is sent to CF using message ID #CF_CMD_MID
- with command code #CF_SET_MIB_PARAM_CC. This command is used to change the
+ with command code #CF_SET_PARAM_CC. This command is used to change the
flight engine Message Information Base (MIB). The MIB is a term used in the
CCSDS blue book that can be interpreted as the engine configuration
parameters. The command has two command parameters, Param indicates which
@@ -1001,7 +1001,7 @@ CF_UnionArgs_Payload_t;
Get MIB Parameter Command
The CF Set MIB Parameter command is sent to CF using message ID #CF_CMD_MID
- with command code #CF_GET_MIB_PARAM_CC. This command is used to view a single
+ with command code #CF_GET_PARAM_CC. This command is used to view a single
Message Information Base (MIB) parameter. The MIB is a term used in the CCSDS
blue book that can be interpreted as the engine configuration parameters.
diff --git a/fsw/inc/cf_events.h b/fsw/inc/cf_events.h
index 8d0d51d0..bd12f644 100644
--- a/fsw/inc/cf_events.h
+++ b/fsw/inc/cf_events.h
@@ -132,7 +132,7 @@
*
* Invalid message ID received on the software bus pipe
*/
-#define CF_EID_ERR_INIT_CMD_LENGTH (28)
+#define CF_EID_ERR_INVALID_MID (28)
/**
* \brief CF SB Receive Buffer Failed Event ID
@@ -372,7 +372,7 @@
*
* Can be induced via various off-nominal conditions - such as sending a META-data PDU
* with an invalid file destination.
- *
+ *
*/
#define CF_EID_DBG_RESET_FREED_XACT (59)
diff --git a/fsw/src/cf_app.c b/fsw/src/cf_app.c
index dc1bf5d0..3a0a5a47 100644
--- a/fsw/src/cf_app.c
+++ b/fsw/src/cf_app.c
@@ -32,24 +32,13 @@
#include "cf_perfids.h"
#include "cf_cfdp.h"
#include "cf_version.h"
-#include "cf_cmd.h"
+#include "cf_dispatch.h"
+#include "cf_tbl.h"
#include
CF_AppData_t CF_AppData;
-/*----------------------------------------------------------------
- *
- * Application-scope internal function
- * See description in cf_app.h for argument/return detail
- *
- *-----------------------------------------------------------------*/
-void CF_HkCmd(void)
-{
- CFE_MSG_SetMsgTime(CFE_MSG_PTR(CF_AppData.hk.TelemetryHeader), CFE_TIME_GetTime());
- /* return value ignored */ CFE_SB_TransmitMsg(CFE_MSG_PTR(CF_AppData.hk.TelemetryHeader), true);
-}
-
/*----------------------------------------------------------------
*
* Application-scope internal function
@@ -199,9 +188,9 @@ CFE_Status_t CF_TableInit(void)
*-----------------------------------------------------------------*/
CFE_Status_t CF_Init(void)
{
- CFE_Status_t status;
- static const CFE_SB_MsgId_Atom_t MID_VALUES[] = {CF_CMD_MID, CF_SEND_HK_MID, CF_WAKE_UP_MID};
- uint32 i;
+ CFE_Status_t status;
+ const CFE_SB_MsgId_Atom_t MID_VALUES[] = {CF_CMD_MID, CF_SEND_HK_MID, CF_WAKE_UP_MID};
+ uint32 i;
CF_AppData.run_status = CFE_ES_RunStatus_APP_RUN;
@@ -260,54 +249,6 @@ CFE_Status_t CF_Init(void)
return status;
}
-/*----------------------------------------------------------------
- *
- * Application-scope internal function
- * See description in cf_app.h for argument/return detail
- *
- *-----------------------------------------------------------------*/
-void CF_WakeUp(void)
-{
- CFE_ES_PerfLogEntry(CF_PERF_ID_CYCLE_ENG);
- CF_CFDP_CycleEngine();
- CFE_ES_PerfLogExit(CF_PERF_ID_CYCLE_ENG);
-}
-
-/*----------------------------------------------------------------
- *
- * Application-scope internal function
- * See description in cf_app.h for argument/return detail
- *
- *-----------------------------------------------------------------*/
-void CF_ProcessMsg(CFE_SB_Buffer_t *msg)
-{
- CFE_SB_MsgId_t msg_id = CFE_SB_INVALID_MSG_ID;
-
- CFE_MSG_GetMsgId(&msg->Msg, &msg_id);
-
- switch (CFE_SB_MsgIdToValue(msg_id))
- {
- case CF_CMD_MID:
- CF_ProcessGroundCommand(msg);
- break;
-
- case CF_WAKE_UP_MID:
- CF_WakeUp();
- break;
-
- case CF_SEND_HK_MID:
- CF_HkCmd();
- CF_CheckTables();
- break;
-
- default:
- ++CF_AppData.hk.Payload.counters.err;
- CFE_EVS_SendEvent(CF_EID_ERR_INIT_CMD_LENGTH, CFE_EVS_EventType_ERROR,
- "CF: invalid command packet id=0x%lx", (unsigned long)CFE_SB_MsgIdToValue(msg_id));
- break;
- }
-}
-
/*----------------------------------------------------------------
*
* Entry point function
@@ -342,7 +283,7 @@ void CF_AppMain(void)
*/
if (status == CFE_SUCCESS && msg != NULL)
{
- CF_ProcessMsg(msg);
+ CF_AppPipe(msg);
}
else if (status != CFE_SB_TIME_OUT && status != CFE_SB_NO_MESSAGE)
{
diff --git a/fsw/src/cf_app.h b/fsw/src/cf_app.h
index c79170d7..ba18a9ae 100644
--- a/fsw/src/cf_app.h
+++ b/fsw/src/cf_app.h
@@ -32,6 +32,7 @@
#include "cf_tbl.h"
#include "cf_msgids.h"
#include "cf_tbldefs.h"
+#include "cf_mission_cfg.h"
#include "cf_platform_cfg.h"
#include "cf_cfdp.h"
#include "cf_clist.h"
@@ -107,17 +108,6 @@ extern CF_AppData_t CF_AppData;
**
**************************************************************************/
-/************************************************************************/
-/** @brief Send CF housekeeping packet
- *
- * @par Description
- * The command to send the CF housekeeping packet
- *
- * @par Assumptions, External Events, and Notes:
- * None
- */
-void CF_HkCmd(void);
-
/************************************************************************/
/** @brief Checks to see if a table update is pending, and perform it.
*
@@ -175,32 +165,6 @@ CFE_Status_t CF_TableInit(void);
*/
CFE_Status_t CF_Init(void);
-/************************************************************************/
-/** @brief CF wakeup function
- *
- * @par Description
- * Performs a single engine cycle for each wakeup
- *
- * @par Assumptions, External Events, and Notes:
- * None
- *
- */
-void CF_WakeUp(void);
-
-/************************************************************************/
-/** @brief CF message processing function
- *
- * @par Description
- * Process message packets received via the Software Bus command pipe
- *
- * @par Assumptions, External Events, and Notes:
- * msg must not be NULL.
- *
- * @param[in] msg Software Bus message pointer
- *
- */
-void CF_ProcessMsg(CFE_SB_Buffer_t *msg);
-
/************************************************************************/
/** @brief CF app entry point
*
diff --git a/fsw/src/cf_cfdp_types.h b/fsw/src/cf_cfdp_types.h
index 188fd76f..3b3f2b30 100644
--- a/fsw/src/cf_cfdp_types.h
+++ b/fsw/src/cf_cfdp_types.h
@@ -33,6 +33,7 @@
#include "common_types.h"
#include "cf_cfdp_pdu.h"
+#include "cf_extern_typedefs.h"
#include "cf_platform_cfg.h"
#include "cf_msg.h"
#include "cf_clist.h"
diff --git a/fsw/src/cf_cmd.c b/fsw/src/cf_cmd.c
index 26020994..86fcaf39 100644
--- a/fsw/src/cf_cmd.c
+++ b/fsw/src/cf_cmd.c
@@ -32,6 +32,7 @@
#include "cf_perfids.h"
#include "cf_utils.h"
#include "cf_version.h"
+#include "cf_platform_cfg.h"
#include "cf_cfdp.h"
#include "cf_cmd.h"
@@ -44,11 +45,14 @@
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_NoopCmd(const CF_NoopCmd_t *msg)
+CFE_Status_t CF_NoopCmd(const CF_NoopCmd_t *msg)
{
CFE_EVS_SendEvent(CF_NOOP_INF_EID, CFE_EVS_EventType_INFORMATION, "CF: No-Op received, Version %d.%d.%d.%d",
CF_MAJOR_VERSION, CF_MINOR_VERSION, CF_REVISION, CF_MISSION_REV);
+
++CF_AppData.hk.Payload.counters.cmd;
+
+ return CFE_SUCCESS;
}
/*----------------------------------------------------------------
@@ -57,7 +61,7 @@ void CF_NoopCmd(const CF_NoopCmd_t *msg)
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_ResetCmd(const CF_ResetCmd_t *msg)
+CFE_Status_t CF_ResetCmd(const CF_ResetCmd_t *msg)
{
const CF_UnionArgs_Payload_t *data = &msg->Payload;
static const char * names[5] = {"all", "cmd", "fault", "up", "down"};
@@ -117,6 +121,8 @@ void CF_ResetCmd(const CF_ResetCmd_t *msg)
++CF_AppData.hk.Payload.counters.cmd;
}
}
+
+ return CFE_SUCCESS;
}
/*----------------------------------------------------------------
@@ -125,7 +131,7 @@ void CF_ResetCmd(const CF_ResetCmd_t *msg)
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_TxFileCmd(const CF_TxFileCmd_t *msg)
+CFE_Status_t CF_TxFileCmd(const CF_TxFileCmd_t *msg)
{
const CF_TxFile_Payload_t *tx = &msg->Payload;
@@ -141,7 +147,9 @@ void CF_TxFileCmd(const CF_TxFileCmd_t *msg)
"CF: bad parameter in CF_TxFileCmd(): chan=%u, class=%u keep=%u", (unsigned int)tx->chan_num,
(unsigned int)tx->cfdp_class, (unsigned int)tx->keep);
++CF_AppData.hk.Payload.counters.err;
- return;
+
+ /* This must return CFE_SUCCESS because the command is done (error counter was incremented, no more events) */
+ return CFE_SUCCESS;
}
#ifdef jphfix
@@ -162,6 +170,8 @@ void CF_TxFileCmd(const CF_TxFileCmd_t *msg)
CFE_EVS_SendEvent(CF_EID_ERR_CMD_TX_FILE, CFE_EVS_EventType_ERROR, "CF: file transfer initiation failed");
++CF_AppData.hk.Payload.counters.err;
}
+
+ return CFE_SUCCESS;
}
/*----------------------------------------------------------------
@@ -170,7 +180,7 @@ void CF_TxFileCmd(const CF_TxFileCmd_t *msg)
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_PlaybackDirCmd(const CF_PlaybackDirCmd_t *msg)
+CFE_Status_t CF_PlaybackDirCmd(const CF_PlaybackDirCmd_t *msg)
{
const CF_TxFile_Payload_t *tx = &msg->Payload;
@@ -186,7 +196,9 @@ void CF_PlaybackDirCmd(const CF_PlaybackDirCmd_t *msg)
"CF: bad parameter in CF_PlaybackDirCmd(): chan=%u, class=%u keep=%u",
(unsigned int)tx->chan_num, (unsigned int)tx->cfdp_class, (unsigned int)tx->keep);
++CF_AppData.hk.Payload.counters.err;
- return;
+
+ /* This must return CFE_SUCCESS because the command is done (error counter was incremented, no more events) */
+ return CFE_SUCCESS;
}
#ifdef jphfix
@@ -208,6 +220,8 @@ void CF_PlaybackDirCmd(const CF_PlaybackDirCmd_t *msg)
"CF: directory playback initiation failed");
++CF_AppData.hk.Payload.counters.err;
}
+
+ return CFE_SUCCESS;
}
/*----------------------------------------------------------------
@@ -266,7 +280,7 @@ CF_ChanAction_Status_t CF_DoFreezeThaw(uint8 chan_num, void *arg)
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_FreezeCmd(const CF_FreezeCmd_t *msg)
+CFE_Status_t CF_FreezeCmd(const CF_FreezeCmd_t *msg)
{
CF_ChanAction_BoolArg_t barg = {1}; /* param is frozen, so 1 means freeze */
@@ -280,6 +294,8 @@ void CF_FreezeCmd(const CF_FreezeCmd_t *msg)
CFE_EVS_SendEvent(CF_EID_ERR_CMD_FREEZE, CFE_EVS_EventType_ERROR, "CF: freeze cmd failed");
++CF_AppData.hk.Payload.counters.err;
}
+
+ return CFE_SUCCESS;
}
/*----------------------------------------------------------------
@@ -288,7 +304,7 @@ void CF_FreezeCmd(const CF_FreezeCmd_t *msg)
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_ThawCmd(const CF_ThawCmd_t *msg)
+CFE_Status_t CF_ThawCmd(const CF_ThawCmd_t *msg)
{
CF_ChanAction_BoolArg_t barg = {0}; /* param is frozen, so 0 means thawed */
@@ -302,6 +318,8 @@ void CF_ThawCmd(const CF_ThawCmd_t *msg)
CFE_EVS_SendEvent(CF_EID_ERR_CMD_THAW, CFE_EVS_EventType_ERROR, "CF: thaw cmd failed");
++CF_AppData.hk.Payload.counters.err;
}
+
+ return CFE_SUCCESS;
}
/*----------------------------------------------------------------
@@ -446,9 +464,10 @@ void CF_DoSuspRes(const CF_Transaction_Payload_t *payload, uint8 action)
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_SuspendCmd(const CF_SuspendCmd_t *msg)
+CFE_Status_t CF_SuspendCmd(const CF_SuspendCmd_t *msg)
{
CF_DoSuspRes(&msg->Payload, 1);
+ return CFE_SUCCESS;
}
/*----------------------------------------------------------------
@@ -457,9 +476,10 @@ void CF_SuspendCmd(const CF_SuspendCmd_t *msg)
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_ResumeCmd(const CF_ResumeCmd_t *msg)
+CFE_Status_t CF_ResumeCmd(const CF_ResumeCmd_t *msg)
{
CF_DoSuspRes(&msg->Payload, 0);
+ return CFE_SUCCESS;
}
/*----------------------------------------------------------------
@@ -479,7 +499,7 @@ void CF_CmdCancel_Txn(CF_Transaction_t *txn, void *ignored)
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_CancelCmd(const CF_CancelCmd_t *msg)
+CFE_Status_t CF_CancelCmd(const CF_CancelCmd_t *msg)
{
if (CF_TsnChanAction(&msg->Payload, "cancel", CF_CmdCancel_Txn, NULL) > 0)
{
@@ -493,6 +513,8 @@ void CF_CancelCmd(const CF_CancelCmd_t *msg)
CFE_EVS_SendEvent(CF_EID_ERR_CMD_CANCEL_CHAN, CFE_EVS_EventType_ERROR, "CF: cancel cmd: no transaction found");
++CF_AppData.hk.Payload.counters.err;
}
+
+ return CFE_SUCCESS;
}
/*----------------------------------------------------------------
@@ -512,7 +534,7 @@ void CF_CmdAbandon_Txn(CF_Transaction_t *txn, void *ignored)
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_AbandonCmd(const CF_AbandonCmd_t *msg)
+CFE_Status_t CF_AbandonCmd(const CF_AbandonCmd_t *msg)
{
if (CF_TsnChanAction(&msg->Payload, "abandon", CF_CmdAbandon_Txn, NULL) > 0)
{
@@ -526,6 +548,8 @@ void CF_AbandonCmd(const CF_AbandonCmd_t *msg)
"CF: abandon cmd: no transaction found");
++CF_AppData.hk.Payload.counters.err;
}
+
+ return CFE_SUCCESS;
}
/*----------------------------------------------------------------
@@ -548,7 +572,7 @@ CF_ChanAction_Status_t CF_DoEnableDisableDequeue(uint8 chan_num, void *arg)
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_EnableDequeueCmd(const CF_EnableDequeueCmd_t *msg)
+CFE_Status_t CF_EnableDequeueCmd(const CF_EnableDequeueCmd_t *msg)
{
CF_ChanAction_BoolArg_t barg = {1};
@@ -563,6 +587,8 @@ void CF_EnableDequeueCmd(const CF_EnableDequeueCmd_t *msg)
CFE_EVS_SendEvent(CF_EID_ERR_CMD_ENABLE_DEQUEUE, CFE_EVS_EventType_ERROR, "CF: enable dequeue cmd failed");
++CF_AppData.hk.Payload.counters.err;
}
+
+ return CFE_SUCCESS;
}
/*----------------------------------------------------------------
@@ -571,7 +597,7 @@ void CF_EnableDequeueCmd(const CF_EnableDequeueCmd_t *msg)
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_DisableDequeueCmd(const CF_DisableDequeueCmd_t *msg)
+CFE_Status_t CF_DisableDequeueCmd(const CF_DisableDequeueCmd_t *msg)
{
CF_ChanAction_BoolArg_t barg = {0};
@@ -586,6 +612,8 @@ void CF_DisableDequeueCmd(const CF_DisableDequeueCmd_t *msg)
CFE_EVS_SendEvent(CF_EID_ERR_CMD_DISABLE_DEQUEUE, CFE_EVS_EventType_ERROR, "CF: disable dequeue cmd failed");
++CF_AppData.hk.Payload.counters.err;
}
+
+ return CFE_SUCCESS;
}
/*----------------------------------------------------------------
@@ -627,7 +655,7 @@ CF_ChanAction_Status_t CF_DoEnableDisablePolldir(uint8 chan_num, void *arg)
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_EnablePolldirCmd(const CF_EnableDirPollingCmd_t *msg)
+CFE_Status_t CF_EnableDirPollingCmd(const CF_EnableDirPollingCmd_t *msg)
{
CF_ChanAction_BoolMsgArg_t barg = {&msg->Payload, 1};
@@ -644,6 +672,8 @@ void CF_EnablePolldirCmd(const CF_EnableDirPollingCmd_t *msg)
"CF: enable polling directory cmd failed");
++CF_AppData.hk.Payload.counters.err;
}
+
+ return CFE_SUCCESS;
}
/*----------------------------------------------------------------
@@ -652,7 +682,7 @@ void CF_EnablePolldirCmd(const CF_EnableDirPollingCmd_t *msg)
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_DisablePolldirCmd(const CF_DisableDirPollingCmd_t *msg)
+CFE_Status_t CF_DisableDirPollingCmd(const CF_DisableDirPollingCmd_t *msg)
{
CF_ChanAction_BoolMsgArg_t barg = {&msg->Payload, 0};
@@ -669,6 +699,8 @@ void CF_DisablePolldirCmd(const CF_DisableDirPollingCmd_t *msg)
"CF: disable polling directory cmd failed");
++CF_AppData.hk.Payload.counters.err;
}
+
+ return CFE_SUCCESS;
}
/*----------------------------------------------------------------
@@ -755,7 +787,7 @@ CF_ChanAction_Status_t CF_DoPurgeQueue(uint8 chan_num, void *arg)
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_PurgeQueueCmd(const CF_PurgeQueueCmd_t *msg)
+CFE_Status_t CF_PurgeQueueCmd(const CF_PurgeQueueCmd_t *msg)
{
CF_ChanAction_MsgArg_t arg = {&msg->Payload};
if (CF_ChanAction_Status_IS_SUCCESS(CF_DoChanAction(&msg->Payload, "purge_queue", CF_DoPurgeQueue, &arg)))
@@ -768,6 +800,8 @@ void CF_PurgeQueueCmd(const CF_PurgeQueueCmd_t *msg)
CFE_EVS_SendEvent(CF_EID_ERR_CMD_PURGE_QUEUE, CFE_EVS_EventType_ERROR, "CF: purge queue cmd failed");
++CF_AppData.hk.Payload.counters.err;
}
+
+ return CFE_SUCCESS;
}
/*----------------------------------------------------------------
@@ -776,7 +810,7 @@ void CF_PurgeQueueCmd(const CF_PurgeQueueCmd_t *msg)
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_WriteQueueCmd(const CF_WriteQueueCmd_t *msg)
+CFE_Status_t CF_WriteQueueCmd(const CF_WriteQueueCmd_t *msg)
{
const CF_WriteQueue_Payload_t *wq = &msg->Payload;
@@ -902,6 +936,8 @@ void CF_WriteQueueCmd(const CF_WriteQueueCmd_t *msg)
CFE_EVS_SendEvent(CF_EID_INF_CMD_WQ, CFE_EVS_EventType_INFORMATION, "CF: write queue successful");
++CF_AppData.hk.Payload.counters.cmd;
}
+
+ return CFE_SUCCESS;
}
/*----------------------------------------------------------------
@@ -1100,11 +1136,13 @@ void CF_GetSetParamCmd(uint8 is_set, CF_GetSet_ValueID_t param_id, uint32 value,
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_SetParamCmd(const CF_SetParamCmd_t *msg)
+CFE_Status_t CF_SetParamCmd(const CF_SetParamCmd_t *msg)
{
const CF_SetParam_Payload_t *cmd = &msg->Payload;
CF_GetSetParamCmd(1, cmd->key, cmd->value, cmd->chan_num);
+
+ return CFE_SUCCESS;
}
/*----------------------------------------------------------------
@@ -1113,11 +1151,13 @@ void CF_SetParamCmd(const CF_SetParamCmd_t *msg)
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_GetParamCmd(const CF_GetParamCmd_t *msg)
+CFE_Status_t CF_GetParamCmd(const CF_GetParamCmd_t *msg)
{
const CF_GetParam_Payload_t *cmd = &msg->Payload;
CF_GetSetParamCmd(0, cmd->key, 0, cmd->chan_num);
+
+ return CFE_SUCCESS;
}
/*----------------------------------------------------------------
@@ -1126,7 +1166,7 @@ void CF_GetParamCmd(const CF_GetParamCmd_t *msg)
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_EnableEngineCmd(const CF_EnableEngineCmd_t *msg)
+CFE_Status_t CF_EnableEngineCmd(const CF_EnableEngineCmd_t *msg)
{
if (!CF_AppData.engine.enabled)
{
@@ -1148,6 +1188,8 @@ void CF_EnableEngineCmd(const CF_EnableEngineCmd_t *msg)
"CF: received enable engine command while engine already enabled");
++CF_AppData.hk.Payload.counters.err;
}
+
+ return CFE_SUCCESS;
}
/*----------------------------------------------------------------
@@ -1156,7 +1198,7 @@ void CF_EnableEngineCmd(const CF_EnableEngineCmd_t *msg)
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_DisableEngineCmd(const CF_DisableEngineCmd_t *msg)
+CFE_Status_t CF_DisableEngineCmd(const CF_DisableEngineCmd_t *msg)
{
if (CF_AppData.engine.enabled)
{
@@ -1170,102 +1212,38 @@ void CF_DisableEngineCmd(const CF_DisableEngineCmd_t *msg)
"CF: received disable engine command while engine already disabled");
++CF_AppData.hk.Payload.counters.err;
}
+
+ return CFE_SUCCESS;
}
/*----------------------------------------------------------------
*
* Application-scope internal function
- * See description in cf_cmd.h for argument/return detail
+ * See description in cf_app.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_ProcessGroundCommand(CFE_SB_Buffer_t *msg)
+CFE_Status_t CF_SendHkCmd(const CF_SendHkCmd_t *msg)
{
- typedef void (*const handler_fn_t)(const void *);
-
- static handler_fn_t fns[CF_NUM_COMMANDS] = {
- (handler_fn_t)CF_NoopCmd, /* CF_NOOP_CC */
- (handler_fn_t)CF_ResetCmd, /* CF_RESET_CC */
- (handler_fn_t)CF_TxFileCmd, /* CF_TX_FILE_CC */
- (handler_fn_t)CF_PlaybackDirCmd, /* CF_PLAYBACK_DIR_CC */
- (handler_fn_t)CF_FreezeCmd, /* CF_FREEZE_CC */
- (handler_fn_t)CF_ThawCmd, /* CF_THAW_CC */
- (handler_fn_t)CF_SuspendCmd, /* CF_SUSPEND_CC */
- (handler_fn_t)CF_ResumeCmd, /* CF_RESUME_CC */
- (handler_fn_t)CF_CancelCmd, /* CF_CANCEL_CC */
- (handler_fn_t)CF_AbandonCmd, /* CF_ABANDON_CC */
- (handler_fn_t)CF_SetParamCmd, /* CF_SET_MIB_PARAM_CC */
- (handler_fn_t)CF_GetParamCmd, /* CF_GET_MIB_PARAM_CC */
- NULL,
- NULL,
- NULL,
- (handler_fn_t)CF_WriteQueueCmd, /* CF_WRITE_QUEUE_CC */
- (handler_fn_t)CF_EnableDequeueCmd, /* CF_ENABLE_DEQUEUE_CC */
- (handler_fn_t)CF_DisableDequeueCmd, /* CF_DISABLE_DEQUEUE_CC */
- (handler_fn_t)CF_EnablePolldirCmd, /* CF_ENABLE_DIR_POLLING_CC */
- (handler_fn_t)CF_DisablePolldirCmd, /* CF_DISABLE_DIR_POLLING_CC */
- NULL,
- (handler_fn_t)CF_PurgeQueueCmd, /* CF_PURGE_QUEUE_CC */
- (handler_fn_t)CF_EnableEngineCmd, /* CF_ENABLE_ENGINE_CC */
- (handler_fn_t)CF_DisableEngineCmd, /* CF_DISABLE_ENGINE_CC */
- };
+ CFE_MSG_SetMsgTime(CFE_MSG_PTR(CF_AppData.hk.TelemetryHeader), CFE_TIME_GetTime());
+ /* return value ignored */ CFE_SB_TransmitMsg(CFE_MSG_PTR(CF_AppData.hk.TelemetryHeader), true);
- static const uint16 expected_lengths[CF_NUM_COMMANDS] = {
- sizeof(CF_NoopCmd_t), /* CF_NOOP_CC */
- sizeof(CF_ResetCmd_t), /* CF_RESET_CC */
- sizeof(CF_TxFileCmd_t), /* CF_TX_FILE_CC */
- sizeof(CF_PlaybackDirCmd_t), /* CF_PLAYBACK_DIR_CC */
- sizeof(CF_FreezeCmd_t), /* CF_FREEZE_CC */
- sizeof(CF_ThawCmd_t), /* CF_THAW_CC */
- sizeof(CF_SuspendCmd_t), /* CF_SUSPEND_CC */
- sizeof(CF_ResumeCmd_t), /* CF_RESUME_CC */
- sizeof(CF_CancelCmd_t), /* CF_CANCEL_CC */
- sizeof(CF_AbandonCmd_t), /* CF_ABANDON_CC */
- sizeof(CF_SetParamCmd_t), /* CF_SET_MIB_PARAM_CC */
- sizeof(CF_GetParamCmd_t), /* CF_GET_MIB_PARAM_CC */
- 0,
- 0,
- 0,
- sizeof(CF_WriteQueueCmd_t), /* CF_WRITE_QUEUE_CC */
- sizeof(CF_EnableDequeueCmd_t), /* CF_ENABLE_DEQUEUE_CC */
- sizeof(CF_DisableDequeueCmd_t), /* CF_DISABLE_DEQUEUE_CC */
- sizeof(CF_EnableDirPollingCmd_t), /* CF_ENABLE_DIR_POLLING_CC */
- sizeof(CF_DisableDirPollingCmd_t), /* CF_DISABLE_DIR_POLLING_CC */
- 0,
- sizeof(CF_UnionArgs_Payload_t), /* CF_PURGE_QUEUE_CC */
- sizeof(CF_EnableEngineCmd_t), /* CF_ENABLE_ENGINE_CC */
- sizeof(CF_DisableEngineCmd_t), /* CF_DISABLE_ENGINE_CC */
- };
-
- CFE_MSG_FcnCode_t cmd = 0;
- size_t len = 0;
+ /* This is also used to check tables */
+ CF_CheckTables();
- CFE_MSG_GetFcnCode(&msg->Msg, &cmd);
+ return CFE_SUCCESS;
+}
- if (cmd < CF_NUM_COMMANDS)
- {
- CFE_MSG_GetSize(&msg->Msg, &len);
+/*----------------------------------------------------------------
+ *
+ * Application-scope internal function
+ * See description in cf_app.h for argument/return detail
+ *
+ *-----------------------------------------------------------------*/
+CFE_Status_t CF_WakeupCmd(const CF_WakeupCmd_t *msg)
+{
+ CFE_ES_PerfLogEntry(CF_PERF_ID_CYCLE_ENG);
+ CF_CFDP_CycleEngine();
+ CFE_ES_PerfLogExit(CF_PERF_ID_CYCLE_ENG);
- /* first, verify command length */
- if (len == expected_lengths[cmd])
- {
- /* if valid, process command */
- if (fns[cmd])
- {
- fns[cmd](msg);
- }
- }
- else
- {
- CFE_EVS_SendEvent(CF_CMD_LEN_ERR_EID, CFE_EVS_EventType_ERROR,
- "CF: invalid ground command length for command 0x%02x, expected %d got %zd", cmd,
- expected_lengths[cmd], len);
- ++CF_AppData.hk.Payload.counters.err;
- }
- }
- else
- {
- CFE_EVS_SendEvent(CF_CC_ERR_EID, CFE_EVS_EventType_ERROR, "CF: invalid ground command packet cmd_code=0x%02x",
- cmd);
- ++CF_AppData.hk.Payload.counters.err;
- }
+ return CFE_SUCCESS;
}
diff --git a/fsw/src/cf_cmd.h b/fsw/src/cf_cmd.h
index 30f4b9f0..71e1b11f 100644
--- a/fsw/src/cf_cmd.h
+++ b/fsw/src/cf_cmd.h
@@ -100,6 +100,32 @@ typedef struct CF_ChanAction_MsgArg
const CF_UnionArgs_Payload_t *data;
} CF_ChanAction_MsgArg_t;
+/************************************************************************/
+/** @brief Send CF housekeeping packet
+ *
+ * @par Description
+ * The command to send the CF housekeeping packet
+ *
+ * @par Assumptions, External Events, and Notes:
+ * None
+ *
+ * @param msg Pointer to command message
+ */
+CFE_Status_t CF_SendHkCmd(const CF_SendHkCmd_t *msg);
+
+/************************************************************************/
+/** @brief CF wakeup function
+ *
+ * @par Description
+ * Performs a single engine cycle for each wakeup
+ *
+ * @par Assumptions, External Events, and Notes:
+ * None
+ *
+ * @param msg Pointer to command message
+ */
+CFE_Status_t CF_WakeupCmd(const CF_WakeupCmd_t *msg);
+
/************************************************************************/
/** @brief The no-operation command.
*
@@ -114,7 +140,7 @@ typedef struct CF_ChanAction_MsgArg
*
* @param msg Pointer to command message
*/
-void CF_NoopCmd(const CF_NoopCmd_t *msg);
+CFE_Status_t CF_NoopCmd(const CF_NoopCmd_t *msg);
/************************************************************************/
/** @brief The reset counters command.
@@ -130,7 +156,7 @@ void CF_NoopCmd(const CF_NoopCmd_t *msg);
*
* @param msg Pointer to command message
*/
-void CF_ResetCmd(const CF_ResetCmd_t *msg);
+CFE_Status_t CF_ResetCmd(const CF_ResetCmd_t *msg);
/************************************************************************/
/** @brief Ground command to start a file transfer.
@@ -145,7 +171,7 @@ void CF_ResetCmd(const CF_ResetCmd_t *msg);
* @param msg Pointer to command message
*
*/
-void CF_TxFileCmd(const CF_TxFileCmd_t *msg);
+CFE_Status_t CF_TxFileCmd(const CF_TxFileCmd_t *msg);
/************************************************************************/
/** @brief Ground command to start directory playback.
@@ -159,7 +185,7 @@ void CF_TxFileCmd(const CF_TxFileCmd_t *msg);
*
* @param msg Pointer to command message
*/
-void CF_PlaybackDirCmd(const CF_PlaybackDirCmd_t *msg);
+CFE_Status_t CF_PlaybackDirCmd(const CF_PlaybackDirCmd_t *msg);
/************************************************************************/
/** @brief Common logic for all channel-based commands.
@@ -205,7 +231,7 @@ CF_ChanAction_Status_t CF_DoFreezeThaw(uint8 chan_num, void *arg);
*
* @param msg Pointer to command message
*/
-void CF_FreezeCmd(const CF_FreezeCmd_t *msg);
+CFE_Status_t CF_FreezeCmd(const CF_FreezeCmd_t *msg);
/************************************************************************/
/** @brief Thaw a channel.
@@ -215,7 +241,7 @@ void CF_FreezeCmd(const CF_FreezeCmd_t *msg);
*
* @param msg Pointer to command message
*/
-void CF_ThawCmd(const CF_ThawCmd_t *msg);
+CFE_Status_t CF_ThawCmd(const CF_ThawCmd_t *msg);
/************************************************************************/
/** @brief Search for a transaction across all channels.
@@ -288,7 +314,7 @@ void CF_DoSuspRes(const CF_Transaction_Payload_t *payload, uint8 action);
*
* @param msg Pointer to command message
*/
-void CF_SuspendCmd(const CF_SuspendCmd_t *msg);
+CFE_Status_t CF_SuspendCmd(const CF_SuspendCmd_t *msg);
/************************************************************************/
/** @brief Handle transaction resume command.
@@ -298,7 +324,7 @@ void CF_SuspendCmd(const CF_SuspendCmd_t *msg);
*
* @param msg Pointer to command message
*/
-void CF_ResumeCmd(const CF_ResumeCmd_t *msg);
+CFE_Status_t CF_ResumeCmd(const CF_ResumeCmd_t *msg);
/************************************************************************/
/** @brief tsn chan action to cancel a transaction.
@@ -321,7 +347,7 @@ void CF_CmdCancel_Txn(CF_Transaction_t *txn, void *ignored);
*
* @param msg Pointer to command message
*/
-void CF_CancelCmd(const CF_CancelCmd_t *msg);
+CFE_Status_t CF_CancelCmd(const CF_CancelCmd_t *msg);
/************************************************************************/
/** @brief tsn chan action to abandon a transaction.
@@ -344,7 +370,7 @@ void CF_CmdAbandon_Txn(CF_Transaction_t *txn, void *ignored);
*
* @param msg Pointer to command message
*/
-void CF_AbandonCmd(const CF_AbandonCmd_t *msg);
+CFE_Status_t CF_AbandonCmd(const CF_AbandonCmd_t *msg);
/************************************************************************/
/** @brief Sets the dequeue enable/disable flag for a channel.
@@ -368,7 +394,7 @@ CF_ChanAction_Status_t CF_DoEnableDisableDequeue(uint8 chan_num, void *arg);
*
* @param msg Pointer to command message
*/
-void CF_EnableDequeueCmd(const CF_EnableDequeueCmd_t *msg);
+CFE_Status_t CF_EnableDequeueCmd(const CF_EnableDequeueCmd_t *msg);
/************************************************************************/
/** @brief Handle a disable dequeue ground command.
@@ -378,7 +404,7 @@ void CF_EnableDequeueCmd(const CF_EnableDequeueCmd_t *msg);
*
* @param msg Pointer to command message
*/
-void CF_DisableDequeueCmd(const CF_DisableDequeueCmd_t *msg);
+CFE_Status_t CF_DisableDequeueCmd(const CF_DisableDequeueCmd_t *msg);
/************************************************************************/
/** @brief Sets the enable/disable flag for the specified polling directory.
@@ -403,7 +429,7 @@ CF_ChanAction_Status_t CF_DoEnableDisablePolldir(uint8 chan_num, void *arg);
*
* @param msg Pointer to command message
*/
-void CF_EnablePolldirCmd(const CF_EnableDirPollingCmd_t *msg);
+CFE_Status_t CF_EnableDirPollingCmd(const CF_EnableDirPollingCmd_t *msg);
/************************************************************************/
/** @brief Disable a polling dir ground command.
@@ -413,7 +439,7 @@ void CF_EnablePolldirCmd(const CF_EnableDirPollingCmd_t *msg);
*
* @param msg Pointer to command message
*/
-void CF_DisablePolldirCmd(const CF_DisableDirPollingCmd_t *msg);
+CFE_Status_t CF_DisableDirPollingCmd(const CF_DisableDirPollingCmd_t *msg);
/************************************************************************/
/** @brief Purge the history queue for the given channel.
@@ -472,7 +498,7 @@ CF_ChanAction_Status_t CF_DoPurgeQueue(uint8 chan_num, void *arg);
*
* @param msg Pointer to command message
*/
-void CF_PurgeQueueCmd(const CF_PurgeQueueCmd_t *msg);
+CFE_Status_t CF_PurgeQueueCmd(const CF_PurgeQueueCmd_t *msg);
/************************************************************************/
/** @brief Ground command to write a file with queue information.
@@ -482,7 +508,7 @@ void CF_PurgeQueueCmd(const CF_PurgeQueueCmd_t *msg);
*
* @param msg Pointer to command message
*/
-void CF_WriteQueueCmd(const CF_WriteQueueCmd_t *msg);
+CFE_Status_t CF_WriteQueueCmd(const CF_WriteQueueCmd_t *msg);
/************************************************************************/
/** @brief Checks if the value is less than or equal to the max PDU size.
@@ -544,7 +570,7 @@ void CF_GetSetParamCmd(uint8 is_set, CF_GetSet_ValueID_t param_id, uint32 value,
*
* @param msg Pointer to command message
*/
-void CF_SetParamCmd(const CF_SetParamCmd_t *msg);
+CFE_Status_t CF_SetParamCmd(const CF_SetParamCmd_t *msg);
/************************************************************************/
/** @brief Ground command to set a configuration parameter.
@@ -554,7 +580,7 @@ void CF_SetParamCmd(const CF_SetParamCmd_t *msg);
*
* @param msg Pointer to command message
*/
-void CF_GetParamCmd(const CF_GetParamCmd_t *msg);
+CFE_Status_t CF_GetParamCmd(const CF_GetParamCmd_t *msg);
/************************************************************************/
/** @brief Ground command enable engine.
@@ -564,7 +590,7 @@ void CF_GetParamCmd(const CF_GetParamCmd_t *msg);
*
* @param msg Pointer to command message
*/
-void CF_EnableEngineCmd(const CF_EnableEngineCmd_t *msg);
+CFE_Status_t CF_EnableEngineCmd(const CF_EnableEngineCmd_t *msg);
/************************************************************************/
/** @brief Ground command disable engine.
@@ -574,16 +600,6 @@ void CF_EnableEngineCmd(const CF_EnableEngineCmd_t *msg);
*
* @param msg Pointer to command message
*/
-void CF_DisableEngineCmd(const CF_DisableEngineCmd_t *msg);
-
-/************************************************************************/
-/** @brief Process any ground command contained in the given message.
- *
- * @par Assumptions, External Events, and Notes:
- * msg must not be NULL.
- *
- * @param msg Pointer to command message
- */
-void CF_ProcessGroundCommand(CFE_SB_Buffer_t *msg);
+CFE_Status_t CF_DisableEngineCmd(const CF_DisableEngineCmd_t *msg);
#endif
diff --git a/fsw/src/cf_dispatch.c b/fsw/src/cf_dispatch.c
new file mode 100644
index 00000000..7fb323b1
--- /dev/null
+++ b/fsw/src/cf_dispatch.c
@@ -0,0 +1,158 @@
+/************************************************************************
+ * NASA Docket No. GSC-18,447-1, and identified as “CFS CFDP (CF)
+ * Application version 3.0.0”
+ *
+ * Copyright (c) 2019 United States Government as represented by the
+ * Administrator of the National Aeronautics and Space Administration.
+ * All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License. You may obtain
+ * a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ************************************************************************/
+
+/**
+ * @file
+ * The CF Application main application source file
+ *
+ * This file contains the functions that initialize the application and link
+ * all logic and functionality to the CFS.
+ */
+
+#include "cf_dispatch.h"
+#include "cf_app.h"
+#include "cf_events.h"
+#include "cf_cmd.h"
+
+#include "cfe.h"
+#include
+
+/*----------------------------------------------------------------
+ *
+ * Application-scope internal function
+ * See description in cf_cmd.h for argument/return detail
+ *
+ *-----------------------------------------------------------------*/
+void CF_ProcessGroundCommand(const CFE_SB_Buffer_t *msg)
+{
+ typedef void (*const handler_fn_t)(const void *);
+
+ static handler_fn_t fns[] = {
+ [CF_NOOP_CC] = (handler_fn_t)CF_NoopCmd,
+ [CF_RESET_CC] = (handler_fn_t)CF_ResetCmd,
+ [CF_TX_FILE_CC] = (handler_fn_t)CF_TxFileCmd,
+ [CF_PLAYBACK_DIR_CC] = (handler_fn_t)CF_PlaybackDirCmd,
+ [CF_FREEZE_CC] = (handler_fn_t)CF_FreezeCmd,
+ [CF_THAW_CC] = (handler_fn_t)CF_ThawCmd,
+ [CF_SUSPEND_CC] = (handler_fn_t)CF_SuspendCmd,
+ [CF_RESUME_CC] = (handler_fn_t)CF_ResumeCmd,
+ [CF_CANCEL_CC] = (handler_fn_t)CF_CancelCmd,
+ [CF_ABANDON_CC] = (handler_fn_t)CF_AbandonCmd,
+ [CF_SET_PARAM_CC] = (handler_fn_t)CF_SetParamCmd,
+ [CF_GET_PARAM_CC] = (handler_fn_t)CF_GetParamCmd,
+ [CF_WRITE_QUEUE_CC] = (handler_fn_t)CF_WriteQueueCmd,
+ [CF_ENABLE_DEQUEUE_CC] = (handler_fn_t)CF_EnableDequeueCmd,
+ [CF_DISABLE_DEQUEUE_CC] = (handler_fn_t)CF_DisableDequeueCmd,
+ [CF_ENABLE_DIR_POLLING_CC] = (handler_fn_t)CF_EnableDirPollingCmd,
+ [CF_DISABLE_DIR_POLLING_CC] = (handler_fn_t)CF_DisableDirPollingCmd,
+ [CF_PURGE_QUEUE_CC] = (handler_fn_t)CF_PurgeQueueCmd,
+ [CF_ENABLE_ENGINE_CC] = (handler_fn_t)CF_EnableEngineCmd,
+ [CF_DISABLE_ENGINE_CC] = (handler_fn_t)CF_DisableEngineCmd,
+ };
+
+ static const uint16 expected_lengths[] = {
+ [CF_NOOP_CC] = sizeof(CF_NoopCmd_t),
+ [CF_RESET_CC] = sizeof(CF_ResetCmd_t),
+ [CF_TX_FILE_CC] = sizeof(CF_TxFileCmd_t),
+ [CF_PLAYBACK_DIR_CC] = sizeof(CF_PlaybackDirCmd_t),
+ [CF_FREEZE_CC] = sizeof(CF_FreezeCmd_t),
+ [CF_THAW_CC] = sizeof(CF_ThawCmd_t),
+ [CF_SUSPEND_CC] = sizeof(CF_SuspendCmd_t),
+ [CF_RESUME_CC] = sizeof(CF_ResumeCmd_t),
+ [CF_CANCEL_CC] = sizeof(CF_CancelCmd_t),
+ [CF_ABANDON_CC] = sizeof(CF_AbandonCmd_t),
+ [CF_SET_PARAM_CC] = sizeof(CF_SetParamCmd_t),
+ [CF_GET_PARAM_CC] = sizeof(CF_GetParamCmd_t),
+ [CF_WRITE_QUEUE_CC] = sizeof(CF_WriteQueueCmd_t),
+ [CF_ENABLE_DEQUEUE_CC] = sizeof(CF_EnableDequeueCmd_t),
+ [CF_DISABLE_DEQUEUE_CC] = sizeof(CF_DisableDequeueCmd_t),
+ [CF_ENABLE_DIR_POLLING_CC] = sizeof(CF_EnableDirPollingCmd_t),
+ [CF_DISABLE_DIR_POLLING_CC] = sizeof(CF_DisableDirPollingCmd_t),
+ [CF_PURGE_QUEUE_CC] = sizeof(CF_UnionArgs_Payload_t),
+ [CF_ENABLE_ENGINE_CC] = sizeof(CF_EnableEngineCmd_t),
+ [CF_DISABLE_ENGINE_CC] = sizeof(CF_DisableEngineCmd_t),
+ };
+
+ CFE_MSG_FcnCode_t cmd = 0;
+ size_t len = 0;
+
+ CFE_MSG_GetFcnCode(&msg->Msg, &cmd);
+
+ if (cmd < (sizeof(expected_lengths) / sizeof(expected_lengths[0])))
+ {
+ CFE_MSG_GetSize(&msg->Msg, &len);
+
+ /* first, verify command length */
+ if (len == expected_lengths[cmd])
+ {
+ /* if valid, process command */
+ if (fns[cmd])
+ {
+ fns[cmd](msg);
+ }
+ }
+ else
+ {
+ CFE_EVS_SendEvent(CF_CMD_LEN_ERR_EID, CFE_EVS_EventType_ERROR,
+ "CF: invalid ground command length for command 0x%02x, expected %d got %zd", cmd,
+ expected_lengths[cmd], len);
+ ++CF_AppData.hk.Payload.counters.err;
+ }
+ }
+ else
+ {
+ CFE_EVS_SendEvent(CF_CC_ERR_EID, CFE_EVS_EventType_ERROR, "CF: invalid ground command packet cmd_code=0x%02x",
+ cmd);
+ ++CF_AppData.hk.Payload.counters.err;
+ }
+}
+
+/*----------------------------------------------------------------
+ *
+ * Application-scope internal function
+ * See description in cf_app.h for argument/return detail
+ *
+ *-----------------------------------------------------------------*/
+void CF_AppPipe(const CFE_SB_Buffer_t *msg)
+{
+ CFE_SB_MsgId_t msg_id = CFE_SB_INVALID_MSG_ID;
+
+ CFE_MSG_GetMsgId(&msg->Msg, &msg_id);
+
+ switch (CFE_SB_MsgIdToValue(msg_id))
+ {
+ case CF_CMD_MID:
+ CF_ProcessGroundCommand(msg);
+ break;
+
+ case CF_WAKE_UP_MID:
+ CF_WakeupCmd((const CF_WakeupCmd_t *)msg);
+ break;
+
+ case CF_SEND_HK_MID:
+ CF_SendHkCmd((const CF_SendHkCmd_t *)msg);
+ break;
+
+ default:
+ ++CF_AppData.hk.Payload.counters.err;
+ CFE_EVS_SendEvent(CF_EID_ERR_INVALID_MID, CFE_EVS_EventType_ERROR, "CF: invalid command packet id=0x%lx",
+ (unsigned long)CFE_SB_MsgIdToValue(msg_id));
+ break;
+ }
+}
diff --git a/fsw/src/cf_dispatch.h b/fsw/src/cf_dispatch.h
new file mode 100644
index 00000000..42c2ad6f
--- /dev/null
+++ b/fsw/src/cf_dispatch.h
@@ -0,0 +1,61 @@
+/************************************************************************
+ * NASA Docket No. GSC-18,447-1, and identified as “CFS CFDP (CF)
+ * Application version 3.0.0”
+ *
+ * Copyright (c) 2019 United States Government as represented by the
+ * Administrator of the National Aeronautics and Space Administration.
+ * All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License. You may obtain
+ * a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ************************************************************************/
+
+/**
+ * @file
+ *
+ * The CF Application main application header file
+ */
+
+#ifndef CF_DISPATCH_H
+#define CF_DISPATCH_H
+
+#include "cfe.h"
+
+/**************************************************************************
+ **
+ ** Function definitions
+ **
+ **************************************************************************/
+
+/************************************************************************/
+/** @brief Process any ground command contained in the given message.
+ *
+ * @par Assumptions, External Events, and Notes:
+ * msg must not be NULL.
+ *
+ * @param msg Pointer to command message
+ */
+void CF_ProcessGroundCommand(const CFE_SB_Buffer_t *msg);
+
+/************************************************************************/
+/** @brief CF message processing function
+ *
+ * @par Description
+ * Process message packets received via the Software Bus command pipe
+ *
+ * @par Assumptions, External Events, and Notes:
+ * msg must not be NULL.
+ *
+ * @param[in] msg Software Bus message pointer
+ *
+ */
+void CF_AppPipe(const CFE_SB_Buffer_t *msg);
+
+#endif /* !CF_DISPATCH_H */
diff --git a/fsw/src/cf_logical_pdu.h b/fsw/src/cf_logical_pdu.h
index 48bbb59a..e3652f2a 100644
--- a/fsw/src/cf_logical_pdu.h
+++ b/fsw/src/cf_logical_pdu.h
@@ -39,7 +39,7 @@
#define CF_LOGICAL_PDU_H
#include "common_types.h"
-#include "cf_platform_cfg.h"
+#include "cf_extern_typedefs.h"
/* many enum values in this file are based on CFDP-defined values */
#include "cf_cfdp_pdu.h"
diff --git a/unit-test/CMakeLists.txt b/unit-test/CMakeLists.txt
index ba60e92a..a2b75c3e 100644
--- a/unit-test/CMakeLists.txt
+++ b/unit-test/CMakeLists.txt
@@ -56,6 +56,7 @@ add_cfe_coverage_stubs(cf_internal
stubs/cf_codec_handlers.c
stubs/cf_codec_stubs.c
stubs/cf_crc_stubs.c
+ stubs/cf_dispatch_stubs.c
stubs/cf_timer_stubs.c
stubs/cf_utils_handlers.c
stubs/cf_utils_stubs.c
diff --git a/unit-test/cf_app_tests.c b/unit-test/cf_app_tests.c
index 712b23a7..6dc07dba 100644
--- a/unit-test/cf_app_tests.c
+++ b/unit-test/cf_app_tests.c
@@ -20,6 +20,7 @@
/* cf testing includes */
#include "cf_test_utils.h"
#include "cf_events.h"
+#include "cf_dispatch.h"
#include "cf_app.h"
#include "cf_cmd.h"
@@ -59,23 +60,6 @@ void UT_UpdatedDefaultHandler_CFE_SB_ReceiveBuffer(void *UserObj, UT_EntryKey_t
UT_Stub_CopyToLocal(UT_KEY(CFE_SB_ReceiveBuffer), BufPtr, sizeof(*BufPtr));
}
-/*******************************************************************************
-**
-** CF_HkCmd tests - full coverage
-**
-*******************************************************************************/
-
-void Test_CF_HkCmd(void)
-{
- /* Act */
- CF_HkCmd();
-
- /* Assert */
- UtAssert_STUB_COUNT(CFE_MSG_SetMsgTime, 1);
- UtAssert_STUB_COUNT(CFE_SB_TransmitMsg, 1);
- UtAssert_STUB_COUNT(CFE_TIME_GetTime, 1);
-}
-
/*******************************************************************************
**
** CF_CheckTables tests - full coverage
@@ -482,104 +466,6 @@ void Test_CF_Init_Success(void)
UtAssert_STUB_COUNT(CFE_MSG_Init, 1);
}
-/*******************************************************************************
-**
-** CF_WakeUp tests
-**
-*******************************************************************************/
-
-void Test_CF_WakeUp(void)
-{
- /* Arrange */
- /* No Arrange Required */
-
- /* Act */
- CF_WakeUp();
-
- /* Assert */
- UtAssert_STUB_COUNT(CF_CFDP_CycleEngine, 1);
-}
-
-/*******************************************************************************
-**
-** CF_ProcessMsg tests
-**
-*******************************************************************************/
-
-void Test_CF_ProcessMsg_ProcessGroundCommand(void)
-{
- /* Arrange */
- CFE_SB_Buffer_t sbbuf;
- CFE_SB_MsgId_t forced_MsgID = CFE_SB_ValueToMsgId(CF_CMD_MID);
-
- memset(&sbbuf, 0, sizeof(sbbuf));
-
- /* CFE_MSG_GetMsgId uses return by ref */
- UT_SetDataBuffer(UT_KEY(CFE_MSG_GetMsgId), &forced_MsgID, sizeof(forced_MsgID), false);
-
- /* Act */
- CF_ProcessMsg(&sbbuf);
-
- /* Assert */
- UtAssert_STUB_COUNT(CFE_MSG_GetMsgId, 1);
- UtAssert_STUB_COUNT(CF_ProcessGroundCommand, 1);
-}
-
-void Test_CF_ProcessMsg_WakeUp(void)
-{
- /* Arrange */
- CFE_SB_Buffer_t sbbuf;
- CFE_SB_MsgId_t forced_MsgID = CFE_SB_ValueToMsgId(CF_WAKE_UP_MID);
-
- memset(&sbbuf, 0, sizeof(sbbuf));
-
- /* CFE_MSG_GetMsgId uses return by ref */
- UT_SetDataBuffer(UT_KEY(CFE_MSG_GetMsgId), &forced_MsgID, sizeof(forced_MsgID), false);
-
- /* Act */
- CF_ProcessMsg(&sbbuf);
-
- /* Assert */
- UtAssert_STUB_COUNT(CFE_MSG_GetMsgId, 1);
- UtAssert_STUB_COUNT(CF_CFDP_CycleEngine, 1);
-}
-
-void Test_CF_ProcessMsg_SendHk(void)
-{
- CFE_SB_Buffer_t sbbuf;
- CFE_SB_MsgId_t forced_MsgID = CFE_SB_ValueToMsgId(CF_SEND_HK_MID);
-
- memset(&sbbuf, 0, sizeof(sbbuf));
-
- /* CFE_MSG_GetMsgId uses return by ref */
- UT_SetDataBuffer(UT_KEY(CFE_MSG_GetMsgId), &forced_MsgID, sizeof(forced_MsgID), false);
-
- /* Act */
- CF_ProcessMsg(&sbbuf);
-
- /* Assert */
- UtAssert_STUB_COUNT(CFE_MSG_GetMsgId, 1);
- UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 0);
- UtAssert_STUB_COUNT(CFE_MSG_SetMsgTime, 1); /* Confirms CF_HkCmd path was taken */
-}
-
-void Test_CF_ProcessMsg_UnrecognizedCommandEnterDefaultPath(void)
-{
- /* Arrange */
- CFE_SB_MsgId_t forced_MsgID = CFE_SB_INVALID_MSG_ID;
- CFE_SB_Buffer_t *arg_msg = NULL;
-
- UT_SetDataBuffer(UT_KEY(CFE_MSG_GetMsgId), &forced_MsgID, sizeof(forced_MsgID), false);
-
- /* Act */
- CF_ProcessMsg(arg_msg);
-
- /* Assert */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
- UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
- UT_CF_AssertEventID(CF_EID_ERR_INIT_CMD_LENGTH);
-}
-
/*******************************************************************************
**
** CF_AppMain tests
@@ -663,7 +549,7 @@ void Test_CF_AppMain_CFE_SB_ReceiveBuffer_Cases(void)
UtAssert_STUB_COUNT(CFE_ES_RunLoop, 3);
}
-void Test_CF_AppMain_RunLoopCallTo_CFE_SB_ReceiveBuffer_Returns_CFE_SUCCESS_AndValid_msg_Call_CF_ProcessMsg(void)
+void Test_CF_AppMain_RunLoopCallTo_CFE_SB_ReceiveBuffer_Returns_CFE_SUCCESS_AndValid_msg_Call_CF_AppPipe(void)
{
/* Arrange */
CFE_SB_MsgId_t forced_MsgID = CFE_SB_INVALID_MSG_ID;
@@ -676,7 +562,7 @@ void Test_CF_AppMain_RunLoopCallTo_CFE_SB_ReceiveBuffer_Returns_CFE_SUCCESS_AndV
/* Actual data not used, just address is needed */
UT_SetDataBuffer(UT_KEY(CFE_SB_ReceiveBuffer), &msg, sizeof(msg), false);
- /* Arrange unstubbable: CF_ProcessMsg, invalid ID */
+ /* Arrange unstubbable: CF_AppPipe, invalid ID */
UT_SetDataBuffer(UT_KEY(CFE_MSG_GetMsgId), &forced_MsgID, sizeof(forced_MsgID), false);
/* Act */
@@ -686,10 +572,8 @@ void Test_CF_AppMain_RunLoopCallTo_CFE_SB_ReceiveBuffer_Returns_CFE_SUCCESS_AndV
UtAssert_STUB_COUNT(CFE_ES_PerfLogAdd, 4);
UtAssert_STUB_COUNT(CFE_ES_RunLoop, 2);
UtAssert_STUB_COUNT(CFE_ES_ExitApp, 1);
- /* Assert for CF_Init call and CF_ProcessMsg */
- UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 2);
- /* Assert for CF_ProcessMsg */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
+ /* Assert for CF_Init call */
+ UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
}
/*******************************************************************************
@@ -698,11 +582,6 @@ void Test_CF_AppMain_RunLoopCallTo_CFE_SB_ReceiveBuffer_Returns_CFE_SUCCESS_AndV
**
*******************************************************************************/
-void add_CF_HkCmd_tests(void)
-{
- UtTest_Add(Test_CF_HkCmd, cf_app_tests_Setup, CF_App_Tests_Teardown, "Test_CF_HkCmd");
-}
-
void add_CF_CheckTables_tests(void)
{
UtTest_Add(Test_CF_CheckTables_DoNotReleaseAddressBecauseEngineIsEnabled, Setup_cf_config_table_tests,
@@ -782,21 +661,6 @@ void add_CF_Init_tests(void)
UtTest_Add(Test_CF_Init_Success, cf_app_tests_Setup, CF_App_Tests_Teardown, "Test_CF_Init_Success");
}
-void add_CF_WakeUp_tests(void)
-{
- UtTest_Add(Test_CF_WakeUp, cf_app_tests_Setup, CF_App_Tests_Teardown, "Test_CF_WakeUp");
-}
-
-void add_CF_ProcessMsg_tests(void)
-{
- UtTest_Add(Test_CF_ProcessMsg_ProcessGroundCommand, cf_app_tests_Setup, CF_App_Tests_Teardown,
- "Test_CF_ProcessMsg_ProcessGroundCommand");
- UtTest_Add(Test_CF_ProcessMsg_WakeUp, cf_app_tests_Setup, CF_App_Tests_Teardown, "Test_CF_ProcessMsg_WakeUp");
- UtTest_Add(Test_CF_ProcessMsg_SendHk, cf_app_tests_Setup, CF_App_Tests_Teardown, "Test_CF_ProcessMsg_SendHk");
- UtTest_Add(Test_CF_ProcessMsg_UnrecognizedCommandEnterDefaultPath, cf_app_tests_Setup, CF_App_Tests_Teardown,
- "Test_CF_ProcessMsg_UnrecognizedCommandEnterDefaultPath");
-}
-
void add_CF_AppMain_tests(void)
{
UtTest_Add(
@@ -806,10 +670,9 @@ void add_CF_AppMain_tests(void)
"ERROR");
UtTest_Add(Test_CF_AppMain_CFE_SB_ReceiveBuffer_Cases, cf_app_tests_Setup, CF_App_Tests_Teardown,
"Test_CF_AppMain_CFE_SB_ReceiveBuffer_Cases");
- UtTest_Add(
- Test_CF_AppMain_RunLoopCallTo_CFE_SB_ReceiveBuffer_Returns_CFE_SUCCESS_AndValid_msg_Call_CF_ProcessMsg,
- cf_app_tests_Setup, CF_App_Tests_Teardown,
- "Test_CF_AppMain_RunLoopCallTo_CFE_SB_ReceiveBuffer_Returns_CFE_SUCCESS_AndValid_msg_Call_CF_ProcessMsg");
+ UtTest_Add(Test_CF_AppMain_RunLoopCallTo_CFE_SB_ReceiveBuffer_Returns_CFE_SUCCESS_AndValid_msg_Call_CF_AppPipe,
+ cf_app_tests_Setup, CF_App_Tests_Teardown,
+ "Test_CF_AppMain_RunLoopCallTo_CFE_SB_ReceiveBuffer_Returns_CFE_SUCCESS_AndValid_msg_Call_CF_AppPipe");
}
/*******************************************************************************
@@ -822,8 +685,6 @@ void UtTest_Setup(void)
{
TestUtil_InitializeRandomSeed();
- add_CF_HkCmd_tests();
-
add_CF_CheckTables_tests();
add_CF_ValidateConfigTable_tests();
@@ -832,9 +693,5 @@ void UtTest_Setup(void)
add_CF_Init_tests();
- add_CF_WakeUp_tests();
-
- add_CF_ProcessMsg_tests();
-
add_CF_AppMain_tests();
}
\ No newline at end of file
diff --git a/unit-test/cf_cmd_tests.c b/unit-test/cf_cmd_tests.c
index 063198dd..a96c6631 100644
--- a/unit-test/cf_cmd_tests.c
+++ b/unit-test/cf_cmd_tests.c
@@ -241,7 +241,6 @@ void Test_CF_CmdReset_tests_WhenCommandByteIs_fault_ResetAllHkFaultCountSendEven
CF_AppData.hk.Payload.channel_hk[i].counters.fault.nak_limit = Any_uint16_Except(0);
CF_AppData.hk.Payload.channel_hk[i].counters.fault.ack_limit = Any_uint16_Except(0);
CF_AppData.hk.Payload.channel_hk[i].counters.fault.inactivity_timer = Any_uint16_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.fault.spare = Any_uint16_Except(0);
}
CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
@@ -266,7 +265,6 @@ void Test_CF_CmdReset_tests_WhenCommandByteIs_fault_ResetAllHkFaultCountSendEven
UtAssert_ZERO(CF_AppData.hk.Payload.channel_hk[i].counters.fault.nak_limit);
UtAssert_ZERO(CF_AppData.hk.Payload.channel_hk[i].counters.fault.ack_limit);
UtAssert_ZERO(CF_AppData.hk.Payload.channel_hk[i].counters.fault.inactivity_timer);
- UtAssert_ZERO(CF_AppData.hk.Payload.channel_hk[i].counters.fault.spare);
UtAssert_MemCmpValue(&CF_AppData.hk.Payload.channel_hk[i].counters.fault, 0,
sizeof(&CF_AppData.hk.Payload.channel_hk[i].counters.fault),
"fault channel %d was completely cleared to 0", i);
@@ -390,7 +388,6 @@ void Test_CF_CmdReset_tests_WhenCommandByteIs_all_AndResetAllMemValuesSendEvent(
CF_AppData.hk.Payload.channel_hk[i].counters.fault.nak_limit = Any_uint16_Except(0);
CF_AppData.hk.Payload.channel_hk[i].counters.fault.ack_limit = Any_uint16_Except(0);
CF_AppData.hk.Payload.channel_hk[i].counters.fault.inactivity_timer = Any_uint16_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.fault.spare = Any_uint16_Except(0);
}
for (i = 0; i < CF_NUM_CHANNELS; ++i)
@@ -1850,7 +1847,7 @@ void Test_CF_CmdEnablePolldir_SuccessWhenActionSuccess(void)
CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
/* Act */
- CF_EnablePolldirCmd(&utbuf);
+ CF_EnableDirPollingCmd(&utbuf);
/* Assert */
/* Assert for CF_DoEnableDisablePolldir */
@@ -1884,7 +1881,7 @@ void Test_CF_CmdEnablePolldir_FailWhenActionFail(void)
CF_AppData.hk.Payload.counters.err = initial_hk_err_counter;
/* Act */
- CF_EnablePolldirCmd(&utbuf);
+ CF_EnableDirPollingCmd(&utbuf);
/* Assert */
/* Assert for CF_DoEnableDisablePolldir */
@@ -1926,7 +1923,7 @@ void Test_CF_CmdDisablePolldir_SuccessWhenActionSuccess(void)
CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
/* Act */
- CF_DisablePolldirCmd(&utbuf);
+ CF_DisableDirPollingCmd(&utbuf);
/* Assert */
/* Assert for CF_DoEnableDisablePolldir */
@@ -1961,7 +1958,7 @@ void Test_CF_CmdDisablePolldir_FailWhenActionFail(void)
CF_AppData.hk.Payload.counters.err = initial_hk_err_counter;
/* Act */
- CF_DisablePolldirCmd(&utbuf);
+ CF_DisableDirPollingCmd(&utbuf);
/* Assert */
/* Assert for CF_DoEnableDisablePolldir */
@@ -3695,136 +3692,37 @@ void Test_CF_CmdDisableEngine_WhenEngineDisabledAndIncrementErrCounterThenFail(v
/*******************************************************************************
**
-** CF_ProcessGroundCommand tests
+** CF_SendHkCmd tests - full coverage
**
*******************************************************************************/
-void Test_CF_ProcessGroundCommand_When_cmd_EqTo_CF_NUM_COMMANDS_FailAndSendEvent(void)
+void Test_CF_SendHkCmd(void)
{
- /* Arrange */
- CFE_SB_Buffer_t utbuf;
- CFE_MSG_FcnCode_t forced_return_CFE_MSG_GetFcnCode = CF_NUM_COMMANDS;
-
- memset(&utbuf, 0, sizeof(utbuf));
-
- UT_SetDataBuffer(UT_KEY(CFE_MSG_GetFcnCode), &forced_return_CFE_MSG_GetFcnCode,
- sizeof(forced_return_CFE_MSG_GetFcnCode), false);
- /* CFE_MSG_GetSize does not matter for Test_CF_ProcessGroundCommand_When_cmd_EqTo_CF_NUM_COMMANDS_FailAndSendEvent
- */
-
- /* Act */
- CF_ProcessGroundCommand(&utbuf);
-
- /* Assert */
- UtAssert_STUB_COUNT(CFE_MSG_GetFcnCode, 1);
- UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
- UT_CF_AssertEventID(CF_CC_ERR_EID);
- /* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
-}
-
-void Test_CF_ProcessGroundCommand_When_cmd_GreaterThan_CF_NUM_COMMANDS_FailAndSendEvent(void)
-{
- /* Arrange */
- CFE_SB_Buffer_t utbuf;
- CFE_MSG_FcnCode_t forced_return_CFE_MSG_GetFcnCode = CF_NUM_COMMANDS + 1;
-
- memset(&utbuf, 0, sizeof(utbuf));
-
- UT_SetDataBuffer(UT_KEY(CFE_MSG_GetFcnCode), &forced_return_CFE_MSG_GetFcnCode,
- sizeof(forced_return_CFE_MSG_GetFcnCode), false);
- /* CFE_MSG_GetSize does not matter for Test_CF_ProcessGroundCommand_When_cmd_EqTo_CF_NUM_COMMANDS_FailAndSendEvent
- */
-
- /* Act */
- CF_ProcessGroundCommand(&utbuf);
-
- /* Assert */
- UtAssert_STUB_COUNT(CFE_MSG_GetFcnCode, 1);
- UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
- UT_CF_AssertEventID(CF_CC_ERR_EID);
- /* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
-}
-
-void Test_CF_ProcessGroundCommand_Receives_cmd_AndLengthDoesNotMatchExpectedForThatCommandSendEventAndFailure(void)
-{
- /* Arrange */
- CFE_SB_Buffer_t utbuf;
- CFE_MSG_FcnCode_t forced_return_CFE_MSG_GetFcnCode = CF_NOOP_CC;
- CFE_MSG_Size_t forced_return_CFE_MSG_GetSize = sizeof(CF_NoopCmd_t) + 1; /* Invalid size */
-
- memset(&utbuf, 0, sizeof(utbuf));
-
- UT_SetDataBuffer(UT_KEY(CFE_MSG_GetFcnCode), &forced_return_CFE_MSG_GetFcnCode,
- sizeof(forced_return_CFE_MSG_GetFcnCode), false);
- UT_SetDataBuffer(UT_KEY(CFE_MSG_GetSize), &forced_return_CFE_MSG_GetSize, sizeof(forced_return_CFE_MSG_GetSize),
- false);
-
/* Act */
- CF_ProcessGroundCommand(&utbuf);
+ CF_SendHkCmd(NULL);
/* Assert */
- UtAssert_STUB_COUNT(CFE_MSG_GetFcnCode, 1);
- UtAssert_STUB_COUNT(CFE_MSG_GetSize, 1);
- UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
- UT_CF_AssertEventID(CF_CMD_LEN_ERR_EID);
- /* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
+ UtAssert_STUB_COUNT(CFE_MSG_SetMsgTime, 1);
+ UtAssert_STUB_COUNT(CFE_SB_TransmitMsg, 1);
+ UtAssert_STUB_COUNT(CFE_TIME_GetTime, 1);
}
-void Test_CF_ProcessGroundCommand_ReceivesCmdCode_0x00_AndCall_CF_CmdNoop_With_msg(void)
-{
- /* Arrange */
- CFE_SB_Buffer_t utbuf;
- CFE_MSG_FcnCode_t forced_return_CFE_MSG_GetFcnCode = CF_NOOP_CC;
- CFE_MSG_Size_t forced_return_CFE_MSG_GetSize = sizeof(CF_NoopCmd_t); /* Valid size */
-
- memset(&utbuf, 0, sizeof(utbuf));
-
- UT_SetDataBuffer(UT_KEY(CFE_MSG_GetFcnCode), &forced_return_CFE_MSG_GetFcnCode,
- sizeof(forced_return_CFE_MSG_GetFcnCode), false);
- UT_SetDataBuffer(UT_KEY(CFE_MSG_GetSize), &forced_return_CFE_MSG_GetSize, sizeof(forced_return_CFE_MSG_GetSize),
- false);
-
- /* Act */
- CF_ProcessGroundCommand(&utbuf);
-
- /* Assert */
- UtAssert_STUB_COUNT(CFE_MSG_GetFcnCode, 1);
- UtAssert_STUB_COUNT(CFE_MSG_GetSize, 1);
- /* Assert for CF_CmdNoop */
- UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
- UT_CF_AssertEventID(CF_NOOP_INF_EID);
- /* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, 1);
-}
+/*******************************************************************************
+**
+** CF_WakeupCmd tests
+**
+*******************************************************************************/
-/* Hit a NULL entry to exercise that conditional and no action */
-void Test_CF_ProcessGroundCommand_ReceivesCmdCode_0x0C_AndDoNothingBecause_fns_12_Is_NULL(void)
+void Test_CF_WakeupCmd(void)
{
/* Arrange */
- CFE_SB_Buffer_t utbuf;
- CFE_MSG_FcnCode_t forced_return_CFE_MSG_GetFcnCode = 0x0C; /* 0x0C forces a null slot */
- CFE_MSG_Size_t forced_return_CFE_MSG_GetSize = 0;
-
- memset(&utbuf, 0, sizeof(utbuf));
-
- UT_SetDataBuffer(UT_KEY(CFE_MSG_GetFcnCode), &forced_return_CFE_MSG_GetFcnCode,
- sizeof(forced_return_CFE_MSG_GetFcnCode), false);
- UT_SetDataBuffer(UT_KEY(CFE_MSG_GetSize), &forced_return_CFE_MSG_GetSize, sizeof(forced_return_CFE_MSG_GetSize),
- false);
+ /* No Arrange Required */
/* Act */
- CF_ProcessGroundCommand(&utbuf);
+ CF_WakeupCmd(NULL);
/* Assert */
- UtAssert_STUB_COUNT(CFE_MSG_GetFcnCode, 1);
- UtAssert_STUB_COUNT(CFE_MSG_GetSize, 1);
- UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 0);
- /* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, 0);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 0);
+ UtAssert_STUB_COUNT(CF_CFDP_CycleEngine, 1);
}
/*******************************************************************************
@@ -4217,22 +4115,14 @@ void add_CF_CmdDisableEngine_tests(void)
cf_cmd_tests_Teardown, "Test_CF_CmdDisableEngine_WhenEngineDisabledAndIncrementErrCounterThenFail");
}
-void add_CF_ProcessGroundCommand_tests(void)
+void add_CF_SendHkCmd_tests(void)
{
- UtTest_Add(Test_CF_ProcessGroundCommand_When_cmd_EqTo_CF_NUM_COMMANDS_FailAndSendEvent, cf_cmd_tests_Setup,
- cf_cmd_tests_Teardown, "Test_CF_ProcessGroundCommand_When_cmd_EqTo_CF_NUM_COMMANDS_FailAndSendEvent");
- UtTest_Add(Test_CF_ProcessGroundCommand_When_cmd_GreaterThan_CF_NUM_COMMANDS_FailAndSendEvent, cf_cmd_tests_Setup,
- cf_cmd_tests_Teardown,
- "Test_CF_ProcessGroundCommand_When_cmd_GreaterThan_CF_NUM_COMMANDS_FailAndSendEvent");
- UtTest_Add(
- Test_CF_ProcessGroundCommand_Receives_cmd_AndLengthDoesNotMatchExpectedForThatCommandSendEventAndFailure,
- cf_cmd_tests_Setup, cf_cmd_tests_Teardown,
- "Test_CF_ProcessGroundCommand_Receives_cmd_AndLengthDoesNotMatchExpectedForThatCommandSendEventAndFailure");
- UtTest_Add(Test_CF_ProcessGroundCommand_ReceivesCmdCode_0x00_AndCall_CF_CmdNoop_With_msg, cf_cmd_tests_Setup,
- cf_cmd_tests_Teardown, "Test_CF_ProcessGroundCommand_ReceivesCmdCode_0x00_AndCall_CF_CmdNoop_With_msg");
- UtTest_Add(Test_CF_ProcessGroundCommand_ReceivesCmdCode_0x0C_AndDoNothingBecause_fns_12_Is_NULL, cf_cmd_tests_Setup,
- cf_cmd_tests_Teardown,
- "Test_CF_ProcessGroundCommand_ReceivesCmdCode_0x0C_AndDoNothingBecause_fns_12_Is_NULL");
+ UtTest_Add(Test_CF_SendHkCmd, cf_cmd_tests_Setup, cf_cmd_tests_Teardown, "Test_CF_SendHkCmd");
+}
+
+void add_CF_WakeupCmd_tests(void)
+{
+ UtTest_Add(Test_CF_WakeupCmd, cf_cmd_tests_Setup, cf_cmd_tests_Teardown, "Test_CF_WakeupCmd");
}
/*******************************************************************************
@@ -4317,5 +4207,7 @@ void UtTest_Setup(void)
add_CF_CmdDisableEngine_tests();
- add_CF_ProcessGroundCommand_tests();
+ add_CF_SendHkCmd_tests();
+
+ add_CF_WakeupCmd_tests();
}
diff --git a/unit-test/cf_dispatch_tests.c b/unit-test/cf_dispatch_tests.c
new file mode 100644
index 00000000..37d89d83
--- /dev/null
+++ b/unit-test/cf_dispatch_tests.c
@@ -0,0 +1,305 @@
+/************************************************************************
+ * NASA Docket No. GSC-18,447-1, and identified as “CFS CFDP (CF)
+ * Application version 3.0.0”
+ *
+ * Copyright (c) 2019 United States Government as represented by the
+ * Administrator of the National Aeronautics and Space Administration.
+ * All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License. You may obtain
+ * a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ************************************************************************/
+
+/* cf testing includes */
+#include "cf_test_utils.h"
+#include "cf_dispatch.h"
+#include "cf_cmd.h"
+#include "cf_msgids.h"
+#include "cf_events.h"
+
+/* UT includes */
+#include "uttest.h"
+#include "utassert.h"
+#include "utstubs.h"
+
+/*******************************************************************************
+**
+** cf_dispatch_tests Setup and Teardown
+**
+*******************************************************************************/
+
+void cf_dispatch_tests_Setup(void)
+{
+ cf_tests_Setup();
+}
+
+void cf_dispatch_tests_Teardown(void)
+{
+ cf_tests_Teardown();
+}
+
+/*******************************************************************************
+**
+** CF_ProcessGroundCommand tests
+**
+*******************************************************************************/
+
+void Test_CF_ProcessGroundCommand_When_cmd_EqTo_CF_NUM_COMMANDS_FailAndSendEvent(void)
+{
+ /* Arrange */
+ CFE_SB_Buffer_t utbuf;
+ CFE_MSG_FcnCode_t forced_return_CFE_MSG_GetFcnCode = 24;
+
+ memset(&utbuf, 0, sizeof(utbuf));
+
+ UT_SetDataBuffer(UT_KEY(CFE_MSG_GetFcnCode), &forced_return_CFE_MSG_GetFcnCode,
+ sizeof(forced_return_CFE_MSG_GetFcnCode), false);
+ /* CFE_MSG_GetSize does not matter for Test_CF_ProcessGroundCommand_When_cmd_EqTo_CF_NUM_COMMANDS_FailAndSendEvent
+ */
+
+ /* Act */
+ CF_ProcessGroundCommand(&utbuf);
+
+ /* Assert */
+ UtAssert_STUB_COUNT(CFE_MSG_GetFcnCode, 1);
+ UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
+ UT_CF_AssertEventID(CF_CC_ERR_EID);
+ /* Assert for incremented counter */
+ UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
+}
+
+void Test_CF_ProcessGroundCommand_When_cmd_GreaterThan_CF_NUM_COMMANDS_FailAndSendEvent(void)
+{
+ /* Arrange */
+ CFE_SB_Buffer_t utbuf;
+ CFE_MSG_FcnCode_t forced_return_CFE_MSG_GetFcnCode = 123;
+
+ memset(&utbuf, 0, sizeof(utbuf));
+
+ UT_SetDataBuffer(UT_KEY(CFE_MSG_GetFcnCode), &forced_return_CFE_MSG_GetFcnCode,
+ sizeof(forced_return_CFE_MSG_GetFcnCode), false);
+ /* CFE_MSG_GetSize does not matter for Test_CF_ProcessGroundCommand_When_cmd_EqTo_CF_NUM_COMMANDS_FailAndSendEvent
+ */
+
+ /* Act */
+ CF_ProcessGroundCommand(&utbuf);
+
+ /* Assert */
+ UtAssert_STUB_COUNT(CFE_MSG_GetFcnCode, 1);
+ UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
+ UT_CF_AssertEventID(CF_CC_ERR_EID);
+ /* Assert for incremented counter */
+ UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
+}
+
+void Test_CF_ProcessGroundCommand_Receives_cmd_AndLengthDoesNotMatchExpectedForThatCommandSendEventAndFailure(void)
+{
+ /* Arrange */
+ CFE_SB_Buffer_t utbuf;
+ CFE_MSG_FcnCode_t forced_return_CFE_MSG_GetFcnCode = CF_NOOP_CC;
+ CFE_MSG_Size_t forced_return_CFE_MSG_GetSize = sizeof(CF_NoopCmd_t) + 1; /* Invalid size */
+
+ memset(&utbuf, 0, sizeof(utbuf));
+
+ UT_SetDataBuffer(UT_KEY(CFE_MSG_GetFcnCode), &forced_return_CFE_MSG_GetFcnCode,
+ sizeof(forced_return_CFE_MSG_GetFcnCode), false);
+ UT_SetDataBuffer(UT_KEY(CFE_MSG_GetSize), &forced_return_CFE_MSG_GetSize, sizeof(forced_return_CFE_MSG_GetSize),
+ false);
+
+ /* Act */
+ CF_ProcessGroundCommand(&utbuf);
+
+ /* Assert */
+ UtAssert_STUB_COUNT(CFE_MSG_GetFcnCode, 1);
+ UtAssert_STUB_COUNT(CFE_MSG_GetSize, 1);
+ UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
+ UT_CF_AssertEventID(CF_CMD_LEN_ERR_EID);
+ /* Assert for incremented counter */
+ UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
+}
+
+void Test_CF_ProcessGroundCommand_ReceivesCmdCode_0x00_AndCall_CF_CmdNoop_With_msg(void)
+{
+ /* Arrange */
+ CFE_SB_Buffer_t utbuf;
+ CFE_MSG_FcnCode_t forced_return_CFE_MSG_GetFcnCode = CF_NOOP_CC;
+ CFE_MSG_Size_t forced_return_CFE_MSG_GetSize = sizeof(CF_NoopCmd_t); /* Valid size */
+
+ memset(&utbuf, 0, sizeof(utbuf));
+
+ UT_SetDataBuffer(UT_KEY(CFE_MSG_GetFcnCode), &forced_return_CFE_MSG_GetFcnCode,
+ sizeof(forced_return_CFE_MSG_GetFcnCode), false);
+ UT_SetDataBuffer(UT_KEY(CFE_MSG_GetSize), &forced_return_CFE_MSG_GetSize, sizeof(forced_return_CFE_MSG_GetSize),
+ false);
+
+ /* Act */
+ CF_ProcessGroundCommand(&utbuf);
+
+ /* Assert */
+ UtAssert_STUB_COUNT(CFE_MSG_GetFcnCode, 1);
+ UtAssert_STUB_COUNT(CFE_MSG_GetSize, 1);
+}
+
+/* Hit a NULL entry to exercise that conditional and no action */
+void Test_CF_ProcessGroundCommand_ReceivesCmdCode_0x0C_AndDoNothingBecause_fns_12_Is_NULL(void)
+{
+ /* Arrange */
+ CFE_SB_Buffer_t utbuf;
+ CFE_MSG_FcnCode_t forced_return_CFE_MSG_GetFcnCode = 0x0C; /* 0x0C forces a null slot */
+ CFE_MSG_Size_t forced_return_CFE_MSG_GetSize = 0;
+
+ memset(&utbuf, 0, sizeof(utbuf));
+
+ UT_SetDataBuffer(UT_KEY(CFE_MSG_GetFcnCode), &forced_return_CFE_MSG_GetFcnCode,
+ sizeof(forced_return_CFE_MSG_GetFcnCode), false);
+ UT_SetDataBuffer(UT_KEY(CFE_MSG_GetSize), &forced_return_CFE_MSG_GetSize, sizeof(forced_return_CFE_MSG_GetSize),
+ false);
+
+ /* Act */
+ CF_ProcessGroundCommand(&utbuf);
+
+ /* Assert */
+ UtAssert_STUB_COUNT(CFE_MSG_GetFcnCode, 1);
+ UtAssert_STUB_COUNT(CFE_MSG_GetSize, 1);
+ UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 0);
+ /* Assert for incremented counter */
+ UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, 0);
+ UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 0);
+}
+
+/*******************************************************************************
+**
+** CF_AppPipe tests
+**
+*******************************************************************************/
+
+void Test_CF_AppPipe_ProcessGroundCommand(void)
+{
+ /* Arrange */
+ CFE_SB_Buffer_t sbbuf;
+ CFE_SB_MsgId_t forced_MsgID = CFE_SB_ValueToMsgId(CF_CMD_MID);
+ CFE_MSG_FcnCode_t forced_return_CFE_MSG_GetFcnCode = 0;
+ CFE_MSG_Size_t forced_return_CFE_MSG_GetSize = 0; /* Invalid size */
+
+ memset(&sbbuf, 0, sizeof(sbbuf));
+
+ /* CFE_MSG_GetMsgId uses return by ref */
+ UT_SetDataBuffer(UT_KEY(CFE_MSG_GetMsgId), &forced_MsgID, sizeof(forced_MsgID), false);
+ UT_SetDataBuffer(UT_KEY(CFE_MSG_GetFcnCode), &forced_return_CFE_MSG_GetFcnCode,
+ sizeof(forced_return_CFE_MSG_GetFcnCode), false);
+ UT_SetDataBuffer(UT_KEY(CFE_MSG_GetSize), &forced_return_CFE_MSG_GetSize, sizeof(forced_return_CFE_MSG_GetSize),
+ false);
+
+ /* Act */
+ CF_AppPipe(&sbbuf);
+
+ /* Assert */
+ UtAssert_STUB_COUNT(CFE_MSG_GetMsgId, 1);
+ UtAssert_STUB_COUNT(CFE_MSG_GetFcnCode, 1);
+ UtAssert_STUB_COUNT(CFE_MSG_GetSize, 1);
+ UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
+
+ /* Assert for incremented counter */
+ UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, 0);
+ UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
+}
+
+void Test_CF_AppPipe_WakeUp(void)
+{
+ /* Arrange */
+ CFE_SB_Buffer_t sbbuf;
+ CFE_SB_MsgId_t forced_MsgID = CFE_SB_ValueToMsgId(CF_WAKE_UP_MID);
+
+ memset(&sbbuf, 0, sizeof(sbbuf));
+
+ /* CFE_MSG_GetMsgId uses return by ref */
+ UT_SetDataBuffer(UT_KEY(CFE_MSG_GetMsgId), &forced_MsgID, sizeof(forced_MsgID), false);
+
+ /* Act */
+ CF_AppPipe(&sbbuf);
+
+ /* Assert */
+ UtAssert_STUB_COUNT(CFE_MSG_GetMsgId, 1);
+ UtAssert_STUB_COUNT(CF_WakeupCmd, 1);
+}
+
+void Test_CF_AppPipe_SendHk(void)
+{
+ CFE_SB_Buffer_t sbbuf;
+ CFE_SB_MsgId_t forced_MsgID = CFE_SB_ValueToMsgId(CF_SEND_HK_MID);
+
+ memset(&sbbuf, 0, sizeof(sbbuf));
+
+ /* CFE_MSG_GetMsgId uses return by ref */
+ UT_SetDataBuffer(UT_KEY(CFE_MSG_GetMsgId), &forced_MsgID, sizeof(forced_MsgID), false);
+
+ /* Act */
+ CF_AppPipe(&sbbuf);
+
+ /* Assert */
+ UtAssert_STUB_COUNT(CFE_MSG_GetMsgId, 1);
+ UtAssert_STUB_COUNT(CF_SendHkCmd, 1);
+}
+
+void Test_CF_AppPipe_UnrecognizedCommandEnterDefaultPath(void)
+{
+ /* Arrange */
+ CFE_SB_MsgId_t forced_MsgID = CFE_SB_INVALID_MSG_ID;
+ CFE_SB_Buffer_t *arg_msg = NULL;
+
+ UT_SetDataBuffer(UT_KEY(CFE_MSG_GetMsgId), &forced_MsgID, sizeof(forced_MsgID), false);
+
+ /* Act */
+ CF_AppPipe(arg_msg);
+
+ /* Assert */
+ UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
+ UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
+ UT_CF_AssertEventID(CF_EID_ERR_INVALID_MID);
+}
+
+void add_CF_ProcessGroundCommand_tests(void)
+{
+ UtTest_Add(Test_CF_ProcessGroundCommand_When_cmd_EqTo_CF_NUM_COMMANDS_FailAndSendEvent, cf_dispatch_tests_Setup,
+ cf_dispatch_tests_Teardown,
+ "Test_CF_ProcessGroundCommand_When_cmd_EqTo_CF_NUM_COMMANDS_FailAndSendEvent");
+ UtTest_Add(Test_CF_ProcessGroundCommand_When_cmd_GreaterThan_CF_NUM_COMMANDS_FailAndSendEvent,
+ cf_dispatch_tests_Setup, cf_dispatch_tests_Teardown,
+ "Test_CF_ProcessGroundCommand_When_cmd_GreaterThan_CF_NUM_COMMANDS_FailAndSendEvent");
+ UtTest_Add(
+ Test_CF_ProcessGroundCommand_Receives_cmd_AndLengthDoesNotMatchExpectedForThatCommandSendEventAndFailure,
+ cf_dispatch_tests_Setup, cf_dispatch_tests_Teardown,
+ "Test_CF_ProcessGroundCommand_Receives_cmd_AndLengthDoesNotMatchExpectedForThatCommandSendEventAndFailure");
+ UtTest_Add(Test_CF_ProcessGroundCommand_ReceivesCmdCode_0x00_AndCall_CF_CmdNoop_With_msg, cf_dispatch_tests_Setup,
+ cf_dispatch_tests_Teardown,
+ "Test_CF_ProcessGroundCommand_ReceivesCmdCode_0x00_AndCall_CF_CmdNoop_With_msg");
+ UtTest_Add(Test_CF_ProcessGroundCommand_ReceivesCmdCode_0x0C_AndDoNothingBecause_fns_12_Is_NULL,
+ cf_dispatch_tests_Setup, cf_dispatch_tests_Teardown,
+ "Test_CF_ProcessGroundCommand_ReceivesCmdCode_0x0C_AndDoNothingBecause_fns_12_Is_NULL");
+}
+
+void add_CF_AppPipe_tests(void)
+{
+ UtTest_Add(Test_CF_AppPipe_ProcessGroundCommand, cf_dispatch_tests_Setup, cf_dispatch_tests_Teardown,
+ "Test_CF_AppPipe_ProcessGroundCommand");
+ UtTest_Add(Test_CF_AppPipe_WakeUp, cf_dispatch_tests_Setup, cf_dispatch_tests_Teardown, "Test_CF_AppPipe_WakeUp");
+ UtTest_Add(Test_CF_AppPipe_SendHk, cf_dispatch_tests_Setup, cf_dispatch_tests_Teardown, "Test_CF_AppPipe_SendHk");
+ UtTest_Add(Test_CF_AppPipe_UnrecognizedCommandEnterDefaultPath, cf_dispatch_tests_Setup, cf_dispatch_tests_Teardown,
+ "Test_CF_AppPipe_UnrecognizedCommandEnterDefaultPath");
+}
+
+/*
+ * Register the test cases to execute with the unit test tool
+ */
+void UtTest_Setup(void)
+{
+ add_CF_ProcessGroundCommand_tests();
+ add_CF_AppPipe_tests();
+}
diff --git a/unit-test/stubs/cf_app_stubs.c b/unit-test/stubs/cf_app_stubs.c
index bceb5843..f9a87b33 100644
--- a/unit-test/stubs/cf_app_stubs.c
+++ b/unit-test/stubs/cf_app_stubs.c
@@ -48,17 +48,6 @@ void CF_CheckTables(void)
UT_GenStub_Execute(CF_CheckTables, Basic, NULL);
}
-/*
- * ----------------------------------------------------
- * Generated stub function for CF_HkCmd()
- * ----------------------------------------------------
- */
-void CF_HkCmd(void)
-{
-
- UT_GenStub_Execute(CF_HkCmd, Basic, NULL);
-}
-
/*
* ----------------------------------------------------
* Generated stub function for CF_Init()
@@ -73,18 +62,6 @@ CFE_Status_t CF_Init(void)
return UT_GenStub_GetReturnValue(CF_Init, CFE_Status_t);
}
-/*
- * ----------------------------------------------------
- * Generated stub function for CF_ProcessMsg()
- * ----------------------------------------------------
- */
-void CF_ProcessMsg(CFE_SB_Buffer_t *msg)
-{
- UT_GenStub_AddParam(CF_ProcessMsg, CFE_SB_Buffer_t *, msg);
-
- UT_GenStub_Execute(CF_ProcessMsg, Basic, NULL);
-}
-
/*
* ----------------------------------------------------
* Generated stub function for CF_TableInit()
@@ -114,14 +91,3 @@ CFE_Status_t CF_ValidateConfigTable(void *tbl_ptr)
return UT_GenStub_GetReturnValue(CF_ValidateConfigTable, CFE_Status_t);
}
-
-/*
- * ----------------------------------------------------
- * Generated stub function for CF_WakeUp()
- * ----------------------------------------------------
- */
-void CF_WakeUp(void)
-{
-
- UT_GenStub_Execute(CF_WakeUp, Basic, NULL);
-}
diff --git a/unit-test/stubs/cf_cmd_stubs.c b/unit-test/stubs/cf_cmd_stubs.c
index 3201c806..307f07e7 100644
--- a/unit-test/stubs/cf_cmd_stubs.c
+++ b/unit-test/stubs/cf_cmd_stubs.c
@@ -26,18 +26,20 @@
#include "cf_cmd.h"
#include "utgenstub.h"
-void UT_DefaultHandler_CF_ProcessGroundCommand(void *, UT_EntryKey_t, const UT_StubContext_t *);
-
/*
* ----------------------------------------------------
* Generated stub function for CF_AbandonCmd()
* ----------------------------------------------------
*/
-void CF_AbandonCmd(const CF_AbandonCmd_t *msg)
+CFE_Status_t CF_AbandonCmd(const CF_AbandonCmd_t *msg)
{
+ UT_GenStub_SetupReturnBuffer(CF_AbandonCmd, CFE_Status_t);
+
UT_GenStub_AddParam(CF_AbandonCmd, const CF_AbandonCmd_t *, msg);
UT_GenStub_Execute(CF_AbandonCmd, Basic, NULL);
+
+ return UT_GenStub_GetReturnValue(CF_AbandonCmd, CFE_Status_t);
}
/*
@@ -45,11 +47,15 @@ void CF_AbandonCmd(const CF_AbandonCmd_t *msg)
* Generated stub function for CF_CancelCmd()
* ----------------------------------------------------
*/
-void CF_CancelCmd(const CF_CancelCmd_t *msg)
+CFE_Status_t CF_CancelCmd(const CF_CancelCmd_t *msg)
{
+ UT_GenStub_SetupReturnBuffer(CF_CancelCmd, CFE_Status_t);
+
UT_GenStub_AddParam(CF_CancelCmd, const CF_CancelCmd_t *, msg);
UT_GenStub_Execute(CF_CancelCmd, Basic, NULL);
+
+ return UT_GenStub_GetReturnValue(CF_CancelCmd, CFE_Status_t);
}
/*
@@ -117,35 +123,47 @@ CF_ChanAction_Status_t CF_CmdValidateMaxOutgoing(uint32 val, uint8 chan_num)
* Generated stub function for CF_DisableDequeueCmd()
* ----------------------------------------------------
*/
-void CF_DisableDequeueCmd(const CF_DisableDequeueCmd_t *msg)
+CFE_Status_t CF_DisableDequeueCmd(const CF_DisableDequeueCmd_t *msg)
{
+ UT_GenStub_SetupReturnBuffer(CF_DisableDequeueCmd, CFE_Status_t);
+
UT_GenStub_AddParam(CF_DisableDequeueCmd, const CF_DisableDequeueCmd_t *, msg);
UT_GenStub_Execute(CF_DisableDequeueCmd, Basic, NULL);
+
+ return UT_GenStub_GetReturnValue(CF_DisableDequeueCmd, CFE_Status_t);
}
/*
* ----------------------------------------------------
- * Generated stub function for CF_DisableEngineCmd()
+ * Generated stub function for CF_DisableDirPollingCmd()
* ----------------------------------------------------
*/
-void CF_DisableEngineCmd(const CF_DisableEngineCmd_t *msg)
+CFE_Status_t CF_DisableDirPollingCmd(const CF_DisableDirPollingCmd_t *msg)
{
- UT_GenStub_AddParam(CF_DisableEngineCmd, const CF_DisableEngineCmd_t *, msg);
+ UT_GenStub_SetupReturnBuffer(CF_DisableDirPollingCmd, CFE_Status_t);
- UT_GenStub_Execute(CF_DisableEngineCmd, Basic, NULL);
+ UT_GenStub_AddParam(CF_DisableDirPollingCmd, const CF_DisableDirPollingCmd_t *, msg);
+
+ UT_GenStub_Execute(CF_DisableDirPollingCmd, Basic, NULL);
+
+ return UT_GenStub_GetReturnValue(CF_DisableDirPollingCmd, CFE_Status_t);
}
/*
* ----------------------------------------------------
- * Generated stub function for CF_DisablePolldirCmd()
+ * Generated stub function for CF_DisableEngineCmd()
* ----------------------------------------------------
*/
-void CF_DisablePolldirCmd(const CF_DisableDirPollingCmd_t *msg)
+CFE_Status_t CF_DisableEngineCmd(const CF_DisableEngineCmd_t *msg)
{
- UT_GenStub_AddParam(CF_DisablePolldirCmd, const CF_DisableDirPollingCmd_t *, msg);
+ UT_GenStub_SetupReturnBuffer(CF_DisableEngineCmd, CFE_Status_t);
+
+ UT_GenStub_AddParam(CF_DisableEngineCmd, const CF_DisableEngineCmd_t *, msg);
- UT_GenStub_Execute(CF_DisablePolldirCmd, Basic, NULL);
+ UT_GenStub_Execute(CF_DisableEngineCmd, Basic, NULL);
+
+ return UT_GenStub_GetReturnValue(CF_DisableEngineCmd, CFE_Status_t);
}
/*
@@ -267,35 +285,47 @@ void CF_DoSuspRes_Txn(CF_Transaction_t *txn, CF_ChanAction_SuspResArg_t *context
* Generated stub function for CF_EnableDequeueCmd()
* ----------------------------------------------------
*/
-void CF_EnableDequeueCmd(const CF_EnableDequeueCmd_t *msg)
+CFE_Status_t CF_EnableDequeueCmd(const CF_EnableDequeueCmd_t *msg)
{
+ UT_GenStub_SetupReturnBuffer(CF_EnableDequeueCmd, CFE_Status_t);
+
UT_GenStub_AddParam(CF_EnableDequeueCmd, const CF_EnableDequeueCmd_t *, msg);
UT_GenStub_Execute(CF_EnableDequeueCmd, Basic, NULL);
+
+ return UT_GenStub_GetReturnValue(CF_EnableDequeueCmd, CFE_Status_t);
}
/*
* ----------------------------------------------------
- * Generated stub function for CF_EnableEngineCmd()
+ * Generated stub function for CF_EnableDirPollingCmd()
* ----------------------------------------------------
*/
-void CF_EnableEngineCmd(const CF_EnableEngineCmd_t *msg)
+CFE_Status_t CF_EnableDirPollingCmd(const CF_EnableDirPollingCmd_t *msg)
{
- UT_GenStub_AddParam(CF_EnableEngineCmd, const CF_EnableEngineCmd_t *, msg);
+ UT_GenStub_SetupReturnBuffer(CF_EnableDirPollingCmd, CFE_Status_t);
- UT_GenStub_Execute(CF_EnableEngineCmd, Basic, NULL);
+ UT_GenStub_AddParam(CF_EnableDirPollingCmd, const CF_EnableDirPollingCmd_t *, msg);
+
+ UT_GenStub_Execute(CF_EnableDirPollingCmd, Basic, NULL);
+
+ return UT_GenStub_GetReturnValue(CF_EnableDirPollingCmd, CFE_Status_t);
}
/*
* ----------------------------------------------------
- * Generated stub function for CF_EnablePolldirCmd()
+ * Generated stub function for CF_EnableEngineCmd()
* ----------------------------------------------------
*/
-void CF_EnablePolldirCmd(const CF_EnableDirPollingCmd_t *msg)
+CFE_Status_t CF_EnableEngineCmd(const CF_EnableEngineCmd_t *msg)
{
- UT_GenStub_AddParam(CF_EnablePolldirCmd, const CF_EnableDirPollingCmd_t *, msg);
+ UT_GenStub_SetupReturnBuffer(CF_EnableEngineCmd, CFE_Status_t);
- UT_GenStub_Execute(CF_EnablePolldirCmd, Basic, NULL);
+ UT_GenStub_AddParam(CF_EnableEngineCmd, const CF_EnableEngineCmd_t *, msg);
+
+ UT_GenStub_Execute(CF_EnableEngineCmd, Basic, NULL);
+
+ return UT_GenStub_GetReturnValue(CF_EnableEngineCmd, CFE_Status_t);
}
/*
@@ -320,11 +350,15 @@ CF_Transaction_t *CF_FindTransactionBySequenceNumberAllChannels(CF_TransactionSe
* Generated stub function for CF_FreezeCmd()
* ----------------------------------------------------
*/
-void CF_FreezeCmd(const CF_FreezeCmd_t *msg)
+CFE_Status_t CF_FreezeCmd(const CF_FreezeCmd_t *msg)
{
+ UT_GenStub_SetupReturnBuffer(CF_FreezeCmd, CFE_Status_t);
+
UT_GenStub_AddParam(CF_FreezeCmd, const CF_FreezeCmd_t *, msg);
UT_GenStub_Execute(CF_FreezeCmd, Basic, NULL);
+
+ return UT_GenStub_GetReturnValue(CF_FreezeCmd, CFE_Status_t);
}
/*
@@ -332,11 +366,15 @@ void CF_FreezeCmd(const CF_FreezeCmd_t *msg)
* Generated stub function for CF_GetParamCmd()
* ----------------------------------------------------
*/
-void CF_GetParamCmd(const CF_GetParamCmd_t *msg)
+CFE_Status_t CF_GetParamCmd(const CF_GetParamCmd_t *msg)
{
+ UT_GenStub_SetupReturnBuffer(CF_GetParamCmd, CFE_Status_t);
+
UT_GenStub_AddParam(CF_GetParamCmd, const CF_GetParamCmd_t *, msg);
UT_GenStub_Execute(CF_GetParamCmd, Basic, NULL);
+
+ return UT_GenStub_GetReturnValue(CF_GetParamCmd, CFE_Status_t);
}
/*
@@ -359,11 +397,15 @@ void CF_GetSetParamCmd(uint8 is_set, CF_GetSet_ValueID_t param_id, uint32 value,
* Generated stub function for CF_NoopCmd()
* ----------------------------------------------------
*/
-void CF_NoopCmd(const CF_NoopCmd_t *msg)
+CFE_Status_t CF_NoopCmd(const CF_NoopCmd_t *msg)
{
+ UT_GenStub_SetupReturnBuffer(CF_NoopCmd, CFE_Status_t);
+
UT_GenStub_AddParam(CF_NoopCmd, const CF_NoopCmd_t *, msg);
UT_GenStub_Execute(CF_NoopCmd, Basic, NULL);
+
+ return UT_GenStub_GetReturnValue(CF_NoopCmd, CFE_Status_t);
}
/*
@@ -371,23 +413,15 @@ void CF_NoopCmd(const CF_NoopCmd_t *msg)
* Generated stub function for CF_PlaybackDirCmd()
* ----------------------------------------------------
*/
-void CF_PlaybackDirCmd(const CF_PlaybackDirCmd_t *msg)
+CFE_Status_t CF_PlaybackDirCmd(const CF_PlaybackDirCmd_t *msg)
{
+ UT_GenStub_SetupReturnBuffer(CF_PlaybackDirCmd, CFE_Status_t);
+
UT_GenStub_AddParam(CF_PlaybackDirCmd, const CF_PlaybackDirCmd_t *, msg);
UT_GenStub_Execute(CF_PlaybackDirCmd, Basic, NULL);
-}
-/*
- * ----------------------------------------------------
- * Generated stub function for CF_ProcessGroundCommand()
- * ----------------------------------------------------
- */
-void CF_ProcessGroundCommand(CFE_SB_Buffer_t *msg)
-{
- UT_GenStub_AddParam(CF_ProcessGroundCommand, CFE_SB_Buffer_t *, msg);
-
- UT_GenStub_Execute(CF_ProcessGroundCommand, Basic, UT_DefaultHandler_CF_ProcessGroundCommand);
+ return UT_GenStub_GetReturnValue(CF_PlaybackDirCmd, CFE_Status_t);
}
/*
@@ -412,11 +446,15 @@ CF_CListTraverse_Status_t CF_PurgeHistory(CF_CListNode_t *node, void *arg)
* Generated stub function for CF_PurgeQueueCmd()
* ----------------------------------------------------
*/
-void CF_PurgeQueueCmd(const CF_PurgeQueueCmd_t *msg)
+CFE_Status_t CF_PurgeQueueCmd(const CF_PurgeQueueCmd_t *msg)
{
+ UT_GenStub_SetupReturnBuffer(CF_PurgeQueueCmd, CFE_Status_t);
+
UT_GenStub_AddParam(CF_PurgeQueueCmd, const CF_PurgeQueueCmd_t *, msg);
UT_GenStub_Execute(CF_PurgeQueueCmd, Basic, NULL);
+
+ return UT_GenStub_GetReturnValue(CF_PurgeQueueCmd, CFE_Status_t);
}
/*
@@ -441,11 +479,15 @@ CF_CListTraverse_Status_t CF_PurgeTransaction(CF_CListNode_t *node, void *ignore
* Generated stub function for CF_ResetCmd()
* ----------------------------------------------------
*/
-void CF_ResetCmd(const CF_ResetCmd_t *msg)
+CFE_Status_t CF_ResetCmd(const CF_ResetCmd_t *msg)
{
+ UT_GenStub_SetupReturnBuffer(CF_ResetCmd, CFE_Status_t);
+
UT_GenStub_AddParam(CF_ResetCmd, const CF_ResetCmd_t *, msg);
UT_GenStub_Execute(CF_ResetCmd, Basic, NULL);
+
+ return UT_GenStub_GetReturnValue(CF_ResetCmd, CFE_Status_t);
}
/*
@@ -453,11 +495,31 @@ void CF_ResetCmd(const CF_ResetCmd_t *msg)
* Generated stub function for CF_ResumeCmd()
* ----------------------------------------------------
*/
-void CF_ResumeCmd(const CF_ResumeCmd_t *msg)
+CFE_Status_t CF_ResumeCmd(const CF_ResumeCmd_t *msg)
{
+ UT_GenStub_SetupReturnBuffer(CF_ResumeCmd, CFE_Status_t);
+
UT_GenStub_AddParam(CF_ResumeCmd, const CF_ResumeCmd_t *, msg);
UT_GenStub_Execute(CF_ResumeCmd, Basic, NULL);
+
+ return UT_GenStub_GetReturnValue(CF_ResumeCmd, CFE_Status_t);
+}
+
+/*
+ * ----------------------------------------------------
+ * Generated stub function for CF_SendHkCmd()
+ * ----------------------------------------------------
+ */
+CFE_Status_t CF_SendHkCmd(const CF_SendHkCmd_t *msg)
+{
+ UT_GenStub_SetupReturnBuffer(CF_SendHkCmd, CFE_Status_t);
+
+ UT_GenStub_AddParam(CF_SendHkCmd, const CF_SendHkCmd_t *, msg);
+
+ UT_GenStub_Execute(CF_SendHkCmd, Basic, NULL);
+
+ return UT_GenStub_GetReturnValue(CF_SendHkCmd, CFE_Status_t);
}
/*
@@ -465,11 +527,15 @@ void CF_ResumeCmd(const CF_ResumeCmd_t *msg)
* Generated stub function for CF_SetParamCmd()
* ----------------------------------------------------
*/
-void CF_SetParamCmd(const CF_SetParamCmd_t *msg)
+CFE_Status_t CF_SetParamCmd(const CF_SetParamCmd_t *msg)
{
+ UT_GenStub_SetupReturnBuffer(CF_SetParamCmd, CFE_Status_t);
+
UT_GenStub_AddParam(CF_SetParamCmd, const CF_SetParamCmd_t *, msg);
UT_GenStub_Execute(CF_SetParamCmd, Basic, NULL);
+
+ return UT_GenStub_GetReturnValue(CF_SetParamCmd, CFE_Status_t);
}
/*
@@ -477,11 +543,15 @@ void CF_SetParamCmd(const CF_SetParamCmd_t *msg)
* Generated stub function for CF_SuspendCmd()
* ----------------------------------------------------
*/
-void CF_SuspendCmd(const CF_SuspendCmd_t *msg)
+CFE_Status_t CF_SuspendCmd(const CF_SuspendCmd_t *msg)
{
+ UT_GenStub_SetupReturnBuffer(CF_SuspendCmd, CFE_Status_t);
+
UT_GenStub_AddParam(CF_SuspendCmd, const CF_SuspendCmd_t *, msg);
UT_GenStub_Execute(CF_SuspendCmd, Basic, NULL);
+
+ return UT_GenStub_GetReturnValue(CF_SuspendCmd, CFE_Status_t);
}
/*
@@ -489,11 +559,15 @@ void CF_SuspendCmd(const CF_SuspendCmd_t *msg)
* Generated stub function for CF_ThawCmd()
* ----------------------------------------------------
*/
-void CF_ThawCmd(const CF_ThawCmd_t *msg)
+CFE_Status_t CF_ThawCmd(const CF_ThawCmd_t *msg)
{
+ UT_GenStub_SetupReturnBuffer(CF_ThawCmd, CFE_Status_t);
+
UT_GenStub_AddParam(CF_ThawCmd, const CF_ThawCmd_t *, msg);
UT_GenStub_Execute(CF_ThawCmd, Basic, NULL);
+
+ return UT_GenStub_GetReturnValue(CF_ThawCmd, CFE_Status_t);
}
/*
@@ -521,11 +595,31 @@ int32 CF_TsnChanAction(const CF_Transaction_Payload_t *data, const char *cmdstr,
* Generated stub function for CF_TxFileCmd()
* ----------------------------------------------------
*/
-void CF_TxFileCmd(const CF_TxFileCmd_t *msg)
+CFE_Status_t CF_TxFileCmd(const CF_TxFileCmd_t *msg)
{
+ UT_GenStub_SetupReturnBuffer(CF_TxFileCmd, CFE_Status_t);
+
UT_GenStub_AddParam(CF_TxFileCmd, const CF_TxFileCmd_t *, msg);
UT_GenStub_Execute(CF_TxFileCmd, Basic, NULL);
+
+ return UT_GenStub_GetReturnValue(CF_TxFileCmd, CFE_Status_t);
+}
+
+/*
+ * ----------------------------------------------------
+ * Generated stub function for CF_WakeupCmd()
+ * ----------------------------------------------------
+ */
+CFE_Status_t CF_WakeupCmd(const CF_WakeupCmd_t *msg)
+{
+ UT_GenStub_SetupReturnBuffer(CF_WakeupCmd, CFE_Status_t);
+
+ UT_GenStub_AddParam(CF_WakeupCmd, const CF_WakeupCmd_t *, msg);
+
+ UT_GenStub_Execute(CF_WakeupCmd, Basic, NULL);
+
+ return UT_GenStub_GetReturnValue(CF_WakeupCmd, CFE_Status_t);
}
/*
@@ -533,9 +627,13 @@ void CF_TxFileCmd(const CF_TxFileCmd_t *msg)
* Generated stub function for CF_WriteQueueCmd()
* ----------------------------------------------------
*/
-void CF_WriteQueueCmd(const CF_WriteQueueCmd_t *msg)
+CFE_Status_t CF_WriteQueueCmd(const CF_WriteQueueCmd_t *msg)
{
+ UT_GenStub_SetupReturnBuffer(CF_WriteQueueCmd, CFE_Status_t);
+
UT_GenStub_AddParam(CF_WriteQueueCmd, const CF_WriteQueueCmd_t *, msg);
UT_GenStub_Execute(CF_WriteQueueCmd, Basic, NULL);
+
+ return UT_GenStub_GetReturnValue(CF_WriteQueueCmd, CFE_Status_t);
}
diff --git a/unit-test/stubs/cf_dispatch_stubs.c b/unit-test/stubs/cf_dispatch_stubs.c
new file mode 100644
index 00000000..0b0a7740
--- /dev/null
+++ b/unit-test/stubs/cf_dispatch_stubs.c
@@ -0,0 +1,51 @@
+/************************************************************************
+ * NASA Docket No. GSC-18,447-1, and identified as “CFS CFDP (CF)
+ * Application version 3.0.0”
+ *
+ * Copyright (c) 2019 United States Government as represented by the
+ * Administrator of the National Aeronautics and Space Administration.
+ * All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License. You may obtain
+ * a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ************************************************************************/
+
+/**
+ * @file
+ *
+ * Auto-Generated stub implementations for functions defined in cf_dispatch header
+ */
+
+#include "cf_dispatch.h"
+#include "utgenstub.h"
+
+/*
+ * ----------------------------------------------------
+ * Generated stub function for CF_AppPipe()
+ * ----------------------------------------------------
+ */
+void CF_AppPipe(const CFE_SB_Buffer_t *msg)
+{
+ UT_GenStub_AddParam(CF_AppPipe, const CFE_SB_Buffer_t *, msg);
+
+ UT_GenStub_Execute(CF_AppPipe, Basic, NULL);
+}
+
+/*
+ * ----------------------------------------------------
+ * Generated stub function for CF_ProcessGroundCommand()
+ * ----------------------------------------------------
+ */
+void CF_ProcessGroundCommand(const CFE_SB_Buffer_t *msg)
+{
+ UT_GenStub_AddParam(CF_ProcessGroundCommand, const CFE_SB_Buffer_t *, msg);
+
+ UT_GenStub_Execute(CF_ProcessGroundCommand, Basic, NULL);
+}