diff --git a/config/default_cf_extern_typedefs.h b/config/default_cf_extern_typedefs.h
index ed441941..66100420 100644
--- a/config/default_cf_extern_typedefs.h
+++ b/config/default_cf_extern_typedefs.h
@@ -38,11 +38,19 @@
*
* Defined per section 7.1 of CCSDS 727.0-B-5
*/
-typedef enum
+enum CF_CFDP_Class
{
- CF_CFDP_CLASS_1 = 0, /**< \brief CFDP class 1 - Unreliable transfer */
- CF_CFDP_CLASS_2 = 1, /**< \brief CFDP class 2 - Reliable transfer */
-} CF_CFDP_Class_t;
+ CF_CFDP_Class_1 = 0, /**< \brief CFDP class 1 - Unreliable transfer */
+ CF_CFDP_Class_2 = 1, /**< \brief CFDP class 2 - Reliable transfer */
+};
+
+/**
+ * @brief External type to use for CFDP class
+ *
+ * This uses the labels defined in enum CF_CFDP_Class
+ * but maps to a fixed-width type for use in CMD/TLM/Tables
+ */
+typedef uint8 CF_CFDP_Class_Enum_t;
/**
* @brief CF queue identifiers
diff --git a/config/default_cf_msgdefs.h b/config/default_cf_msgdefs.h
index 285aedf2..fcd5be2c 100644
--- a/config/default_cf_msgdefs.h
+++ b/config/default_cf_msgdefs.h
@@ -28,6 +28,66 @@
#include "common_types.h"
#include "cf_extern_typedefs.h"
+/**
+ * \defgroup cfscfmsgtypes Typedefs used in CFS CFDP Commands and Telemetry
+ * \{
+ */
+
+/**
+ * \brief Type IDs for use for Write Queue cmd
+ */
+typedef enum CF_Type
+{
+ CF_Type_all = 0, /**< \brief Type all */
+ CF_Type_up = 1, /**< \brief Type up */
+ CF_Type_down = 2 /**< \brief Type down */
+} CF_Type_t;
+
+/**
+ * @brief External type to use for CFDP queue type
+ *
+ * This uses the labels defined in enum CF_Type
+ * but maps to a fixed-width type for use in CMD/TLM/Tables
+ */
+typedef uint8 CF_Type_Enum_t;
+
+/**
+ * @brief Standardized type used for channel selection in commands
+ *
+ * 255 = all channels (if applicable; not all commands allow all channels)
+ * 0-X = single channel number
+ */
+typedef uint8 CF_ChannelSelect_t;
+
+/**
+ * Standardized type used for polling directory selection in commands
+ *
+ * 255 = all polling directory indices (if applicable)
+ * 0-X = single polling directory index number
+ */
+typedef uint8 CF_PollIdxSelect_t;
+
+/**
+ * \brief Enum labels for use for queue selection
+ */
+enum CF_QueueSelect
+{
+ CF_QueueSelect_Pending = 0, /**< \brief Pending Queue */
+ CF_QueueSelect_Active = 1, /**< \brief Active Queue */
+ CF_QueueSelect_History = 2, /**< \brief History Queue */
+ CF_QueueSelect_All = 3, /**< \brief All queues */
+};
+
+/**
+ * @brief External type to use for CFDP queue select
+ *
+ * This uses the labels defined in enum CF_QueueSelect
+ * but maps to a fixed-width type for use in CMD/TLM/Tables
+ */
+typedef uint8 CF_QueueSelect_Enum_t;
+
+/** \} */
+
/**
* \defgroup cfscftlm CFS CFDP Telemetry
* \{
@@ -146,47 +206,86 @@ typedef struct CF_EotPacket_Payload
*/
/**
- * \brief Command payload argument union to support 4 uint8's, 2 uint16's or 1 uint32
+ * \brief Enum labels for use for Reset cmd
*/
-typedef union CF_UnionArgs_Payload
-{
- uint32 dword; /**< \brief Generic uint32 argument */
- uint16 hword[2]; /**< \brief Generic uint16 array of arguments */
- uint8 byte[4]; /**< \brief Generic uint8 array of arguments */
-} CF_UnionArgs_Payload_t;
-
-/**
- * \brief IDs for use for Reset cmd
- */
-typedef enum
+enum CF_Reset
{
CF_Reset_all = 0, /**< \brief Reset all */
CF_Reset_command = 1, /**< \brief Reset command */
CF_Reset_fault = 2, /**< \brief Reset fault */
CF_Reset_up = 3, /**< \brief Reset up */
CF_Reset_down = 4 /**< \brief Reset down */
-} CF_Reset_t;
+};
/**
- * \brief Type IDs for use for Write Queue cmd
+ * @brief External type to use for Reset command
+ *
+ * This uses the labels defined in enum CF_Reset
+ * but maps to a fixed-width type for use in CMD/TLM/Tables
+ */
+typedef uint8 CF_Reset_Enum_t;
+
+/**
+ * \brief Reset command payload
+ *
+ * For command details see #CF_RESET_CC
*/
-typedef enum
+typedef struct CF_ResetCountersCmd_Payload
{
- CF_Type_all = 0, /**< \brief Type all */
- CF_Type_up = 1, /**< \brief Type up */
- CF_Type_down = 2 /**< \brief Type down */
-} CF_Type_t;
+ CF_Reset_Enum_t ResetType;
+} CF_ResetCountersCmd_Payload_t;
+
+/**
+ * \brief Single byte channel selector payload
+ *
+ * Used in all commands needing only a channel selection
+ * - 255 = all channels
+ * - else = single channel
+ */
+typedef struct CF_ChannelSelect_Payload
+{
+ CF_ChannelSelect_t ChannelSelect;
+} CF_ChannelSelect_Payload_t;
+
+/**
+ * \brief Polling directory selector payload
+ *
+ * Used in all commands needing a polldir selection
+ *
+ * Single byte channel selector
+ * - 255 = all channels
+ * - else = single channel
+ *
+ * Single byte polling directory index
+ * - 255 = all polling directories
+ * - else = single polling directory index
+ */
+typedef struct CF_PollDirSelect_Payload
+{
+ CF_ChannelSelect_t ChannelSelect;
+ CF_PollIdxSelect_t PollDirIndx;
+} CF_PollDirSelect_Payload_t;
/**
- * \brief Queue IDs for use for Write Queue cmd
+ * \brief Queue selector payload
+ *
+ * Used in all commands needing a queue selection
+ *
+ * Single byte channel selector
+ * - 255 = all channels
+ * - else = single channel
+ *
+ * Single byte queue selection enum
+ * Values indicated by #CF_QueueSelect enum
+ * - 0 = Pending queue
+ * - 1 = History queue
+ * - 2 = Both pending and history queue
*/
-typedef enum
+typedef struct CF_QueueSelect_Payload
{
- CF_Queue_pend = 0, /**< \brief Queue pending */
- CF_Queue_active = 1, /**< \brief Queue active */
- CF_Queue_history = 2, /**< \brief Queue history */
- CF_Queue_all = 3 /**< \brief Queue all */
-} CF_Queue_t;
+ CF_ChannelSelect_t ChannelSelect;
+ CF_QueueSelect_Enum_t QueueSelect;
+} CF_QueueSelect_Payload_t;
/**
* \brief Parameter IDs for use with Get/Set parameter messages
@@ -194,7 +293,7 @@ typedef enum
* Specifically these are used for the "key" field within CF_GetParamCmd_t and
* CF_SetParamCmd_t message structures.
*/
-typedef enum
+enum CF_GetSet_ValueID
{
CF_GetSet_ValueID_ticks_per_second, /**< \brief Ticks per second key */
CF_GetSet_ValueID_rx_crc_calc_bytes_per_wakeup, /**< \brief Receive CRC calculated bytes per wake-up key */
@@ -207,7 +306,15 @@ typedef enum
CF_GetSet_ValueID_local_eid, /**< \brief Local entity id key */
CF_GetSet_ValueID_chan_max_outgoing_messages_per_wakeup, /**< \brief Max outgoing messages per wake-up key */
CF_GetSet_ValueID_MAX /**< \brief Key limit used for validity check */
-} CF_GetSet_ValueID_t;
+};
+
+/**
+ * @brief External type to use for CF_GetSet_ValueID
+ *
+ * This uses the labels defined in enum CF_GetSet_ValueID
+ * but maps to a fixed-width type for use in CMD/TLM/Tables
+ */
+typedef uint8 CF_GetSet_ValueID_Enum_t;
/**
* \brief Get parameter command structure
@@ -216,8 +323,8 @@ typedef enum
*/
typedef struct CF_GetParam_Payload
{
- uint8 key; /**< \brief Parameter key, see #CF_GetSet_ValueID_t */
- uint8 chan_num; /**< \brief Channel number */
+ CF_GetSet_ValueID_Enum_t key; /**< \brief Parameter key, see #CF_GetSet_ValueID_t */
+ CF_ChannelSelect_t chan_num; /**< \brief Channel number */
} CF_GetParam_Payload_t;
/**
@@ -227,10 +334,10 @@ typedef struct CF_GetParam_Payload
*/
typedef struct CF_SetParam_Payload
{
- uint32 value; /**< \brief Parameter value to set */
- uint8 key; /**< \brief Parameter key, see #CF_GetSet_ValueID_t */
- uint8 chan_num; /**< \brief Channel number */
- uint8 spare[2]; /**< \brief Alignment spare, uint32 multiple */
+ uint32 value; /**< \brief Parameter value to set */
+ CF_GetSet_ValueID_Enum_t key; /**< \brief Parameter key, see #CF_GetSet_ValueID_t */
+ CF_ChannelSelect_t chan_num; /**< \brief Channel number */
+ uint8 spare[2]; /**< \brief Alignment spare, uint32 multiple */
} CF_SetParam_Payload_t;
/**
@@ -240,13 +347,13 @@ typedef struct CF_SetParam_Payload
*/
typedef struct CF_TxFile_Payload
{
- uint8 cfdp_class; /**< \brief CFDP class: 0=class 1, 1=class 2 */
- uint8 keep; /**< \brief Keep file flag: 1=keep, else delete */
- uint8 chan_num; /**< \brief Channel number */
- uint8 priority; /**< \brief Priority: 0=highest priority */
- CF_EntityId_t dest_id; /**< \brief Destination entity id */
- char src_filename[CF_FILENAME_MAX_LEN]; /**< \brief Source file/directory name */
- char dst_filename[CF_FILENAME_MAX_LEN]; /**< \brief Destination file/directory name */
+ CF_CFDP_Class_Enum_t cfdp_class; /**< \brief CFDP class: 0=class 1, 1=class 2 */
+ uint8 keep; /**< \brief Keep file flag: 1=keep, else delete */
+ CF_ChannelSelect_t chan_num; /**< \brief Channel number */
+ uint8 priority; /**< \brief Priority: 0=highest priority */
+ CF_EntityId_t dest_id; /**< \brief Destination entity id */
+ char src_filename[CF_FILENAME_MAX_LEN]; /**< \brief Source file/directory name */
+ char dst_filename[CF_FILENAME_MAX_LEN]; /**< \brief Destination file/directory name */
} CF_TxFile_Payload_t;
/**
@@ -256,10 +363,10 @@ typedef struct CF_TxFile_Payload
*/
typedef struct CF_WriteQueue_Payload
{
- uint8 type; /**< \brief Transaction direction: all=0, up=1, down=2 */
- uint8 chan; /**< \brief Channel number */
- uint8 queue; /**< \brief Queue type: 0=pending, 1=active, 2=history, 3=all */
- uint8 spare; /**< \brief Alignment spare, puts filename on 32-bit boundary */
+ CF_Type_Enum_t type; /**< \brief Transaction direction: all=0, up=1, down=2 */
+ CF_ChannelSelect_t chan; /**< \brief Channel number */
+ CF_QueueSelect_Enum_t queue; /**< \brief Queue type: 0=pending, 1=active, 2=history, 3=all */
+ uint8 spare; /**< \brief Alignment spare, puts filename on 32-bit boundary */
char filename[CF_FILENAME_MAX_LEN]; /**< \brief Filename written to */
} CF_WriteQueue_Payload_t;
@@ -273,10 +380,32 @@ typedef struct CF_Transaction_Payload
{
CF_TransactionSeq_t ts; /**< \brief Transaction sequence number */
CF_EntityId_t eid; /**< \brief Entity id */
- uint8 chan; /**< \brief Channel number: 254=use ts, 255=all channels, else channel */
+ CF_ChannelSelect_t chan_num; /**< \brief Channel number: 254=use ts, 255=all channels, else channel */
uint8 spare[3]; /**< \brief Alignment spare for 32-bit multiple */
} CF_Transaction_Payload_t;
/**\}*/
+/**
+ * @brief Internal type (enum) for the CFDP class.
+ *
+ * This typedef should only be used internally but the same labels/values
+ * apply externally as well. Notably this is a native-width type, and for
+ * external cmd/tlm use it needs to be a fixed-width type.
+ *
+ * @sa #CF_CFDP_Class_Enum_t
+ */
+typedef enum CF_CFDP_Class CF_CFDP_Class_t;
+
+/**
+ * @brief Internal type (enum) for the CFDP value identifier.
+ *
+ * This typedef should only be used internally but the same labels/values
+ * apply externally as well. Notably this is a native-width type, and for
+ * external cmd/tlm use it needs to be a fixed-width type.
+ *
+ * @sa #CF_GetSet_ValueID_Enum_t
+ */
+typedef enum CF_GetSet_ValueID CF_GetSet_ValueID_t;
+
#endif
diff --git a/config/default_cf_msgstruct.h b/config/default_cf_msgstruct.h
index 29eec046..dd60de22 100644
--- a/config/default_cf_msgstruct.h
+++ b/config/default_cf_msgstruct.h
@@ -103,8 +103,8 @@ typedef struct CF_DisableEngineCmd
*/
typedef struct CF_ResetCountersCmd
{
- CFE_MSG_CommandHeader_t CommandHeader; /**< \brief Command header */
- CF_UnionArgs_Payload_t Payload; /**< \brief Generic command arguments */
+ CFE_MSG_CommandHeader_t CommandHeader; /**< \brief Command header */
+ CF_ResetCountersCmd_Payload_t Payload; /**< \brief Command arguments */
} CF_ResetCountersCmd_t;
/**
@@ -114,8 +114,8 @@ typedef struct CF_ResetCountersCmd
*/
typedef struct CF_FreezeCmd
{
- CFE_MSG_CommandHeader_t CommandHeader; /**< \brief Command header */
- CF_UnionArgs_Payload_t Payload; /**< \brief Generic command arguments */
+ CFE_MSG_CommandHeader_t CommandHeader; /**< \brief Command header */
+ CF_ChannelSelect_Payload_t Payload; /**< \brief Command arguments */
} CF_FreezeCmd_t;
/**
@@ -125,8 +125,8 @@ typedef struct CF_FreezeCmd
*/
typedef struct CF_ThawCmd
{
- CFE_MSG_CommandHeader_t CommandHeader; /**< \brief Command header */
- CF_UnionArgs_Payload_t Payload; /**< \brief Generic command arguments */
+ CFE_MSG_CommandHeader_t CommandHeader; /**< \brief Command header */
+ CF_ChannelSelect_Payload_t Payload; /**< \brief Command arguments */
} CF_ThawCmd_t;
/**
@@ -136,8 +136,8 @@ typedef struct CF_ThawCmd
*/
typedef struct CF_EnableDequeueCmd
{
- CFE_MSG_CommandHeader_t CommandHeader; /**< \brief Command header */
- CF_UnionArgs_Payload_t Payload; /**< \brief Generic command arguments */
+ CFE_MSG_CommandHeader_t CommandHeader; /**< \brief Command header */
+ CF_ChannelSelect_Payload_t Payload; /**< \brief Command arguments */
} CF_EnableDequeueCmd_t;
/**
@@ -147,8 +147,8 @@ typedef struct CF_EnableDequeueCmd
*/
typedef struct CF_DisableDequeueCmd
{
- CFE_MSG_CommandHeader_t CommandHeader; /**< \brief Command header */
- CF_UnionArgs_Payload_t Payload; /**< \brief Generic command arguments */
+ CFE_MSG_CommandHeader_t CommandHeader; /**< \brief Command header */
+ CF_ChannelSelect_Payload_t Payload; /**< \brief Command arguments */
} CF_DisableDequeueCmd_t;
/**
@@ -158,8 +158,8 @@ typedef struct CF_DisableDequeueCmd
*/
typedef struct CF_EnableDirPollingCmd
{
- CFE_MSG_CommandHeader_t CommandHeader; /**< \brief Command header */
- CF_UnionArgs_Payload_t Payload; /**< \brief Generic command arguments */
+ CFE_MSG_CommandHeader_t CommandHeader; /**< \brief Command header */
+ CF_PollDirSelect_Payload_t Payload; /**< \brief Command arguments */
} CF_EnableDirPollingCmd_t;
/**
@@ -169,8 +169,8 @@ typedef struct CF_EnableDirPollingCmd
*/
typedef struct CF_DisableDirPollingCmd
{
- CFE_MSG_CommandHeader_t CommandHeader; /**< \brief Command header */
- CF_UnionArgs_Payload_t Payload; /**< \brief Generic command arguments */
+ CFE_MSG_CommandHeader_t CommandHeader; /**< \brief Command header */
+ CF_PollDirSelect_Payload_t Payload; /**< \brief Command arguments */
} CF_DisableDirPollingCmd_t;
/**
@@ -180,8 +180,8 @@ typedef struct CF_DisableDirPollingCmd
*/
typedef struct CF_PurgeQueueCmd
{
- CFE_MSG_CommandHeader_t CommandHeader; /**< \brief Command header */
- CF_UnionArgs_Payload_t Payload; /**< \brief Generic command arguments */
+ CFE_MSG_CommandHeader_t CommandHeader; /**< \brief Command header */
+ CF_QueueSelect_Payload_t Payload; /**< \brief Command arguments */
} CF_PurgeQueueCmd_t;
/**
diff --git a/config/default_cf_tbldefs.h b/config/default_cf_tbldefs.h
index 03da6e33..73f0801d 100644
--- a/config/default_cf_tbldefs.h
+++ b/config/default_cf_tbldefs.h
@@ -41,9 +41,9 @@ typedef struct CF_PollDir
{
uint32 interval_sec; /**< \brief number of seconds to wait before trying a new directory */
- uint8 priority; /**< \brief priority to use when placing transactions on the pending queue */
- CF_CFDP_Class_t cfdp_class; /**< \brief the CFDP class to send */
- CF_EntityId_t dest_eid; /**< \brief destination entity id */
+ uint8 priority; /**< \brief priority to use when placing transactions on the pending queue */
+ CF_CFDP_Class_Enum_t cfdp_class; /**< \brief the CFDP class to send */
+ CF_EntityId_t dest_eid; /**< \brief destination entity id */
char src_dir[CF_FILENAME_MAX_PATH]; /**< \brief path to source dir */
char dst_dir[CF_FILENAME_MAX_PATH]; /**< \brief path to destination dir */
@@ -83,7 +83,15 @@ typedef struct CF_ChannelConfig
* For backward compatibility with existing CF table definitions, include the other part here.
*/
#ifndef CF_OMIT_DEPRECATED
+
#include "cf_tblstruct.h"
+
+/*
+ * Preserve compatibility with table definitions that specify the class using these terms
+ */
+#define CF_CFDP_CLASS_1 CF_CFDP_Class_1
+#define CF_CFDP_CLASS_2 CF_CFDP_Class_2
+
#endif
#endif
diff --git a/config/eds_cf_extern_typedefs.h b/config/eds_cf_extern_typedefs.h
index f1d514d2..374bb160 100644
--- a/config/eds_cf_extern_typedefs.h
+++ b/config/eds_cf_extern_typedefs.h
@@ -33,18 +33,21 @@
#include "cf_eds_typedefs.h"
/* Define type mappings for CF-specific types */
-typedef CF_QueueIdx_Enum_t CF_QueueIdx_t;
#define CF_QueueIdx_NUM (1 + EdsDataType_EdsEnum_CF_QueueIdx_t_MAX)
#define CF_GetSet_ValueID_MAX (1 + EdsDataType_EdsEnum_CF_GetSet_ValueID_t_MAX)
-typedef CF_EntityId_Atom_t CF_EntityId_t;
-typedef CF_TransactionSeq_Atom_t CF_TransactionSeq_t;
+typedef EdsDataType_CF_EntityId_t CF_EntityId_t;
+typedef EdsDataType_CF_TransactionSeq_t CF_TransactionSeq_t;
-typedef CF_CFDP_Enum_t CF_CFDP_Class_t;
-typedef CF_GetSet_ValueID_Enum_t CF_GetSet_ValueID_t;
+typedef enum EdsEnum_CF_QueueIdx CF_QueueIdx_t;
+typedef enum EdsEnum_CF_CFDP_Class CF_CFDP_Class_t;
+typedef enum EdsEnum_CF_GetSet_ValueID CF_GetSet_ValueID_t;
+
+typedef EdsDataType_CF_PollIdxSelect_t CF_PollIdxSelect_t;
+typedef EdsDataType_CF_ChannelSelect_t CF_ChannelSelect_t;
typedef EdsDataType_BASE_TYPES_PathName_t CF_PathName_t;
typedef EdsDataType_BASE_TYPES_FileName_t CF_FileName_t;
-#endif
\ No newline at end of file
+#endif
diff --git a/config/eds_cf_msgdefs.h b/config/eds_cf_msgdefs.h
index 53a76786..76744c3d 100644
--- a/config/eds_cf_msgdefs.h
+++ b/config/eds_cf_msgdefs.h
@@ -28,4 +28,4 @@
#include "cf_eds_typedefs.h"
#include "cf_fcncodes.h"
-#endif
\ No newline at end of file
+#endif
diff --git a/docs/dox_src/cfs_cf.dox b/docs/dox_src/cfs_cf.dox
index 3778eb44..fb378ee1 100644
--- a/docs/dox_src/cfs_cf.dox
+++ b/docs/dox_src/cfs_cf.dox
@@ -398,23 +398,23 @@
When files are found in a polling directory that is enabled, the files are
automatically queued by CF for output. The polling rate is configurable and
each channel has a configurable number of polling directories. Each polling
- directory has an enable, a class setting, a priority setting, a destination
- directory. When enabled, CF will periodically check the polling directories
- for files. When a file is found, CF will place the file information on the
- pending queue if it is closed and not already on the queue and not currently
- active. All polling directories are checked at the same frequency which is
- defined by the table parameter NumWakeupsPerPollDirChk. Setting this parameter
- to one will cause CF to check the polling directories at the fastest possible
- rate, every time it receives a 'wake-up' command. Checking polling directories
- is a processor-intensive effort, it is best to keep the polling rate as low as
+ directory has an enable, a class setting, a priority setting, a destination
+ directory. When enabled, CF will periodically check the polling directories
+ for files. When a file is found, CF will place the file information on the
+ pending queue if it is closed and not already on the queue and not currently
+ active. All polling directories are checked at the same frequency which is
+ defined by the table parameter NumWakeupsPerPollDirChk. Setting this parameter
+ to one will cause CF to check the polling directories at the fastest possible
+ rate, every time it receives a 'wake-up' command. Checking polling directories
+ is a processor-intensive effort, it is best to keep the polling rate as low as
possible.
Failed Transmit and directory use
-
- Currently, the fail directory is used only to store class 2 TX files that failed
- during transmission from a polling directory. When a file fails during transmission
- from a polling directory, it is deleted from the polling directory to prevent an
- infinite loop and moved to the fail directory. However, if a file fails during a
+
+ Currently, the fail directory is used only to store class 2 TX files that failed
+ during transmission from a polling directory. When a file fails during transmission
+ from a polling directory, it is deleted from the polling directory to prevent an
+ infinite loop and moved to the fail directory. However, if a file fails during a
class 2 TX outside of a polling directory, the file will not be deleted.
Efficiency
@@ -612,19 +612,11 @@
\verbatim
* \par Command Structure
- * #CF_UnionArgs_Payload_t where byte[0] specifies the counters type, byte[1-3] don't care:
* - 0 = all counters
* - 1 = command counters
* - 2 = fault counters
* - 3 = up counters
* - 4 = down counters
- typedef union CF_UnionArgs_Payload
- {
- uint32 dword;
- uint16 hword[2];
- uint8 byte[4];
- }
-CF_UnionArgs_Payload_t;
\endverbatim
The command parameter byte[0] identifies which category of counters to
@@ -653,8 +645,8 @@ CF_UnionArgs_Payload_t;
and an event will be generated.
If the command is not successful, the command error counter will increment and
- an error event will be generated indicating the reason for failure. File will
- not be deleted if the 'transmit' failed (unless in an polling directories).
+ an error event will be generated indicating the reason for failure. File will
+ not be deleted if the 'transmit' failed (unless in an polling directories).
\verbatim
typedef struct CF_TxFileCmd
@@ -671,7 +663,7 @@ CF_UnionArgs_Payload_t;
\endverbatim
The first parameter, \c cfdp_class, identifies whether the file will be transferred
- using #CF_CFDP_CLASS_1 or #CF_CFDP_CLASS_2. For Class 1 transfers, CF will send the data
+ using #CF_CFDP_Class_1 or #CF_CFDP_Class_2. For Class 1 transfers, CF will send the data
once and expect no feedback from the peer. Class 2 transfers are more reliable
and attempt to fill in data that may have been dropped on the first attempt.
@@ -741,7 +733,7 @@ CF_UnionArgs_Payload_t;
\endverbatim
The first parameter, \c cfdp_class, identifies whether the files will be
- transferred using #CF_CFDP_CLASS_1 or #CF_CFDP_CLASS_2. For Class 1 transfers, CF will
+ transferred using #CF_CFDP_Class_1 or #CF_CFDP_Class_2. For Class 1 transfers, CF will
send the data once and expect no feedback from the peer. Class 2 transfers are
more reliable and attempt to fill in data that may have been dropped on the
first attempt.
@@ -1109,15 +1101,9 @@ CF_UnionArgs_Payload_t;
\verbatim
* Command Structure
- * #CF_UnionArgs_Payload_t where byte[0] specifies the channel number or all channels
- * - 255 = all channels
+ * Single byte channel selector
+ * - 255 (0xFF) = all channels
* - else = single channel
- typedef union CF_UnionArgs_Payload
- {
- uint32 dword;
- uint16 hword[2];
- uint8 byte[4];
- } CF_UnionArgs_Payload_t;
\endverbatim
The first and only parameter, \c byte[0], specifies which pending queue to enable.
@@ -1147,16 +1133,9 @@ CF_UnionArgs_Payload_t;
\verbatim
* Command Structure
- * #CF_UnionArgs_Payload_t where byte[0] specifies the channel number or all channels
+ * Single byte channel selector
* - 255 = all channels
* - else = single channel
-
- typedef union CF_UnionArgs_Payload
- {
- uint32 dword;
- uint16 hword[2];
- uint8 byte[4];
- } CF_UnionArgs_Payload_t;
\endverbatim
The first and only parameter, \c byte[0], specifies which pending queue to enable.
@@ -1185,23 +1164,14 @@ CF_UnionArgs_Payload_t;
\verbatim
* Command Structure
- * #CF_UnionArgs_Payload_t
- *
- * byte[0] specifies the channel number or all channels
+ * Single byte channel selector
* - 255 = all channels
* - else = single channel
*
- * byte[1] specifies the polling directory index
+ * Single byte polling directory index
* - 255 = all polling directories
* - else = single polling directory index
*
-
- typedef union CF_UnionArgs_Payload
- {
- uint32 dword;
- uint16 hword[2];
- uint8 byte[4];
- } CF_UnionArgs_Payload_t;
\endverbatim
The first parameter, \c byte[0], specifies which channel contains the polling
@@ -1237,23 +1207,13 @@ CF_UnionArgs_Payload_t;
\verbatim
* Command Structure
- * #CF_UnionArgs_Payload_t
- *
- * byte[0] specifies the channel number or all channels
+ * Single byte channel selector
* - 255 = all channels
* - else = single channel
*
- * byte[1] specifies the polling directory index
+ * Single byte polling directory index
* - 255 = all polling directories
* - else = single polling directory index
- *
-
- typedef union CF_UnionArgs_Payload
- {
- uint32 dword;
- uint16 hword[2];
- uint8 byte[4];
- } CF_UnionArgs_Payload_t;
\endverbatim
The first parameter, \c byte[0], specifies which channel contains the polling
@@ -1285,24 +1245,14 @@ CF_UnionArgs_Payload_t;
\verbatim
* Command Structure
- * #CF_UnionArgs_Payload_t
- *
- * byte[0] specifies the channel number or all channels
+ * Single byte channel selector
* - 255 = all channels
* - else = single channel
*
- * byte[1] specifies the queue
+ * Single byte queue index
* - 0 = Pending queue
* - 1 = History queue
* - 2 = Both pending and history queue
- *
-
- typedef union CF_UnionArgs_Payload
- {
- uint32 dword;
- uint16 hword[2];
- uint8 byte[4];
- } CF_UnionArgs_Payload_t;
\endverbatim
The first parameter, \c byte[0], specifies a single channel id or a value
diff --git a/eds/cf.xml b/eds/cf.xml
index 21edcbc8..20199da3 100644
--- a/eds/cf.xml
+++ b/eds/cf.xml
@@ -72,15 +72,35 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -121,7 +141,7 @@
-
+
@@ -184,7 +204,7 @@
-
+
@@ -236,7 +256,7 @@
-
+
@@ -275,7 +295,7 @@
-
+
@@ -315,30 +335,65 @@
-
+
+
+
+
+
-
-
-
-
-
+
+
+ Single byte channel selector payload
+ - 255 = all channels
+ - else = single channel
+
+
+
+
+
-
-
-
-
-
+
+
+ Polling directory selector payload
-
+ Single byte channel selector
+ - 255 = all channels
+ - else = single channel
+
+ Single byte polling directory index
+ - 255 = all polling directories
+ - else = single polling directory index
+
+
+
+
+
+
+
+
+
+ Queue selector payload
+
+ Single byte channel selector
+ - 255 = all channels
+ - else = single channel
+
+ Single byte queue selection enum
+ Values indicated by #CF_QueueSelect enum
+ - 0 = Pending queue
+ - 1 = History queue
+ - 2 = Both pending and history queue
+
-
+
+
-
+
@@ -346,16 +401,16 @@
-
+
-
+
-
+
@@ -386,7 +441,7 @@
-
+
@@ -397,7 +452,7 @@
-
+
@@ -474,7 +529,7 @@
-
+
@@ -593,7 +648,7 @@
-
+
@@ -634,7 +689,7 @@
-
+
@@ -962,7 +1017,7 @@
-
+
@@ -1002,7 +1057,7 @@
-
+
@@ -1049,7 +1104,7 @@
-
+
@@ -1096,7 +1151,7 @@
-
+
@@ -1144,7 +1199,7 @@
-
+
diff --git a/fsw/inc/cf_eventids.h b/fsw/inc/cf_eventids.h
index 894e6e15..c37fbe9f 100644
--- a/fsw/inc/cf_eventids.h
+++ b/fsw/inc/cf_eventids.h
@@ -57,28 +57,6 @@
*/
#define CF_INIT_TBL_CHECK_REL_ERR_EID 21
-/**
- * \brief CF Check Table Manage Failed Event ID
- *
- * \par Type: ERROR
- *
- * \par Cause:
- *
- * Failure from manage table call during periodic table check
- */
-#define CF_INIT_TBL_CHECK_MAN_ERR_EID 22
-
-/**
- * \brief CF Check Table Get Address Failed Event ID
- *
- * \par Type: ERROR
- *
- * \par Cause:
- *
- * Failure from get table call during periodic table check
- */
-#define CF_INIT_TBL_CHECK_GA_ERR_EID 23
-
/**
* \brief CF Table Registration At Initialization Failed Event ID
*
diff --git a/fsw/inc/cf_fcncodes.h b/fsw/inc/cf_fcncodes.h
index 7fa1b1aa..3aa298b5 100644
--- a/fsw/inc/cf_fcncodes.h
+++ b/fsw/inc/cf_fcncodes.h
@@ -74,7 +74,7 @@
* Resets the requested housekeeping counters
*
* \par Command Structure
- * #CF_UnionArgs_Payload_t where byte[0] specifies the counters type, byte[1-3] don't care:
+ * Single byte enumeration
* - 0 = all counters
* - 1 = command counters
* - 2 = fault counters
@@ -172,7 +172,7 @@
* this could cause failures for class 2 transactions in progress.
*
* \par Command Structure
- * #CF_UnionArgs_Payload_t where byte[0] specifies the channel number or all channels
+ * Single byte channel selector
* - 255 = all channels
* - else = single channel
*
@@ -206,7 +206,7 @@
* for the specified channel, note received messages are consumed either way.
*
* \par Command Structure
- * #CF_UnionArgs_Payload_t where byte[0] specifies the channel number or all channels
+ * Single byte channel selector
* - 255 = all channels
* - else = single channel
*
@@ -478,7 +478,7 @@
* Enables the sending of file data PDUs.
*
* \par Command Structure
- * #CF_UnionArgs_Payload_t where byte[0] specifies the channel number or all channels
+ * Single byte channel selector
* - 255 = all channels
* - else = single channel
*
@@ -511,7 +511,7 @@
* Disables the sending of file data PDUs.
*
* \par Command Structure
- * #CF_UnionArgs_Payload_t where byte[0] specifies the channel number or all channels
+ * Single byte channel selector
* - 255 = all channels
* - else = single channel
*
@@ -544,13 +544,12 @@
* Enables the processing of polling directories
*
* \par Command Structure
- * #CF_UnionArgs_Payload_t
*
- * byte[0] specifies the channel number or all channels
+ * Single byte channel selector
* - 255 = all channels
* - else = single channel
*
- * byte[1] specifies the polling directory index
+ * Single byte polling directory index
* - 255 = all polling directories
* - else = single polling directory index
*
@@ -584,13 +583,12 @@
* Disable the processing of polling directories
*
* \par Command Structure
- * #CF_UnionArgs_Payload_t
*
- * byte[0] specifies the channel number or all channels
+ * Single byte channel selector
* - 255 = all channels
* - else = single channel
*
- * byte[1] specifies the polling directory index
+ * Single byte polling directory index
* - 255 = all polling directories
* - else = single polling directory index
*
@@ -624,13 +622,12 @@
* Purge the requested queue
*
* \par Command Structure
- * #CF_UnionArgs_Payload_t
*
- * byte[0] specifies the channel number or all channels
+ * Single byte channel selector
* - 255 = all channels
* - else = single channel
*
- * byte[1] specifies the queue
+ * Single byte queue selection enum
* - 0 = Pending queue
* - 1 = History queue
* - 2 = Both pending and history queue
diff --git a/fsw/src/cf_app.c b/fsw/src/cf_app.c
index 96db059a..d7468faf 100644
--- a/fsw/src/cf_app.c
+++ b/fsw/src/cf_app.c
@@ -33,6 +33,7 @@
#include "cf_cfdp.h"
#include "cf_version.h"
#include "cf_dispatch.h"
+#include "cf_utils.h"
#include "cf_tbl.h"
#include
@@ -41,60 +42,167 @@ CF_AppData_t CF_AppData;
/*----------------------------------------------------------------
*
- * Application-scope internal function
- * See description in cf_app.h for argument/return detail
+ * Local helper function
+ * Imports configuration from table for a single channel
+ * Compatible with CF_ForEachChannel()
*
*-----------------------------------------------------------------*/
-void CF_CheckTables(void)
+static int32 CF_DoChannelConfig(CF_Engine_t *engine_ptr, CF_Channel_t *chan, void *arg)
{
- CFE_Status_t status;
+ const CF_ConfigTable_t *config = arg;
+ const int chan_num = CF_ChannelSelect_AsInt(CF_GetChannelFromPtr(chan));
+ const CF_ChannelConfig_t *chan_config = &config->chan[chan_num];
+ const CF_PollDir_t *tbl_pd_config;
+ CF_LocalPdConfig_t *pd_config;
+ int pd;
+
+ chan->config.max_outgoing_messages_per_wakeup = chan_config->max_outgoing_messages_per_wakeup;
+ chan->config.rx_max_messages_per_wakeup = chan_config->rx_max_messages_per_wakeup;
+ chan->config.ack_timer_s = chan_config->ack_timer_s;
+ chan->config.nak_timer_s = chan_config->nak_timer_s;
+ chan->config.inactivity_timer_s = chan_config->inactivity_timer_s;
+ chan->config.ack_limit = chan_config->ack_limit;
+ chan->config.nak_limit = chan_config->nak_limit;
+ chan->config.mid_input = chan_config->mid_input;
+ chan->config.mid_output = chan_config->mid_output;
+ chan->config.pipe_depth_input = chan_config->pipe_depth_input;
+ chan->config.dequeue_enabled = chan_config->dequeue_enabled;
+
+ CFE_SB_MessageStringGet(chan->config.sem_name,
+ chan_config->sem_name,
+ "",
+ sizeof(chan->config.sem_name),
+ sizeof(chan_config->sem_name));
+ CFE_SB_MessageStringGet(chan->config.move_dir,
+ chan_config->move_dir,
+ "",
+ sizeof(chan->config.move_dir),
+ sizeof(chan_config->move_dir));
+
+ for (pd = 0; pd < CF_MAX_POLLING_DIR_PER_CHAN; ++pd)
+ {
+ tbl_pd_config = &chan_config->polldir[pd];
+ pd_config = &chan->config.polldir[pd];
+
+ pd_config->enabled = tbl_pd_config->enabled;
+ pd_config->priority = tbl_pd_config->priority;
+ pd_config->interval_sec = tbl_pd_config->interval_sec;
+ pd_config->cfdp_class = tbl_pd_config->cfdp_class;
+ pd_config->dest_eid = tbl_pd_config->dest_eid;
+
+ CFE_SB_MessageStringGet(pd_config->src_dir,
+ tbl_pd_config->src_dir,
+ "",
+ sizeof(pd_config->src_dir),
+ sizeof(tbl_pd_config->src_dir));
+ CFE_SB_MessageStringGet(pd_config->dst_dir,
+ tbl_pd_config->dst_dir,
+ "",
+ sizeof(pd_config->dst_dir),
+ sizeof(tbl_pd_config->dst_dir));
+ }
- /* check the table for an update only if engine is disabled */
- if (!CF_AppData.engine.enabled)
+ return CFE_SUCCESS;
+}
+
+/*----------------------------------------------------------------
+ *
+ * Local helper function
+ * Checks for table updates
+ *
+ *-----------------------------------------------------------------*/
+static CFE_Status_t CF_ManageTables(CF_Engine_t *engine_ptr, bool always_import)
+{
+ CFE_Status_t status;
+ void *table_addr;
+ const CF_ConfigTable_t *config;
+
+ /*
+ * NOTE: As of CFE 7.0 (Caelum), some the CFE TBL APIs return success codes
+ * other than CFE_SUCCESS, so it is not sufficient to check for only this
+ * result here. For example they may return something like CFE_TBL_INFO_UPDATED.
+ * But from the standpoint of this routine, they are all success, because the
+ * function still did its expected job.
+ *
+ * For now, the safest way to check is to check for negative values,
+ * as the alt-success codes are in the positive range by design, and
+ * error codes are all in the negative range of CFE_Status_t.
+ *
+ * This should continue to work even if CFE TBL APIs change to
+ * remove the problematic alt-success codes at some point.
+ */
+ status = CFE_TBL_Manage(CF_AppData.config_handle);
+ if (status < CFE_SUCCESS)
+ {
+ CFE_EVS_SendEvent(CF_INIT_TBL_MANAGE_ERR_EID,
+ CFE_EVS_EventType_ERROR,
+ "CF: error in CFE_TBL_Manage, returned 0x%08lx",
+ (unsigned long)status);
+ }
+ else if (always_import || status == CFE_TBL_INFO_UPDATED)
{
- /*
- * NOTE: As of CFE 7.0 (Caelum), some the CFE TBL APIs return success codes
- * other than CFE_SUCCESS, so it is not sufficient to check for only this
- * result here. For example they may return something like CFE_TBL_INFO_UPDATED.
- * But from the standpoint of this routine, they are all success, because the
- * function still did its expected job.
- *
- * For now, the safest way to check is to check for negative values,
- * as the alt-success codes are in the positive range by design, and
- * error codes are all in the negative range of CFE_Status_t.
- *
- * This should continue to work even if CFE TBL APIs change to
- * remove the problematic alt-success codes at some point.
- */
- status = CFE_TBL_ReleaseAddress(CF_AppData.config_handle);
+ status = CFE_TBL_GetAddress(&table_addr, CF_AppData.config_handle);
if (status < CFE_SUCCESS)
{
- CFE_EVS_SendEvent(CF_INIT_TBL_CHECK_REL_ERR_EID,
+ CFE_EVS_SendEvent(CF_INIT_TBL_GETADDR_ERR_EID,
CFE_EVS_EventType_ERROR,
- "CF: error in CFE_TBL_ReleaseAddress (check), returned 0x%08lx",
+ "CF: failed to get table address, returned 0x%08lx",
(unsigned long)status);
- CF_AppData.RunStatus = CFE_ES_RunStatus_APP_ERROR;
}
-
- status = CFE_TBL_Manage(CF_AppData.config_handle);
- if (status < CFE_SUCCESS)
+ else
{
- CFE_EVS_SendEvent(CF_INIT_TBL_CHECK_MAN_ERR_EID,
- CFE_EVS_EventType_ERROR,
- "CF: error in CFE_TBL_Manage (check), returned 0x%08lx",
- (unsigned long)status);
- CF_AppData.RunStatus = CFE_ES_RunStatus_APP_ERROR;
+ config = table_addr;
+
+ engine_ptr->config.ticks_per_second = config->ticks_per_second;
+ engine_ptr->config.rx_crc_calc_bytes_per_wakeup = config->rx_crc_calc_bytes_per_wakeup;
+ engine_ptr->config.local_eid = config->local_eid;
+ engine_ptr->config.outgoing_file_chunk_size = config->outgoing_file_chunk_size;
+
+ CFE_SB_MessageStringGet(engine_ptr->config.tmp_dir,
+ config->tmp_dir,
+ "",
+ sizeof(engine_ptr->config.tmp_dir),
+ sizeof(config->tmp_dir));
+ CFE_SB_MessageStringGet(engine_ptr->config.fail_dir,
+ config->fail_dir,
+ "",
+ sizeof(engine_ptr->config.fail_dir),
+ sizeof(config->fail_dir));
+
+ CF_ForEachChannel(engine_ptr, CF_DoChannelConfig, table_addr);
+
+ /* Release the address, the config is now in the CF global data */
+ status = CFE_TBL_ReleaseAddress(CF_AppData.config_handle);
+ if (status < CFE_SUCCESS)
+ {
+ CFE_EVS_SendEvent(CF_INIT_TBL_CHECK_REL_ERR_EID,
+ CFE_EVS_EventType_ERROR,
+ "CF: error in CFE_TBL_ReleaseAddress, returned 0x%08lx",
+ (unsigned long)status);
+ }
}
+ }
- status = CFE_TBL_GetAddress((void *)&CF_AppData.config_table, CF_AppData.config_handle);
- if (status < CFE_SUCCESS)
- {
- CFE_EVS_SendEvent(CF_INIT_TBL_CHECK_GA_ERR_EID,
- CFE_EVS_EventType_ERROR,
- "CF: failed to get table address (check), returned 0x%08lx",
- (unsigned long)status);
- CF_AppData.RunStatus = CFE_ES_RunStatus_APP_ERROR;
- }
+ return status;
+}
+
+/*----------------------------------------------------------------
+ *
+ * Application-scope internal function
+ * See description in cf_app.h for argument/return detail
+ *
+ *-----------------------------------------------------------------*/
+void CF_CheckTables(void)
+{
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+
+ /* check the table for an update only if engine is disabled */
+ if (!engine_ptr->enabled)
+ {
+ /* NOTE: We do not need to abort the app if this fails, it can
+ * keep running with the existing config in RAM. A failure here only
+ * means that the config is not applied */
+ CF_ManageTables(engine_ptr, false);
}
}
@@ -165,34 +273,9 @@ CFE_Status_t CF_TableInit(void)
"CF: error loading table, returned 0x%08lx",
(unsigned long)status);
}
- }
-
- if (status == CFE_SUCCESS)
- {
- status = CFE_TBL_Manage(CF_AppData.config_handle);
- if (status != CFE_SUCCESS)
- {
- CFE_EVS_SendEvent(CF_INIT_TBL_MANAGE_ERR_EID,
- CFE_EVS_EventType_ERROR,
- "CF: error in CFE_TBL_Manage, returned 0x%08lx",
- (unsigned long)status);
- }
- }
-
- if (status == CFE_SUCCESS)
- {
- status = CFE_TBL_GetAddress((void **)&CF_AppData.config_table, CF_AppData.config_handle);
- /* status will be CFE_TBL_INFO_UPDATED because it was just loaded, but we can use CFE_SUCCESS too */
- if ((status != CFE_TBL_INFO_UPDATED) && (status != CFE_SUCCESS))
- {
- CFE_EVS_SendEvent(CF_INIT_TBL_GETADDR_ERR_EID,
- CFE_EVS_EventType_ERROR,
- "CF: error getting table address, returned 0x%08lx",
- (unsigned long)status);
- }
else
{
- status = CFE_SUCCESS;
+ status = CF_ManageTables(CF_GetEngine(), true);
}
}
@@ -216,8 +299,6 @@ CFE_Status_t CF_AppInit(void)
CF_AppData.RunStatus = CFE_ES_RunStatus_APP_RUN;
- CFE_MSG_Init(CFE_MSG_PTR(CF_AppData.hk.TelemetryHeader), CFE_SB_ValueToMsgId(CF_HK_TLM_MID), sizeof(CF_AppData.hk));
-
status = CFE_EVS_Register(NULL, 0, CFE_EVS_EventFilter_BINARY);
if (status != CFE_SUCCESS)
{
@@ -258,7 +339,7 @@ CFE_Status_t CF_AppInit(void)
if (status == CFE_SUCCESS)
{
- status = CF_CFDP_InitEngine(); /* function sends event internally */
+ status = CF_CFDP_InitEngine(CF_GetEngine()); /* function sends event internally */
}
if (status == CFE_SUCCESS)
diff --git a/fsw/src/cf_app.h b/fsw/src/cf_app.h
index 344a79db..d8b97357 100644
--- a/fsw/src/cf_app.h
+++ b/fsw/src/cf_app.h
@@ -84,14 +84,11 @@
*/
typedef struct
{
- CF_HkPacket_t hk;
-
uint32 RunStatus;
- CFE_SB_PipeId_t CmdPipe;
-
- CFE_TBL_Handle_t config_handle;
- CF_ConfigTable_t *config_table;
+ CF_HkCmdCounters_t counters;
+ CFE_SB_PipeId_t CmdPipe;
+ CFE_TBL_Handle_t config_handle;
CF_Engine_t engine;
} CF_AppData_t;
@@ -113,6 +110,180 @@ extern CF_AppData_t CF_AppData;
**
**************************************************************************/
+/************************************************************************/
+/**
+ * @brief Gets the CFDP engine struct
+ *
+ * @par Description
+ * Obtains a pointer to the CFDP engine.
+ *
+ * @par Assumptions, External Events, and Notes:
+ * This is currently a singleon in the CF app, but the architecture
+ * does permit there to be more than one.
+ *
+ * This never returns NULL, in the current implementation there is
+ * one (and only one) engine.
+ *
+ * @returns engine pointer
+ */
+static inline CF_Engine_t *CF_GetEngine(void)
+{
+ return &CF_AppData.engine;
+}
+
+/************************************************************************/
+/**
+ * @brief Checks if a class identifier is valid
+ *
+ * @par Description
+ * checks if the given class number matches one of the defined enum values
+ *
+ * @par Assumptions, External Events, and Notes:
+ * None
+ *
+ * @retval true if value is valid/acceptable
+ * @retval false if value is invalid
+ */
+static inline bool CF_IsValidClass(CF_CFDP_Class_Enum_t cv)
+{
+ return (cv == CF_CFDP_Class_1 || cv == CF_CFDP_Class_2);
+}
+
+/************************************************************************/
+/**
+ * @brief Checks if a channel identifier is valid
+ *
+ * @par Description
+ * checks if the given channel number matches one of the defined values
+ *
+ * @par Assumptions, External Events, and Notes:
+ * This only checks if it matches a single channel. It does not test
+ * for the special values that some commands might accept.
+ *
+ * @retval true if value is valid/acceptable
+ * @retval false if value is invalid
+ */
+static inline bool CF_IsValidChannel(CF_ChannelSelect_t cs)
+{
+ return (cs < CF_NUM_CHANNELS);
+}
+
+/************************************************************************/
+/**
+ * @brief Checks if a channel identifier represents "all channels"
+ *
+ * @par Description
+ * checks if the given channel number matches the special all channels value
+ *
+ * @par Assumptions, External Events, and Notes:
+ * This only checks if it matches all channels.
+ *
+ * @retval true if value is valid/acceptable
+ * @retval false if value is invalid
+ */
+static inline bool CF_IsAllChannels(CF_ChannelSelect_t cs)
+{
+ return (cs == CF_ALL_CHANNELS);
+}
+
+/************************************************************************/
+/**
+ * @brief Checks if a channel identifier represents "all channels"
+ *
+ * @par Description
+ * checks if the given channel number matches the special all channels value
+ *
+ * @par Assumptions, External Events, and Notes:
+ * This only checks if it matches all channels.
+ *
+ * @retval true if value is valid/acceptable
+ * @retval false if value is invalid
+ */
+static inline bool CF_IsCompoundKey(CF_ChannelSelect_t cs)
+{
+ return (cs == CF_COMPOUND_KEY);
+}
+
+/************************************************************************/
+/**
+ * @brief Gets the channel number as an integer
+ *
+ * @par Description
+ * For consistent representation of channel numbers in logs messages
+ * and other strings.
+ *
+ * @par Assumptions, External Events, and Notes:
+ * Format log messages with printf "%d" conversion
+ *
+ * @returns channel number represented as "int" type
+ */
+static inline int CF_ChannelSelect_AsInt(CF_ChannelSelect_t cs)
+{
+ return (cs);
+}
+
+/************************************************************************/
+/**
+ * @brief Gets the channel number from integer
+ *
+ * @par Description
+ * For intentional conversion from an integer value to a channel number
+ *
+ * @par Assumptions, External Events, and Notes:
+ * this exists for special/corner cases only, should really not be
+ * needed in general. Prefer to use the APIs that invoke a subroutine
+ * using the standard selector logic.
+ *
+ * @returns channel number value
+ */
+static inline CF_ChannelSelect_t CF_ChannelSelect_FromInt(int c)
+{
+ return (c);
+}
+
+/************************************************************************/
+/**
+ * @brief Gets the channel pointer from a channel number
+ *
+ * @par Description
+ * Obtains the channel pointer associated with the channel number
+ *
+ * @par Assumptions, External Events, and Notes:
+ * This implements range-checking and may return NULL
+ *
+ * @returns channel pointer
+ * @retval NULL if channel number is invalid
+ */
+static inline CF_Channel_t *CF_GetChannelPtr(CF_ChannelSelect_t cs)
+{
+ if (CF_IsValidChannel(cs))
+ {
+ return &CF_GetEngine()->channels[cs];
+ }
+ else
+ {
+ return NULL;
+ }
+}
+
+/************************************************************************/
+/**
+ * @brief Gets the channel number from a channel pointer
+ *
+ * @par Description
+ * Obtains the channel number associated with the channel pointer
+ *
+ * @par Assumptions, External Events, and Notes:
+ * This is primarily for log messages.
+ *
+ * @returns channel number
+ */
+static inline CF_ChannelSelect_t CF_GetChannelFromPtr(const CF_Channel_t *ChanPtr)
+{
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+ return (CF_ChannelSelect_t) { (ChanPtr - engine_ptr->channels) };
+}
+
/************************************************************************/
/** @brief Checks to see if a table update is pending, and perform it.
*
diff --git a/fsw/src/cf_cfdp.c b/fsw/src/cf_cfdp.c
index 5433fe7d..ab693389 100644
--- a/fsw/src/cf_cfdp.c
+++ b/fsw/src/cf_cfdp.c
@@ -46,6 +46,19 @@
#include
#include "cf_assert.h"
+/**
+ * State data for engine init
+ *
+ * Tracks the next engine pointers to use
+ */
+typedef struct CF_EngineInitState
+{
+ CF_History_t *history;
+ CF_Transaction_t *txn;
+ CF_ChunkWrapper_t *cw;
+ size_t chunk_mem_offset;
+} CF_EngineInitState_t;
+
/*----------------------------------------------------------------
*
* Application-scope internal function
@@ -128,7 +141,8 @@ void CF_CFDP_DecodeStart(CF_DecoderState_t *pdec,
*-----------------------------------------------------------------*/
void CF_CFDP_ArmAckTimer(CF_Transaction_t *txn)
{
- CF_Timer_InitRelSec(&txn->ack_timer, CF_AppData.config_table->chan[txn->chan_num].ack_timer_s);
+ const CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
+ CF_Timer_InitRelSec(&txn->ack_timer, chan->config.ack_timer_s);
txn->flags.com.ack_timer_armed = true;
}
@@ -162,13 +176,14 @@ static inline bool CF_CFDP_IsSender(CF_Transaction_t *txn)
*-----------------------------------------------------------------*/
void CF_CFDP_ArmInactTimer(CF_Transaction_t *txn)
{
- CF_Timer_Seconds_t Sec;
+ const CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
+ CF_Timer_Seconds_t Sec;
/* select timeout based on the state */
if (CF_CFDP_GetAckTxnStatus(txn) == CF_CFDP_AckTxnStatus_ACTIVE)
{
/* in an active transaction, we expect traffic so use the normal inactivity timer */
- Sec = CF_AppData.config_table->chan[txn->chan_num].inactivity_timer_s;
+ Sec = chan->config.inactivity_timer_s;
}
else
{
@@ -179,7 +194,7 @@ void CF_CFDP_ArmInactTimer(CF_Transaction_t *txn)
* timeout would hold resources longer than needed). Using double the ack timer should
* ensure that if the remote retransmitted anything, we will see it, and avoids adding
* another config option just for this. */
- Sec = CF_AppData.config_table->chan[txn->chan_num].ack_timer_s * 2;
+ Sec = chan->config.ack_timer_s * 2;
}
CF_Timer_InitRelSec(&txn->inactivity_timer, Sec);
@@ -193,12 +208,13 @@ void CF_CFDP_ArmInactTimer(CF_Transaction_t *txn)
*-----------------------------------------------------------------*/
bool CF_CFDP_CheckAckNakCount(CF_Transaction_t *txn, uint8 *counter)
{
- bool is_ok;
- uint16 Event;
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
+ bool is_ok;
+ uint16 Event;
/* Check limit and handle if needed */
Event = 0;
- is_ok = (*counter < CF_AppData.config_table->chan[txn->chan_num].ack_limit);
+ is_ok = (*counter < chan->config.ack_limit);
if (is_ok)
{
@@ -208,7 +224,7 @@ bool CF_CFDP_CheckAckNakCount(CF_Transaction_t *txn, uint8 *counter)
else
{
/* Reached limit */
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.ack_limit;
+ ++chan->stat.counters.fault.ack_limit;
if (txn->history->dir == CF_Direction_TX)
{
@@ -326,7 +342,7 @@ CF_Logical_PduBuffer_t *CF_CFDP_ConstructPduHeader(const CF_Transaction_t *txn,
hdr->version = 1;
hdr->pdu_type = (directive_code == 0); /* set to '1' for file data PDU, '0' for a directive PDU */
hdr->direction = (towards_sender != false); /* set to '1' for toward sender, '0' for toward receiver */
- hdr->txm_mode = (CF_CFDP_GetClass(txn) == CF_CFDP_CLASS_1); /* set to '1' for class 1 data, '0' for class 2 */
+ hdr->txm_mode = (CF_CFDP_GetClass(txn) == CF_CFDP_Class_1); /* set to '1' for class 1 data, '0' for class 2 */
/* choose the larger of the two EIDs to determine size */
if (src_eid > dst_eid)
@@ -380,9 +396,10 @@ CF_Logical_PduBuffer_t *CF_CFDP_ConstructPduHeader(const CF_Transaction_t *txn,
*-----------------------------------------------------------------*/
CFE_Status_t CF_CFDP_SendMd(CF_Transaction_t *txn)
{
- CF_Logical_PduBuffer_t *ph = CF_CFDP_ConstructPduHeader(txn,
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+ CF_Logical_PduBuffer_t *ph = CF_CFDP_ConstructPduHeader(txn,
CF_CFDP_FileDirective_METADATA,
- CF_AppData.config_table->local_eid,
+ engine_ptr->config.local_eid,
txn->history->peer_eid,
0,
txn->history->seq_num,
@@ -414,7 +431,7 @@ CFE_Status_t CF_CFDP_SendMd(CF_Transaction_t *txn)
CF_CFDP_EncodeMd(ph->penc, md);
CF_CFDP_SetPduLength(ph);
- CF_CFDP_Send(txn->chan_num, ph);
+ CF_CFDP_Send(CF_GetChannelFromTxn(txn), ph);
CF_TRACE("%s(): Sent MD, size=%lu, cr=%d, ct=%d\n",
__func__,
@@ -441,7 +458,7 @@ CFE_Status_t CF_CFDP_SendFd(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
/* update PDU length */
CF_CFDP_SetPduLength(ph);
- CF_CFDP_Send(txn->chan_num, ph);
+ CF_CFDP_Send(CF_GetChannelFromTxn(txn), ph);
return ret;
}
@@ -455,6 +472,7 @@ CFE_Status_t CF_CFDP_SendFd(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
void CF_CFDP_AppendTlv(CF_Logical_TlvList_t *ptlv_list, CF_CFDP_TlvType_t tlv_type)
{
CF_Logical_Tlv_t *ptlv;
+ CF_Engine_t *engine_ptr = CF_GetEngine();
if (ptlv_list->num_tlv < CF_PDU_MAX_TLV)
{
@@ -472,7 +490,7 @@ void CF_CFDP_AppendTlv(CF_Logical_TlvList_t *ptlv_list, CF_CFDP_TlvType_t tlv_ty
if (tlv_type == CF_CFDP_TLV_TYPE_ENTITY_ID)
{
- ptlv->data.eid = CF_AppData.config_table->local_eid;
+ ptlv->data.eid = engine_ptr->config.local_eid;
ptlv->length = CF_CFDP_GetValueEncodedSize(ptlv->data.eid);
}
else
@@ -491,9 +509,10 @@ void CF_CFDP_AppendTlv(CF_Logical_TlvList_t *ptlv_list, CF_CFDP_TlvType_t tlv_ty
*-----------------------------------------------------------------*/
CFE_Status_t CF_CFDP_SendEof(CF_Transaction_t *txn)
{
- CF_Logical_PduBuffer_t *ph = CF_CFDP_ConstructPduHeader(txn,
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+ CF_Logical_PduBuffer_t *ph = CF_CFDP_ConstructPduHeader(txn,
CF_CFDP_FileDirective_EOF,
- CF_AppData.config_table->local_eid,
+ engine_ptr->config.local_eid,
txn->history->peer_eid,
0,
txn->history->seq_num,
@@ -520,7 +539,7 @@ CFE_Status_t CF_CFDP_SendEof(CF_Transaction_t *txn)
CF_CFDP_EncodeEof(ph->penc, eof);
CF_CFDP_SetPduLength(ph);
- CF_CFDP_Send(txn->chan_num, ph);
+ CF_CFDP_Send(CF_GetChannelFromTxn(txn), ph);
CF_TRACE("%s(): Sent EOF, cc=%d, crc=%08lx, size=%lu\n",
__func__,
@@ -542,7 +561,8 @@ CFE_Status_t CF_CFDP_SendAck(CF_Transaction_t *txn, CF_CFDP_FileDirective_t dir_
{
CF_Logical_PduBuffer_t *ph;
CF_Logical_PduAck_t *ack;
- CFE_Status_t ret = CFE_SUCCESS;
+ CFE_Status_t ret = CFE_SUCCESS;
+ CF_Engine_t *engine_ptr = CF_GetEngine();
CF_Assert((dir_code == CF_CFDP_FileDirective_EOF) || (dir_code == CF_CFDP_FileDirective_FIN));
@@ -550,7 +570,7 @@ CFE_Status_t CF_CFDP_SendAck(CF_Transaction_t *txn, CF_CFDP_FileDirective_t dir_
{
ph = CF_CFDP_ConstructPduHeader(txn,
CF_CFDP_FileDirective_ACK,
- CF_AppData.config_table->local_eid,
+ engine_ptr->config.local_eid,
txn->history->peer_eid,
false,
txn->history->seq_num,
@@ -561,7 +581,7 @@ CFE_Status_t CF_CFDP_SendAck(CF_Transaction_t *txn, CF_CFDP_FileDirective_t dir_
ph = CF_CFDP_ConstructPduHeader(txn,
CF_CFDP_FileDirective_ACK,
txn->history->peer_eid,
- CF_AppData.config_table->local_eid,
+ engine_ptr->config.local_eid,
true,
txn->history->seq_num,
0);
@@ -589,7 +609,7 @@ CFE_Status_t CF_CFDP_SendAck(CF_Transaction_t *txn, CF_CFDP_FileDirective_t dir_
CF_CFDP_EncodeAck(ph->penc, ack);
CF_CFDP_SetPduLength(ph);
- CF_CFDP_Send(txn->chan_num, ph);
+ CF_CFDP_Send(CF_GetChannelFromTxn(txn), ph);
CF_TRACE("%s(): Sent ACK, dir_code=%d, cc=%d, st=%d\n",
__func__,
@@ -612,11 +632,12 @@ CFE_Status_t CF_CFDP_SendFin(CF_Transaction_t *txn)
CF_Logical_PduBuffer_t *ph;
CF_Logical_PduFin_t *fin;
CFE_Status_t ret;
+ CF_Engine_t *engine_ptr = CF_GetEngine();
ph = CF_CFDP_ConstructPduHeader(txn,
CF_CFDP_FileDirective_FIN,
txn->history->peer_eid,
- CF_AppData.config_table->local_eid,
+ engine_ptr->config.local_eid,
1,
txn->history->seq_num,
0);
@@ -641,7 +662,7 @@ CFE_Status_t CF_CFDP_SendFin(CF_Transaction_t *txn)
CF_CFDP_EncodeFin(ph->penc, fin);
CF_CFDP_SetPduLength(ph);
- CF_CFDP_Send(txn->chan_num, ph);
+ CF_CFDP_Send(CF_GetChannelFromTxn(txn), ph);
CF_TRACE("%s(): Sent FIN, cc=%d, dc=%d, st=%d\n",
__func__,
@@ -663,7 +684,7 @@ void CF_CFDP_SendNak(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
{
CF_Logical_PduNak_t *nak;
- CF_Assert(CF_CFDP_GetClass(txn) == CF_CFDP_CLASS_2);
+ CF_Assert(CF_CFDP_GetClass(txn) == CF_CFDP_Class_2);
nak = &ph->int_header.nak;
@@ -674,7 +695,7 @@ void CF_CFDP_SendNak(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
CF_CFDP_EncodeNak(ph->penc, nak);
CF_CFDP_SetPduLength(ph);
- CF_CFDP_Send(txn->chan_num, ph);
+ CF_CFDP_Send(CF_GetChannelFromTxn(txn), ph);
/* The timer needs to be armed after this, lack of response will need a re-nak */
CF_CFDP_ArmAckTimer(txn);
@@ -688,11 +709,10 @@ void CF_CFDP_SendNak(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
* See description in cf_cfdp.h for argument/return detail
*
*-----------------------------------------------------------------*/
-CFE_Status_t CF_CFDP_RecvPh(uint8 chan_num, CF_Logical_PduBuffer_t *ph)
+CFE_Status_t CF_CFDP_RecvPh(CF_Channel_t *chan, CF_Logical_PduBuffer_t *ph)
{
CFE_Status_t ret = CFE_SUCCESS;
- CF_Assert(chan_num < CF_NUM_CHANNELS);
/*
* If the source eid, destination eid, or sequence number fields
* are larger than the sizes configured in the cf platform config
@@ -703,7 +723,7 @@ CFE_Status_t CF_CFDP_RecvPh(uint8 chan_num, CF_Logical_PduBuffer_t *ph)
CFE_EVS_SendEvent(CF_PDU_TRUNCATION_ERR_EID,
CFE_EVS_EventType_ERROR,
"CF: PDU rejected due to EID/seq number field truncation");
- ++CF_AppData.hk.Payload.channel_hk[chan_num].counters.recv.error;
+ ++chan->stat.counters.recv.error;
ret = CF_ERROR;
}
/*
@@ -717,7 +737,7 @@ CFE_Status_t CF_CFDP_RecvPh(uint8 chan_num, CF_Logical_PduBuffer_t *ph)
CFE_EVS_SendEvent(CF_PDU_LARGE_FILE_ERR_EID,
CFE_EVS_EventType_ERROR,
"CF: PDU with large file bit received (unsupported)");
- ++CF_AppData.hk.Payload.channel_hk[chan_num].counters.recv.error;
+ ++chan->stat.counters.recv.error;
ret = CF_ERROR;
}
else
@@ -733,13 +753,13 @@ CFE_Status_t CF_CFDP_RecvPh(uint8 chan_num, CF_Logical_PduBuffer_t *ph)
CFE_EVS_EventType_ERROR,
"CF: PDU too short (%lu received)",
(unsigned long)CF_CODEC_GET_SIZE(ph->pdec));
- ++CF_AppData.hk.Payload.channel_hk[chan_num].counters.recv.error;
+ ++chan->stat.counters.recv.error;
ret = CF_SHORT_PDU_ERROR;
}
else
{
/* PDU is ok, so continue processing */
- ++CF_AppData.hk.Payload.channel_hk[chan_num].counters.recv.pdu;
+ ++chan->stat.counters.recv.pdu;
}
}
@@ -754,7 +774,8 @@ CFE_Status_t CF_CFDP_RecvPh(uint8 chan_num, CF_Logical_PduBuffer_t *ph)
*-----------------------------------------------------------------*/
CFE_Status_t CF_CFDP_RecvMd(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
{
- const CF_Logical_PduMd_t *md = &ph->int_header.md;
+ const CF_Logical_PduMd_t *md = &ph->int_header.md;
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
int lv_ret;
CFE_Status_t ret = CFE_SUCCESS;
@@ -765,7 +786,7 @@ CFE_Status_t CF_CFDP_RecvMd(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
CFE_EVS_EventType_ERROR,
"CF: metadata packet too short: %lu bytes received",
(unsigned long)CF_CODEC_GET_SIZE(ph->pdec));
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.error;
+ ++chan->stat.counters.recv.error;
ret = CF_PDU_METADATA_ERROR;
}
else
@@ -795,7 +816,7 @@ CFE_Status_t CF_CFDP_RecvMd(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
(unsigned long)txn->history->src_eid,
(unsigned long)txn->history->seq_num,
md->source_filename.length);
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.error;
+ ++chan->stat.counters.recv.error;
ret = CF_PDU_METADATA_ERROR;
}
else
@@ -812,7 +833,7 @@ CFE_Status_t CF_CFDP_RecvMd(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
(unsigned long)txn->history->src_eid,
(unsigned long)txn->history->seq_num,
md->dest_filename.length);
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.error;
+ ++chan->stat.counters.recv.error;
ret = CF_PDU_METADATA_ERROR;
}
else
@@ -840,7 +861,8 @@ CFE_Status_t CF_CFDP_RecvMd(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
*-----------------------------------------------------------------*/
CFE_Status_t CF_CFDP_RecvFd(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
{
- CFE_Status_t ret = CFE_SUCCESS;
+ CFE_Status_t ret = CFE_SUCCESS;
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
CF_CFDP_DecodeFileDataHeader(ph->pdec, ph->pdu_header.segment_meta_flag, &ph->int_header.fd);
@@ -863,7 +885,7 @@ CFE_Status_t CF_CFDP_RecvFd(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
CFE_EVS_EventType_ERROR,
"CF: filedata PDU too short: %lu bytes received",
(unsigned long)CF_CODEC_GET_SIZE(ph->pdec));
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.error;
+ ++chan->stat.counters.recv.error;
ret = CF_SHORT_PDU_ERROR;
}
else if (ph->pdu_header.segment_meta_flag)
@@ -872,7 +894,7 @@ CFE_Status_t CF_CFDP_RecvFd(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
CFE_EVS_SendEvent(CF_PDU_FD_UNSUPPORTED_ERR_EID,
CFE_EVS_EventType_ERROR,
"CF: filedata PDU with segment metadata received");
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.error;
+ ++chan->stat.counters.recv.error;
ret = CF_ERROR;
}
@@ -986,7 +1008,8 @@ CFE_Status_t CF_CFDP_RecvNak(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
*-----------------------------------------------------------------*/
void CF_CFDP_RecvDrop(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
{
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.dropped;
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
+ ++chan->stat.counters.recv.dropped;
}
/*----------------------------------------------------------------
@@ -997,8 +1020,10 @@ void CF_CFDP_RecvDrop(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
*-----------------------------------------------------------------*/
void CF_CFDP_RecvHold(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
{
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
+
/* anything received in this state is considered spurious */
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.spurious;
+ ++chan->stat.counters.recv.spurious;
/*
* Normally we do not expect PDUs for a transaction in holdover, because
@@ -1155,11 +1180,11 @@ void CF_CFDP_SetupRxTransaction(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *p
void CF_CFDP_ReceivePdu(CF_Channel_t *chan, CF_Logical_PduBuffer_t *ph)
{
CF_Transaction_t *txn;
- uint8 chan_num = (chan - CF_AppData.engine.channels);
+ CF_Engine_t *engine_ptr = CF_GetEngine();
/* This decodes the header in the PDU. If it fails it sends the relevent event
* and increments any necessary counters. */
- if (CF_CFDP_RecvPh(chan_num, ph) != CFE_SUCCESS)
+ if (CF_CFDP_RecvPh(chan, ph) != CFE_SUCCESS)
{
/* drop it, nothing more to do */
return;
@@ -1171,10 +1196,10 @@ void CF_CFDP_ReceivePdu(CF_Channel_t *chan, CF_Logical_PduBuffer_t *ph)
{
/* if no match found, then check if we are the destination entity id.
* If so then this would be the first PDU of an RX transaction */
- if (ph->pdu_header.destination_eid == CF_AppData.config_table->local_eid)
+ if (ph->pdu_header.destination_eid == engine_ptr->config.local_eid)
{
/* we didn't find a match, so assign it to a transaction */
- txn = CF_CFDP_StartRxTransaction(chan_num);
+ txn = CF_CFDP_StartRxTransaction(chan);
if (txn == NULL)
{
CFE_EVS_SendEvent(
@@ -1210,176 +1235,204 @@ void CF_CFDP_ReceivePdu(CF_Channel_t *chan, CF_Logical_PduBuffer_t *ph)
/*----------------------------------------------------------------
*
- * Application-scope internal function
- * See description in cf_cfdp.h for argument/return detail
+ * Internal helper routine only, not part of API.
+ * Initializes a single channel within the engine.
+ * Compatible with CF_ForEachChannel()
*
*-----------------------------------------------------------------*/
-CFE_Status_t CF_CFDP_InitEngine(void)
+static int32 CF_CFDP_DoEngineChannelInit(CF_Engine_t *engine_ptr, CF_Channel_t *chan, void *arg)
{
- /* initialize all transaction nodes */
- CF_History_t *history;
- CF_Transaction_t *txn = CF_AppData.engine.transactions;
- CF_ChunkWrapper_t *cw = CF_AppData.engine.chunks;
- CF_CListNode_t **list_head;
- CFE_Status_t ret = CFE_SUCCESS;
- int chunk_mem_offset = 0;
- int i;
- int j;
- int k;
- char nbuf[64];
-
static const int CF_DIR_MAX_CHUNKS[CF_Direction_NUM][CF_NUM_CHANNELS] = {
CF_CHANNEL_NUM_RX_CHUNKS_PER_TRANSACTION,
CF_CHANNEL_NUM_TX_CHUNKS_PER_TRANSACTION
};
- memset(&CF_AppData.engine, 0, sizeof(CF_AppData.engine));
+ CF_EngineInitState_t *state = arg;
+ CF_CListNode_t **list_head;
+ int j;
+ int k;
+ const int chan_num = CF_ChannelSelect_AsInt(CF_GetChannelFromPtr(chan));
+ char nbuf[64];
+ CFE_Status_t ret = CFE_SUCCESS;
- /* Ensure that the temp directory exists (ignore error if it already exists) */
- OS_mkdir(CF_AppData.config_table->tmp_dir, 0);
+ snprintf(nbuf, sizeof(nbuf) - 1, "%s%d", CF_CHANNEL_PIPE_PREFIX, chan_num);
+ ret = CFE_SB_CreatePipe(&chan->pipe, chan->config.pipe_depth_input, nbuf);
+ if (ret != CFE_SUCCESS)
+ {
+ CFE_EVS_SendEvent(CF_CR_CHANNEL_PIPE_ERR_EID,
+ CFE_EVS_EventType_ERROR,
+ "CF: failed to create pipe %s, returned 0x%08lx",
+ nbuf,
+ (unsigned long)ret);
+ return ret;
+ }
- for (i = 0; i < CF_NUM_CHANNELS; ++i)
+ ret = CFE_SB_SubscribeLocal(CFE_SB_ValueToMsgId(chan->config.mid_input), chan->pipe, chan->config.pipe_depth_input);
+ if (ret != CFE_SUCCESS)
{
- snprintf(nbuf, sizeof(nbuf) - 1, "%s%d", CF_CHANNEL_PIPE_PREFIX, i);
- ret = CFE_SB_CreatePipe(&CF_AppData.engine.channels[i].pipe,
- CF_AppData.config_table->chan[i].pipe_depth_input,
- nbuf);
- if (ret != CFE_SUCCESS)
+ CFE_EVS_SendEvent(CF_INIT_SUB_ERR_EID,
+ CFE_EVS_EventType_ERROR,
+ "CF: failed to subscribe to MID 0x%lx, returned 0x%08lx",
+ (unsigned long)chan->config.mid_input,
+ (unsigned long)ret);
+ return ret;
+ }
+
+ if (chan->config.sem_name[0])
+ {
+ /*
+ * There is a start up race condition because CFE starts all apps at the same time,
+ * and if this sem is instantiated by another app, it may not be created yet.
+ *
+ * Therefore if OSAL returns OS_ERR_NAME_NOT_FOUND, assume this is what is going
+ * on, delay a bit and try again.
+ */
+ ret = OS_ERR_NAME_NOT_FOUND;
+ for (j = 0; j < CF_STARTUP_SEM_MAX_RETRIES; ++j)
{
- CFE_EVS_SendEvent(CF_CR_CHANNEL_PIPE_ERR_EID,
- CFE_EVS_EventType_ERROR,
- "CF: failed to create pipe %s, returned 0x%08lx",
- nbuf,
- (unsigned long)ret);
- break;
+ ret = OS_CountSemGetIdByName(&chan->sem_id, chan->config.sem_name);
+
+ if (ret != OS_ERR_NAME_NOT_FOUND)
+ {
+ break;
+ }
+
+ OS_TaskDelay(CF_STARTUP_SEM_TASK_DELAY);
}
- ret = CFE_SB_SubscribeLocal(CFE_SB_ValueToMsgId(CF_AppData.config_table->chan[i].mid_input),
- CF_AppData.engine.channels[i].pipe,
- CF_AppData.config_table->chan[i].pipe_depth_input);
- if (ret != CFE_SUCCESS)
+ if (ret != OS_SUCCESS)
{
- CFE_EVS_SendEvent(CF_INIT_SUB_ERR_EID,
+ CFE_EVS_SendEvent(CF_INIT_SEM_ERR_EID,
CFE_EVS_EventType_ERROR,
- "CF: failed to subscribe to MID 0x%lx, returned 0x%08lx",
- (unsigned long)CF_AppData.config_table->chan[i].mid_input,
- (unsigned long)ret);
- break;
+ "CF: failed to get sem id for name %s, error=%ld",
+ chan->config.sem_name,
+ (long)ret);
+ return ret;
}
+ }
- if (CF_AppData.config_table->chan[i].sem_name[0])
- {
- /*
- * There is a start up race condition because CFE starts all apps at the same time,
- * and if this sem is instantiated by another app, it may not be created yet.
- *
- * Therefore if OSAL returns OS_ERR_NAME_NOT_FOUND, assume this is what is going
- * on, delay a bit and try again.
- */
- ret = OS_ERR_NAME_NOT_FOUND;
- for (j = 0; j < CF_STARTUP_SEM_MAX_RETRIES; ++j)
- {
- ret = OS_CountSemGetIdByName(&CF_AppData.engine.channels[i].sem_id,
- CF_AppData.config_table->chan[i].sem_name);
+ for (j = 0; j < CF_NUM_TRANSACTIONS_PER_CHANNEL; ++j)
+ {
+ /* Initially put this on the free list for this channel */
+ state->txn->chan_ptr = chan;
+ CF_CList_InitNode(&state->txn->cl_node);
+ CF_CList_InsertBack_Ex(chan, CF_QueueIdx_FREE, &state->txn->cl_node);
+ ++state->txn;
- if (ret != OS_ERR_NAME_NOT_FOUND)
- {
- break;
- }
+ for (k = 0; k < CF_Direction_NUM; ++k)
+ {
+ list_head = CF_GetChunkListHead(chan, k);
- OS_TaskDelay(CF_STARTUP_SEM_TASK_DELAY);
- }
+ CF_ChunkListInit(&state->cw->chunks,
+ CF_DIR_MAX_CHUNKS[k][chan_num],
+ &engine_ptr->chunk_mem[state->chunk_mem_offset]);
+ state->chunk_mem_offset += CF_DIR_MAX_CHUNKS[k][chan_num];
+ CF_CList_InitNode(&state->cw->cl_node);
+ CF_CList_InsertBack(list_head, &state->cw->cl_node);
- if (ret != OS_SUCCESS)
- {
- CFE_EVS_SendEvent(CF_INIT_SEM_ERR_EID,
- CFE_EVS_EventType_ERROR,
- "CF: failed to get sem id for name %s, error=%ld",
- CF_AppData.config_table->chan[i].sem_name,
- (long)ret);
- break;
- }
+ ++state->cw;
}
+ }
- for (j = 0; j < CF_NUM_TRANSACTIONS_PER_CHANNEL; ++j, ++txn)
- {
- /* Initially put this on the free list for this channel */
- CF_FreeTransaction(txn, i);
+ for (j = 0; j < CF_NUM_HISTORIES_PER_CHANNEL; ++j)
+ {
+ CF_CList_InitNode(&state->history->cl_node);
+ CF_CList_InsertBack_Ex(chan, CF_QueueIdx_HIST_FREE, &state->history->cl_node);
- for (k = 0; k < CF_Direction_NUM; ++k, ++cw)
- {
- list_head = CF_GetChunkListHead(&CF_AppData.engine.channels[i], k);
+ ++state->history;
+ }
- CF_Assert((chunk_mem_offset + CF_DIR_MAX_CHUNKS[k][i]) <= CF_NUM_CHUNKS_ALL_CHANNELS);
- CF_ChunkListInit(&cw->chunks, CF_DIR_MAX_CHUNKS[k][i], &CF_AppData.engine.chunk_mem[chunk_mem_offset]);
- chunk_mem_offset += CF_DIR_MAX_CHUNKS[k][i];
- CF_CList_InitNode(&cw->cl_node);
- CF_CList_InsertBack(list_head, &cw->cl_node);
- }
- }
+ return CFE_SUCCESS;
+}
- for (j = 0; j < CF_NUM_HISTORIES_PER_CHANNEL; ++j)
- {
- history = &CF_AppData.engine.histories[(i * CF_NUM_HISTORIES_PER_CHANNEL) + j];
- CF_CList_InitNode(&history->cl_node);
- CF_CList_InsertBack_Ex(&CF_AppData.engine.channels[i], CF_QueueIdx_HIST_FREE, &history->cl_node);
- }
- }
+/*----------------------------------------------------------------
+ *
+ * Application-scope internal function
+ * See description in cf_cfdp.h for argument/return detail
+ *
+ *-----------------------------------------------------------------*/
+CFE_Status_t CF_CFDP_InitEngine(CF_Engine_t *engine_ptr)
+{
+ CFE_Status_t ret;
+ CF_EngineInitState_t state;
+
+ /* NOTE: Not clearing the engine global struct here.
+ * It was already cleared at the beginning of CF_AppInit(), and
+ * since then the configuration was imported from the table. Clearing
+ * the global would wipe that configuration data. */
+
+ /* Ensure that the temp directory exists (ignore error if it already exists) */
+ OS_mkdir(engine_ptr->config.tmp_dir, 0);
+
+ memset(&state, 0, sizeof(state));
+ state.history = engine_ptr->histories;
+ state.txn = engine_ptr->transactions;
+ state.cw = engine_ptr->chunks;
+
+ ret = CF_ForEachChannel(engine_ptr, CF_CFDP_DoEngineChannelInit, &state);
if (ret == CFE_SUCCESS)
{
- CF_AppData.engine.enabled = true;
+ engine_ptr->enabled = true;
}
+ CF_Assert(state.chunk_mem_offset <= CF_NUM_CHUNKS_ALL_CHANNELS);
+
return ret;
}
/*----------------------------------------------------------------
*
- * Application-scope internal function
+ * Local helper function function
* See description in cf_cfdp.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_CFDP_S_Tick_NewData(CF_Transaction_t *txn)
+static void CF_CFDP_S_Tick_SendFileData(CF_Transaction_t *txn)
{
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
+ const int chan_num = CF_ChannelSelect_AsInt(CF_GetChannelFromPtr(chan)); /* for perf log */
uint32 last_outgoing_counter;
- CF_Channel_t *chan;
- if (!txn->flags.com.suspended && txn->state_data.sub_state == CF_TxSubState_DATA_NORMAL)
- {
- /* this is a candidate for sending data */
- chan = CF_GetChannelFromTxn(txn);
- }
- else
- {
- chan = NULL;
- }
+ CF_Assert(chan);
- if (chan != NULL)
+ /*
+ * Run the TXN - Every call to DispatchTx should produce an outgoing PDU.
+ * If it does not, then it means this is blocked for some reason. Do not keep
+ * looping the same TXN if it is not making progress. Exit this loop and
+ * come back next tick.
+ *
+ * On the next tick, the state will be checked by the tick processor and
+ * may change out of DATA_NORMAL if necessary. Otherwise if it stays in
+ * DATA_NORMAL we will simply resume.
+ *
+ * Note the loop here is to adhere to the priority ordering. Items in the TX
+ * queue are ordered by priority so we should focus only on the first entry
+ * when sending new file data, then return CF_CLIST_EXIT to stop. If we exited
+ * with CF_CLIST_CONT it would effectively round robin between all entries.
+ */
+ do
{
- /*
- * Run the TXN - Every call to DispatchTx should produce an outgoing PDU.
- * If it does not, then it means this is blocked for some reason. Do not keep
- * looping the same TXN if it is not making progress. Exit this loop and
- * come back next tick.
- *
- * On the next tick, the state will be checked by the tick processor and
- * may change out of DATA_NORMAL if necessary. Otherwise if it stays in
- * DATA_NORMAL we will simply resume.
- *
- * Note the loop here is to adhere to the priority ordering. Items in the TX
- * queue are ordered by priority so we should focus only on the first entry
- * when sending new file data, then return CF_CLIST_EXIT to stop. If we exited
- * with CF_CLIST_CONT it would effectively round robin between all entries.
- */
- do
- {
- last_outgoing_counter = chan->outgoing_counter;
+ last_outgoing_counter = chan->outgoing_counter;
- CFE_ES_PerfLogEntry(CF_PERF_ID_PDUSENT(txn->chan_num));
- CF_CFDP_S_SubstateSendFileData(txn);
- CFE_ES_PerfLogExit(CF_PERF_ID_PDUSENT(txn->chan_num));
- } while (last_outgoing_counter != chan->outgoing_counter);
+ CFE_ES_PerfLogEntry(CF_PERF_ID_PDUSENT(chan_num));
+ CF_CFDP_S_SubstateSendFileData(txn);
+ CFE_ES_PerfLogExit(CF_PERF_ID_PDUSENT(chan_num));
+
+ } while (last_outgoing_counter != chan->outgoing_counter);
+}
+
+/*----------------------------------------------------------------
+ *
+ * Application-scope internal function
+ * See description in cf_cfdp.h for argument/return detail
+ *
+ *-----------------------------------------------------------------*/
+void CF_CFDP_S_Tick_NewData(CF_Transaction_t *txn)
+{
+ if (!txn->flags.com.suspended && txn->state_data.sub_state == CF_TxSubState_DATA_NORMAL)
+ {
+ /* this is a candidate for sending data */
+ CF_CFDP_S_Tick_SendFileData(txn);
}
}
@@ -1575,12 +1628,16 @@ void CF_CFDP_TickTransactions(CF_Channel_t *chan)
* See description in cf_cfdp.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_CFDP_InitTxnTxFile(CF_Transaction_t *txn, CF_CFDP_Class_t cfdp_class, uint8 keep, uint8 chan, uint8 priority)
+void CF_CFDP_InitTxnTxFile(CF_Transaction_t *txn,
+ CF_CFDP_Class_t cfdp_class,
+ uint8 keep,
+ CF_Channel_t *chan,
+ uint8 priority)
{
- txn->chan_num = chan;
+ txn->chan_ptr = chan;
txn->priority = priority;
txn->keep = keep;
- txn->reliable_mode = cfdp_class;
+ txn->reliable_mode = (cfdp_class == CF_CFDP_Class_2);
txn->state = txn->reliable_mode ? CF_TxnState_S2 : CF_TxnState_S1;
}
@@ -1592,15 +1649,17 @@ void CF_CFDP_InitTxnTxFile(CF_Transaction_t *txn, CF_CFDP_Class_t cfdp_class, ui
static void CF_CFDP_TxFile_Initiate(CF_Transaction_t *txn,
CF_CFDP_Class_t cfdp_class,
uint8 keep,
- uint8 chan,
+ CF_Channel_t *chan,
uint8 priority,
CF_EntityId_t dest_id)
{
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+
CFE_EVS_SendEvent(CF_CFDP_S_START_SEND_INF_EID,
CFE_EVS_EventType_INFORMATION,
"CF: start class %d tx of file %lu:%.*s -> %lu:%.*s",
cfdp_class + 1,
- (unsigned long)CF_AppData.config_table->local_eid,
+ (unsigned long)engine_ptr->config.local_eid,
CF_FILENAME_MAX_LEN,
txn->history->fnames.src_filename,
(unsigned long)dest_id,
@@ -1610,11 +1669,11 @@ static void CF_CFDP_TxFile_Initiate(CF_Transaction_t *txn,
CF_CFDP_InitTxnTxFile(txn, cfdp_class, keep, chan, priority);
/* Increment sequence number for new transaction */
- ++CF_AppData.engine.seq_num;
+ ++engine_ptr->seq_num;
/* Capture info for history */
- txn->history->seq_num = CF_AppData.engine.seq_num;
- txn->history->src_eid = CF_AppData.config_table->local_eid;
+ txn->history->seq_num = engine_ptr->seq_num;
+ txn->history->src_eid = engine_ptr->config.local_eid;
txn->history->peer_eid = dest_id;
CF_InsertSortPrio(txn, CF_QueueIdx_PEND);
@@ -1630,21 +1689,21 @@ CFE_Status_t CF_CFDP_TxFile(const char *src_filename,
const char *dst_filename,
CF_CFDP_Class_t cfdp_class,
uint8 keep,
- uint8 chan_num,
+ CF_Channel_t *chan,
uint8 priority,
CF_EntityId_t dest_id)
{
CF_Transaction_t *txn;
- CF_Channel_t *chan = &CF_AppData.engine.channels[chan_num];
- CF_Assert(chan_num < CF_NUM_CHANNELS);
+
+ CF_Assert(chan != NULL);
CFE_Status_t ret = CFE_SUCCESS;
- CF_TRACE("%s(): start, channel=%d\n", __func__, (int)chan_num);
+ CF_TRACE("%s(): start, channel=%d\n", __func__, CF_ChannelSelect_AsInt(CF_GetChannelFromPtr(chan)));
if (chan->num_cmd_tx < CF_MAX_COMMANDED_PLAYBACK_FILES_PER_CHAN)
{
- txn = CF_FindUnusedTransaction(&CF_AppData.engine.channels[chan_num], CF_Direction_TX);
+ txn = CF_FindUnusedTransaction(chan, CF_Direction_TX);
}
else
{
@@ -1665,7 +1724,7 @@ CFE_Status_t CF_CFDP_TxFile(const char *src_filename,
txn->history->fnames.src_filename[sizeof(txn->history->fnames.src_filename) - 1] = 0;
strncpy(txn->history->fnames.dst_filename, dst_filename, sizeof(txn->history->fnames.dst_filename) - 1);
txn->history->fnames.dst_filename[sizeof(txn->history->fnames.dst_filename) - 1] = 0;
- CF_CFDP_TxFile_Initiate(txn, cfdp_class, keep, chan_num, priority, dest_id);
+ CF_CFDP_TxFile_Initiate(txn, cfdp_class, keep, chan, priority, dest_id);
++chan->num_cmd_tx;
txn->flags.tx.cmd_tx = true;
@@ -1680,14 +1739,13 @@ CFE_Status_t CF_CFDP_TxFile(const char *src_filename,
* See description in cf_cfdp.h for argument/return detail
*
*-----------------------------------------------------------------*/
-CF_Transaction_t *CF_CFDP_StartRxTransaction(uint8 chan_num)
+CF_Transaction_t *CF_CFDP_StartRxTransaction(CF_Channel_t *chan)
{
- CF_Channel_t *chan = &CF_AppData.engine.channels[chan_num];
CF_Transaction_t *txn;
- CF_TRACE("%s(): start, channel=%d\n", __func__, (int)chan_num);
+ CF_TRACE("%s(): start, channel=%d\n", __func__, CF_ChannelSelect_AsInt(CF_GetChannelFromPtr(chan)));
- if (CF_AppData.hk.Payload.channel_hk[chan_num].q_size[CF_QueueIdx_RX] < CF_MAX_SIMULTANEOUS_RX)
+ if (chan->stat.q_size[CF_QueueIdx_RX] < CF_MAX_SIMULTANEOUS_RX)
{
txn = CF_FindUnusedTransaction(chan, CF_Direction_RX);
}
@@ -1716,7 +1774,7 @@ static CFE_Status_t CF_CFDP_PlaybackDir_Initiate(CF_Playback_t *pb,
const char *dst_filename,
CF_CFDP_Class_t cfdp_class,
uint8 keep,
- uint8 chan,
+ CF_Channel_t *chan,
uint8 priority,
CF_EntityId_t dest_id)
{
@@ -1731,7 +1789,7 @@ static CFE_Status_t CF_CFDP_PlaybackDir_Initiate(CF_Playback_t *pb,
"CF: failed to open playback directory %s, error=%ld",
src_filename,
(long)ret);
- ++CF_AppData.hk.Payload.channel_hk[chan].counters.fault.directory_read;
+ ++chan->stat.counters.fault.directory_read;
}
else
{
@@ -1763,7 +1821,7 @@ CFE_Status_t CF_CFDP_PlaybackDir(const char *src_filename,
const char *dst_filename,
CF_CFDP_Class_t cfdp_class,
uint8 keep,
- uint8 chan,
+ CF_Channel_t *chan,
uint8 priority,
uint16 dest_id)
{
@@ -1772,7 +1830,7 @@ CFE_Status_t CF_CFDP_PlaybackDir(const char *src_filename,
for (i = 0; i < CF_MAX_COMMANDED_PLAYBACK_DIRECTORIES_PER_CHAN; ++i)
{
- pb = &CF_AppData.engine.channels[chan].playback[i];
+ pb = &chan->playback[i];
if (!pb->busy)
{
break;
@@ -1854,12 +1912,7 @@ void CF_CFDP_ProcessPlaybackDirectory(CF_Channel_t *chan, CF_Playback_t *pb)
CF_FILENAME_MAX_NAME - 1,
pb->pending_file);
- CF_CFDP_TxFile_Initiate(txn,
- pb->cfdp_class,
- pb->keep,
- (chan - CF_AppData.engine.channels),
- pb->priority,
- pb->dest_id);
+ CF_CFDP_TxFile_Initiate(txn, pb->cfdp_class, pb->keep, chan, pb->priority, pb->dest_id);
txn->pb = pb;
++pb->num_ts;
@@ -1907,15 +1960,12 @@ static void CF_CFDP_UpdatePollPbCounted(CF_Playback_t *pb, int up, uint8 *counte
*-----------------------------------------------------------------*/
static void CF_CFDP_ProcessPlaybackDirectories(CF_Channel_t *chan)
{
- int i;
- const int chan_index = (chan - CF_AppData.engine.channels);
+ int i;
for (i = 0; i < CF_MAX_COMMANDED_PLAYBACK_DIRECTORIES_PER_CHAN; ++i)
{
CF_CFDP_ProcessPlaybackDirectory(chan, &chan->playback[i]);
- CF_CFDP_UpdatePollPbCounted(&chan->playback[i],
- chan->playback[i].busy,
- &CF_AppData.hk.Payload.channel_hk[chan_index].playback_counter);
+ CF_CFDP_UpdatePollPbCounted(&chan->playback[i], chan->playback[i].busy, &chan->stat.playback_counter);
}
}
@@ -1927,19 +1977,17 @@ static void CF_CFDP_ProcessPlaybackDirectories(CF_Channel_t *chan)
*-----------------------------------------------------------------*/
void CF_CFDP_ProcessPollingDirectories(CF_Channel_t *chan)
{
- CF_Poll_t *poll;
- CF_ChannelConfig_t *cc;
- CF_PollDir_t *pd;
- int i;
- int chan_index;
- int count_check;
- int ret;
+ CF_Poll_t *poll;
+ const CF_LocalChanConfig_t *cc;
+ const CF_LocalPdConfig_t *pd;
+ int i;
+ int count_check;
+ int ret;
for (i = 0; i < CF_MAX_POLLING_DIR_PER_CHAN; ++i)
{
poll = &chan->poll[i];
- chan_index = (chan - CF_AppData.engine.channels);
- cc = &CF_AppData.config_table->chan[chan_index];
+ cc = &chan->config;
pd = &cc->polldir[i];
count_check = 0;
@@ -1961,7 +2009,7 @@ void CF_CFDP_ProcessPollingDirectories(CF_Channel_t *chan)
pd->dst_dir,
pd->cfdp_class,
0,
- chan_index,
+ chan,
pd->priority,
pd->dest_eid);
if (!ret)
@@ -1990,42 +2038,50 @@ void CF_CFDP_ProcessPollingDirectories(CF_Channel_t *chan)
count_check = 1;
}
- CF_CFDP_UpdatePollPbCounted(&poll->pb, count_check, &CF_AppData.hk.Payload.channel_hk[chan_index].poll_counter);
+ CF_CFDP_UpdatePollPbCounted(&poll->pb, count_check, &chan->stat.poll_counter);
}
}
/*----------------------------------------------------------------
*
- * Application-scope internal function
- * See description in cf_cfdp.h for argument/return detail
+ * Local helper function
+ * Cycles a single channel within the CFDP engine
+ * Compatible with CF_ForEachChannel()
*
*-----------------------------------------------------------------*/
-void CF_CFDP_CycleEngine(void)
+static int32 CF_CFDP_DoEngineChannelCycle(CF_Engine_t *engine_ptr, CF_Channel_t *chan, void *arg)
{
- CF_Channel_t *chan;
- int i;
+ chan->outgoing_counter = 0;
+ chan->tx_blocked = false;
+
+ /* consume all received messages, even if channel is frozen */
+ CF_CFDP_ReceiveMessage(chan);
- if (CF_AppData.engine.enabled)
+ if (!chan->stat.frozen)
{
- for (i = 0; i < CF_NUM_CHANNELS; ++i)
- {
- chan = &CF_AppData.engine.channels[i];
+ /* cycle all transactions (tick) */
+ CF_CFDP_TickTransactions(chan);
- chan->outgoing_counter = 0;
- chan->tx_blocked = false;
+ CF_CFDP_ProcessPlaybackDirectories(chan);
+ CF_CFDP_ProcessPollingDirectories(chan);
+ }
- /* consume all received messages, even if channel is frozen */
- CF_CFDP_ReceiveMessage(chan);
+ return CFE_SUCCESS;
+}
- if (!CF_AppData.hk.Payload.channel_hk[i].frozen)
- {
- /* cycle all transactions (tick) */
- CF_CFDP_TickTransactions(chan);
+/*----------------------------------------------------------------
+ *
+ * Application-scope internal function
+ * See description in cf_cfdp.h for argument/return detail
+ *
+ *-----------------------------------------------------------------*/
+void CF_CFDP_CycleEngine(void)
+{
+ CF_Engine_t *engine_ptr = CF_GetEngine();
- CF_CFDP_ProcessPlaybackDirectories(chan);
- CF_CFDP_ProcessPollingDirectories(chan);
- }
- }
+ if (engine_ptr->enabled)
+ {
+ CF_ForEachChannel(engine_ptr, CF_CFDP_DoEngineChannelCycle, NULL);
}
}
@@ -2111,13 +2167,13 @@ void CF_CFDP_RecycleTransaction(CF_Transaction_t *txn)
txn->fd = OS_OBJECT_ID_UNDEFINED;
}
- CF_DequeueTransaction(txn); /* this makes it "float" (not in any queue) */
-
chan = CF_GetChannelFromTxn(txn);
/* this should always be */
if (chan != NULL && txn->history != NULL)
{
+ CF_DequeueTransaction(txn); /* this makes it "float" (not in any queue) */
+
if (txn->chunks != NULL)
{
chunklist_head = CF_GetChunkListHead(chan, txn->history->dir);
@@ -2137,6 +2193,7 @@ void CF_CFDP_RecycleTransaction(CF_Transaction_t *txn)
{
hist_destq = CF_QueueIdx_HIST_FREE;
}
+
CF_CList_InsertBack_Ex(chan, hist_destq, &txn->history->cl_node);
txn->history = NULL;
}
@@ -2144,7 +2201,7 @@ void CF_CFDP_RecycleTransaction(CF_Transaction_t *txn)
/* this wipes it and puts it back onto the list to be found by
* CF_FindUnusedTransaction(). Need to preserve the chan_num
* and keep it associated with this channel, though. */
- CF_FreeTransaction(txn, txn->chan_num);
+ CF_FreeTransaction(txn);
}
/*----------------------------------------------------------------
@@ -2210,7 +2267,7 @@ void CF_CFDP_SendEotPkt(CF_Transaction_t *txn)
CFE_MSG_Init(CFE_MSG_PTR(EotPktPtr->TelemetryHeader), CFE_SB_ValueToMsgId(CF_EOT_TLM_MID), sizeof(*EotPktPtr));
- EotPktPtr->Payload.channel = txn->chan_num;
+ EotPktPtr->Payload.channel = CF_GetChannelFromPtr(CF_GetChannelFromTxn(txn));
EotPktPtr->Payload.direction = txn->history->dir;
EotPktPtr->Payload.fnames = txn->history->fnames;
EotPktPtr->Payload.state = txn->state;
@@ -2283,53 +2340,62 @@ CF_CListTraverse_Status_t CF_CFDP_CloseFiles(CF_CListNode_t *node, void *context
/*----------------------------------------------------------------
*
- * Application-scope internal function
- * See description in cf_cfdp.h for argument/return detail
+ * Local helper function
+ * Closes/shuts down a single channel within the CFDP engine
+ * Compatible with CF_ForEachChannel()
*
*-----------------------------------------------------------------*/
-void CF_CFDP_DisableEngine(void)
+static int32 CF_CFDP_DoCloseChannel(CF_Engine_t *engine_ptr, CF_Channel_t *chan, void *arg)
{
- int i;
- int j;
static const CF_QueueIdx_t CLOSE_QUEUES[] = { CF_QueueIdx_RX, CF_QueueIdx_TX };
- CF_Channel_t *chan;
- CF_AppData.engine.enabled = false;
+ int j;
- for (i = 0; i < CF_NUM_CHANNELS; ++i)
+ /* first, close all active files */
+ for (j = 0; j < (sizeof(CLOSE_QUEUES) / sizeof(CLOSE_QUEUES[0])); ++j)
{
- chan = &CF_AppData.engine.channels[i];
+ CF_CList_Traverse(chan->qs[CLOSE_QUEUES[j]], CF_CFDP_CloseFiles, NULL);
+ }
- /* first, close all active files */
- for (j = 0; j < (sizeof(CLOSE_QUEUES) / sizeof(CLOSE_QUEUES[0])); ++j)
+ /* any playback directories need to have their directory ids closed */
+ for (j = 0; j < CF_MAX_COMMANDED_PLAYBACK_DIRECTORIES_PER_CHAN; ++j)
+ {
+ if (chan->playback[j].busy)
{
- CF_CList_Traverse(chan->qs[CLOSE_QUEUES[j]], CF_CFDP_CloseFiles, NULL);
+ OS_DirectoryClose(chan->playback[j].dir_id);
}
+ }
- /* any playback directories need to have their directory ids closed */
- for (j = 0; j < CF_MAX_COMMANDED_PLAYBACK_DIRECTORIES_PER_CHAN; ++j)
+ for (j = 0; j < CF_MAX_POLLING_DIR_PER_CHAN; ++j)
+ {
+ if (chan->poll[j].pb.busy)
{
- if (chan->playback[j].busy)
- {
- OS_DirectoryClose(chan->playback[j].dir_id);
- }
+ OS_DirectoryClose(chan->poll[j].pb.dir_id);
}
+ }
- for (j = 0; j < CF_MAX_POLLING_DIR_PER_CHAN; ++j)
- {
- if (chan->poll[j].pb.busy)
- {
- OS_DirectoryClose(chan->poll[j].pb.dir_id);
- }
- }
+ /* finally all queue counters must be reset */
+ memset(&chan->stat.q_size, 0, sizeof(chan->stat.q_size));
- /* finally all queue counters must be reset */
- memset(&CF_AppData.hk.Payload.channel_hk[i].q_size, 0, sizeof(CF_AppData.hk.Payload.channel_hk[i].q_size));
+ /* SAD: Suppress Ignored Return Value warning from CodeSonar. CFE_SB_DeletePipe() will send event message if
+ * there is any error */
+ (void)CFE_SB_DeletePipe(chan->pipe);
- /* SAD: Suppress Ignored Return Value warning from CodeSonar. CFE_SB_DeletePipe() will send event message if
- * there is any error */
- (void)CFE_SB_DeletePipe(chan->pipe);
- }
+ return CFE_SUCCESS;
+}
+
+/*----------------------------------------------------------------
+ *
+ * Application-scope internal function
+ * See description in cf_cfdp.h for argument/return detail
+ *
+ *-----------------------------------------------------------------*/
+void CF_CFDP_DisableEngine(void)
+{
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+
+ engine_ptr->enabled = false;
+ CF_ForEachChannel(engine_ptr, CF_CFDP_DoCloseChannel, NULL);
}
/*----------------------------------------------------------------
@@ -2340,11 +2406,13 @@ void CF_CFDP_DisableEngine(void)
*-----------------------------------------------------------------*/
void CF_CFDP_GetTempName(const CF_History_t *hist, char *FileNameBuf, size_t FileNameSize)
{
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+
snprintf(FileNameBuf,
FileNameSize,
"%.*s/%lu_%lu.tmp",
CF_FILENAME_MAX_PATH - 1,
- CF_AppData.config_table->tmp_dir,
+ engine_ptr->config.tmp_dir,
(unsigned long)hist->src_eid,
(unsigned long)hist->seq_num);
}
diff --git a/fsw/src/cf_cfdp.h b/fsw/src/cf_cfdp.h
index 3638660f..c1eb2d9b 100644
--- a/fsw/src/cf_cfdp.h
+++ b/fsw/src/cf_cfdp.h
@@ -225,11 +225,12 @@ void CF_CFDP_CompleteTick(CF_Transaction_t *txn);
* @par Assumptions, External Events, and Notes:
* Only called once.
*
+ * @param engine_ptr CF engine pointer (must not be NULL)
* @retval #CFE_SUCCESS \copydoc CFE_SUCCESS
* @returns anything else on error.
*
*/
-CFE_Status_t CF_CFDP_InitEngine(void);
+CFE_Status_t CF_CFDP_InitEngine(CF_Engine_t *engine_ptr);
/************************************************************************/
/** @brief Cycle the engine. Called once per wakeup.
@@ -263,7 +264,7 @@ void CF_CFDP_DisableEngine(void);
* @param dst_filename Remote filename
* @param cfdp_class Whether to perform a class 1 or class 2 transfer
* @param keep Whether to keep or delete the local file after completion
- * @param chan CF channel number to use
+ * @param chan CF channel pointer (must not be NULL)
* @param priority CF priority level
* @param dest_id Entity ID of remote receiver
*
@@ -274,7 +275,7 @@ CFE_Status_t CF_CFDP_TxFile(const char *src_filename,
const char *dst_filename,
CF_CFDP_Class_t cfdp_class,
uint8 keep,
- uint8 chan,
+ CF_Channel_t *chan,
uint8 priority,
CF_EntityId_t dest_id);
@@ -292,7 +293,7 @@ CFE_Status_t CF_CFDP_TxFile(const char *src_filename,
* @param dst_filename Remote filename
* @param cfdp_class Whether to perform a class 1 or class 2 transfer
* @param keep Whether to keep or delete the local file after completion
- * @param chan CF channel number to use
+ * @param chan CF channel pointer (must not be NULL)
* @param priority CF priority level
* @param dest_id Entity ID of remote receiver
*
@@ -303,7 +304,7 @@ CFE_Status_t CF_CFDP_PlaybackDir(const char *src_filename,
const char *dst_filename,
CF_CFDP_Class_t cfdp_class,
uint8 keep,
- uint8 chan,
+ CF_Channel_t *chan,
uint8 priority,
uint16 dest_id);
@@ -453,7 +454,7 @@ void CF_CFDP_AppendTlv(CF_Logical_TlvList_t *ptlv_list, CF_CFDP_TlvType_t tlv_ty
* @par Assumptions, External Events, and Notes:
* A new message has been received.
*
- * @param chan_num The channel number for statistics purposes
+ * @param chan CF channel pointer (must not be NULL)
* @param ph The logical PDU buffer being received
*
* @returns integer status code
@@ -461,7 +462,7 @@ void CF_CFDP_AppendTlv(CF_Logical_TlvList_t *ptlv_list, CF_CFDP_TlvType_t tlv_ty
* @retval CF_ERROR for general errors
* @retval CF_SHORT_PDU_ERROR if PDU too short
*/
-CFE_Status_t CF_CFDP_RecvPh(uint8 chan_num, CF_Logical_PduBuffer_t *ph);
+CFE_Status_t CF_CFDP_RecvPh(CF_Channel_t *chan, CF_Logical_PduBuffer_t *ph);
/************************************************************************/
/** @brief Unpack a metadata PDU from a received message.
@@ -610,11 +611,15 @@ void CF_CFDP_CancelTransaction(CF_Transaction_t *txn);
* @param txn Pointer to the transaction state
* @param cfdp_class Set to class 1 or class 2
* @param keep Whether to keep the local file
- * @param chan CF channel number
+ * @param chan CF channel pointer (must not be NULL)
* @param priority Priority of transfer
*
*/
-void CF_CFDP_InitTxnTxFile(CF_Transaction_t *txn, CF_CFDP_Class_t cfdp_class, uint8 keep, uint8 chan, uint8 priority);
+void CF_CFDP_InitTxnTxFile(CF_Transaction_t *txn,
+ CF_CFDP_Class_t cfdp_class,
+ uint8 keep,
+ CF_Channel_t *chan,
+ uint8 priority);
/************************************************************************/
/** @brief Helper function to start a new RX transaction
@@ -626,11 +631,11 @@ void CF_CFDP_InitTxnTxFile(CF_Transaction_t *txn, CF_CFDP_Class_t cfdp_class, ui
*
* If there is no capacity for another RX transaction, this returns NULL.
*
- * @param chan_num CF channel number
+ * @param chan CF channel pointer (must not be NULL)
* @returns Pointer to new transaction
*
*/
-CF_Transaction_t *CF_CFDP_StartRxTransaction(uint8 chan_num);
+CF_Transaction_t *CF_CFDP_StartRxTransaction(CF_Channel_t *chan);
/* functions to handle LVs (length-value, CFDP spec) */
/* returns number of bytes copied, or -1 on error */
diff --git a/fsw/src/cf_cfdp_dispatch.c b/fsw/src/cf_cfdp_dispatch.c
index c5a360f3..a7bb4397 100644
--- a/fsw/src/cf_cfdp_dispatch.c
+++ b/fsw/src/cf_cfdp_dispatch.c
@@ -44,6 +44,7 @@ void CF_CFDP_R_DispatchRecv(CF_Transaction_t *txn,
{
CF_CFDP_StateRecvFunc_t selected_handler;
CF_Logical_PduFileDirectiveHeader_t *fdh;
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
selected_handler = NULL;
@@ -60,7 +61,7 @@ void CF_CFDP_R_DispatchRecv(CF_Transaction_t *txn,
}
else
{
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.spurious;
+ ++chan->stat.counters.recv.spurious;
CFE_EVS_SendEvent(CF_CFDP_R_DC_INV_ERR_EID,
CFE_EVS_EventType_ERROR,
"CF R%d(%lu:%lu): received PDU with invalid directive code %d for sub-state %d",
@@ -79,7 +80,7 @@ void CF_CFDP_R_DispatchRecv(CF_Transaction_t *txn,
}
else
{
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.dropped;
+ ++chan->stat.counters.recv.dropped;
}
}
@@ -106,6 +107,7 @@ void CF_CFDP_S_DispatchRecv(CF_Transaction_t *txn,
const CF_CFDP_FileDirectiveDispatchTable_t *substate_tbl;
CF_CFDP_StateRecvFunc_t selected_handler;
CF_Logical_PduFileDirectiveHeader_t *fdh;
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
/* send state, so we only care about file directive PDU */
selected_handler = NULL;
@@ -123,7 +125,7 @@ void CF_CFDP_S_DispatchRecv(CF_Transaction_t *txn,
}
else
{
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.spurious;
+ ++chan->stat.counters.recv.spurious;
CFE_EVS_SendEvent(CF_CFDP_S_DC_INV_ERR_EID,
CFE_EVS_EventType_ERROR,
"CF S%d(%lu:%lu): received PDU with invalid directive code %d for sub-state %d",
diff --git a/fsw/src/cf_cfdp_r.c b/fsw/src/cf_cfdp_r.c
index a0b69092..61347e26 100644
--- a/fsw/src/cf_cfdp_r.c
+++ b/fsw/src/cf_cfdp_r.c
@@ -46,7 +46,8 @@
*-----------------------------------------------------------------*/
CFE_Status_t CF_CFDP_R_CheckCrc(CF_Transaction_t *txn)
{
- CFE_Status_t ret;
+ CFE_Status_t ret;
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
if (txn->crc.result != txn->state_data.eof_crc)
{
@@ -58,7 +59,7 @@ CFE_Status_t CF_CFDP_R_CheckCrc(CF_Transaction_t *txn)
(unsigned long)txn->history->seq_num,
(unsigned long)txn->crc.result,
(unsigned long)txn->state_data.eof_crc);
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.crc_mismatch;
+ ++chan->stat.counters.fault.crc_mismatch;
ret = CF_ERROR;
}
else
@@ -111,6 +112,7 @@ CFE_Status_t CF_CFDP_R_ProcessFd(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *
const CF_Logical_PduFileDataHeader_t *fd;
int32 fret;
CFE_Status_t ret;
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
/* this function is only entered for data PDUs */
fd = &ph->int_header.fd;
@@ -136,7 +138,7 @@ CFE_Status_t CF_CFDP_R_ProcessFd(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *
(long)fd->offset,
(long)fret);
CF_CFDP_SetTxnStatus(txn, CF_TxnStatus_FILE_SIZE_ERROR);
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.file_seek;
+ ++chan->stat.counters.fault.file_seek;
ret = CF_ERROR; /* connection will reset in caller */
}
else
@@ -159,13 +161,13 @@ CFE_Status_t CF_CFDP_R_ProcessFd(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *
(long)fd->data_len,
(long)fret);
CF_CFDP_SetTxnStatus(txn, CF_TxnStatus_FILESTORE_REJECTION);
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.file_write;
+ ++chan->stat.counters.fault.file_write;
ret = CF_ERROR; /* connection will reset in caller */
}
else
{
- txn->state_data.cached_pos = fd->data_len + fd->offset;
- CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.file_data_bytes += fd->data_len;
+ txn->state_data.cached_pos = fd->data_len + fd->offset;
+ chan->stat.counters.recv.file_data_bytes += fd->data_len;
/* insert gap data in chunks */
CF_ChunkListAdd(&txn->chunks->chunks, fd->offset, fd->data_len);
@@ -185,6 +187,7 @@ void CF_CFDP_R_SubstateRecvEof(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph
{
CFE_Status_t ret = CFE_SUCCESS;
const CF_Logical_PduEof_t *eof;
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
/* this function is only entered for PDUs identified as EOF type */
ret = CF_CFDP_RecvEof(txn, ph);
@@ -223,7 +226,7 @@ void CF_CFDP_R_SubstateRecvEof(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph
CF_CFDP_GetPrintClass(txn),
(unsigned long)txn->history->src_eid,
(unsigned long)txn->history->seq_num);
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.error;
+ ++chan->stat.counters.recv.error;
}
}
@@ -296,16 +299,18 @@ void CF_CFDP_R2_GapCompute(const CF_ChunkList_t *chunks, const CF_Chunk_t *chunk
*-----------------------------------------------------------------*/
CFE_Status_t CF_CFDP_R_SendNak(CF_Transaction_t *txn)
{
- CF_Logical_PduBuffer_t *ph = CF_CFDP_ConstructPduHeader(txn,
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+ CF_Logical_PduBuffer_t *ph = CF_CFDP_ConstructPduHeader(txn,
CF_CFDP_FileDirective_NAK,
txn->history->peer_eid,
- CF_AppData.config_table->local_eid,
+ engine_ptr->config.local_eid,
1,
txn->history->seq_num,
1);
CF_Logical_PduNak_t *nak;
uint32 cret;
CFE_Status_t ret;
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
if (ph == NULL)
{
@@ -350,7 +355,7 @@ CFE_Status_t CF_CFDP_R_SendNak(CF_Transaction_t *txn)
{
CF_CFDP_SendNak(txn, ph);
- CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.sent.nak_segment_requests += cret;
+ chan->stat.counters.sent.nak_segment_requests += cret;
}
}
else
@@ -386,8 +391,9 @@ CFE_Status_t CF_CFDP_R_SendNak(CF_Transaction_t *txn)
*-----------------------------------------------------------------*/
void CF_CFDP_R_Init(CF_Transaction_t *txn)
{
- int32 ret;
- char TempName[CFE_MISSION_MAX_FILE_LEN];
+ int32 ret;
+ char TempName[CFE_MISSION_MAX_FILE_LEN];
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
/* set default FIN status */
txn->state_data.fin_dc = CF_CFDP_FinDeliveryCode_INVALID;
@@ -408,7 +414,7 @@ void CF_CFDP_R_Init(CF_Transaction_t *txn)
TempName,
(long)ret);
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.file_open;
+ ++chan->stat.counters.fault.file_open;
txn->fd = OS_OBJECT_ID_UNDEFINED; /* just in case */
CF_CFDP_SetTxnStatus(txn, CF_TxnStatus_FILESTORE_REJECTION);
@@ -435,7 +441,8 @@ void CF_CFDP_R_Init(CF_Transaction_t *txn)
*-----------------------------------------------------------------*/
void CF_CFDP_R_CalcCrcStart(CF_Transaction_t *txn)
{
- int32 OsStatus;
+ int32 OsStatus;
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
if (txn->fsize != txn->state_data.eof_size)
{
@@ -463,7 +470,7 @@ void CF_CFDP_R_CalcCrcStart(CF_Transaction_t *txn)
(unsigned long)txn->history->src_eid,
(unsigned long)txn->history->seq_num,
(long)OsStatus);
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.file_seek;
+ ++chan->stat.counters.fault.file_seek;
CF_CFDP_SetTxnStatus(txn, CF_TxnStatus_FILE_SIZE_ERROR);
txn->flags.com.crc_complete = true;
@@ -484,19 +491,20 @@ void CF_CFDP_R_CalcCrcStart(CF_Transaction_t *txn)
*-----------------------------------------------------------------*/
void CF_CFDP_R_CalcCrcChunk(CF_Transaction_t *txn)
{
- uint8 buf[CF_R2_CRC_CHUNK_SIZE];
- size_t count_bytes;
- size_t want_offs_size;
- size_t read_size;
- int fret;
- bool success = true;
+ uint8 buf[CF_R2_CRC_CHUNK_SIZE];
+ size_t count_bytes;
+ size_t want_offs_size;
+ size_t read_size;
+ int fret;
+ bool success = true;
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
memset(buf, 0, sizeof(buf));
count_bytes = 0;
- while ((count_bytes < CF_AppData.config_table->rx_crc_calc_bytes_per_wakeup)
- && (txn->state_data.cached_pos < txn->fsize))
+ while ((count_bytes < engine_ptr->config.rx_crc_calc_bytes_per_wakeup) && (txn->state_data.cached_pos < txn->fsize))
{
want_offs_size = txn->state_data.cached_pos + sizeof(buf);
@@ -521,7 +529,7 @@ void CF_CFDP_R_CalcCrcChunk(CF_Transaction_t *txn)
(unsigned long)read_size,
(long)fret);
CF_CFDP_SetTxnStatus(txn, CF_TxnStatus_FILE_SIZE_ERROR);
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.file_read;
+ ++chan->stat.counters.fault.file_read;
success = false;
break;
}
@@ -558,6 +566,7 @@ void CF_CFDP_R2_SubstateRecvFinAck(CF_Transaction_t *txn, CF_Logical_PduBuffer_t
{
CFE_Status_t status;
CF_Logical_PduAck_t *ack;
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
/* receipt of fin-ack is only valid if we had previously sent
* a fin and it decodes as expected */
@@ -591,7 +600,7 @@ void CF_CFDP_R2_SubstateRecvFinAck(CF_Transaction_t *txn, CF_Logical_PduBuffer_t
CF_CFDP_GetPrintClass(txn),
(unsigned long)txn->history->src_eid,
(unsigned long)txn->history->seq_num);
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.error;
+ ++chan->stat.counters.recv.error;
}
}
@@ -1129,6 +1138,7 @@ void CF_CFDP_R_Tick_Maintenance(CF_Transaction_t *txn)
void CF_CFDP_R_Tick(CF_Transaction_t *txn)
{
CF_CFDP_AckTxnStatus_t CurrStatus;
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
CurrStatus = CF_CFDP_GetAckTxnStatus(txn);
@@ -1152,7 +1162,7 @@ void CF_CFDP_R_Tick(CF_Transaction_t *txn)
CF_CFDP_GetPrintClass(txn),
(unsigned long)txn->history->src_eid,
(unsigned long)txn->history->seq_num);
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.inactivity_timer;
+ ++chan->stat.counters.fault.inactivity_timer;
CF_CFDP_SetTxnStatus(txn, CF_TxnStatus_INACTIVITY_DETECTED);
}
diff --git a/fsw/src/cf_cfdp_s.c b/fsw/src/cf_cfdp_s.c
index 8ec9040f..75265b83 100644
--- a/fsw/src/cf_cfdp_s.c
+++ b/fsw/src/cf_cfdp_s.c
@@ -50,9 +50,10 @@ CFE_Status_t CF_CFDP_S_SendFileData(CF_Transaction_t *txn, uint32 foffs, uint32
{
int32 status = 0;
CFE_Status_t ret;
- CF_Logical_PduBuffer_t *ph = CF_CFDP_ConstructPduHeader(txn,
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+ CF_Logical_PduBuffer_t *ph = CF_CFDP_ConstructPduHeader(txn,
0,
- CF_AppData.config_table->local_eid,
+ engine_ptr->config.local_eid,
txn->history->peer_eid,
0,
txn->history->seq_num,
@@ -60,6 +61,7 @@ CFE_Status_t CF_CFDP_S_SendFileData(CF_Transaction_t *txn, uint32 foffs, uint32
CF_Logical_PduFileDataHeader_t *fd;
size_t actual_bytes;
void *data_ptr;
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
if (!ph)
{
@@ -86,9 +88,9 @@ CFE_Status_t CF_CFDP_S_SendFileData(CF_Transaction_t *txn, uint32 foffs, uint32
{
actual_bytes = bytes_to_read;
}
- if (actual_bytes > CF_AppData.config_table->outgoing_file_chunk_size)
+ if (actual_bytes > engine_ptr->config.outgoing_file_chunk_size)
{
- actual_bytes = CF_AppData.config_table->outgoing_file_chunk_size;
+ actual_bytes = engine_ptr->config.outgoing_file_chunk_size;
}
/*
@@ -118,7 +120,7 @@ CFE_Status_t CF_CFDP_S_SendFileData(CF_Transaction_t *txn, uint32 foffs, uint32
(unsigned long)txn->history->seq_num,
(long)foffs,
(long)status);
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.file_seek;
+ ++chan->stat.counters.fault.file_seek;
ret = CF_ERROR;
}
else
@@ -140,7 +142,7 @@ CFE_Status_t CF_CFDP_S_SendFileData(CF_Transaction_t *txn, uint32 foffs, uint32
(unsigned long)txn->history->seq_num,
(long)actual_bytes,
(long)status);
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.file_read;
+ ++chan->stat.counters.fault.file_read;
ret = CF_ERROR;
}
else
@@ -153,7 +155,7 @@ CFE_Status_t CF_CFDP_S_SendFileData(CF_Transaction_t *txn, uint32 foffs, uint32
{
CF_CFDP_SendFd(txn, ph); /* CF_CFDP_SendFd only returns CFE_SUCCESS */
- CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.sent.file_data_bytes += actual_bytes;
+ chan->stat.counters.sent.file_data_bytes += actual_bytes;
if (calc_crc)
{
CF_CRC_Digest(&txn->crc, fd->data_ptr, fd->data_len);
@@ -268,6 +270,7 @@ void CF_CFDP_S2_SubstateNak(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
const CF_Logical_PduNak_t *nak;
uint8 counter;
uint8 bad_sr;
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
bad_sr = 0;
@@ -314,8 +317,7 @@ void CF_CFDP_S2_SubstateNak(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
}
}
- CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.nak_segment_requests +=
- nak->segment_list.num_segments;
+ chan->stat.counters.recv.nak_segment_requests += nak->segment_list.num_segments;
if (bad_sr)
{
CFE_EVS_SendEvent(CF_CFDP_S_INVALID_SR_ERR_EID,
@@ -335,7 +337,7 @@ void CF_CFDP_S2_SubstateNak(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
CF_CFDP_GetPrintClass(txn),
(unsigned long)txn->history->src_eid,
(unsigned long)txn->history->seq_num);
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.error;
+ ++chan->stat.counters.recv.error;
}
}
@@ -349,6 +351,7 @@ void CF_CFDP_S2_SubstateEofAck(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph
{
CFE_Status_t ret;
CF_Logical_PduAck_t *ack;
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
ret = CF_CFDP_RecvAck(txn, ph);
if (ret == CFE_SUCCESS)
@@ -375,7 +378,7 @@ void CF_CFDP_S2_SubstateEofAck(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph
CF_CFDP_GetPrintClass(txn),
(unsigned long)txn->history->src_eid,
(unsigned long)txn->history->seq_num);
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.error;
+ ++chan->stat.counters.recv.error;
}
}
@@ -439,8 +442,9 @@ void CF_CFDP_S2_Recv(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
*-----------------------------------------------------------------*/
void CF_CFDP_S_Init(CF_Transaction_t *txn)
{
- int32 OsStatus;
- osal_id_t PendingFd;
+ int32 OsStatus;
+ osal_id_t PendingFd;
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
PendingFd = OS_OBJECT_ID_UNDEFINED;
@@ -458,7 +462,7 @@ void CF_CFDP_S_Init(CF_Transaction_t *txn)
(unsigned long)txn->history->src_eid,
(unsigned long)txn->history->seq_num,
txn->history->fnames.src_filename);
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.file_open;
+ ++chan->stat.counters.fault.file_open;
CF_CFDP_SetTxnStatus(txn, CF_TxnStatus_FILESTORE_REJECTION);
}
}
@@ -476,7 +480,7 @@ void CF_CFDP_S_Init(CF_Transaction_t *txn)
(unsigned long)txn->history->seq_num,
txn->history->fnames.src_filename,
(long)OsStatus);
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.file_open;
+ ++chan->stat.counters.fault.file_open;
PendingFd = OS_OBJECT_ID_UNDEFINED; /* just in case */
CF_CFDP_SetTxnStatus(txn, CF_TxnStatus_FILESTORE_REJECTION);
}
@@ -495,7 +499,7 @@ void CF_CFDP_S_Init(CF_Transaction_t *txn)
(unsigned long)txn->history->seq_num,
txn->history->fnames.src_filename,
(long)OsStatus);
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.file_seek;
+ ++chan->stat.counters.fault.file_seek;
CF_CFDP_SetTxnStatus(txn, CF_TxnStatus_FILESTORE_REJECTION);
}
else
@@ -517,7 +521,7 @@ void CF_CFDP_S_Init(CF_Transaction_t *txn)
(unsigned long)txn->history->seq_num,
txn->history->fnames.src_filename,
(long)OsStatus);
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.file_seek;
+ ++chan->stat.counters.fault.file_seek;
CF_CFDP_SetTxnStatus(txn, CF_TxnStatus_FILESTORE_REJECTION);
}
}
@@ -553,14 +557,14 @@ void CF_CFDP_S_HandleFileRetention(CF_Transaction_t *txn)
* the local file deletion policy, either delete directly or move to recycle dir
* - If the transfer is not successful or the "keep" flag is true, then do nothing
*/
- char TempName[CFE_MISSION_MAX_PATH_LEN];
- const char *SubjectFile;
- const char *MoveDest;
- const CF_ChannelConfig_t *config;
- int32 OsStatus;
- bool AllowLocalRemove;
-
- config = &CF_AppData.config_table->chan[txn->chan_num];
+ char TempName[CFE_MISSION_MAX_PATH_LEN];
+ const char *SubjectFile;
+ const char *MoveDest;
+ int32 OsStatus;
+ bool AllowLocalRemove;
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
+
SubjectFile = txn->history->fnames.src_filename;
MoveDest = NULL;
AllowLocalRemove = false;
@@ -574,8 +578,7 @@ void CF_CFDP_S_HandleFileRetention(CF_Transaction_t *txn)
* while making it so the automatic transfer will not re-trigger on the same file. */
if (!txn->flags.tx.cmd_tx)
{
- MoveDest =
- CF_CFDP_GetMoveTarget(CF_AppData.config_table->fail_dir, SubjectFile, TempName, sizeof(TempName));
+ MoveDest = CF_CFDP_GetMoveTarget(engine_ptr->config.fail_dir, SubjectFile, TempName, sizeof(TempName));
}
}
else if (!txn->keep)
@@ -597,7 +600,7 @@ void CF_CFDP_S_HandleFileRetention(CF_Transaction_t *txn)
if (AllowLocalRemove)
{
/* Everything checked out, If move directory is defined attempt move */
- MoveDest = CF_CFDP_GetMoveTarget(config->move_dir, SubjectFile, TempName, sizeof(TempName));
+ MoveDest = CF_CFDP_GetMoveTarget(chan->config.move_dir, SubjectFile, TempName, sizeof(TempName));
}
}
@@ -886,6 +889,7 @@ void CF_CFDP_S_CheckState(CF_Transaction_t *txn)
void CF_CFDP_S_Tick(CF_Transaction_t *txn)
{
CF_CFDP_AckTxnStatus_t CurrStatus;
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
CurrStatus = CF_CFDP_GetAckTxnStatus(txn);
@@ -911,7 +915,7 @@ void CF_CFDP_S_Tick(CF_Transaction_t *txn)
"CF S(%lu:%lu): inactivity timer expired",
(unsigned long)txn->history->src_eid,
(unsigned long)txn->history->seq_num);
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.inactivity_timer;
+ ++chan->stat.counters.fault.inactivity_timer;
CF_CFDP_SetTxnStatus(txn, CF_TxnStatus_INACTIVITY_DETECTED);
}
diff --git a/fsw/src/cf_cfdp_sbintf.c b/fsw/src/cf_cfdp_sbintf.c
index c60353fa..4a994b79 100644
--- a/fsw/src/cf_cfdp_sbintf.c
+++ b/fsw/src/cf_cfdp_sbintf.c
@@ -61,29 +61,30 @@
CF_Logical_PduBuffer_t *CF_CFDP_MsgOutGet(const CF_Transaction_t *txn, bool silent)
{
/* if channel is frozen, do not take message */
- CF_Channel_t *chan = CF_AppData.engine.channels + txn->chan_num;
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
bool success = true;
CF_Logical_PduBuffer_t *ret;
int32 os_status;
+ CF_Engine_t *engine_ptr = CF_GetEngine();
/* this function should not be called more than once before the message
* is sent, so if there's already an outgoing message allocated
* then drop and get a new one (not likely) */
ret = NULL;
- if (CF_AppData.engine.out.msg)
+ if (engine_ptr->out.msg)
{
- CFE_SB_ReleaseMessageBuffer(CF_AppData.engine.out.msg);
- CF_AppData.engine.out.msg = NULL;
+ CFE_SB_ReleaseMessageBuffer(engine_ptr->out.msg);
+ engine_ptr->out.msg = NULL;
}
- if (CF_AppData.config_table->chan[txn->chan_num].max_outgoing_messages_per_wakeup
- && (chan->outgoing_counter >= CF_AppData.config_table->chan[txn->chan_num].max_outgoing_messages_per_wakeup))
+ if (chan->config.max_outgoing_messages_per_wakeup
+ && (chan->outgoing_counter >= chan->config.max_outgoing_messages_per_wakeup))
{
/* no more messages this wakeup allowed */
success = false;
}
- if (success && !CF_AppData.hk.Payload.channel_hk[txn->chan_num].frozen && !txn->flags.com.suspended)
+ if (success && !chan->stat.frozen && !txn->flags.com.suspended)
{
/* first, check if there's room in the pipe for the message we want to build */
if (OS_ObjectIdDefined(chan->sem_id))
@@ -98,11 +99,11 @@ CF_Logical_PduBuffer_t *CF_CFDP_MsgOutGet(const CF_Transaction_t *txn, bool sile
/* Allocate message buffer on success */
if (os_status == OS_SUCCESS)
{
- CF_AppData.engine.out.msg = CFE_SB_AllocateMessageBuffer(offsetof(CF_PduTlmMsg_t, ph) + CF_MAX_PDU_SIZE
- + CF_PDU_ENCAPSULATION_EXTRA_TRAILING_BYTES);
+ engine_ptr->out.msg = CFE_SB_AllocateMessageBuffer(offsetof(CF_PduTlmMsg_t, ph) + CF_MAX_PDU_SIZE
+ + CF_PDU_ENCAPSULATION_EXTRA_TRAILING_BYTES);
}
- if (!CF_AppData.engine.out.msg)
+ if (!engine_ptr->out.msg)
{
if (!silent && (os_status == OS_SUCCESS))
{
@@ -115,14 +116,14 @@ CF_Logical_PduBuffer_t *CF_CFDP_MsgOutGet(const CF_Transaction_t *txn, bool sile
if (success)
{
- CFE_MSG_Init(&CF_AppData.engine.out.msg->Msg,
- CFE_SB_ValueToMsgId(CF_AppData.config_table->chan[txn->chan_num].mid_output),
+ CFE_MSG_Init(&engine_ptr->out.msg->Msg,
+ CFE_SB_ValueToMsgId(chan->config.mid_output),
offsetof(CF_PduTlmMsg_t, ph));
++chan->outgoing_counter; /* even if max_outgoing_messages_per_wakeup is 0 (unlimited), it's ok
to inc this */
/* prepare for encoding - the "tx_pdudata" is what serves as the temporary holding area for content */
- ret = &CF_AppData.engine.out.tx_pdudata;
+ ret = &engine_ptr->out.tx_pdudata;
}
}
@@ -136,8 +137,8 @@ CF_Logical_PduBuffer_t *CF_CFDP_MsgOutGet(const CF_Transaction_t *txn, bool sile
else
{
/* if returning a buffer, then reset the encoder state to point to the beginning of the encapsulation msg */
- CF_CFDP_EncodeStart(&CF_AppData.engine.out.encode,
- CF_AppData.engine.out.msg,
+ CF_CFDP_EncodeStart(&engine_ptr->out.encode,
+ engine_ptr->out.msg,
ret,
offsetof(CF_PduTlmMsg_t, ph),
offsetof(CF_PduTlmMsg_t, ph) + CF_MAX_PDU_SIZE);
@@ -152,11 +153,12 @@ CF_Logical_PduBuffer_t *CF_CFDP_MsgOutGet(const CF_Transaction_t *txn, bool sile
* See description in cf_cfdp_sbintf.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_CFDP_Send(uint8 chan_num, const CF_Logical_PduBuffer_t *ph)
+void CF_CFDP_Send(CF_Channel_t *chan, const CF_Logical_PduBuffer_t *ph)
{
CFE_MSG_Size_t sb_msgsize;
+ CF_Engine_t *engine_ptr = CF_GetEngine();
- CF_Assert(chan_num < CF_NUM_CHANNELS);
+ CF_Assert(chan);
/* now handle the SB encapsulation - this should reflect the
* length of the entire message, including encapsulation */
@@ -165,13 +167,13 @@ void CF_CFDP_Send(uint8 chan_num, const CF_Logical_PduBuffer_t *ph)
sb_msgsize += ph->pdu_header.data_encoded_length;
sb_msgsize += CF_PDU_ENCAPSULATION_EXTRA_TRAILING_BYTES;
- CFE_MSG_SetSize(&CF_AppData.engine.out.msg->Msg, sb_msgsize);
- CFE_MSG_SetMsgTime(&CF_AppData.engine.out.msg->Msg, CFE_TIME_GetTime());
- CFE_SB_TransmitBuffer(CF_AppData.engine.out.msg, true);
+ CFE_MSG_SetSize(&engine_ptr->out.msg->Msg, sb_msgsize);
+ CFE_MSG_SetMsgTime(&engine_ptr->out.msg->Msg, CFE_TIME_GetTime());
+ CFE_SB_TransmitBuffer(engine_ptr->out.msg, true);
- ++CF_AppData.hk.Payload.channel_hk[chan_num].counters.sent.pdu;
+ ++chan->stat.counters.sent.pdu;
- CF_AppData.engine.out.msg = NULL;
+ engine_ptr->out.msg = NULL;
}
/*----------------------------------------------------------------
@@ -182,16 +184,16 @@ void CF_CFDP_Send(uint8 chan_num, const CF_Logical_PduBuffer_t *ph)
*-----------------------------------------------------------------*/
void CF_CFDP_ReceiveMessage(CF_Channel_t *chan)
{
- uint32 count = 0;
- int32 status;
- const int chan_num = (chan - CF_AppData.engine.channels);
- CFE_SB_Buffer_t *bufptr;
- CFE_MSG_Size_t msg_size;
- CFE_MSG_Type_t msg_type;
-
+ uint32 count = 0;
+ int32 status;
+ const int chan_num = CF_ChannelSelect_AsInt(CF_GetChannelFromPtr(chan)); /* for perf log */
+ CFE_SB_Buffer_t *bufptr;
+ CFE_MSG_Size_t msg_size;
+ CFE_MSG_Type_t msg_type;
+ CF_Engine_t *engine_ptr = CF_GetEngine();
CF_Logical_PduBuffer_t *ph;
- for (; count < CF_AppData.config_table->chan[chan_num].rx_max_messages_per_wakeup; ++count)
+ for (; count < chan->config.rx_max_messages_per_wakeup; ++count)
{
bufptr = NULL;
msg_size = 0;
@@ -202,7 +204,7 @@ void CF_CFDP_ReceiveMessage(CF_Channel_t *chan)
break; /* no more messages */
}
- ph = &CF_AppData.engine.in.rx_pdudata;
+ ph = &engine_ptr->in.rx_pdudata;
CFE_ES_PerfLogEntry(CF_PERF_ID_PDURCVD(chan_num));
CFE_MSG_GetSize(&bufptr->Msg, &msg_size);
CFE_MSG_GetType(&bufptr->Msg, &msg_type);
@@ -218,11 +220,11 @@ void CF_CFDP_ReceiveMessage(CF_Channel_t *chan)
}
if (msg_type == CFE_MSG_Type_Tlm)
{
- CF_CFDP_DecodeStart(&CF_AppData.engine.in.decode, bufptr, ph, offsetof(CF_PduTlmMsg_t, ph), msg_size);
+ CF_CFDP_DecodeStart(&engine_ptr->in.decode, bufptr, ph, offsetof(CF_PduTlmMsg_t, ph), msg_size);
}
else
{
- CF_CFDP_DecodeStart(&CF_AppData.engine.in.decode, bufptr, ph, offsetof(CF_PduCmdMsg_t, ph), msg_size);
+ CF_CFDP_DecodeStart(&engine_ptr->in.decode, bufptr, ph, offsetof(CF_PduCmdMsg_t, ph), msg_size);
}
/* Identify and dispatch this PDU */
diff --git a/fsw/src/cf_cfdp_sbintf.h b/fsw/src/cf_cfdp_sbintf.h
index ac49e710..489b3003 100644
--- a/fsw/src/cf_cfdp_sbintf.h
+++ b/fsw/src/cf_cfdp_sbintf.h
@@ -91,11 +91,11 @@ CF_Logical_PduBuffer_t *CF_CFDP_MsgOutGet(const CF_Transaction_t *txn, bool sile
* @par Assumptions, External Events, and Notes:
* The PDU in the output buffer is ready to transmit.
*
- * @param chan_num Channel number for statistics/accounting purposes
+ * @param chan CF channel pointer (must not be NULL)
* @param ph Pointer to PDU buffer to send
*
*/
-void CF_CFDP_Send(uint8 chan_num, const CF_Logical_PduBuffer_t *ph);
+void CF_CFDP_Send(CF_Channel_t *chan, const CF_Logical_PduBuffer_t *ph);
/************************************************************************/
/** @brief Process received message on channel PDU input pipe.
diff --git a/fsw/src/cf_cfdp_types.h b/fsw/src/cf_cfdp_types.h
index a10fadcb..01fb0f1e 100644
--- a/fsw/src/cf_cfdp_types.h
+++ b/fsw/src/cf_cfdp_types.h
@@ -170,12 +170,26 @@ typedef enum
CF_TxnStatus_MAX = 24
} CF_TxnStatus_t;
+/*
+ * Forward typedef declarations
+ *
+ * These are needed as some of these structures that reference
+ * each other. Typedefs are created early, then the content
+ * is defined below.
+ */
+typedef struct CF_Channel CF_Channel_t;
+typedef struct CF_Transaction CF_Transaction_t;
+typedef struct CF_History CF_History_t;
+typedef struct CF_ChunkWrapper CF_ChunkWrapper_t;
+typedef struct CF_Playback CF_Playback_t;
+typedef struct CF_Poll CF_Poll_t;
+
/**
* @brief CF History entry
*
* Records CF app operations for future reference
*/
-typedef struct CF_History
+struct CF_History
{
CF_TxnFilenames_t fnames; /**< \brief file names associated with this history entry */
CF_CListNode_t cl_node; /**< \brief for connection to a CList */
@@ -184,25 +198,25 @@ typedef struct CF_History
CF_EntityId_t src_eid; /**< \brief the source eid of the transaction */
CF_EntityId_t peer_eid; /**< \brief peer_eid is always the "other guy", same src_eid for RX */
CF_TransactionSeq_t seq_num; /**< \brief transaction identifier, stays constant for entire transfer */
-} CF_History_t;
+};
/**
* @brief Wrapper around a CF_ChunkList_t object
*
* This allows a CF_ChunkList_t to be stored within a CList data storage structure
*/
-typedef struct CF_ChunkWrapper
+struct CF_ChunkWrapper
{
CF_ChunkList_t chunks;
CF_CListNode_t cl_node;
-} CF_ChunkWrapper_t;
+};
/**
* @brief CF Playback entry
*
* Keeps the state of CF playback requests
*/
-typedef struct CF_Playback
+struct CF_Playback
{
osal_id_t dir_id;
CF_CFDP_Class_t cfdp_class;
@@ -216,19 +230,19 @@ typedef struct CF_Playback
bool diropen;
bool keep;
bool counted;
-} CF_Playback_t;
+};
/**
* @brief CF Poll entry
*
* Keeps the state of CF directory polling
*/
-typedef struct CF_Poll
+struct CF_Poll
{
CF_Playback_t pb;
CF_Timer_t interval_timer;
bool timer_set;
-} CF_Poll_t;
+};
/**
* @brief Data that applies to all types of transactions
@@ -317,12 +331,13 @@ typedef struct CF_StateData
*
* This keeps the state of CF file transactions
*/
-typedef struct CF_Transaction
+struct CF_Transaction
{
CF_TxnState_t state; /**< \brief each engine is commanded to do something, which is the overall state */
CF_History_t *history; /**< \brief weird, holds active filenames and possibly other info */
CF_ChunkWrapper_t *chunks; /**< \brief for gap tracking, only used on class 2 */
+ CF_Channel_t *chan_ptr; /**< \brief reference to the CF channel for this transaction */
CF_Timer_t inactivity_timer; /**< \brief set to the overall inactivity timer of a remote */
CF_Timer_t ack_timer; /**< \brief called ack_timer, but is also nak_timer */
@@ -334,7 +349,6 @@ typedef struct CF_Transaction
bool reliable_mode; /**< Set true if class 2, false in class 1 */
uint8 keep;
- uint8 chan_num; /**< \brief if ever more than one engine, this may need to change to pointer */
uint8 priority;
CF_CListNode_t cl_node;
@@ -352,7 +366,7 @@ typedef struct CF_Transaction
* Please ignore the duplicate declarations of the "all" flags.
*/
CF_StateFlags_t flags;
-} CF_Transaction_t;
+};
/**
* @brief Identifies the type of timer tick being processed
@@ -369,6 +383,67 @@ typedef enum
CF_TickState_NUM_TYPES
} CF_TickState_t;
+/**
+ * \brief Configuration entry for directory polling
+ *
+ * This is a mirror of what came from the configuration table, stored locally in the app global
+ */
+typedef struct CF_LocalPdConfig
+{
+ bool enabled; /**< \brief Enabled flag */
+ uint8 priority; /**< \brief priority to use when placing transactions on the pending queue */
+
+ uint32 interval_sec; /**< \brief number of seconds to wait before trying a new directory */
+
+ CF_CFDP_Class_t cfdp_class; /**< \brief the CFDP class to send */
+ CF_EntityId_t dest_eid; /**< \brief destination entity id */
+
+ char src_dir[OS_MAX_PATH_LEN]; /**< \brief path to source dir */
+ char dst_dir[OS_MAX_PATH_LEN]; /**< \brief path to destination dir */
+
+} CF_LocalPdConfig_t;
+
+/**
+ * \brief Configuration entry for channel config
+ *
+ * This is a mirror of what came from the configuration table, stored locally in the app global
+ */
+typedef struct CF_LocalChanConfig
+{
+ uint32 max_outgoing_messages_per_wakeup; /**< \brief max number of messages to send per wakeup (0 - unlimited) */
+ uint32 rx_max_messages_per_wakeup; /**< \brief max number of rx messages to process per wakeup */
+
+ uint32 ack_timer_s; /**< \brief Acknowledge timer in seconds */
+ uint32 nak_timer_s; /**< \brief Non-acknowledge timer in seconds */
+ uint32 inactivity_timer_s; /**< \brief Inactivity timer in seconds */
+
+ bool dequeue_enabled; /**< \brief if 1, then the channel will make pending transactions active */
+ uint8 ack_limit; /**< number of times to retry ACK (for ex, send FIN and wait for fin-ack) */
+ uint8 nak_limit; /**< number of times to retry NAK before giving up (resets on a single response */
+
+ CFE_SB_MsgId_Atom_t mid_input; /**< \brief msgid integer value for incoming messages */
+ CFE_SB_MsgId_Atom_t mid_output; /**< \brief msgid integer value for outgoing messages */
+
+ uint16 pipe_depth_input; /**< \brief depth of pipe to receive incoming PDU */
+
+ CF_LocalPdConfig_t polldir[CF_MAX_POLLING_DIR_PER_CHAN]; /**< \brief Configuration for polled directories */
+
+ char sem_name[OS_MAX_API_NAME]; /**< \brief name of throttling semaphore in TO */
+ char move_dir[OS_MAX_PATH_LEN]; /**< \brief Move directory if not empty */
+} CF_LocalChanConfig_t;
+
+/**
+ * \brief Housekeeping channel data
+ */
+typedef struct CF_LocalChanStat
+{
+ CF_HkCounters_t counters; /**< \brief Counters */
+ uint16 q_size[CF_QueueIdx_NUM]; /**< \brief Queue sizes */
+ uint8 poll_counter; /**< \brief Number of active polling directories */
+ uint8 playback_counter; /**< \brief Number of active playback directories */
+ bool frozen; /**< \brief Frozen state: 0 == not frozen, else frozen */
+} CF_LocalChanStat_t;
+
/**
* @brief Channel state object
*
@@ -378,7 +453,7 @@ typedef enum
* and poll state, as well as separate addresses on the underlying message
* transport (e.g. SB).
*/
-typedef struct CF_Channel
+struct CF_Channel
{
CF_CListNode_t *qs[CF_QueueIdx_NUM];
CF_CListNode_t *cs[CF_Direction_NUM];
@@ -405,7 +480,9 @@ typedef struct CF_Channel
bool tx_blocked; /**< Set true if PDU transmission was blocked due to limits */
-} CF_Channel_t;
+ CF_LocalChanConfig_t config;
+ CF_LocalChanStat_t stat;
+};
/**
* @brief CF engine output state
@@ -431,6 +508,21 @@ typedef struct CF_Input
CF_Logical_PduBuffer_t rx_pdudata; /**< \brief Rx PDU logical values */
} CF_Input_t;
+typedef struct CF_EngineConfig
+{
+ uint32 ticks_per_second; /**< \brief expected ticks per second to CFDP app */
+ uint32 rx_crc_calc_bytes_per_wakeup; /**< \brief max number of bytes per wakeup to calculate
+ * r2 CRC for recvd file (must be 1024-byte aligned)
+ */
+
+ CF_EntityId_t local_eid; /**< \brief the local entity ID of the CF app */
+
+ uint16 outgoing_file_chunk_size; /**< \brief maximum size of outgoing file data chunk in a PDU.
+ * Limited by CF_MAX_PDU_SIZE minus the PDU header(s) */
+ char tmp_dir[OS_MAX_PATH_LEN]; /**< \brief directory to put temp files */
+ char fail_dir[OS_MAX_PATH_LEN]; /**< \brief fail directory */
+} CF_EngineConfig_t;
+
/**
* @brief An engine represents a pairing to a local EID
*
@@ -443,6 +535,8 @@ typedef struct CF_Engine
CF_Output_t out;
CF_Input_t in;
+ CF_EngineConfig_t config;
+
/* NOTE: could have separate array of transactions as part of channel? */
CF_Transaction_t transactions[CF_NUM_TRANSACTIONS];
CF_History_t histories[CF_NUM_HISTORIES];
diff --git a/fsw/src/cf_cmd.c b/fsw/src/cf_cmd.c
index da2b7308..742bee87 100644
--- a/fsw/src/cf_cmd.c
+++ b/fsw/src/cf_cmd.c
@@ -39,6 +39,66 @@
#include
+/* Helper struct for CF_DoChanAction() */
+typedef struct CF_ChanActionContext
+{
+ CF_ChanAction_Status_t ret;
+ CF_ChanActionFn_t fn;
+ void *context;
+} CF_ChanActionContext_t;
+
+/*----------------------------------------------------------------
+ *
+ * Local Helper Function, compatible with CF_ForEachChannel()
+ * Resets fault counters
+ *
+ *-----------------------------------------------------------------*/
+static int32 CF_DoResetFaultCount(CF_Engine_t *engine_ptr, CF_Channel_t *chan, void *arg)
+{
+ memset(&chan->stat.counters.fault, 0, sizeof(chan->stat.counters.fault));
+ return CFE_SUCCESS;
+}
+
+/*----------------------------------------------------------------
+ *
+ * Local Helper Function, compatible with CF_ForEachChannel()
+ * Resets up counters
+ *
+ *-----------------------------------------------------------------*/
+static int32 CF_DoResetUpCount(CF_Engine_t *engine_ptr, CF_Channel_t *chan, void *arg)
+{
+ memset(&chan->stat.counters.recv, 0, sizeof(chan->stat.counters.recv));
+ return CFE_SUCCESS;
+}
+
+/*----------------------------------------------------------------
+ *
+ * Local Helper Function, compatible with CF_ForEachChannel()
+ * Resets down counters
+ *
+ *-----------------------------------------------------------------*/
+static int32 CF_DoResetDownCount(CF_Engine_t *engine_ptr, CF_Channel_t *chan, void *arg)
+{
+ memset(&chan->stat.counters.sent, 0, sizeof(chan->stat.counters.sent));
+ return CFE_SUCCESS;
+}
+
+/*----------------------------------------------------------------
+ *
+ * Local helper function
+ * Invokes the requested action on a single channel
+ * compatible with CF_ForEachChannel()
+ *
+ *-----------------------------------------------------------------*/
+static int32 CF_DoSingleChannelAction(CF_Engine_t *engine_ptr, CF_Channel_t *chan, void *arg)
+{
+ CF_ChanActionContext_t *ctxt = arg;
+
+ ctxt->ret |= ctxt->fn(chan, ctxt->context);
+
+ return CFE_SUCCESS;
+}
+
/*----------------------------------------------------------------
*
* Application-scope internal function
@@ -55,7 +115,7 @@ CFE_Status_t CF_NoopCmd(const CF_NoopCmd_t *msg)
CF_REVISION,
CF_MISSION_REV);
- ++CF_AppData.hk.Payload.counters.cmd;
+ ++CF_AppData.counters.cmd;
return CFE_SUCCESS;
}
@@ -68,69 +128,59 @@ CFE_Status_t CF_NoopCmd(const CF_NoopCmd_t *msg)
*-----------------------------------------------------------------*/
CFE_Status_t CF_ResetCountersCmd(const CF_ResetCountersCmd_t *msg)
{
- const CF_UnionArgs_Payload_t *data = &msg->Payload;
- static const char *names[5] = { "all", "cmd", "fault", "up", "down" };
+ const CF_ResetCountersCmd_Payload_t *data = &msg->Payload;
+ static const char *names[5] = { "all", "cmd", "fault", "up", "down" };
/* 0=all, 1=cmd, 2=fault 3=up 4=down */
- uint8 param = data->byte[0];
- int i;
- bool acc = true;
+ bool acc = true;
+ CF_Engine_t *engine_ptr = CF_GetEngine();
- if (param > 4)
+ if (data->ResetType > 4)
{
CFE_EVS_SendEvent(CF_CMD_RESET_INVALID_ERR_EID,
CFE_EVS_EventType_ERROR,
"CF: Received RESET COUNTERS command with invalid parameter %d",
- param);
- ++CF_AppData.hk.Payload.counters.err;
+ (int)data->ResetType);
+ ++CF_AppData.counters.err;
}
else
{
CFE_EVS_SendEvent(CF_RESET_INF_EID,
CFE_EVS_EventType_INFORMATION,
"CF: Received RESET COUNTERS command: %s",
- names[param]);
+ names[data->ResetType]);
/* if the param is CF_Reset_command, or all counters */
- if ((param == CF_Reset_all) || (param == CF_Reset_command))
+ if ((data->ResetType == CF_Reset_all) || (data->ResetType == CF_Reset_command))
{
/* command counters */
- memset(&CF_AppData.hk.Payload.counters, 0, sizeof(CF_AppData.hk.Payload.counters));
+ memset(&CF_AppData.counters, 0, sizeof(CF_AppData.counters));
acc = false; /* don't increment accept counter on command counter reset */
}
/* if the param is CF_Reset_fault, or all counters */
- if ((param == CF_Reset_all) || (param == CF_Reset_fault))
+ if ((data->ResetType == CF_Reset_all) || (data->ResetType == CF_Reset_fault))
{
/* fault counters */
- for (i = 0; i < CF_NUM_CHANNELS; ++i)
- memset(&CF_AppData.hk.Payload.channel_hk[i].counters.fault,
- 0,
- sizeof(CF_AppData.hk.Payload.channel_hk[i].counters.fault));
+ CF_ForEachChannel(engine_ptr, CF_DoResetFaultCount, NULL);
}
/* if the param is CF_Reset_up, or all counters */
- if ((param == CF_Reset_all) || (param == CF_Reset_up))
+ if ((data->ResetType == CF_Reset_all) || (data->ResetType == CF_Reset_up))
{
/* up counters */
- for (i = 0; i < CF_NUM_CHANNELS; ++i)
- memset(&CF_AppData.hk.Payload.channel_hk[i].counters.recv,
- 0,
- sizeof(CF_AppData.hk.Payload.channel_hk[i].counters.recv));
+ CF_ForEachChannel(engine_ptr, CF_DoResetUpCount, NULL);
}
/* if the param is CF_Reset_down, or all counters */
- if ((param == CF_Reset_all) || (param == CF_Reset_down))
+ if ((data->ResetType == CF_Reset_all) || (data->ResetType == CF_Reset_down))
{
/* down counters */
- for (i = 0; i < CF_NUM_CHANNELS; ++i)
- memset(&CF_AppData.hk.Payload.channel_hk[i].counters.sent,
- 0,
- sizeof(CF_AppData.hk.Payload.channel_hk[i].counters.sent));
+ CF_ForEachChannel(engine_ptr, CF_DoResetDownCount, NULL);
}
if (acc)
{
- ++CF_AppData.hk.Payload.counters.cmd;
+ ++CF_AppData.counters.cmd;
}
}
@@ -145,46 +195,41 @@ CFE_Status_t CF_ResetCountersCmd(const CF_ResetCountersCmd_t *msg)
*-----------------------------------------------------------------*/
CFE_Status_t CF_TxFileCmd(const CF_TxFileCmd_t *msg)
{
- const CF_TxFile_Payload_t *tx = &msg->Payload;
+ const CF_TxFile_Payload_t *tx = &msg->Payload;
+ CF_Channel_t *chan = CF_GetChannelPtr(tx->chan_num);
+ CFE_Status_t ret;
/*
* This needs to validate all its inputs.
* "keep" should only be 0 or 1 (logical true/false).
* For priority and dest_id params, anything is acceptable.
*/
- if ((tx->cfdp_class != CF_CFDP_CLASS_1 && tx->cfdp_class != CF_CFDP_CLASS_2) || tx->chan_num >= CF_NUM_CHANNELS
- || (int)tx->keep > 1)
+ if (chan == NULL || !CF_IsValidClass(tx->cfdp_class) || (int)tx->keep > 1)
{
CFE_EVS_SendEvent(CF_CMD_BAD_PARAM_ERR_EID,
CFE_EVS_EventType_ERROR,
- "CF: bad parameter in CF_TxFileCmd(): chan=%u, class=%u keep=%u",
- (unsigned int)tx->chan_num,
+ "CF: bad parameter in CF_TxFileCmd(): chan=%d, class=%u keep=%u",
+ CF_ChannelSelect_AsInt(tx->chan_num),
(unsigned int)tx->cfdp_class,
(unsigned int)tx->keep);
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
/* This must return CFE_SUCCESS because the command is done (error counter was incremented, no more events) */
return CFE_SUCCESS;
}
- if (CF_CFDP_TxFile(tx->src_filename,
- tx->dst_filename,
- tx->cfdp_class,
- tx->keep,
- tx->chan_num,
- tx->priority,
- tx->dest_id)
- == CFE_SUCCESS)
+ ret = CF_CFDP_TxFile(tx->src_filename, tx->dst_filename, tx->cfdp_class, tx->keep, chan, tx->priority, tx->dest_id);
+ if (ret == CFE_SUCCESS)
{
CFE_EVS_SendEvent(CF_CMD_TX_FILE_INF_EID,
CFE_EVS_EventType_INFORMATION,
"CF: file transfer successfully initiated");
- ++CF_AppData.hk.Payload.counters.cmd;
+ ++CF_AppData.counters.cmd;
}
else
{
CFE_EVS_SendEvent(CF_CMD_TX_FILE_ERR_EID, CFE_EVS_EventType_ERROR, "CF: file transfer initiation failed");
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
}
return CFE_SUCCESS;
@@ -198,48 +243,49 @@ CFE_Status_t CF_TxFileCmd(const CF_TxFileCmd_t *msg)
*-----------------------------------------------------------------*/
CFE_Status_t CF_PlaybackDirCmd(const CF_PlaybackDirCmd_t *msg)
{
- const CF_TxFile_Payload_t *tx = &msg->Payload;
+ const CF_TxFile_Payload_t *tx = &msg->Payload;
+ CF_Channel_t *chan = CF_GetChannelPtr(tx->chan_num);
+ CFE_Status_t ret;
/*
* This needs to validate all its inputs.
* "keep" should only be 0 or 1 (logical true/false).
* For priority and dest_id params, anything is acceptable.
*/
- if ((tx->cfdp_class != CF_CFDP_CLASS_1 && tx->cfdp_class != CF_CFDP_CLASS_2) || tx->chan_num >= CF_NUM_CHANNELS
- || (int)tx->keep > 1)
+ if (chan == NULL || !CF_IsValidClass(tx->cfdp_class) || (int)tx->keep > 1)
{
CFE_EVS_SendEvent(CF_CMD_BAD_PARAM_ERR_EID,
CFE_EVS_EventType_ERROR,
"CF: bad parameter in CF_PlaybackDirCmd(): chan=%u, class=%u keep=%u",
- (unsigned int)tx->chan_num,
+ CF_ChannelSelect_AsInt(tx->chan_num),
(unsigned int)tx->cfdp_class,
(unsigned int)tx->keep);
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
/* This must return CFE_SUCCESS because the command is done (error counter was incremented, no more events) */
return CFE_SUCCESS;
}
- if (CF_CFDP_PlaybackDir(tx->src_filename,
- tx->dst_filename,
- tx->cfdp_class,
- tx->keep,
- tx->chan_num,
- tx->priority,
- tx->dest_id)
- == CFE_SUCCESS)
+ ret = CF_CFDP_PlaybackDir(tx->src_filename,
+ tx->dst_filename,
+ tx->cfdp_class,
+ tx->keep,
+ chan,
+ tx->priority,
+ tx->dest_id);
+ if (ret == CFE_SUCCESS)
{
CFE_EVS_SendEvent(CF_CMD_PLAYBACK_DIR_INF_EID,
CFE_EVS_EventType_INFORMATION,
"CF: directory playback initiation successful");
- ++CF_AppData.hk.Payload.counters.cmd;
+ ++CF_AppData.counters.cmd;
}
else
{
CFE_EVS_SendEvent(CF_CMD_PLAYBACK_DIR_ERR_EID,
CFE_EVS_EventType_ERROR,
"CF: directory playback initiation failed");
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
}
return CFE_SUCCESS;
@@ -252,23 +298,26 @@ CFE_Status_t CF_PlaybackDirCmd(const CF_PlaybackDirCmd_t *msg)
*
*-----------------------------------------------------------------*/
CF_ChanAction_Status_t
-CF_DoChanAction(const CF_UnionArgs_Payload_t *data, const char *errstr, CF_ChanActionFn_t fn, void *context)
+CF_DoChanAction(CF_ChannelSelect_t chan_select, const char *errstr, CF_ChanActionFn_t fn, void *context)
{
- int i;
- CF_ChanAction_Status_t ret = CF_ChanAction_Status_SUCCESS;
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+ CF_ChanActionContext_t local_ctxt;
+
+ memset(&local_ctxt, 0, sizeof(local_ctxt));
+ local_ctxt.fn = fn;
+ local_ctxt.context = context;
/* this function is generic for any ground command that takes a single channel
* argument which must be less than CF_NUM_CHANNELS or 255 which is a special
* value that means apply command to all channels */
- if (data->byte[0] == CF_ALL_CHANNELS)
+ if (CF_IsAllChannels(chan_select))
{
/* apply to all channels */
- for (i = 0; i < CF_NUM_CHANNELS; ++i)
- ret |= fn(i, context);
+ CF_ForEachChannel(engine_ptr, CF_DoSingleChannelAction, &local_ctxt);
}
- else if (data->byte[0] < CF_NUM_CHANNELS)
+ else if (CF_IsValidChannel(chan_select))
{
- ret = fn(data->byte[0], context);
+ CF_DoSingleChannelAction(engine_ptr, CF_GetChannelPtr(chan_select), &local_ctxt);
}
else
{
@@ -277,11 +326,11 @@ CF_DoChanAction(const CF_UnionArgs_Payload_t *data, const char *errstr, CF_ChanA
CFE_EVS_EventType_ERROR,
"CF: %s: channel parameter out of range. received %d",
errstr,
- data->byte[0]);
- ret = CF_ChanAction_Status_ERROR;
+ CF_ChannelSelect_AsInt(chan_select));
+ local_ctxt.ret = CF_ChanAction_Status_ERROR;
}
- return ret;
+ return local_ctxt.ret;
}
/*----------------------------------------------------------------
@@ -290,11 +339,12 @@ CF_DoChanAction(const CF_UnionArgs_Payload_t *data, const char *errstr, CF_ChanA
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-CF_ChanAction_Status_t CF_DoFreezeThaw(uint8 chan_num, void *arg)
+CF_ChanAction_Status_t CF_DoFreezeThaw(CF_Channel_t *chan, void *arg)
{
- const CF_ChanAction_BoolArg_t *context = arg;
+ const CF_ChanAction_BoolArg_t *context = arg;
+
/* no need to bounds check chan_num, done in caller */
- CF_AppData.hk.Payload.channel_hk[chan_num].frozen = context->barg;
+ chan->stat.frozen = context->barg;
return CF_ChanAction_Status_SUCCESS;
}
@@ -308,15 +358,15 @@ CFE_Status_t CF_FreezeCmd(const CF_FreezeCmd_t *msg)
{
CF_ChanAction_BoolArg_t barg = { 1 }; /* param is frozen, so 1 means freeze */
- if (CF_ChanAction_Status_IS_SUCCESS(CF_DoChanAction(&msg->Payload, "freeze", CF_DoFreezeThaw, &barg)))
+ if (CF_ChanAction_Status_IS_SUCCESS(CF_DoChanAction(msg->Payload.ChannelSelect, "freeze", CF_DoFreezeThaw, &barg)))
{
CFE_EVS_SendEvent(CF_CMD_FREEZE_INF_EID, CFE_EVS_EventType_INFORMATION, "CF: freeze successful");
- ++CF_AppData.hk.Payload.counters.cmd;
+ ++CF_AppData.counters.cmd;
}
else
{
CFE_EVS_SendEvent(CF_CMD_FREEZE_ERR_EID, CFE_EVS_EventType_ERROR, "CF: freeze cmd failed");
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
}
return CFE_SUCCESS;
@@ -332,15 +382,15 @@ CFE_Status_t CF_ThawCmd(const CF_ThawCmd_t *msg)
{
CF_ChanAction_BoolArg_t barg = { 0 }; /* param is frozen, so 0 means thawed */
- if (CF_ChanAction_Status_IS_SUCCESS(CF_DoChanAction(&msg->Payload, "thaw", CF_DoFreezeThaw, &barg)))
+ if (CF_ChanAction_Status_IS_SUCCESS(CF_DoChanAction(msg->Payload.ChannelSelect, "thaw", CF_DoFreezeThaw, &barg)))
{
CFE_EVS_SendEvent(CF_CMD_THAW_INF_EID, CFE_EVS_EventType_INFORMATION, "CF: thaw successful");
- ++CF_AppData.hk.Payload.counters.cmd;
+ ++CF_AppData.counters.cmd;
}
else
{
CFE_EVS_SendEvent(CF_CMD_THAW_ERR_EID, CFE_EVS_EventType_ERROR, "CF: thaw cmd failed");
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
}
return CFE_SUCCESS;
@@ -364,7 +414,9 @@ CF_Transaction_t *CF_FindTransactionBySequenceNumberAllChannels(CF_TransactionSe
* to suspend, we need to search across all channels for it. */
for (i = 0; i < CF_NUM_CHANNELS; ++i)
{
- ret = CF_FindTransactionBySequenceNumber(CF_AppData.engine.channels + i, ts, eid);
+ CF_Channel_t *chan = CF_GetChannelPtr(CF_ChannelSelect_FromInt(i));
+
+ ret = CF_FindTransactionBySequenceNumber(chan, ts, eid);
if (ret)
{
break;
@@ -386,9 +438,10 @@ int32 CF_TsnChanAction(const CF_Transaction_Payload_t *data,
void *context)
{
CF_Transaction_t *txn;
+ CF_Channel_t *chan;
int32 ret = -1;
- if (data->chan == CF_COMPOUND_KEY)
+ if (CF_IsCompoundKey(data->chan_num))
{
/* special value 254 means to use the compound key (data->eid, data->ts) to find the transaction
* to act upon */
@@ -408,23 +461,27 @@ int32 CF_TsnChanAction(const CF_Transaction_Payload_t *data,
(unsigned long)data->ts);
}
}
- else if (data->chan == CF_ALL_CHANNELS)
+ else if (CF_IsAllChannels(data->chan_num))
{
/* perform action on all channels, all transactions */
ret = CF_TraverseAllTransactions_All_Channels(fn, context);
}
- else if (data->chan < CF_NUM_CHANNELS)
- {
- /* perform action on a specific channel, all transactions */
- ret = CF_TraverseAllTransactions(CF_AppData.engine.channels + data->chan, fn, context);
- }
else
{
- CFE_EVS_SendEvent(CF_CMD_TSN_CHAN_INVALID_ERR_EID,
- CFE_EVS_EventType_ERROR,
- "CF: %s cmd: invalid channel %d",
- cmdstr,
- data->chan);
+ chan = CF_GetChannelPtr(data->chan_num);
+ if (chan != NULL)
+ {
+ /* perform action on a specific channel, all transactions */
+ ret = CF_TraverseAllTransactions(chan, fn, context);
+ }
+ else
+ {
+ CFE_EVS_SendEvent(CF_CMD_TSN_CHAN_INVALID_ERR_EID,
+ CFE_EVS_EventType_ERROR,
+ "CF: %s cmd: invalid channel %d",
+ cmdstr,
+ CF_ChannelSelect_AsInt(data->chan_num));
+ }
}
return ret;
@@ -476,7 +533,7 @@ void CF_DoSuspRes(const CF_Transaction_Payload_t *payload, uint8 action)
"CF: %s cmd: setting suspend flag to current value of %d",
msgstr[action],
action);
- ++CF_AppData.hk.Payload.counters.cmd;
+ ++CF_AppData.counters.cmd;
}
else if (ret <= 0)
{
@@ -485,7 +542,7 @@ void CF_DoSuspRes(const CF_Transaction_Payload_t *payload, uint8 action)
CFE_EVS_EventType_ERROR,
"CF: %s cmd: no transaction found",
msgstr[action]);
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
}
else
{
@@ -494,7 +551,7 @@ void CF_DoSuspRes(const CF_Transaction_Payload_t *payload, uint8 action)
"CF: %s cmd: setting suspend flag to %d",
msgstr[action],
action);
- ++CF_AppData.hk.Payload.counters.cmd;
+ ++CF_AppData.counters.cmd;
}
}
@@ -546,13 +603,13 @@ CFE_Status_t CF_CancelCmd(const CF_CancelCmd_t *msg)
CFE_EVS_SendEvent(CF_CMD_CANCEL_INF_EID,
CFE_EVS_EventType_INFORMATION,
"CF: cancel transaction successfully initiated");
- ++CF_AppData.hk.Payload.counters.cmd;
+ ++CF_AppData.counters.cmd;
}
else
{
/* No transaction was matched for the given combination of chan + eid + ts */
CFE_EVS_SendEvent(CF_CMD_CANCEL_CHAN_ERR_EID, CFE_EVS_EventType_ERROR, "CF: cancel cmd: no transaction found");
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
}
return CFE_SUCCESS;
@@ -580,7 +637,7 @@ CFE_Status_t CF_AbandonCmd(const CF_AbandonCmd_t *msg)
if (CF_TsnChanAction(&msg->Payload, "abandon", CF_Abandon_TxnCmd, NULL) > 0)
{
CFE_EVS_SendEvent(CF_CMD_ABANDON_INF_EID, CFE_EVS_EventType_INFORMATION, "CF: abandon successful");
- ++CF_AppData.hk.Payload.counters.cmd;
+ ++CF_AppData.counters.cmd;
}
else
{
@@ -588,7 +645,7 @@ CFE_Status_t CF_AbandonCmd(const CF_AbandonCmd_t *msg)
CFE_EVS_SendEvent(CF_CMD_ABANDON_CHAN_ERR_EID,
CFE_EVS_EventType_ERROR,
"CF: abandon cmd: no transaction found");
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
}
return CFE_SUCCESS;
@@ -600,11 +657,12 @@ CFE_Status_t CF_AbandonCmd(const CF_AbandonCmd_t *msg)
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-CF_ChanAction_Status_t CF_DoEnableDisableDequeue(uint8 chan_num, void *arg)
+CF_ChanAction_Status_t CF_DoEnableDisableDequeue(CF_Channel_t *chan, void *arg)
{
- const CF_ChanAction_BoolArg_t *context = arg;
+ const CF_ChanAction_BoolArg_t *context = arg;
+
/* no need to bounds check chan_num, done in caller */
- CF_AppData.config_table->chan[chan_num].dequeue_enabled = context->barg;
+ chan->config.dequeue_enabled = context->barg;
return CF_ChanAction_Status_SUCCESS;
}
@@ -619,15 +677,15 @@ CFE_Status_t CF_EnableDequeueCmd(const CF_EnableDequeueCmd_t *msg)
CF_ChanAction_BoolArg_t barg = { 1 };
if (CF_ChanAction_Status_IS_SUCCESS(
- CF_DoChanAction(&msg->Payload, "enable_dequeue", CF_DoEnableDisableDequeue, &barg)))
+ CF_DoChanAction(msg->Payload.ChannelSelect, "enable_dequeue", CF_DoEnableDisableDequeue, &barg)))
{
CFE_EVS_SendEvent(CF_CMD_ENABLE_DEQUEUE_INF_EID, CFE_EVS_EventType_INFORMATION, "CF: dequeue enabled");
- ++CF_AppData.hk.Payload.counters.cmd;
+ ++CF_AppData.counters.cmd;
}
else
{
CFE_EVS_SendEvent(CF_CMD_ENABLE_DEQUEUE_ERR_EID, CFE_EVS_EventType_ERROR, "CF: enable dequeue cmd failed");
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
}
return CFE_SUCCESS;
@@ -644,15 +702,15 @@ CFE_Status_t CF_DisableDequeueCmd(const CF_DisableDequeueCmd_t *msg)
CF_ChanAction_BoolArg_t barg = { 0 };
if (CF_ChanAction_Status_IS_SUCCESS(
- CF_DoChanAction(&msg->Payload, "disable_dequeue", CF_DoEnableDisableDequeue, &barg)))
+ CF_DoChanAction(msg->Payload.ChannelSelect, "disable_dequeue", CF_DoEnableDisableDequeue, &barg)))
{
CFE_EVS_SendEvent(CF_CMD_DISABLE_DEQUEUE_INF_EID, CFE_EVS_EventType_INFORMATION, "CF: dequeue disabled");
- ++CF_AppData.hk.Payload.counters.cmd;
+ ++CF_AppData.counters.cmd;
}
else
{
CFE_EVS_SendEvent(CF_CMD_DISABLE_DEQUEUE_ERR_EID, CFE_EVS_EventType_ERROR, "CF: disable dequeue cmd failed");
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
}
return CFE_SUCCESS;
@@ -664,29 +722,35 @@ CFE_Status_t CF_DisableDequeueCmd(const CF_DisableDequeueCmd_t *msg)
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-CF_ChanAction_Status_t CF_DoEnableDisablePolldir(uint8 chan_num, void *arg)
+CF_ChanAction_Status_t CF_DoEnableDisablePolldir(CF_Channel_t *chan, void *arg)
{
int i;
- const CF_ChanAction_BoolMsgArg_t *context = arg;
- CF_ChanAction_Status_t ret = CF_ChanAction_Status_SUCCESS;
+ const CF_ChanAction_BoolMsgArg_t *context;
+ const CF_PollDirSelect_Payload_t *payload;
+ CF_ChanAction_Status_t ret;
+
+ context = arg;
+ payload = context->opaque_data;
+ ret = CF_ChanAction_Status_SUCCESS;
+
/* no need to bounds check chan_num, done in caller */
- if (context->data->byte[1] == CF_ALL_POLLDIRS)
+ if (payload->PollDirIndx == CF_ALL_POLLDIRS)
{
/* all polldirs in channel */
for (i = 0; i < CF_MAX_POLLING_DIR_PER_CHAN; ++i)
- CF_AppData.config_table->chan[chan_num].polldir[i].enabled = context->barg;
+ chan->config.polldir[i].enabled = context->barg;
}
- else if (context->data->byte[1] < CF_MAX_POLLING_DIR_PER_CHAN)
+ else if (payload->PollDirIndx < CF_MAX_POLLING_DIR_PER_CHAN)
{
- CF_AppData.config_table->chan[chan_num].polldir[context->data->byte[1]].enabled = context->barg;
+ chan->config.polldir[payload->PollDirIndx].enabled = context->barg;
}
else
{
CFE_EVS_SendEvent(CF_CMD_POLLDIR_INVALID_ERR_EID,
CFE_EVS_EventType_ERROR,
"CF: enable/disable polldir: invalid polldir %d on channel %d",
- context->data->byte[1],
- chan_num);
+ (int)payload->PollDirIndx,
+ CF_ChannelSelect_AsInt(CF_GetChannelFromPtr(chan)));
ret = CF_ChanAction_Status_ERROR;
}
@@ -704,19 +768,19 @@ CFE_Status_t CF_EnableDirPollingCmd(const CF_EnableDirPollingCmd_t *msg)
CF_ChanAction_BoolMsgArg_t barg = { &msg->Payload, 1 };
if (CF_ChanAction_Status_IS_SUCCESS(
- CF_DoChanAction(&msg->Payload, "enable_polldir", CF_DoEnableDisablePolldir, &barg)))
+ CF_DoChanAction(msg->Payload.ChannelSelect, "enable_polldir", CF_DoEnableDisablePolldir, &barg)))
{
CFE_EVS_SendEvent(CF_CMD_ENABLE_POLLDIR_INF_EID,
CFE_EVS_EventType_INFORMATION,
"CF: enabled polling directory");
- ++CF_AppData.hk.Payload.counters.cmd;
+ ++CF_AppData.counters.cmd;
}
else
{
CFE_EVS_SendEvent(CF_CMD_ENABLE_POLLDIR_ERR_EID,
CFE_EVS_EventType_ERROR,
"CF: enable polling directory cmd failed");
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
}
return CFE_SUCCESS;
@@ -733,19 +797,19 @@ CFE_Status_t CF_DisableDirPollingCmd(const CF_DisableDirPollingCmd_t *msg)
CF_ChanAction_BoolMsgArg_t barg = { &msg->Payload, 0 };
if (CF_ChanAction_Status_IS_SUCCESS(
- CF_DoChanAction(&msg->Payload, "disable_polldir", CF_DoEnableDisablePolldir, &barg)))
+ CF_DoChanAction(msg->Payload.ChannelSelect, "disable_polldir", CF_DoEnableDisablePolldir, &barg)))
{
CFE_EVS_SendEvent(CF_CMD_DISABLE_POLLDIR_INF_EID,
CFE_EVS_EventType_INFORMATION,
"CF: disabled polling directory");
- ++CF_AppData.hk.Payload.counters.cmd;
+ ++CF_AppData.counters.cmd;
}
else
{
CFE_EVS_SendEvent(CF_CMD_DISABLE_POLLDIR_ERR_EID,
CFE_EVS_EventType_ERROR,
"CF: disable polling directory cmd failed");
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
}
return CFE_SUCCESS;
@@ -784,27 +848,30 @@ CF_CListTraverse_Status_t CF_PurgeTransaction(CF_CListNode_t *node, void *ignore
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-CF_ChanAction_Status_t CF_DoPurgeQueue(uint8 chan_num, void *arg)
+CF_ChanAction_Status_t CF_DoPurgeQueue(CF_Channel_t *chan, void *arg)
{
- CF_ChanAction_Status_t ret = CF_ChanAction_Status_SUCCESS;
- /* no need to bounds check chan_num, done in caller */
- CF_Channel_t *chan = &CF_AppData.engine.channels[chan_num];
- const CF_UnionArgs_Payload_t *data = ((CF_ChanAction_MsgArg_t *)arg)->data;
+ CF_ChanAction_Status_t ret;
+ const CF_ChanAction_MsgArg_t *context;
+ const CF_QueueSelect_Payload_t *payload;
bool pend = false;
bool hist = false;
- switch (data->byte[1])
+ context = arg;
+ payload = context->opaque_data;
+ ret = CF_ChanAction_Status_SUCCESS;
+
+ switch (payload->QueueSelect)
{
- case 0: /* pend */
+ case CF_QueueSelect_Pending:
pend = true;
break;
- case 1: /* history */
+ case CF_QueueSelect_History:
hist = true;
break;
- case 2: /* both */
+ case CF_QueueSelect_All:
pend = true;
hist = true;
break;
@@ -813,7 +880,7 @@ CF_ChanAction_Status_t CF_DoPurgeQueue(uint8 chan_num, void *arg)
CFE_EVS_SendEvent(CF_CMD_PURGE_ARG_ERR_EID,
CFE_EVS_EventType_ERROR,
"CF: purge queue invalid arg %d",
- data->byte[1]);
+ (int)payload->QueueSelect);
ret = CF_ChanAction_Status_ERROR;
break;
}
@@ -840,15 +907,19 @@ CF_ChanAction_Status_t CF_DoPurgeQueue(uint8 chan_num, void *arg)
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)))
+ CF_ChanAction_Status_t status;
+
+ status = CF_DoChanAction(msg->Payload.ChannelSelect, "purge_queue", CF_DoPurgeQueue, &arg);
+
+ if (CF_ChanAction_Status_IS_SUCCESS(status))
{
CFE_EVS_SendEvent(CF_CMD_PURGE_QUEUE_INF_EID, CFE_EVS_EventType_INFORMATION, "CF: queue purged");
- ++CF_AppData.hk.Payload.counters.cmd;
+ ++CF_AppData.counters.cmd;
}
else
{
CFE_EVS_SendEvent(CF_CMD_PURGE_QUEUE_ERR_EID, CFE_EVS_EventType_ERROR, "CF: purge queue cmd failed");
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
}
return CFE_SUCCESS;
@@ -864,25 +935,25 @@ CFE_Status_t CF_WriteQueueCmd(const CF_WriteQueueCmd_t *msg)
{
const CF_WriteQueue_Payload_t *wq = &msg->Payload;
- CF_Channel_t *chan = &CF_AppData.engine.channels[wq->chan];
+ CF_Channel_t *chan = CF_GetChannelPtr(wq->chan);
osal_id_t fd = OS_OBJECT_ID_UNDEFINED;
bool success = true;
int32 ret;
/* check the commands for validity */
- if (wq->chan >= CF_NUM_CHANNELS)
+ if (chan == NULL)
{
CFE_EVS_SendEvent(CF_CMD_WQ_CHAN_ERR_EID, CFE_EVS_EventType_ERROR, "CF: write queue invalid channel arg");
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
success = false;
}
/* only invalid combination is up direction, pending queue */
- else if ((wq->type == CF_Type_up) && (wq->queue == CF_Queue_pend))
+ else if ((wq->type == CF_Type_up) && (wq->queue == CF_QueueSelect_Pending))
{
CFE_EVS_SendEvent(CF_CMD_WQ_ARGS_ERR_EID,
CFE_EVS_EventType_ERROR,
"CF: write queue invalid command parameters");
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
success = false;
}
else
@@ -896,7 +967,7 @@ CFE_Status_t CF_WriteQueueCmd(const CF_WriteQueueCmd_t *msg)
CFE_EVS_EventType_ERROR,
"CF: write queue failed to open file %s",
wq->filename);
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
success = false;
}
}
@@ -905,7 +976,7 @@ CFE_Status_t CF_WriteQueueCmd(const CF_WriteQueueCmd_t *msg)
if (success && ((wq->type == CF_Type_all) || (wq->type == CF_Type_up)))
{
/* process uplink queue data */
- if ((wq->queue == CF_Queue_all) || (wq->queue == CF_Queue_active))
+ if ((wq->queue == CF_QueueSelect_All) || (wq->queue == CF_QueueSelect_Active))
{
ret = CF_WriteTxnQueueDataToFile(fd, chan, CF_QueueIdx_RX);
if (ret)
@@ -914,12 +985,12 @@ CFE_Status_t CF_WriteQueueCmd(const CF_WriteQueueCmd_t *msg)
CFE_EVS_EventType_ERROR,
"CF: write queue failed to write CF_QueueIdx_RX data");
CF_WrappedClose(fd);
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
success = false;
}
}
- if (success && ((wq->queue == CF_Queue_all) || (wq->queue == CF_Queue_history)))
+ if (success && ((wq->queue == CF_QueueSelect_All) || (wq->queue == CF_QueueSelect_History)))
{
ret = CF_WriteHistoryQueueDataToFile(fd, chan, CF_Direction_RX);
if (ret)
@@ -928,7 +999,7 @@ CFE_Status_t CF_WriteQueueCmd(const CF_WriteQueueCmd_t *msg)
CFE_EVS_EventType_ERROR,
"CF: write queue failed to write history RX data");
CF_WrappedClose(fd);
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
success = false;
}
}
@@ -938,7 +1009,7 @@ CFE_Status_t CF_WriteQueueCmd(const CF_WriteQueueCmd_t *msg)
if (success && ((wq->type == CF_Type_all) || (wq->type == CF_Type_down)))
{
/* process downlink queue data */
- if ((wq->queue == CF_Queue_all) || (wq->queue == CF_Queue_active))
+ if ((wq->queue == CF_QueueSelect_All) || (wq->queue == CF_QueueSelect_Active))
{
ret = CF_WriteTxnQueueDataToFile(fd, chan, CF_QueueIdx_TX);
if (ret)
@@ -947,12 +1018,12 @@ CFE_Status_t CF_WriteQueueCmd(const CF_WriteQueueCmd_t *msg)
CFE_EVS_EventType_ERROR,
"CF: write queue failed to write CF_QueueIdx_TX data");
CF_WrappedClose(fd);
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
success = false;
}
}
- if (success && ((wq->queue == CF_Queue_all) || (wq->queue == CF_Queue_pend)))
+ if (success && ((wq->queue == CF_QueueSelect_All) || (wq->queue == CF_QueueSelect_Pending)))
{
/* write pending queue */
ret = CF_WriteTxnQueueDataToFile(fd, chan, CF_QueueIdx_PEND);
@@ -962,12 +1033,12 @@ CFE_Status_t CF_WriteQueueCmd(const CF_WriteQueueCmd_t *msg)
CFE_EVS_EventType_ERROR,
"CF: write queue failed to write pending queue");
CF_WrappedClose(fd);
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
success = false;
}
}
- if (success && ((wq->queue == CF_Queue_all) || (wq->queue == CF_Queue_history)))
+ if (success && ((wq->queue == CF_QueueSelect_All) || (wq->queue == CF_QueueSelect_History)))
{
/* write history queue */
ret = CF_WriteHistoryQueueDataToFile(fd, chan, CF_Direction_TX);
@@ -977,7 +1048,7 @@ CFE_Status_t CF_WriteQueueCmd(const CF_WriteQueueCmd_t *msg)
CFE_EVS_EventType_ERROR,
"CF: write queue failed to write CF_QueueIdx_TX data");
CF_WrappedClose(fd);
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
success = false;
}
}
@@ -986,7 +1057,7 @@ CFE_Status_t CF_WriteQueueCmd(const CF_WriteQueueCmd_t *msg)
if (success)
{
CFE_EVS_SendEvent(CF_CMD_WQ_INF_EID, CFE_EVS_EventType_INFORMATION, "CF: write queue successful");
- ++CF_AppData.hk.Payload.counters.cmd;
+ ++CF_AppData.counters.cmd;
}
return CFE_SUCCESS;
@@ -998,7 +1069,7 @@ CFE_Status_t CF_WriteQueueCmd(const CF_WriteQueueCmd_t *msg)
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-CF_ChanAction_Status_t CF_ValidateChunkSizeCmd(CF_ChunkSize_t val, uint8 chan_num /* ignored */)
+CF_ChanAction_Status_t CF_ValidateChunkSizeCmd(CF_ChunkSize_t val, CF_Channel_t *chan /* ignored */)
{
CF_ChanAction_Status_t ret = CF_ChanAction_Status_SUCCESS;
if (val > sizeof(CF_CFDP_PduFileDataContent_t))
@@ -1014,11 +1085,11 @@ CF_ChanAction_Status_t CF_ValidateChunkSizeCmd(CF_ChunkSize_t val, uint8 chan_nu
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-CF_ChanAction_Status_t CF_ValidateMaxOutgoingCmd(uint32 val, uint8 chan_num)
+CF_ChanAction_Status_t CF_ValidateMaxOutgoingCmd(uint32 val, CF_Channel_t *chan)
{
CF_ChanAction_Status_t ret = CF_ChanAction_Status_SUCCESS;
- if (!val && !CF_AppData.config_table->chan[chan_num].sem_name[0])
+ if (!val && !chan->config.sem_name[0])
{
/* can't have unlimited messages and no semaphore */
ret = CF_ChanAction_Status_ERROR; /* failed */
@@ -1033,64 +1104,75 @@ CF_ChanAction_Status_t CF_ValidateMaxOutgoingCmd(uint32 val, uint8 chan_num)
* See description in cf_cmd.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_GetSetParamCmd(bool is_set, CF_GetSet_ValueID_t param_id, uint32 value, uint8 chan_num)
+void CF_GetSetParamCmd(bool is_set, CF_GetSet_ValueID_t param_id, uint32 value, CF_ChannelSelect_t chan_num)
{
- CF_ConfigTable_t *config;
- CFE_Status_t status = CF_ERROR;
- bool valid_set;
+ CFE_Status_t status = CF_ERROR;
+ bool valid_set;
struct
{
void *ptr;
size_t size;
- CF_ChanAction_Status_t (*fn)(uint32, uint8 chan_num);
+ CF_ChanAction_Status_t (*fn)(uint32, CF_Channel_t *);
} item;
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+ CF_Channel_t *chan = CF_GetChannelPtr(chan_num);
+
+ if (chan == NULL)
+ {
+ CFE_EVS_SendEvent(CF_CMD_GETSET_CHAN_ERR_EID,
+ CFE_EVS_EventType_ERROR,
+ "CF: invalid configuration channel id %d received",
+ CF_ChannelSelect_AsInt(chan_num));
+ ++CF_AppData.counters.err;
+ return;
+ }
+
valid_set = false;
- config = CF_AppData.config_table;
memset(&item, 0, sizeof(item));
switch (param_id)
{
case CF_GetSet_ValueID_ticks_per_second:
- item.ptr = &config->ticks_per_second;
- item.size = sizeof(config->ticks_per_second);
+ item.ptr = &engine_ptr->config.ticks_per_second;
+ item.size = sizeof(engine_ptr->config.ticks_per_second);
break;
case CF_GetSet_ValueID_rx_crc_calc_bytes_per_wakeup:
- item.ptr = &config->rx_crc_calc_bytes_per_wakeup;
- item.size = sizeof(config->rx_crc_calc_bytes_per_wakeup);
+ item.ptr = &engine_ptr->config.rx_crc_calc_bytes_per_wakeup;
+ item.size = sizeof(engine_ptr->config.rx_crc_calc_bytes_per_wakeup);
break;
case CF_GetSet_ValueID_ack_timer_s:
- item.ptr = &config->chan[chan_num].ack_timer_s;
- item.size = sizeof(config->chan[chan_num].ack_timer_s);
+ item.ptr = &chan->config.ack_timer_s;
+ item.size = sizeof(chan->config.ack_timer_s);
break;
case CF_GetSet_ValueID_nak_timer_s:
- item.ptr = &config->chan[chan_num].nak_timer_s;
- item.size = sizeof(config->chan[chan_num].nak_timer_s);
+ item.ptr = &chan->config.nak_timer_s;
+ item.size = sizeof(chan->config.nak_timer_s);
break;
case CF_GetSet_ValueID_inactivity_timer_s:
- item.ptr = &config->chan[chan_num].inactivity_timer_s;
- item.size = sizeof(config->chan[chan_num].inactivity_timer_s);
+ item.ptr = &chan->config.inactivity_timer_s;
+ item.size = sizeof(chan->config.inactivity_timer_s);
break;
case CF_GetSet_ValueID_outgoing_file_chunk_size:
- item.ptr = &config->outgoing_file_chunk_size;
- item.size = sizeof(config->outgoing_file_chunk_size);
+ item.ptr = &engine_ptr->config.outgoing_file_chunk_size;
+ item.size = sizeof(engine_ptr->config.outgoing_file_chunk_size);
item.fn = CF_ValidateChunkSizeCmd;
break;
case CF_GetSet_ValueID_ack_limit:
- item.ptr = &config->chan[chan_num].ack_limit;
- item.size = sizeof(config->chan[chan_num].ack_limit);
+ item.ptr = &chan->config.ack_limit;
+ item.size = sizeof(chan->config.ack_limit);
break;
case CF_GetSet_ValueID_nak_limit:
- item.ptr = &config->chan[chan_num].nak_limit;
- item.size = sizeof(config->chan[chan_num].nak_limit);
+ item.ptr = &chan->config.nak_limit;
+ item.size = sizeof(chan->config.nak_limit);
break;
case CF_GetSet_ValueID_local_eid:
- item.ptr = &config->local_eid;
- item.size = sizeof(config->local_eid);
+ item.ptr = &engine_ptr->config.local_eid;
+ item.size = sizeof(engine_ptr->config.local_eid);
break;
case CF_GetSet_ValueID_chan_max_outgoing_messages_per_wakeup:
- item.ptr = &config->chan[chan_num].max_outgoing_messages_per_wakeup;
- item.size = sizeof(config->chan[chan_num].max_outgoing_messages_per_wakeup);
+ item.ptr = &chan->config.max_outgoing_messages_per_wakeup;
+ item.size = sizeof(chan->config.max_outgoing_messages_per_wakeup);
item.fn = CF_ValidateMaxOutgoingCmd;
break;
default:
@@ -1104,18 +1186,11 @@ void CF_GetSetParamCmd(bool is_set, CF_GetSet_ValueID_t param_id, uint32 value,
"CF: invalid configuration parameter id %d received",
param_id);
}
- else if (chan_num >= CF_NUM_CHANNELS)
- {
- CFE_EVS_SendEvent(CF_CMD_GETSET_CHAN_ERR_EID,
- CFE_EVS_EventType_ERROR,
- "CF: invalid configuration channel id %d received",
- chan_num);
- }
else if (is_set)
{
if (item.fn)
{
- if (CF_ChanAction_Status_IS_SUCCESS(item.fn(value, chan_num)))
+ if (CF_ChanAction_Status_IS_SUCCESS(item.fn(value, chan)))
{
valid_set = true;
}
@@ -1186,11 +1261,11 @@ void CF_GetSetParamCmd(bool is_set, CF_GetSet_ValueID_t param_id, uint32 value,
if (status == CFE_SUCCESS)
{
- ++CF_AppData.hk.Payload.counters.cmd;
+ ++CF_AppData.counters.cmd;
}
else
{
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
}
}
@@ -1232,19 +1307,21 @@ CFE_Status_t CF_GetParamCmd(const CF_GetParamCmd_t *msg)
*-----------------------------------------------------------------*/
CFE_Status_t CF_EnableEngineCmd(const CF_EnableEngineCmd_t *msg)
{
- if (!CF_AppData.engine.enabled)
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+
+ if (!engine_ptr->enabled)
{
- if (CF_CFDP_InitEngine() == CFE_SUCCESS)
+ if (CF_CFDP_InitEngine(engine_ptr) == CFE_SUCCESS)
{
CFE_EVS_SendEvent(CF_CMD_ENABLE_ENGINE_INF_EID, CFE_EVS_EventType_INFORMATION, "CF: enabled CFDP engine");
- ++CF_AppData.hk.Payload.counters.cmd;
+ ++CF_AppData.counters.cmd;
}
else
{
CFE_EVS_SendEvent(CF_CMD_ENABLE_ENGINE_ERR_EID,
CFE_EVS_EventType_ERROR,
"CF: failed to re-initialize and enable CFDP engine");
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
}
}
else
@@ -1252,7 +1329,7 @@ CFE_Status_t CF_EnableEngineCmd(const CF_EnableEngineCmd_t *msg)
CFE_EVS_SendEvent(CF_CMD_ENG_ALREADY_ENA_INF_EID,
CFE_EVS_EventType_INFORMATION,
"CF: received enable engine command while engine already enabled");
- ++CF_AppData.hk.Payload.counters.cmd;
+ ++CF_AppData.counters.cmd;
}
return CFE_SUCCESS;
@@ -1266,7 +1343,9 @@ CFE_Status_t CF_EnableEngineCmd(const CF_EnableEngineCmd_t *msg)
*-----------------------------------------------------------------*/
CFE_Status_t CF_DisableEngineCmd(const CF_DisableEngineCmd_t *msg)
{
- if (CF_AppData.engine.enabled)
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+
+ if (engine_ptr->enabled)
{
CF_CFDP_DisableEngine();
CFE_EVS_SendEvent(CF_CMD_DISABLE_ENGINE_INF_EID, CFE_EVS_EventType_INFORMATION, "CF: disabled CFDP engine");
@@ -1278,7 +1357,35 @@ CFE_Status_t CF_DisableEngineCmd(const CF_DisableEngineCmd_t *msg)
"CF: received disable engine command while engine already disabled");
}
- ++CF_AppData.hk.Payload.counters.cmd;
+ ++CF_AppData.counters.cmd;
+
+ return CFE_SUCCESS;
+}
+
+/*----------------------------------------------------------------
+ *
+ * Local helper function
+ * Obtains HK stats for a single channel within the CFDP engine
+ * Compatible with CF_ForEachChannel()
+ *
+ *-----------------------------------------------------------------*/
+static int32 CF_DoHkStats(CF_Engine_t *engine_ptr, CF_Channel_t *chan, void *arg)
+{
+ CF_HkChannel_Data_t *out_chan_hk;
+ CF_HkPacket_t *hk = arg;
+ const int chan_num = CF_ChannelSelect_AsInt(CF_GetChannelFromPtr(chan));
+ int q_idx;
+
+ out_chan_hk = &hk->Payload.channel_hk[chan_num];
+
+ out_chan_hk->counters = chan->stat.counters;
+ for (q_idx = 0; q_idx < CF_QueueIdx_NUM; ++q_idx)
+ {
+ out_chan_hk->q_size[q_idx] = chan->stat.q_size[q_idx];
+ }
+ out_chan_hk->poll_counter = chan->stat.poll_counter;
+ out_chan_hk->playback_counter = chan->stat.playback_counter;
+ out_chan_hk->frozen = chan->stat.frozen;
return CFE_SUCCESS;
}
@@ -1291,11 +1398,23 @@ CFE_Status_t CF_DisableEngineCmd(const CF_DisableEngineCmd_t *msg)
*-----------------------------------------------------------------*/
CFE_Status_t CF_SendHkCmd(const CF_SendHkCmd_t *msg)
{
- CFE_SB_TimeStampMsg(CFE_MSG_PTR(CF_AppData.hk.TelemetryHeader));
- /* return value ignored */ CFE_SB_TransmitMsg(CFE_MSG_PTR(CF_AppData.hk.TelemetryHeader), true);
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+ CFE_SB_Buffer_t *sb_buf;
+ CF_HkPacket_t *hk;
- /* This is also used to check tables */
- CF_CheckTables();
+ sb_buf = CFE_SB_AllocateMessageBuffer(sizeof(*hk));
+ if (sb_buf)
+ {
+ CFE_MSG_Init(&sb_buf->Msg, CFE_SB_ValueToMsgId(CF_HK_TLM_MID), sizeof(*hk));
+
+ hk = (void *)&sb_buf->Msg;
+ hk->Payload.counters = CF_AppData.counters;
+
+ CF_ForEachChannel(engine_ptr, CF_DoHkStats, hk);
+
+ /* return value ignored */
+ CFE_SB_TransmitBuffer(sb_buf, true);
+ }
return CFE_SUCCESS;
}
@@ -1312,5 +1431,8 @@ CFE_Status_t CF_WakeupCmd(const CF_WakeupCmd_t *msg)
CF_CFDP_CycleEngine();
CFE_ES_PerfLogExit(CF_PERF_ID_CYCLE_ENG);
+ /* This is also used to check tables */
+ CF_CheckTables();
+
return CFE_SUCCESS;
}
diff --git a/fsw/src/cf_cmd.h b/fsw/src/cf_cmd.h
index 8be5fe18..d0881722 100644
--- a/fsw/src/cf_cmd.h
+++ b/fsw/src/cf_cmd.h
@@ -47,10 +47,10 @@ static inline bool CF_ChanAction_Status_IS_SUCCESS(CF_ChanAction_Status_t stat)
/**
* @brief A callback function for use with CF_DoChanAction()
*
- * @param chan_num The CF channel number, for statistics purposes
+ * @param chan The CF channel pointer
* @param context Opaque object passed through from initial call
*/
-typedef CF_ChanAction_Status_t (*CF_ChanActionFn_t)(uint8 chan_num, void *context);
+typedef CF_ChanAction_Status_t (*CF_ChanActionFn_t)(CF_Channel_t *chan, void *context);
/**
* @brief An object to use with channel-scope actions requiring only a boolean argument
@@ -86,8 +86,8 @@ typedef struct CF_ChanAction_SuspResArg
*/
typedef struct CF_ChanAction_BoolMsgArg
{
- const CF_UnionArgs_Payload_t *data;
- bool barg;
+ const void *opaque_data;
+ bool barg;
} CF_ChanAction_BoolMsgArg_t;
/**
@@ -97,7 +97,7 @@ typedef struct CF_ChanAction_BoolMsgArg
*/
typedef struct CF_ChanAction_MsgArg
{
- const CF_UnionArgs_Payload_t *data;
+ const void *opaque_data;
} CF_ChanAction_MsgArg_t;
/************************************************************************/
@@ -199,7 +199,7 @@ CFE_Status_t CF_PlaybackDirCmd(const CF_PlaybackDirCmd_t *msg);
* @par Assumptions, External Events, and Notes:
* cmd must not be NULL, errstr must not be NULL, fn must be a valid function, context may be NULL.
*
- * @param data Pointer to payload being processed
+ * @param chan_select Channel selector value from command (validated within this function)
* @param errstr String to be included in the EVS event if command should fail
* @param fn Callback action function to invoke for each affected channel
* @param context Opaque pointer to pass through to callback (not used in this function)
@@ -208,7 +208,7 @@ CFE_Status_t CF_PlaybackDirCmd(const CF_PlaybackDirCmd_t *msg);
* @retval CF_ChanAction_Status_ERROR on error
*/
CF_ChanAction_Status_t
-CF_DoChanAction(const CF_UnionArgs_Payload_t *data, const char *errstr, CF_ChanActionFn_t fn, void *context);
+CF_DoChanAction(CF_ChannelSelect_t chan_select, const char *errstr, CF_ChanActionFn_t fn, void *context);
/************************************************************************/
/** @brief Channel action to set the frozen bit for a channel.
@@ -216,12 +216,12 @@ CF_DoChanAction(const CF_UnionArgs_Payload_t *data, const char *errstr, CF_ChanA
* @par Assumptions, External Events, and Notes:
* context must not be NULL.
*
- * @param chan_num channel number
+ * @param chan channel pointer (must not be NULL)
* @param arg context pointer to object, must be CF_ChanAction_BoolArg_t*
*
* @returns Always succeeds, so returns CF_ChanAction_Status_SUCCESS.
*/
-CF_ChanAction_Status_t CF_DoFreezeThaw(uint8 chan_num, void *arg);
+CF_ChanAction_Status_t CF_DoFreezeThaw(CF_Channel_t *chan, void *arg);
/************************************************************************/
/** @brief Freeze a channel.
@@ -380,13 +380,13 @@ CFE_Status_t CF_AbandonCmd(const CF_AbandonCmd_t *msg);
* @par Assumptions, External Events, and Notes:
* context must not be NULL.
*
- * @param chan_num channel number
+ * @param chan channel pointer (must not be NULL)
* @param arg context pointer to object, must be CF_ChanAction_BoolArg_t*
*
* @returns Always succeeds, so returns CF_ChanAction_Status_SUCCESS.
*
*/
-CF_ChanAction_Status_t CF_DoEnableDisableDequeue(uint8 chan_num, void *arg);
+CF_ChanAction_Status_t CF_DoEnableDisableDequeue(CF_Channel_t *chan, void *arg);
/************************************************************************/
/** @brief Handle an enable dequeue ground command.
@@ -414,14 +414,14 @@ CFE_Status_t CF_DisableDequeueCmd(const CF_DisableDequeueCmd_t *msg);
* @par Assumptions, External Events, and Notes:
* context must not be NULL.
*
- * @param chan_num channel number
+ * @param chan channel pointer (must not be NULL)
* @param arg context pointer to object, must be CF_ChanAction_BoolMsgArg_t*
*
* @returns success/fail status code
* @retval CF_ChanAction_Status_SUCCESS if successful
* @retval CF_ChanAction_Status_ERROR if failed
*/
-CF_ChanAction_Status_t CF_DoEnableDisablePolldir(uint8 chan_num, void *arg);
+CF_ChanAction_Status_t CF_DoEnableDisablePolldir(CF_Channel_t *chan, void *arg);
/************************************************************************/
/** @brief Enable a polling dir ground command.
@@ -483,14 +483,14 @@ CF_CListTraverse_Status_t CF_PurgeTransaction(CF_CListNode_t *node, void *ignore
* @par Assumptions, External Events, and Notes:
* None
*
- * @param chan_num CF channel number
+ * @param chan CF channel pointer (must not be NULL)
* @param arg Pointer to purge queue command
*
* @returns integer status code indicating success or failure
* @retval CF_ChanAction_Status_SUCCESS if successful
* @retval CF_ChanAction_Status_ERROR on error
*/
-CF_ChanAction_Status_t CF_DoPurgeQueue(uint8 chan_num, void *arg);
+CF_ChanAction_Status_t CF_DoPurgeQueue(CF_Channel_t *chan, void *arg);
/************************************************************************/
/** @brief Ground command to purge either the history or pending queues.
@@ -519,14 +519,14 @@ CFE_Status_t CF_WriteQueueCmd(const CF_WriteQueueCmd_t *msg);
* None
*
* @param val Size of chunk to test
- * @param chan_num Ignored by this implementation
+ * @param chan Ignored by this implementation
*
* @returns status code indicating if check passed
* @retval CF_ChanAction_Status_SUCCESS if successful (val is less than or equal to max PDU)
* @retval CF_ChanAction_Status_ERROR if failed (val is greater than max PDU)
*
*/
-CF_ChanAction_Status_t CF_ValidateChunkSizeCmd(CF_ChunkSize_t val, uint8 chan_num);
+CF_ChanAction_Status_t CF_ValidateChunkSizeCmd(CF_ChunkSize_t val, CF_Channel_t *chan);
/************************************************************************/
/** @brief Checks if the value is within allowable range as outgoing packets per wakeup
@@ -535,14 +535,14 @@ CF_ChanAction_Status_t CF_ValidateChunkSizeCmd(CF_ChunkSize_t val, uint8 chan_nu
* None
*
* @param val Number to test
- * @param chan_num CF channel number
+ * @param chan CF channel pointer
*
* @returns status code indicating if check passed
* @retval CF_ChanAction_Status_SUCCESS if successful (val is allowable as max packets per wakeup)
* @retval CF_ChanAction_Status_ERROR if failed (val is not allowed)
*
*/
-CF_ChanAction_Status_t CF_ValidateMaxOutgoingCmd(uint32 val, uint8 chan_num);
+CF_ChanAction_Status_t CF_ValidateMaxOutgoingCmd(uint32 val, CF_Channel_t *chan);
/************************************************************************/
/** @brief Perform a configuration get/set operation.
@@ -559,10 +559,10 @@ CF_ChanAction_Status_t CF_ValidateMaxOutgoingCmd(uint32 val, uint8 chan_num);
* @param is_set Whether to get (false) or set (true)
* @param param_id Parameter ID
* @param value Value to get/set
- * @param chan_num Channel number to operate on
+ * @param chan_num Channel selector from original command (Validated within this function)
*
*/
-void CF_GetSetParamCmd(bool is_set, CF_GetSet_ValueID_t param_id, uint32 value, uint8 chan_num);
+void CF_GetSetParamCmd(bool is_set, CF_GetSet_ValueID_t param_id, uint32 value, CF_ChannelSelect_t chan_num);
/************************************************************************/
/** @brief Ground command to set a configuration parameter.
diff --git a/fsw/src/cf_dispatch.c b/fsw/src/cf_dispatch.c
index 49e3187a..ed7e0abc 100644
--- a/fsw/src/cf_dispatch.c
+++ b/fsw/src/cf_dispatch.c
@@ -115,7 +115,7 @@ void CF_ProcessGroundCommand(const CFE_SB_Buffer_t *BufPtr)
cmd,
expected_lengths[cmd],
len);
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
}
}
else
@@ -124,7 +124,7 @@ void CF_ProcessGroundCommand(const CFE_SB_Buffer_t *BufPtr)
CFE_EVS_EventType_ERROR,
"CF: invalid ground command packet cmd_code=0x%02x",
cmd);
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
}
}
@@ -170,7 +170,7 @@ void CF_AppPipe(const CFE_SB_Buffer_t *BufPtr)
}
else
{
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
CFE_EVS_SendEvent(CF_MID_ERR_EID,
CFE_EVS_EventType_ERROR,
"CF: invalid command packet id=0x%lx",
diff --git a/fsw/src/cf_eds_dispatch.c b/fsw/src/cf_eds_dispatch.c
index f65d293d..8bcb9946 100644
--- a/fsw/src/cf_eds_dispatch.c
+++ b/fsw/src/cf_eds_dispatch.c
@@ -53,7 +53,7 @@ void CF_AppPipe(const CFE_SB_Buffer_t *BufPtr)
if (status != CFE_SUCCESS)
{
CFE_MSG_GetMsgId(&BufPtr->Msg, &MsgId);
- ++CF_AppData.hk.Payload.counters.err;
+ ++CF_AppData.counters.err;
if (status == CFE_STATUS_UNKNOWN_MSG_ID)
{
diff --git a/fsw/src/cf_timer.c b/fsw/src/cf_timer.c
index 4ea2600e..d82b9252 100644
--- a/fsw/src/cf_timer.c
+++ b/fsw/src/cf_timer.c
@@ -42,7 +42,8 @@
*-----------------------------------------------------------------*/
uint32 CF_Timer_Sec2Ticks(CF_Timer_Seconds_t sec)
{
- return sec * CF_AppData.config_table->ticks_per_second;
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+ return sec * engine_ptr->config.ticks_per_second;
}
/*----------------------------------------------------------------
diff --git a/fsw/src/cf_utils.c b/fsw/src/cf_utils.c
index fe1267b7..2633522e 100644
--- a/fsw/src/cf_utils.c
+++ b/fsw/src/cf_utils.c
@@ -34,27 +34,15 @@
#include "cf_assert.h"
-/*----------------------------------------------------------------
- *
- * Application-scope internal function
- * See description in cf_utils.h for argument/return detail
- *
- *-----------------------------------------------------------------*/
-CF_Channel_t *CF_GetChannelFromTxn(CF_Transaction_t *txn)
+/*
+ * Local type to support CF_DoTraverseAllTransactions
+ */
+typedef struct
{
- CF_Channel_t *chan;
-
- if (txn->chan_num < CF_NUM_CHANNELS)
- {
- chan = &CF_AppData.engine.channels[txn->chan_num];
- }
- else
- {
- chan = NULL;
- }
-
- return chan;
-}
+ CF_TraverseAllTransactions_fn_t fn;
+ void *context;
+ int32 ret;
+} CF_TraverseAllTransactions_State_t;
/*----------------------------------------------------------------
*
@@ -159,6 +147,7 @@ CF_Transaction_t *CF_FindUnusedTransaction(CF_Channel_t *chan, CF_Direction_t di
/* notably this state is distinguishable from items still on the free list */
txn->state = CF_TxnState_INIT;
txn->history->dir = direction;
+ txn->chan_ptr = chan;
}
else
{
@@ -186,12 +175,14 @@ void CF_ResetHistory(CF_Channel_t *chan, CF_History_t *history)
* See description in cf_utils.h for argument/return detail
*
*-----------------------------------------------------------------*/
-void CF_FreeTransaction(CF_Transaction_t *txn, uint8 chan)
+void CF_FreeTransaction(CF_Transaction_t *txn)
{
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
+
memset(txn, 0, sizeof(*txn));
- txn->chan_num = chan;
+ txn->chan_ptr = chan;
CF_CList_InitNode(&txn->cl_node);
- CF_CList_InsertBack_Ex(&CF_AppData.engine.channels[chan], CF_QueueIdx_FREE, &txn->cl_node);
+ CF_CList_InsertBack_Ex(chan, CF_QueueIdx_FREE, &txn->cl_node);
}
/*----------------------------------------------------------------
@@ -423,9 +414,9 @@ CF_CListTraverse_Status_t CF_PrioSearch(CF_CListNode_t *node, void *context)
void CF_InsertSortPrio(CF_Transaction_t *txn, CF_QueueIdx_t queue)
{
bool insert_back = false;
- CF_Channel_t *chan = &CF_AppData.engine.channels[txn->chan_num];
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
- CF_Assert(txn->chan_num < CF_NUM_CHANNELS);
+ CF_Assert(chan);
/* look for proper position on PEND queue for this transaction.
* This is a simple priority sort. */
@@ -487,6 +478,22 @@ int32 CF_TraverseAllTransactions(CF_Channel_t *chan, CF_TraverseAllTransactions_
return args.counter;
}
+/*----------------------------------------------------------------
+ *
+ * Local helper function
+ * Invokes CF_TraverseAllTransactions() for a single channel within the CFDP engine
+ * Compatible with CF_ForEachChannel()
+ *
+ *-----------------------------------------------------------------*/
+static int32 CF_DoTraverseAllTransactions(CF_Engine_t *engine_ptr, CF_Channel_t *chan, void *arg)
+{
+ CF_TraverseAllTransactions_State_t *state = arg;
+
+ state->ret += CF_TraverseAllTransactions(chan, state->fn, state->context);
+
+ return CFE_SUCCESS;
+}
+
/*----------------------------------------------------------------
*
* Application-scope internal function
@@ -495,11 +502,16 @@ int32 CF_TraverseAllTransactions(CF_Channel_t *chan, CF_TraverseAllTransactions_
*-----------------------------------------------------------------*/
int32 CF_TraverseAllTransactions_All_Channels(CF_TraverseAllTransactions_fn_t fn, void *context)
{
- int i;
- int32 ret = 0;
- for (i = 0; i < CF_NUM_CHANNELS; ++i)
- ret += CF_TraverseAllTransactions(CF_AppData.engine.channels + i, fn, context);
- return ret;
+ CF_TraverseAllTransactions_State_t state;
+
+ memset(&state, 0, sizeof(state));
+
+ state.fn = fn;
+ state.context = context;
+
+ CF_ForEachChannel(CF_GetEngine(), CF_DoTraverseAllTransactions, &state);
+
+ return state.ret;
}
/*----------------------------------------------------------------
@@ -668,3 +680,25 @@ CF_TxnStatus_t CF_TxnStatus_From_ConditionCode(CF_CFDP_ConditionCode_t cc)
/* All CFDP CC values directly correspond to a Transaction Status of the same numeric value */
return (CF_TxnStatus_t)cc;
}
+
+/*----------------------------------------------------------------
+ *
+ * Function: CF_ForEachChannel
+ *
+ * Application-scope internal function
+ * See description in cf_utils.h for argument/return detail
+ *
+ *-----------------------------------------------------------------*/
+int32 CF_ForEachChannel(CF_Engine_t *engine_ptr, CF_ChannelFunc_t fn, void *arg)
+{
+ int32 Result;
+ int32 i;
+
+ Result = CFE_SUCCESS;
+ for (i = 0; i < CF_NUM_CHANNELS && Result == CFE_SUCCESS; ++i)
+ {
+ Result = fn(engine_ptr, &engine_ptr->channels[i], arg);
+ }
+
+ return Result;
+}
diff --git a/fsw/src/cf_utils.h b/fsw/src/cf_utils.h
index 937353d4..a2e8c8e7 100644
--- a/fsw/src/cf_utils.h
+++ b/fsw/src/cf_utils.h
@@ -110,6 +110,28 @@ typedef struct CF_Traverse_PriorityArg
uint8 priority; /**< \brief seeking this priority */
} CF_Traverse_PriorityArg_t;
+/** @brief Function declaration to use with CF_ForEachChannel()
+ *
+ * @returns CFE_SUCCESS if completed successfully, otherwise error code
+ */
+typedef int32 (*CF_ChannelFunc_t)(CF_Engine_t *, CF_Channel_t *, void *);
+
+/************************************************************************/
+/** @brief Gets the associated channel struct from a transaction
+ *
+ * @par Assumptions, External Events, and Notes:
+ * txn must not be null, and the chan_num must be set
+ *
+ * @param txn Transaction
+ *
+ * @returns Pointer to CF_Channel_t struct associated with the transaction
+ * @retval NULL if reference is invalid
+ */
+static inline CF_Channel_t *CF_GetChannelFromTxn(const CF_Transaction_t *txn)
+{
+ return txn->chan_ptr;
+}
+
/* free a transaction from the queue it's on.
* NOTE: this leaves the transaction in a bad state,
* so it must be followed by placing the transaction on
@@ -121,41 +143,46 @@ typedef struct CF_Traverse_PriorityArg
* pointing to an invalid node */
static inline void CF_DequeueTransaction(CF_Transaction_t *txn)
{
- CF_Assert(txn && (txn->chan_num < CF_NUM_CHANNELS));
- CF_CList_Remove(&CF_AppData.engine.channels[txn->chan_num].qs[txn->flags.com.q_index], &txn->cl_node);
- CF_Assert(CF_AppData.hk.Payload.channel_hk[txn->chan_num].q_size[txn->flags.com.q_index]); /* sanity check */
- --CF_AppData.hk.Payload.channel_hk[txn->chan_num].q_size[txn->flags.com.q_index];
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
+
+ CF_Assert(chan->stat.q_size[txn->flags.com.q_index]); /* sanity check */
+
+ CF_CList_Remove(&chan->qs[txn->flags.com.q_index], &txn->cl_node);
+ --chan->stat.q_size[txn->flags.com.q_index];
}
static inline void CF_MoveTransaction(CF_Transaction_t *txn, CF_QueueIdx_t queue)
{
- CF_Assert(txn && (txn->chan_num < CF_NUM_CHANNELS));
- CF_CList_Remove(&CF_AppData.engine.channels[txn->chan_num].qs[txn->flags.com.q_index], &txn->cl_node);
- CF_Assert(CF_AppData.hk.Payload.channel_hk[txn->chan_num].q_size[txn->flags.com.q_index]); /* sanity check */
- --CF_AppData.hk.Payload.channel_hk[txn->chan_num].q_size[txn->flags.com.q_index];
- CF_CList_InsertBack(&CF_AppData.engine.channels[txn->chan_num].qs[queue], &txn->cl_node);
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
+
+ CF_Assert(chan->stat.q_size[txn->flags.com.q_index]); /* sanity check */
+
+ CF_CList_Remove(&chan->qs[txn->flags.com.q_index], &txn->cl_node);
+ --chan->stat.q_size[txn->flags.com.q_index];
+ CF_CList_InsertBack(&chan->qs[queue], &txn->cl_node);
txn->flags.com.q_index = queue;
- ++CF_AppData.hk.Payload.channel_hk[txn->chan_num].q_size[txn->flags.com.q_index];
+ ++chan->stat.q_size[txn->flags.com.q_index];
}
static inline void CF_CList_Remove_Ex(CF_Channel_t *chan, CF_QueueIdx_t queueidx, CF_CListNode_t *node)
{
+ CF_Assert(chan->stat.q_size[queueidx]); /* sanity check */
+
CF_CList_Remove(&chan->qs[queueidx], node);
- CF_Assert(CF_AppData.hk.Payload.channel_hk[chan - CF_AppData.engine.channels].q_size[queueidx]); /* sanity check */
- --CF_AppData.hk.Payload.channel_hk[chan - CF_AppData.engine.channels].q_size[queueidx];
+ --chan->stat.q_size[queueidx];
}
static inline void
CF_CList_InsertAfter_Ex(CF_Channel_t *chan, CF_QueueIdx_t queueidx, CF_CListNode_t *start, CF_CListNode_t *after)
{
CF_CList_InsertAfter(&chan->qs[queueidx], start, after);
- ++CF_AppData.hk.Payload.channel_hk[chan - CF_AppData.engine.channels].q_size[queueidx];
+ ++chan->stat.q_size[queueidx];
}
static inline void CF_CList_InsertBack_Ex(CF_Channel_t *chan, CF_QueueIdx_t queueidx, CF_CListNode_t *node)
{
CF_CList_InsertBack(&chan->qs[queueidx], node);
- ++CF_AppData.hk.Payload.channel_hk[chan - CF_AppData.engine.channels].q_size[queueidx];
+ ++chan->stat.q_size[queueidx];
}
/************************************************************************/
@@ -194,9 +221,8 @@ void CF_ResetHistory(CF_Channel_t *chan, CF_History_t *history);
* txn must not be NULL.
*
* @param txn Pointer to the transaction object
- * @param chan The channel number which this transaction is associated with
*/
-void CF_FreeTransaction(CF_Transaction_t *txn, uint8 chan);
+void CF_FreeTransaction(CF_Transaction_t *txn);
/************************************************************************/
/** @brief Finds an active transaction by sequence number.
@@ -526,19 +552,6 @@ static inline bool CF_TxnStatus_IsError(CF_TxnStatus_t txn_stat)
return (txn_stat > CF_TxnStatus_NO_ERROR);
}
-/************************************************************************/
-/** @brief Gets the associated channel struct from a transaction
- *
- * @par Assumptions, External Events, and Notes:
- * txn must not be null, and the chan_num must be set
- *
- * @param txn Transaction
- *
- * @returns Pointer to CF_Channel_t struct associated with the transaction
- * @retval NULL if checks failed
- */
-CF_Channel_t *CF_GetChannelFromTxn(CF_Transaction_t *txn);
-
/************************************************************************/
/** @brief Gets the head of the chunk list for the given channel + direction
*
@@ -565,4 +578,17 @@ CF_CListNode_t **CF_GetChunkListHead(CF_Channel_t *chan, uint8 direction);
*/
CF_CFDP_AckTxnStatus_t CF_CFDP_GetAckTxnStatus(CF_Transaction_t *txn);
+/************************************************************************/
+/** @brief Invokes the given function on every channel in the engine
+ *
+ * Loops through all channels and calls the function. Stops when any
+ * of the function calls return non-CFE_SUCCESS.
+ *
+ * @param engine_ptr Engine pointer
+ * @param fn Function to call
+ * @param arg Opaque arg passed to function
+ * @returns CFE_SUCCESS if completed successfully, otherwise error code
+ */
+int32 CF_ForEachChannel(CF_Engine_t *engine_ptr, CF_ChannelFunc_t fn, void *arg);
+
#endif /* !CF_UTILS_H */
diff --git a/fsw/tables/cf_def_config.c b/fsw/tables/cf_def_config.c
index 91d75f06..828d4544 100644
--- a/fsw/tables/cf_def_config.c
+++ b/fsw/tables/cf_def_config.c
@@ -48,7 +48,7 @@ CF_ConfigTable_t CF_config_table = {
/* polling directory 0 */
5, /* interval seconds */
25, /* priority */
- CF_CFDP_CLASS_2, /* class to send */
+ CF_CFDP_Class_2, /* class to send */
23, /* destination entity id */
"/cf/poll_dir", /* source directory */
"./poll_dir", /* destination directory */
diff --git a/unit-test/cf_app_tests.c b/unit-test/cf_app_tests.c
index 8ba105fa..5e927df3 100644
--- a/unit-test/cf_app_tests.c
+++ b/unit-test/cf_app_tests.c
@@ -69,20 +69,26 @@ void UT_UpdatedDefaultHandler_CFE_SB_ReceiveBuffer(void *UserO
void Test_CF_CheckTables_DoNotReleaseAddressBecauseEngineIsEnabled(void)
{
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+
/* Arrange */
- CF_AppData.engine.enabled = true;
+ engine_ptr->enabled = true;
/* Act */
CF_CheckTables();
/* Assert */
- UtAssert_STUB_COUNT(CFE_TBL_ReleaseAddress, 0);
+ UtAssert_STUB_COUNT(CFE_TBL_Manage, 0);
}
void Test_CF_CheckTables_CallTo_CFE_TBL_ReleaseAddress_ReturnsNot_CFE_SUCCESS_SendEvent(void)
{
- void *TablePtr = NULL;
+ CF_ConfigTable_t ut_config;
+ void *TablePtr = &ut_config;
+
+ memset(&ut_config, 0, sizeof(ut_config));
+ UT_SetDefaultReturnValue(UT_KEY(CFE_TBL_Manage), CFE_TBL_INFO_UPDATED);
UT_SetDataBuffer(UT_KEY(CFE_TBL_GetAddress), &TablePtr, sizeof(TablePtr), false);
UT_SetDefaultReturnValue(UT_KEY(CFE_TBL_ReleaseAddress), CFE_STATUS_EXTERNAL_RESOURCE_FAIL);
@@ -90,60 +96,68 @@ void Test_CF_CheckTables_CallTo_CFE_TBL_ReleaseAddress_ReturnsNot_CFE_SUCCESS_Se
CF_CheckTables();
/* Assert */
+ UtAssert_STUB_COUNT(CFE_TBL_Manage, 1);
+ UtAssert_STUB_COUNT(CFE_TBL_GetAddress, 1);
UtAssert_STUB_COUNT(CFE_TBL_ReleaseAddress, 1);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
}
void Test_CF_CheckTables_CallTo_CFE_TBL_Manage_ReturnsNot_CFE_SUCCESS_SendEvent(void)
{
- void *TablePtr = NULL;
+ CF_ConfigTable_t ut_config;
+ void *TablePtr = &ut_config;
+
+ memset(&ut_config, 0, sizeof(ut_config));
- UT_SetDataBuffer(UT_KEY(CFE_TBL_GetAddress), &TablePtr, sizeof(TablePtr), false);
UT_SetDefaultReturnValue(UT_KEY(CFE_TBL_Manage), CFE_STATUS_EXTERNAL_RESOURCE_FAIL);
+ UT_SetDataBuffer(UT_KEY(CFE_TBL_GetAddress), &TablePtr, sizeof(TablePtr), false);
/* Act */
CF_CheckTables();
/* Assert */
- UtAssert_STUB_COUNT(CFE_TBL_ReleaseAddress, 1);
+ UtAssert_STUB_COUNT(CFE_TBL_GetAddress, 0);
+ UtAssert_STUB_COUNT(CFE_TBL_ReleaseAddress, 0);
UtAssert_STUB_COUNT(CFE_TBL_Manage, 1);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
}
void Test_CF_CheckTables_CallTo_CFE_TBL_GetAddress_ReturnsNot_CFE_SUCCESS_Or_CFE_TBL_INFO_UPDATED_SendEvent(void)
{
+ UT_SetDefaultReturnValue(UT_KEY(CFE_TBL_Manage), CFE_TBL_INFO_UPDATED);
UT_SetDefaultReturnValue(UT_KEY(CFE_TBL_GetAddress), CFE_STATUS_EXTERNAL_RESOURCE_FAIL);
/* Act */
CF_CheckTables();
/* Assert */
- UtAssert_STUB_COUNT(CFE_TBL_ReleaseAddress, 1);
+ UtAssert_STUB_COUNT(CFE_TBL_ReleaseAddress, 0);
UtAssert_STUB_COUNT(CFE_TBL_Manage, 1);
UtAssert_STUB_COUNT(CFE_TBL_GetAddress, 1);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
}
-void Test_CF_CheckTables_CallTo_CFE_TBL_GetAddress_Returns_CFE_SUCCESS(void)
+void Test_CF_CheckTables_CallTo_CFE_TBL_Manage_Returns_CFE_SUCCESS(void)
{
- void *TablePtr = NULL;
-
- UT_SetDataBuffer(UT_KEY(CFE_TBL_GetAddress), &TablePtr, sizeof(TablePtr), false);
+ UT_SetDefaultReturnValue(UT_KEY(CFE_TBL_Manage), CFE_SUCCESS);
/* Act */
CF_CheckTables();
/* Assert */
- UtAssert_STUB_COUNT(CFE_TBL_ReleaseAddress, 1);
+ UtAssert_STUB_COUNT(CFE_TBL_ReleaseAddress, 0);
UtAssert_STUB_COUNT(CFE_TBL_Manage, 1);
- UtAssert_STUB_COUNT(CFE_TBL_GetAddress, 1);
+ UtAssert_STUB_COUNT(CFE_TBL_GetAddress, 0);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 0);
}
-void Test_CF_CheckTables_CallTo_CFE_TBL_GetAddress_Returns_CFE_TBL_INFO_UPDATED(void)
+void Test_CF_CheckTables_CallTo_CFE_TBL_Manage_Returns_CFE_TBL_INFO_UPDATED(void)
{
- void *TablePtr = NULL;
+ CF_ConfigTable_t ut_config;
+ void *TablePtr = &ut_config;
+ memset(&ut_config, 0, sizeof(ut_config));
+ UT_SetDefaultReturnValue(UT_KEY(CFE_TBL_Manage), CFE_TBL_INFO_UPDATED);
UT_SetDataBuffer(UT_KEY(CFE_TBL_GetAddress), &TablePtr, sizeof(TablePtr), false);
UT_SetDefaultReturnValue(UT_KEY(CFE_TBL_GetAddress), CFE_TBL_INFO_UPDATED);
@@ -154,6 +168,7 @@ void Test_CF_CheckTables_CallTo_CFE_TBL_GetAddress_Returns_CFE_TBL_INFO_UPDATED(
UtAssert_STUB_COUNT(CFE_TBL_ReleaseAddress, 1);
UtAssert_STUB_COUNT(CFE_TBL_Manage, 1);
UtAssert_STUB_COUNT(CFE_TBL_GetAddress, 1);
+ UtAssert_STUB_COUNT(CF_ForEachChannel, 1);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 0);
}
@@ -338,7 +353,10 @@ void Test_CF_TableInit_FailBecause_CFE_TBL_GetAddress_DidNotReturnSuccess(void)
void Test_CF_TableInit_When_CFE_TBL_GetAddress_Returns_CFE_SUCCESS_SuccessAndDoNotSendEvent(void)
{
- void *TablePtr = NULL;
+ CF_ConfigTable_t ut_config;
+ void *TablePtr = &ut_config;
+
+ memset(&ut_config, 0, sizeof(ut_config));
UT_SetDataBuffer(UT_KEY(CFE_TBL_GetAddress), &TablePtr, sizeof(TablePtr), false);
@@ -351,7 +369,10 @@ void Test_CF_TableInit_When_CFE_TBL_GetAddress_Returns_CFE_SUCCESS_SuccessAndDoN
void Test_CF_TableInit_When_CFE_TBL_GetAddress_Returns_CFE_TBL_INFO_UPDATED_SuccessAndDoNotSendEvent(void)
{
- void *TablePtr = NULL;
+ CF_ConfigTable_t ut_config;
+ void *TablePtr = &ut_config;
+
+ memset(&ut_config, 0, sizeof(ut_config));
UT_SetDataBuffer(UT_KEY(CFE_TBL_GetAddress), &TablePtr, sizeof(TablePtr), false);
/* Arrange */
@@ -380,7 +401,6 @@ void Test_CF_AppInit_CallTo_CFE_EVS_Register_ReturnsNot_CFE_SUCCESS_Call_CFE_ES_
UtAssert_INT32_EQ(CF_AppInit(), result);
/* Assert */
- UtAssert_STUB_COUNT(CFE_MSG_Init, 1);
UtAssert_STUB_COUNT(CFE_EVS_Register, 1);
UtAssert_STUB_COUNT(CFE_ES_WriteToSysLog, 1);
}
@@ -396,7 +416,6 @@ void Test_CF_AppInit_CallTo_CFE_SB_CreatePipe_ReturnsNot_CFE_SUCCESS_Return_Pipe
UtAssert_INT32_EQ(CF_AppInit(), result);
/* Assert */
- UtAssert_STUB_COUNT(CFE_MSG_Init, 1);
UtAssert_STUB_COUNT(CFE_EVS_Register, 1);
UtAssert_STUB_COUNT(CFE_SB_CreatePipe, 1);
UT_CF_AssertEventID(CF_CR_PIPE_ERR_EID);
@@ -414,7 +433,6 @@ void Test_CF_AppInit_FirstCallTo_CFE_SB_Subscribe_ReturnsNot_CFE_SUCCESS_Call_CF
UtAssert_INT32_EQ(CF_AppInit(), result);
/* Assert */
- UtAssert_STUB_COUNT(CFE_MSG_Init, 1);
UtAssert_STUB_COUNT(CFE_EVS_Register, 1);
UtAssert_STUB_COUNT(CFE_SB_CreatePipe, 1);
UtAssert_STUB_COUNT(CFE_SB_Subscribe, 1);
@@ -435,7 +453,6 @@ void Test_CF_AppInit_CallTo_CF_TableInit_ReturnsNot_CFE_SUCCESS_ReturnErrorStatu
UtAssert_INT32_EQ(CF_AppInit(), result);
/* Assert */
- UtAssert_STUB_COUNT(CFE_MSG_Init, 1);
UtAssert_STUB_COUNT(CFE_EVS_Register, 1);
UtAssert_STUB_COUNT(CFE_SB_CreatePipe, 1);
UtAssert_STUB_COUNT(CFE_SB_Subscribe, 3);
@@ -445,8 +462,11 @@ void Test_CF_AppInit_CallTo_CF_TableInit_ReturnsNot_CFE_SUCCESS_ReturnErrorStatu
void Test_CF_AppInit_CallTo_CF_CFDP_InitEngine_ReturnsNot_CFE_SUCCESS_ReturnErrorStatus(void)
{
/* Arrange */
- int32 result = -1;
- void *TablePtr = NULL;
+ int32 result = -1;
+ CF_ConfigTable_t ut_config;
+ void *TablePtr = &ut_config;
+
+ memset(&ut_config, 0, sizeof(ut_config));
UT_SetDataBuffer(UT_KEY(CFE_TBL_GetAddress), &TablePtr, sizeof(TablePtr), false);
UT_SetDefaultReturnValue(UT_KEY(CF_CFDP_InitEngine), result);
@@ -455,7 +475,6 @@ void Test_CF_AppInit_CallTo_CF_CFDP_InitEngine_ReturnsNot_CFE_SUCCESS_ReturnErro
UtAssert_INT32_EQ(CF_AppInit(), result);
/* Assert */
- UtAssert_STUB_COUNT(CFE_MSG_Init, 1);
UtAssert_STUB_COUNT(CFE_EVS_Register, 1);
UtAssert_STUB_COUNT(CFE_SB_CreatePipe, 1);
UtAssert_STUB_COUNT(CFE_SB_Subscribe, 3);
@@ -464,7 +483,10 @@ void Test_CF_AppInit_CallTo_CF_CFDP_InitEngine_ReturnsNot_CFE_SUCCESS_ReturnErro
void Test_CF_AppInit_Success(void)
{
- void *TablePtr = NULL;
+ CF_ConfigTable_t ut_config;
+ void *TablePtr = &ut_config;
+
+ memset(&ut_config, 0, sizeof(ut_config));
UT_SetDataBuffer(UT_KEY(CFE_TBL_GetAddress), &TablePtr, sizeof(TablePtr), false);
@@ -472,7 +494,7 @@ void Test_CF_AppInit_Success(void)
UtAssert_INT32_EQ(CF_AppInit(), CFE_SUCCESS);
/* Assert */
- UtAssert_STUB_COUNT(CFE_MSG_Init, 1);
+ UtAssert_STUB_COUNT(CF_CFDP_InitEngine, 1);
}
/*******************************************************************************
@@ -503,8 +525,10 @@ void Test_CF_AppMain_CFE_SB_ReceiveBuffer_Cases(void)
{
CFE_SB_Buffer_t sbbuf;
CFE_SB_Buffer_t *sbbufptr;
- void *TablePtr = NULL;
+ CF_ConfigTable_t ut_config;
+ void *TablePtr = &ut_config;
+ memset(&ut_config, 0, sizeof(ut_config));
memset(&sbbuf, 0, sizeof(sbbuf));
/* Run loop once */
@@ -553,8 +577,11 @@ void Test_CF_AppMain_RunLoopCallTo_CFE_SB_ReceiveBuffer_Returns_CFE_SUCCESS_AndV
/* Arrange */
CFE_SB_MsgId_t forced_MsgID = CFE_SB_INVALID_MSG_ID;
CFE_SB_Buffer_t fake_msg;
- CFE_SB_Buffer_t *BufPtr = &fake_msg;
- void *TablePtr = NULL;
+ CFE_SB_Buffer_t *BufPtr = &fake_msg;
+ CF_ConfigTable_t ut_config;
+ void *TablePtr = &ut_config;
+
+ memset(&ut_config, 0, sizeof(ut_config));
UT_SetDataBuffer(UT_KEY(CFE_TBL_GetAddress), &TablePtr, sizeof(TablePtr), false);
@@ -603,14 +630,14 @@ void add_CF_CheckTables_tests(void)
Setup_cf_config_table_tests,
CF_App_Tests_Teardown,
"Test_CF_CheckTables_CallTo_CFE_TBL_GetAddress_ReturnsNot_CFE_SUCCESS_Or_CFE_TBL_INFO_UPDATED_SendEvent");
- UtTest_Add(Test_CF_CheckTables_CallTo_CFE_TBL_GetAddress_Returns_CFE_SUCCESS,
+ UtTest_Add(Test_CF_CheckTables_CallTo_CFE_TBL_Manage_Returns_CFE_SUCCESS,
Setup_cf_config_table_tests,
CF_App_Tests_Teardown,
- "Test_CF_CheckTables_CallTo_CFE_TBL_GetAddress_Returns_CFE_SUCCESS");
- UtTest_Add(Test_CF_CheckTables_CallTo_CFE_TBL_GetAddress_Returns_CFE_TBL_INFO_UPDATED,
+ "Test_CF_CheckTables_CallTo_CFE_TBL_Manage_Returns_CFE_SUCCESS");
+ UtTest_Add(Test_CF_CheckTables_CallTo_CFE_TBL_Manage_Returns_CFE_TBL_INFO_UPDATED,
Setup_cf_config_table_tests,
CF_App_Tests_Teardown,
- "Test_CF_CheckTables_CallTo_CFE_TBL_GetAddress_Returns_CFE_TBL_INFO_UPDATED");
+ "Test_CF_CheckTables_CallTo_CFE_TBL_Manage_Returns_CFE_TBL_INFO_UPDATED");
}
void add_CF_ValidateConfigTable_tests(void)
diff --git a/unit-test/cf_cfdp_dispatch_tests.c b/unit-test/cf_cfdp_dispatch_tests.c
index 86ff6dd8..9f49941e 100644
--- a/unit-test/cf_cfdp_dispatch_tests.c
+++ b/unit-test/cf_cfdp_dispatch_tests.c
@@ -33,7 +33,7 @@ static void UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_t setup,
CF_Channel_t **channel_p,
CF_History_t **history_p,
CF_Transaction_t **txn_p,
- CF_ConfigTable_t **config_table_p)
+ CF_EngineConfig_t **config_table_p)
{
/*
* fake objects used to pass into CF app during unit tests.
@@ -42,7 +42,9 @@ static void UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_t setup,
static CF_Logical_PduBuffer_t ut_pdu_buffer;
static CF_History_t ut_history;
static CF_Transaction_t ut_transaction;
- static CF_ConfigTable_t ut_config_table;
+
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+ CF_Channel_t *local_channel_p = &engine_ptr->channels[UT_CFDP_CHANNEL_IDX];
/*
* always clear all objects, regardless of what was asked for.
@@ -52,12 +54,11 @@ static void UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_t setup,
memset(&ut_pdu_buffer, 0, sizeof(ut_pdu_buffer));
memset(&ut_history, 0, sizeof(ut_history));
memset(&ut_transaction, 0, sizeof(ut_transaction));
- memset(&ut_config_table, 0, sizeof(ut_config_table));
/* certain pointers should be connected even if they were not asked for,
* as internal code may assume these are set (test cases may un-set) */
ut_transaction.history = &ut_history;
- CF_AppData.config_table = &ut_config_table;
+ ut_transaction.chan_ptr = local_channel_p;
if (pdu_buffer_p)
{
@@ -81,7 +82,7 @@ static void UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_t setup,
* a member of that array, so for now it must be so.
* This always uses the same channel for now.
*/
- *channel_p = &CF_AppData.engine.channels[UT_CFDP_CHANNEL];
+ *channel_p = local_channel_p;
}
if (history_p)
{
@@ -93,7 +94,7 @@ static void UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_t setup,
}
if (config_table_p)
{
- *config_table_p = &ut_config_table;
+ *config_table_p = &engine_ptr->config;
}
/* reset the event ID capture between each sub-case */
@@ -135,6 +136,7 @@ void Test_CF_CFDP_R_DispatchRecv(void)
CF_Logical_PduBuffer_t *ph;
CF_CFDP_R_SubstateDispatchTable_t dispatch;
CF_CFDP_FileDirectiveDispatchTable_t fddt;
+ CF_Channel_t *chan;
memset(&dispatch, 0, sizeof(dispatch));
memset(&fddt, 0, sizeof(fddt));
@@ -146,38 +148,38 @@ void Test_CF_CFDP_R_DispatchRecv(void)
dispatch.state[CF_RxSubState_DATA_EOF] = &fddt;
/* nominal (file directive) */
- UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
ph->pdu_header.pdu_type = 0;
UtAssert_VOIDCALL(CF_CFDP_R_DispatchRecv(txn, ph, &dispatch, NULL));
/* nominal (file data) */
- UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
ph->pdu_header.pdu_type = 1;
UtAssert_VOIDCALL(CF_CFDP_R_DispatchRecv(txn, ph, &dispatch, NULL));
/* directive code beyond range */
- UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
ph->fdirective.directive_code = CF_CFDP_FileDirective_INVALID_MAX;
UtAssert_VOIDCALL(CF_CFDP_R_DispatchRecv(txn, ph, &dispatch, NULL));
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.spurious, 1);
+ UtAssert_UINT32_EQ(chan->stat.counters.recv.spurious, 1);
UT_CF_AssertEventID(CF_CFDP_R_DC_INV_ERR_EID);
/* file data with error */
- UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
ph->pdu_header.pdu_type = 1;
UT_SetDeferredRetcode(UT_KEY(CF_CFDP_TxnIsOK), 1, false);
UtAssert_VOIDCALL(CF_CFDP_R_DispatchRecv(txn, ph, &dispatch, NULL));
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.dropped, 1);
+ UtAssert_UINT32_EQ(chan->stat.counters.recv.dropped, 1);
/* test actual dispatch */
- UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
ph->fdirective.directive_code = CF_CFDP_FileDirective_METADATA;
txn->state_data.sub_state = CF_RxSubState_DATA_EOF;
UtAssert_VOIDCALL(CF_CFDP_R_DispatchRecv(txn, ph, &dispatch, CF_CFDP_R2_Recv));
UtAssert_STUB_COUNT(CF_CFDP_R1_Recv, 1);
UtAssert_STUB_COUNT(CF_CFDP_R2_Recv, 0);
- UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
ph->pdu_header.pdu_type = 1;
txn->state_data.sub_state = CF_RxSubState_DATA_EOF;
UtAssert_VOIDCALL(CF_CFDP_R_DispatchRecv(txn, ph, &dispatch, CF_CFDP_R2_Recv));
@@ -195,6 +197,7 @@ void Test_CF_CFDP_S_DispatchRecv(void)
CF_Logical_PduBuffer_t *ph;
CF_CFDP_S_SubstateRecvDispatchTable_t dispatch;
CF_CFDP_FileDirectiveDispatchTable_t fddt;
+ CF_Channel_t *chan;
memset(&dispatch, 0, sizeof(dispatch));
memset(&fddt, 0, sizeof(fddt));
@@ -204,23 +207,23 @@ void Test_CF_CFDP_S_DispatchRecv(void)
dispatch.substate[CF_TxSubState_DATA_EOF] = &fddt;
/* nominal, no handler */
- UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
UtAssert_VOIDCALL(CF_CFDP_S_DispatchRecv(txn, ph, &dispatch));
/* directive code beyond range */
- UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
ph->fdirective.directive_code = CF_CFDP_FileDirective_INVALID_MAX;
UtAssert_VOIDCALL(CF_CFDP_S_DispatchRecv(txn, ph, &dispatch));
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.spurious, 1);
+ UtAssert_UINT32_EQ(chan->stat.counters.recv.spurious, 1);
UT_CF_AssertEventID(CF_CFDP_S_DC_INV_ERR_EID);
/* file data PDU, not expected in this type of txn */
- UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
ph->pdu_header.pdu_type = 1;
UtAssert_VOIDCALL(CF_CFDP_S_DispatchRecv(txn, ph, &dispatch));
/* test actual dispatch */
- UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
ph->fdirective.directive_code = CF_CFDP_FileDirective_METADATA;
txn->state_data.sub_state = CF_TxSubState_DATA_EOF;
UtAssert_VOIDCALL(CF_CFDP_S_DispatchRecv(txn, ph, &dispatch));
@@ -236,6 +239,7 @@ void Test_CF_CFDP_RxStateDispatch(void)
CF_Transaction_t *txn;
CF_Logical_PduBuffer_t *ph;
CF_CFDP_TxnRecvDispatchTable_t dispatch;
+ CF_Channel_t *chan;
memset(&dispatch, 0, sizeof(dispatch));
@@ -243,14 +247,14 @@ void Test_CF_CFDP_RxStateDispatch(void)
dispatch.rx[CF_TxnState_DROP] = CF_CFDP_RecvDrop;
/* nominal, no handler */
- UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
ph->pdu_header.txm_mode = 1;
txn->state = CF_TxnState_INIT;
txn->reliable_mode = false;
UtAssert_VOIDCALL(CF_CFDP_RxStateDispatch(txn, ph, &dispatch));
/* nominal, with handler */
- UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
ph->pdu_header.txm_mode = 1;
txn->state = CF_TxnState_R1;
txn->reliable_mode = false;
@@ -258,14 +262,14 @@ void Test_CF_CFDP_RxStateDispatch(void)
UtAssert_STUB_COUNT(CF_CFDP_R1_Recv, 1);
/* Got txm_mode = 0 in an R1 */
- UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
ph->pdu_header.txm_mode = 0;
txn->reliable_mode = false;
UtAssert_VOIDCALL(CF_CFDP_RxStateDispatch(txn, ph, &dispatch));
UtAssert_STUB_COUNT(CF_CFDP_RecvDrop, 1);
/* Got txm_mode = 1 in an R2 */
- UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_Dispatch_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
ph->pdu_header.txm_mode = 1;
txn->reliable_mode = true;
UtAssert_VOIDCALL(CF_CFDP_RxStateDispatch(txn, ph, &dispatch));
diff --git a/unit-test/cf_cfdp_r_tests.c b/unit-test/cf_cfdp_r_tests.c
index d4e8a2fd..49b2e1f5 100644
--- a/unit-test/cf_cfdp_r_tests.c
+++ b/unit-test/cf_cfdp_r_tests.c
@@ -43,7 +43,7 @@ static void UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_t setup,
CF_Channel_t **channel_p,
CF_History_t **history_p,
CF_Transaction_t **txn_p,
- CF_ConfigTable_t **config_table_p)
+ CF_EngineConfig_t **config_table_p)
{
/*
* fake objects used to pass into CF app during unit tests.
@@ -52,7 +52,9 @@ static void UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_t setup,
static CF_Logical_PduBuffer_t ut_pdu_buffer;
static CF_History_t ut_history;
static CF_Transaction_t ut_transaction;
- static CF_ConfigTable_t ut_config_table;
+
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+ CF_Channel_t *local_channel_p = &engine_ptr->channels[UT_CFDP_CHANNEL_IDX];
/*
* always clear all objects, regardless of what was asked for.
@@ -62,12 +64,11 @@ static void UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_t setup,
memset(&ut_pdu_buffer, 0, sizeof(ut_pdu_buffer));
memset(&ut_history, 0, sizeof(ut_history));
memset(&ut_transaction, 0, sizeof(ut_transaction));
- memset(&ut_config_table, 0, sizeof(ut_config_table));
/* certain pointers should be connected even if they were not asked for,
* as internal code may assume these are set (test cases may un-set) */
ut_transaction.history = &ut_history;
- CF_AppData.config_table = &ut_config_table;
+ ut_transaction.chan_ptr = local_channel_p;
if (pdu_buffer_p)
{
@@ -91,7 +92,7 @@ static void UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_t setup,
* a member of that array, so for now it must be so.
* This always uses the same channel for now.
*/
- *channel_p = &CF_AppData.engine.channels[UT_CFDP_CHANNEL];
+ *channel_p = local_channel_p;
}
if (history_p)
{
@@ -103,7 +104,7 @@ static void UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_t setup,
}
if (config_table_p)
{
- *config_table_p = &ut_config_table;
+ *config_table_p = &engine_ptr->config;
}
if (setup == UT_CF_Setup_TX)
@@ -372,9 +373,10 @@ void Test_CF_CFDP_R_Init(void)
* void CF_CFDP_R_Init(CF_Transaction_t *txn);
*/
CF_Transaction_t *txn;
+ CF_Channel_t *chan;
/* nominal */
- UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, NULL, NULL, NULL, &txn, NULL);
+ UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, NULL, &chan, NULL, &txn, NULL);
txn->state_data.fin_dc = -1;
txn->state_data.fin_fs = -1;
UtAssert_VOIDCALL(CF_CFDP_R_Init(txn));
@@ -382,26 +384,26 @@ void Test_CF_CFDP_R_Init(void)
UtAssert_UINT8_EQ(txn->state_data.fin_fs, CF_CFDP_FinFileStatus_INVALID);
/* nominal, R2 state, creates tempfile */
- UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, NULL, NULL, NULL, &txn, NULL);
+ UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, NULL, &chan, NULL, &txn, NULL);
txn->reliable_mode = true;
UtAssert_VOIDCALL(CF_CFDP_R_Init(txn));
UT_CF_AssertEventID(CF_CFDP_R_TEMP_FILE_INF_EID);
/* failure of file open, class 1 */
- UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, NULL, NULL, NULL, &txn, NULL);
+ UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, NULL, &chan, NULL, &txn, NULL);
UT_SetDeferredRetcode(UT_KEY(CF_WrappedOpenCreate), 1, -1);
txn->reliable_mode = false;
UtAssert_VOIDCALL(CF_CFDP_R_Init(txn));
UT_CF_AssertEventID(CF_CFDP_R_CREAT_ERR_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.file_open, 1);
+ UtAssert_UINT32_EQ(chan->stat.counters.fault.file_open, 1);
/* failure of file open, class 2 */
- UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, NULL, NULL, NULL, &txn, NULL);
+ UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, NULL, &chan, NULL, &txn, NULL);
UT_SetDeferredRetcode(UT_KEY(CF_WrappedOpenCreate), 1, -1);
txn->reliable_mode = true;
UtAssert_VOIDCALL(CF_CFDP_R_Init(txn));
UT_CF_AssertEventID(CF_CFDP_R_CREAT_ERR_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.file_open, 2);
+ UtAssert_UINT32_EQ(chan->stat.counters.fault.file_open, 2);
UtAssert_INT32_EQ(txn->history->txn_stat, CF_TxnStatus_FILESTORE_REJECTION);
}
@@ -411,27 +413,28 @@ void Test_CF_CFDP_R_CheckCrc(void)
* int CF_CFDP_R_CheckCrc(CF_Transaction_t *txn, uint32 expected_crc);
*/
CF_Transaction_t *txn;
+ CF_Channel_t *chan;
/* CRC mismatch, class 1 */
- UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, NULL, NULL, NULL, &txn, NULL);
+ UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, NULL, &chan, NULL, &txn, NULL);
txn->reliable_mode = false;
txn->crc.result = 0xdeadbeef;
txn->state_data.eof_crc = 0x1badc0de;
UtAssert_INT32_EQ(CF_CFDP_R_CheckCrc(txn), CF_ERROR);
UT_CF_AssertEventID(CF_CFDP_R_CRC_ERR_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.crc_mismatch, 1);
+ UtAssert_UINT32_EQ(chan->stat.counters.fault.crc_mismatch, 1);
/* CRC mismatch, class 2 */
- UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, NULL, NULL, NULL, &txn, NULL);
+ UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, NULL, &chan, NULL, &txn, NULL);
txn->reliable_mode = true;
txn->crc.result = 0xdeadbeef;
txn->state_data.eof_crc = 0x2badc0de;
UtAssert_INT32_EQ(CF_CFDP_R_CheckCrc(txn), CF_ERROR);
UT_CF_AssertEventID(CF_CFDP_R_CRC_ERR_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.crc_mismatch, 2);
+ UtAssert_UINT32_EQ(chan->stat.counters.fault.crc_mismatch, 2);
/* CRC match */
- UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, NULL, NULL, NULL, &txn, NULL);
+ UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, NULL, &chan, NULL, &txn, NULL);
txn->crc.result = 0xc0ffee;
txn->state_data.eof_crc = 0xc0ffee;
UtAssert_INT32_EQ(CF_CFDP_R_CheckCrc(txn), CFE_SUCCESS);
@@ -446,33 +449,34 @@ void Test_CF_CFDP_R_ProcessFd(void)
CF_Transaction_t *txn;
CF_Logical_PduBuffer_t *ph;
CF_Logical_PduFileDataHeader_t *fd;
+ CF_Channel_t *chan;
/* nominal */
- UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
fd = &ph->int_header.fd;
fd->data_len = 100;
UT_SetDefaultReturnValue(UT_KEY(CF_WrappedWrite), fd->data_len);
UtAssert_INT32_EQ(CF_CFDP_R_ProcessFd(txn, ph), 0);
UtAssert_UINT32_EQ(txn->state_data.cached_pos, 100);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.file_data_bytes, 100);
+ UtAssert_UINT32_EQ(chan->stat.counters.recv.file_data_bytes, 100);
UtAssert_STUB_COUNT(CF_WrappedLseek, 0);
UtAssert_STUB_COUNT(CF_WrappedWrite, 1);
/* call again, but for something at a different offset */
- UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
fd = &ph->int_header.fd;
fd->data_len = 100;
fd->offset = 200;
UT_SetDefaultReturnValue(UT_KEY(CF_WrappedLseek), fd->offset);
UtAssert_INT32_EQ(CF_CFDP_R_ProcessFd(txn, ph), 0);
UtAssert_UINT32_EQ(txn->state_data.cached_pos, 300);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.file_data_bytes, 200);
+ UtAssert_UINT32_EQ(chan->stat.counters.recv.file_data_bytes, 200);
UtAssert_STUB_COUNT(CF_WrappedLseek, 1);
UtAssert_STUB_COUNT(CF_WrappedWrite, 2);
UtAssert_UINT32_EQ(txn->state_data.cached_pos, 300);
/* call again, but with a failed write */
- UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
fd = &ph->int_header.fd;
fd->data_len = 100;
fd->offset = 300;
@@ -484,7 +488,7 @@ void Test_CF_CFDP_R_ProcessFd(void)
UtAssert_INT32_EQ(txn->history->txn_stat, CF_TxnStatus_FILESTORE_REJECTION);
/* call again, but with a failed lseek */
- UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
fd = &ph->int_header.fd;
fd->data_len = 100;
fd->offset = 200;
@@ -496,8 +500,8 @@ void Test_CF_CFDP_R_ProcessFd(void)
UtAssert_INT32_EQ(txn->history->txn_stat, CF_TxnStatus_FILE_SIZE_ERROR);
/* these stats should have been updated during the course of this test */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[UT_CFDP_CHANNEL].counters.fault.file_write, 1);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[UT_CFDP_CHANNEL].counters.fault.file_seek, 1);
+ UtAssert_UINT32_EQ(chan->stat.counters.fault.file_write, 1);
+ UtAssert_UINT32_EQ(chan->stat.counters.fault.file_seek, 1);
}
void Test_CF_CFDP_R_SubstateRecvEof(void)
@@ -507,11 +511,12 @@ void Test_CF_CFDP_R_SubstateRecvEof(void)
*/
CF_Transaction_t *txn;
CF_Logical_PduBuffer_t *ph;
+ CF_Channel_t *chan;
UT_SetDefaultReturnValue(UT_KEY(CF_CFDP_CheckAckNakCount), true);
/* nominal, accept EOF */
- UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
txn->flags.rx.eof_count = 0;
txn->state_data.eof_size = 0;
ph->int_header.eof.size = 10;
@@ -520,7 +525,7 @@ void Test_CF_CFDP_R_SubstateRecvEof(void)
UtAssert_EQ(CF_FileSize_t, txn->state_data.eof_size, 10);
/* repeat EOF */
- UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
txn->flags.rx.eof_count = 1;
txn->state_data.eof_size = 10;
ph->int_header.eof.size = 20;
@@ -535,13 +540,13 @@ void Test_CF_CFDP_R_SubstateRecvEof(void)
UtAssert_INT32_EQ(txn->history->txn_stat, CF_TxnStatus_POS_ACK_LIMIT_REACHED);
/* with failure of CF_CFDP_RecvEof() */
- UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
UT_SetDefaultReturnValue(UT_KEY(CF_CFDP_RecvEof), -1);
UtAssert_VOIDCALL(CF_CFDP_R_SubstateRecvEof(txn, ph));
UT_CF_AssertEventID(CF_CFDP_R_PDU_EOF_ERR_EID);
/* these counters should have been updated during the test */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[UT_CFDP_CHANNEL].counters.recv.error, 1);
+ UtAssert_UINT32_EQ(chan->stat.counters.recv.error, 1);
}
void Test_CF_CFDP_R_SubstateRecvFileData(void)
@@ -660,17 +665,18 @@ void Test_CF_CFDP_R_CalcCrcChunk(void)
/* Test case for:
* int CF_CFDP_R_CalcCrcChunk(CF_Transaction_t *txn);
*/
- CF_Transaction_t *txn;
- CF_ConfigTable_t *config;
+ CF_Transaction_t *txn;
+ CF_EngineConfig_t *config;
+ CF_Channel_t *chan;
/* nominal with zero size file */
- UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, &txn, NULL);
+ UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, &txn, NULL);
txn->flags.com.crc_complete = false;
UtAssert_VOIDCALL(CF_CFDP_R_CalcCrcChunk(txn));
UtAssert_BOOL_TRUE(txn->flags.com.crc_complete);
/* nominal with non zero size file, runs the loop */
- UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, &txn, &config);
+ UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, &txn, &config);
txn->flags.com.crc_complete = false;
config->rx_crc_calc_bytes_per_wakeup = 100;
txn->fsize = 70;
@@ -679,7 +685,7 @@ void Test_CF_CFDP_R_CalcCrcChunk(void)
UtAssert_BOOL_TRUE(txn->flags.com.crc_complete);
/* nominal with file larger than rx_crc_calc_bytes_per_wakeup */
- UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, &txn, &config);
+ UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, &txn, &config);
config->rx_crc_calc_bytes_per_wakeup = CF_R2_CRC_CHUNK_SIZE;
txn->fsize = CF_R2_CRC_CHUNK_SIZE + 100;
UT_SetDeferredRetcode(UT_KEY(CF_WrappedRead), 1, CF_R2_CRC_CHUNK_SIZE);
@@ -687,7 +693,7 @@ void Test_CF_CFDP_R_CalcCrcChunk(void)
UtAssert_BOOL_FALSE(txn->flags.com.crc_complete);
/* nominal with file size larger than CF_R2_CRC_CHUNK_SIZE (this will do 2 reads) */
- UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, &txn, &config);
+ UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, &txn, &config);
config->rx_crc_calc_bytes_per_wakeup = CF_R2_CRC_CHUNK_SIZE * 2;
txn->fsize = CF_R2_CRC_CHUNK_SIZE + 100;
UT_SetDeferredRetcode(UT_KEY(CF_WrappedRead), 1, CF_R2_CRC_CHUNK_SIZE);
@@ -696,7 +702,7 @@ void Test_CF_CFDP_R_CalcCrcChunk(void)
UtAssert_BOOL_TRUE(txn->flags.com.crc_complete);
/* failure of read */
- UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, &txn, &config);
+ UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, &txn, &config);
config->rx_crc_calc_bytes_per_wakeup = 100;
txn->fsize = 50;
UT_SetDeferredRetcode(UT_KEY(CF_WrappedRead), 1, -1);
@@ -704,7 +710,7 @@ void Test_CF_CFDP_R_CalcCrcChunk(void)
UT_CF_AssertEventID(CF_CFDP_R_READ_ERR_EID);
UtAssert_BOOL_TRUE(txn->flags.com.crc_complete);
UtAssert_INT32_EQ(txn->history->txn_stat, CF_TxnStatus_FILE_SIZE_ERROR);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.file_read, 1);
+ UtAssert_UINT32_EQ(chan->stat.counters.fault.file_read, 1);
}
void Test_CF_CFDP_R2_Recv_fin_ack(void)
@@ -714,25 +720,26 @@ void Test_CF_CFDP_R2_Recv_fin_ack(void)
*/
CF_Transaction_t *txn;
CF_Logical_PduBuffer_t *ph;
+ CF_Channel_t *chan;
/* nominal */
- UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
ph->int_header.ack.ack_directive_code = CF_CFDP_FileDirective_FIN;
UtAssert_VOIDCALL(CF_CFDP_R2_SubstateRecvFinAck(txn, ph));
UtAssert_BOOL_TRUE(txn->flags.rx.finack_recv);
- UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
txn->flags.rx.finack_recv = false;
ph->int_header.ack.ack_directive_code = -1;
UtAssert_VOIDCALL(CF_CFDP_R2_SubstateRecvFinAck(txn, ph));
UtAssert_BOOL_FALSE(txn->flags.rx.finack_recv);
/* failure in CF_CFDP_RecvAck */
- UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_R_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
UT_SetDeferredRetcode(UT_KEY(CF_CFDP_RecvAck), 1, -1);
UtAssert_VOIDCALL(CF_CFDP_R2_SubstateRecvFinAck(txn, ph));
UT_CF_AssertEventID(CF_CFDP_R_PDU_FINACK_ERR_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.error, 2);
+ UtAssert_UINT32_EQ(chan->stat.counters.recv.error, 2);
}
void Test_CF_CFDP_R_CheckComplete(void)
diff --git a/unit-test/cf_cfdp_s_tests.c b/unit-test/cf_cfdp_s_tests.c
index 4c9f77f7..6f630301 100644
--- a/unit-test/cf_cfdp_s_tests.c
+++ b/unit-test/cf_cfdp_s_tests.c
@@ -66,7 +66,7 @@ static void UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_t setup,
CF_Channel_t **channel_p,
CF_History_t **history_p,
CF_Transaction_t **txn_p,
- CF_ConfigTable_t **config_table_p)
+ CF_EngineConfig_t **config_table_p)
{
/*
* fake objects used to pass into CF app during unit tests.
@@ -75,7 +75,9 @@ static void UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_t setup,
static CF_Logical_PduBuffer_t ut_pdu_buffer;
static CF_History_t ut_history;
static CF_Transaction_t ut_transaction;
- static CF_ConfigTable_t ut_config_table;
+
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+ CF_Channel_t *local_channel_p = &engine_ptr->channels[UT_CFDP_CHANNEL_IDX];
/*
* always clear all objects, regardless of what was asked for.
@@ -85,13 +87,12 @@ static void UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_t setup,
memset(&ut_pdu_buffer, 0, sizeof(ut_pdu_buffer));
memset(&ut_history, 0, sizeof(ut_history));
memset(&ut_transaction, 0, sizeof(ut_transaction));
- memset(&ut_config_table, 0, sizeof(ut_config_table));
/* certain pointers should be connected even if they were not asked for,
* as internal code may assume these are set (test cases may un-set) */
ut_transaction.history = &ut_history;
+ ut_transaction.chan_ptr = local_channel_p;
ut_history.txn_stat = CF_TxnStatus_UNDEFINED;
- CF_AppData.config_table = &ut_config_table;
if (pdu_buffer_p)
{
@@ -115,7 +116,7 @@ static void UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_t setup,
* a member of that array, so for now it must be so.
* This always uses the same channel for now.
*/
- *channel_p = &CF_AppData.engine.channels[UT_CFDP_CHANNEL];
+ *channel_p = local_channel_p;
}
if (history_p)
{
@@ -127,7 +128,7 @@ static void UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_t setup,
}
if (config_table_p)
{
- *config_table_p = &ut_config_table;
+ *config_table_p = &engine_ptr->config;
}
if (setup == UT_CF_Setup_TX)
@@ -240,9 +241,10 @@ void Test_CF_CFDP_S_Tick(void)
* void CF_CFDP_S_Tick(CF_Transaction_t *txn);
*/
CF_Transaction_t *txn;
+ CF_Channel_t *chan;
/* nominal, not in CF_TxSubState_DATA_NORMAL */
- UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_TX, NULL, NULL, NULL, &txn, NULL);
+ UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_TX, NULL, &chan, NULL, &txn, NULL);
txn->flags.com.inactivity_fired = false;
txn->reliable_mode = false;
txn->state_data.sub_state = CF_TxSubState_DATA_EOF;
@@ -252,7 +254,7 @@ void Test_CF_CFDP_S_Tick(void)
/* nominal, with timer expiry */
UT_ResetState(0);
- UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_TX, NULL, NULL, NULL, &txn, NULL);
+ UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_TX, NULL, &chan, NULL, &txn, NULL);
UT_SetDeferredRetcode(UT_KEY(CF_CFDP_GetAckTxnStatus), 1, CF_CFDP_AckTxnStatus_ACTIVE);
txn->flags.com.inactivity_fired = false;
txn->reliable_mode = false;
@@ -262,11 +264,11 @@ void Test_CF_CFDP_S_Tick(void)
UtAssert_BOOL_TRUE(txn->flags.com.inactivity_fired);
UtAssert_STUB_COUNT(CF_CFDP_RecycleTransaction, 0);
UtAssert_STUB_COUNT(CF_CFDP_CompleteTick, 1);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.inactivity_timer, 1);
+ UtAssert_UINT32_EQ(chan->stat.counters.fault.inactivity_timer, 1);
/* nominal, in CF_TxnState_HOLD, with timer expiry */
UT_ResetState(0);
- UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_TX, NULL, NULL, NULL, &txn, NULL);
+ UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_TX, NULL, &chan, NULL, &txn, NULL);
UT_SetDeferredRetcode(UT_KEY(CF_CFDP_GetAckTxnStatus), 1, CF_CFDP_AckTxnStatus_TERMINATED);
txn->flags.com.inactivity_fired = false;
txn->state = CF_TxnState_HOLD;
@@ -278,7 +280,7 @@ void Test_CF_CFDP_S_Tick(void)
/* nominal, in CF_TxnState_S2, with timer expiry */
UT_ResetState(0);
- UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_TX, NULL, NULL, NULL, &txn, NULL);
+ UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_TX, NULL, &chan, NULL, &txn, NULL);
UT_SetDeferredRetcode(UT_KEY(CF_Timer_Expired), 1, 1);
UT_SetDeferredRetcode(UT_KEY(CF_CFDP_GetAckTxnStatus), 1, CF_CFDP_AckTxnStatus_ACTIVE);
txn->flags.com.inactivity_fired = false;
@@ -287,13 +289,13 @@ void Test_CF_CFDP_S_Tick(void)
UtAssert_VOIDCALL(CF_CFDP_S_Tick(txn));
UtAssert_STUB_COUNT(CF_Timer_Tick, 0);
UT_CF_AssertEventID(CF_CFDP_S_INACT_TIMER_ERR_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.inactivity_timer, 2);
+ UtAssert_UINT32_EQ(chan->stat.counters.fault.inactivity_timer, 2);
UtAssert_BOOL_TRUE(txn->flags.com.inactivity_fired);
UtAssert_STUB_COUNT(CF_CFDP_RecycleTransaction, 0);
/* nominal, active transaction */
UT_ResetState(0);
- UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, &txn, NULL);
+ UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, &txn, NULL);
txn->reliable_mode = false;
txn->state_data.sub_state = CF_TxSubState_DATA_NORMAL;
UT_SetDeferredRetcode(UT_KEY(CF_CFDP_GetAckTxnStatus), 1, CF_CFDP_AckTxnStatus_ACTIVE);
@@ -303,7 +305,7 @@ void Test_CF_CFDP_S_Tick(void)
/* inactive transaction */
UT_ResetState(0);
- UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, &txn, NULL);
+ UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, &txn, NULL);
txn->state = CF_TxnState_HOLD;
txn->flags.com.inactivity_fired = true;
UtAssert_VOIDCALL(CF_CFDP_S_Tick(txn));
@@ -382,81 +384,82 @@ void Test_CF_CFDP_S_SendFileData(void)
/* Test case for:
* int32 CF_CFDP_S_SendFileData(CF_Transaction_t *txn, uint32 foffs, uint32 bytes_to_read, uint8 calc_crc);
*/
- CF_Transaction_t *txn;
- CF_ConfigTable_t *config;
- uint32 cumulative_read;
- uint32 read_size;
- uint32 offset;
+ CF_Transaction_t *txn;
+ CF_EngineConfig_t *config;
+ CF_Channel_t *chan;
+ uint32 cumulative_read;
+ uint32 read_size;
+ uint32 offset;
cumulative_read = 0;
offset = 0;
read_size = 100;
/* failure of CF_CFDP_ConstructPduHeader */
- UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, &txn, NULL);
+ UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, &txn, NULL);
UtAssert_INT32_EQ(CF_CFDP_S_SendFileData(txn, offset, read_size, true), CF_SEND_PDU_NO_BUF_AVAIL_ERROR);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.sent.file_data_bytes, cumulative_read);
+ UtAssert_UINT32_EQ(chan->stat.counters.sent.file_data_bytes, cumulative_read);
/* nominal, smaller than chunk, no CRC */
- UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_TX, NULL, NULL, NULL, &txn, &config);
+ UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_TX, NULL, &chan, NULL, &txn, &config);
config->outgoing_file_chunk_size = 150;
txn->fsize = 300;
UT_SetDeferredRetcode(UT_KEY(CF_WrappedRead), 1, read_size);
UtAssert_INT32_EQ(CF_CFDP_S_SendFileData(txn, offset, read_size, false), read_size);
cumulative_read += read_size;
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.sent.file_data_bytes, cumulative_read);
+ UtAssert_UINT32_EQ(chan->stat.counters.sent.file_data_bytes, cumulative_read);
/* nominal, larger than PDU, no CRC */
- UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_TX, NULL, NULL, NULL, &txn, &config);
+ UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_TX, NULL, &chan, NULL, &txn, &config);
config->outgoing_file_chunk_size = CF_MAX_PDU_SIZE * 2;
txn->fsize = CF_MAX_PDU_SIZE * 2;
read_size = CF_MAX_PDU_SIZE;
UT_SetDeferredRetcode(UT_KEY(CF_WrappedRead), 1, read_size);
UtAssert_INT32_EQ(CF_CFDP_S_SendFileData(txn, offset, read_size * 2, false), read_size);
cumulative_read += read_size;
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.sent.file_data_bytes, cumulative_read);
+ UtAssert_UINT32_EQ(chan->stat.counters.sent.file_data_bytes, cumulative_read);
UtAssert_STUB_COUNT(CF_CRC_Digest, 0);
/* nominal, larger than chunk, with CRC */
- UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_TX, NULL, NULL, NULL, &txn, &config);
+ UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_TX, NULL, &chan, NULL, &txn, &config);
config->outgoing_file_chunk_size = 50;
read_size = 100;
txn->fsize = 300;
UT_SetDeferredRetcode(UT_KEY(CF_WrappedRead), 1, config->outgoing_file_chunk_size);
UtAssert_INT32_EQ(CF_CFDP_S_SendFileData(txn, offset, read_size, true), config->outgoing_file_chunk_size);
cumulative_read += config->outgoing_file_chunk_size;
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.sent.file_data_bytes, cumulative_read);
+ UtAssert_UINT32_EQ(chan->stat.counters.sent.file_data_bytes, cumulative_read);
UtAssert_STUB_COUNT(CF_CRC_Digest, 1);
/* read w/failure */
- UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_TX, NULL, NULL, NULL, &txn, &config);
+ UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_TX, NULL, &chan, NULL, &txn, &config);
UT_SetDeferredRetcode(UT_KEY(CF_WrappedRead), 1, -1);
config->outgoing_file_chunk_size = read_size;
txn->fsize = 300;
UtAssert_INT32_EQ(CF_CFDP_S_SendFileData(txn, offset, read_size, true), -1);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.sent.file_data_bytes, cumulative_read);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.file_read, 1);
+ UtAssert_UINT32_EQ(chan->stat.counters.sent.file_data_bytes, cumulative_read);
+ UtAssert_UINT32_EQ(chan->stat.counters.fault.file_read, 1);
UT_CF_AssertEventID(CF_CFDP_S_READ_ERR_EID);
/* require lseek */
offset = 25;
- UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_TX, NULL, NULL, NULL, &txn, &config);
+ UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_TX, NULL, &chan, NULL, &txn, &config);
UT_SetDeferredRetcode(UT_KEY(CF_WrappedLseek), 1, offset);
UT_SetDeferredRetcode(UT_KEY(CF_WrappedRead), 1, read_size);
config->outgoing_file_chunk_size = read_size;
txn->fsize = 300;
UtAssert_INT32_EQ(CF_CFDP_S_SendFileData(txn, offset, read_size, true), read_size);
cumulative_read += read_size;
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.sent.file_data_bytes, cumulative_read);
+ UtAssert_UINT32_EQ(chan->stat.counters.sent.file_data_bytes, cumulative_read);
/* lseek w/failure */
- UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_TX, NULL, NULL, NULL, &txn, &config);
+ UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_TX, NULL, &chan, NULL, &txn, &config);
UT_SetDeferredRetcode(UT_KEY(CF_WrappedLseek), 1, -1);
config->outgoing_file_chunk_size = read_size;
txn->fsize = 300;
UtAssert_INT32_EQ(CF_CFDP_S_SendFileData(txn, offset, read_size, true), -1);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.sent.file_data_bytes, cumulative_read);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.fault.file_seek, 1);
+ UtAssert_UINT32_EQ(chan->stat.counters.sent.file_data_bytes, cumulative_read);
+ UtAssert_UINT32_EQ(chan->stat.counters.fault.file_seek, 1);
UT_CF_AssertEventID(CF_CFDP_S_SEEK_FD_ERR_EID);
}
@@ -465,8 +468,8 @@ void Test_CF_CFDP_S_SubstateSendFileData(void)
/* Test case for:
* void CF_CFDP_S_SubstateSendFileData(CF_Transaction_t *txn);
*/
- CF_Transaction_t *txn;
- CF_ConfigTable_t *config;
+ CF_Transaction_t *txn;
+ CF_EngineConfig_t *config;
/* nominal, zero bytes processed */
UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_TX, NULL, NULL, NULL, &txn, NULL);
@@ -568,35 +571,36 @@ void Test_CF_CFDP_S2_SubstateNak(void)
CF_Transaction_t *txn;
CF_Logical_PduBuffer_t *ph;
CF_Logical_PduNak_t *nak;
+ CF_Channel_t *chan;
/* no segments */
- UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
UT_SetDeferredRetcode(UT_KEY(CF_CFDP_RecvNak), 1, CF_ERROR);
UtAssert_VOIDCALL(CF_CFDP_S2_SubstateNak(txn, ph));
UT_CF_AssertEventID(CF_CFDP_S_PDU_NAK_ERR_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.error, 1);
+ UtAssert_UINT32_EQ(chan->stat.counters.recv.error, 1);
/* nominal, re-send md request (0,0) */
- UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
nak = &ph->int_header.nak;
nak->segment_list.num_segments = 1;
nak->segment_list.segments[0] = (CF_Logical_SegmentRequest_t) { 0, 0 };
UtAssert_VOIDCALL(CF_CFDP_S2_SubstateNak(txn, ph));
UtAssert_BOOL_TRUE(txn->flags.tx.send_md);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.nak_segment_requests, 1);
+ UtAssert_UINT32_EQ(chan->stat.counters.recv.nak_segment_requests, 1);
/* nominal, nonzero offsets */
- UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
nak = &ph->int_header.nak;
nak->segment_list.num_segments = 2;
nak->segment_list.segments[0] = (CF_Logical_SegmentRequest_t) { 0, 200 };
nak->segment_list.segments[1] = (CF_Logical_SegmentRequest_t) { 200, 300 };
txn->fsize = 300;
UtAssert_VOIDCALL(CF_CFDP_S2_SubstateNak(txn, ph));
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.nak_segment_requests, 3);
+ UtAssert_UINT32_EQ(chan->stat.counters.recv.nak_segment_requests, 3);
/* bad segments */
- UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
nak = &ph->int_header.nak;
nak->segment_list.num_segments = 3;
nak->segment_list.segments[0] = (CF_Logical_SegmentRequest_t) { 200, 100 };
@@ -604,16 +608,16 @@ void Test_CF_CFDP_S2_SubstateNak(void)
nak->segment_list.segments[2] = (CF_Logical_SegmentRequest_t) { 400, 0 };
txn->fsize = 300;
UtAssert_VOIDCALL(CF_CFDP_S2_SubstateNak(txn, ph));
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.nak_segment_requests, 6);
+ UtAssert_UINT32_EQ(chan->stat.counters.recv.nak_segment_requests, 6);
UT_CF_AssertEventID(CF_CFDP_S_INVALID_SR_ERR_EID);
/* bad decode */
- UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
UT_SetDeferredRetcode(UT_KEY(CF_CFDP_RecvNak), 1, -1);
nak = &ph->int_header.nak;
nak->segment_list.num_segments = 1;
UtAssert_VOIDCALL(CF_CFDP_S2_SubstateNak(txn, ph));
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.error, 2);
+ UtAssert_UINT32_EQ(chan->stat.counters.recv.error, 2);
UT_CF_AssertEventID(CF_CFDP_S_PDU_NAK_ERR_EID);
}
@@ -624,9 +628,10 @@ void Test_CF_CFDP_S2_SubstateEofAck(void)
*/
CF_Transaction_t *txn;
CF_Logical_PduBuffer_t *ph;
+ CF_Channel_t *chan;
/* nominal */
- UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
txn->flags.tx.eof_ack_recv = false;
ph->int_header.ack.ack_directive_code = CF_CFDP_FileDirective_EOF;
UtAssert_VOIDCALL(CF_CFDP_S2_SubstateEofAck(txn, ph));
@@ -634,20 +639,20 @@ void Test_CF_CFDP_S2_SubstateEofAck(void)
UtAssert_BOOL_FALSE(txn->flags.com.ack_timer_armed);
/* failure of CF_CFDP_RecvAck */
- UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
ph->int_header.ack.ack_directive_code = CF_CFDP_FileDirective_EOF;
UT_SetDeferredRetcode(UT_KEY(CF_CFDP_RecvAck), 1, -1);
UtAssert_VOIDCALL(CF_CFDP_S2_SubstateEofAck(txn, ph));
UT_CF_AssertEventID(CF_CFDP_S_PDU_EOF_ERR_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.error, 1);
+ UtAssert_UINT32_EQ(chan->stat.counters.recv.error, 1);
/* Ack not for EOF */
- UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, &txn, NULL);
+ UT_CFDP_S_SetupBasicTestState(UT_CF_Setup_RX, &ph, &chan, NULL, &txn, NULL);
ph->int_header.ack.ack_directive_code = CF_CFDP_FileDirective_FIN;
txn->flags.tx.eof_ack_recv = false;
UtAssert_VOIDCALL(CF_CFDP_S2_SubstateEofAck(txn, ph));
UT_CF_AssertEventID(CF_CFDP_S_PDU_EOF_ERR_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[txn->chan_num].counters.recv.error, 2);
+ UtAssert_UINT32_EQ(chan->stat.counters.recv.error, 2);
}
/* Hook function to set FD output on opencreate call */
@@ -1109,9 +1114,9 @@ void Test_CF_CFDP_S_Tick_Nak(void)
/* Test Case For:
* void CF_CFDP_S_Tick_Nak(CF_Transaction_t *txn)
*/
- CF_Transaction_t *txn;
- CF_ConfigTable_t *config;
- CF_Chunk_t chunk;
+ CF_Transaction_t *txn;
+ CF_EngineConfig_t *config;
+ CF_Chunk_t chunk;
memset(&chunk, 0, sizeof(chunk));
chunk.size = 100;
diff --git a/unit-test/cf_cfdp_sbintf_tests.c b/unit-test/cf_cfdp_sbintf_tests.c
index 06099a51..a7a2e0d5 100644
--- a/unit-test/cf_cfdp_sbintf_tests.c
+++ b/unit-test/cf_cfdp_sbintf_tests.c
@@ -101,7 +101,7 @@ static void UT_CFDP_SetupBasicTestState(UT_CF_Setup_t setup,
CF_Channel_t **channel_p,
CF_History_t **history_p,
CF_Transaction_t **txn_p,
- CF_ConfigTable_t **config_table_p)
+ CF_EngineConfig_t **config_table_p)
{
/*
* fake objects used to pass into CF app during unit tests.
@@ -109,7 +109,9 @@ static void UT_CFDP_SetupBasicTestState(UT_CF_Setup_t setup,
*/
static CF_History_t ut_history;
static CF_Transaction_t ut_transaction;
- static CF_ConfigTable_t ut_config_table;
+
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+ CF_Channel_t *local_channel_p = &engine_ptr->channels[UT_CFDP_CHANNEL_IDX];
/*
* always clear all objects, regardless of what was asked for.
@@ -118,22 +120,25 @@ static void UT_CFDP_SetupBasicTestState(UT_CF_Setup_t setup,
*/
memset(&ut_history, 0, sizeof(ut_history));
memset(&ut_transaction, 0, sizeof(ut_transaction));
- memset(&ut_config_table, 0, sizeof(ut_config_table));
/* certain pointers should be connected even if they were not asked for,
* as internal code may assume these are set (test cases may un-set) */
ut_transaction.history = &ut_history;
- CF_AppData.config_table = &ut_config_table;
+ ut_transaction.chan_ptr = local_channel_p;
+
+ local_channel_p->outgoing_counter = 0;
+ local_channel_p->num_cmd_tx = 0;
+ local_channel_p->tx_blocked = 0;
if (pdu_buffer_p)
{
if (setup == UT_CF_Setup_TX)
{
- *pdu_buffer_p = &CF_AppData.engine.out.tx_pdudata;
+ *pdu_buffer_p = &engine_ptr->out.tx_pdudata;
}
else if (setup == UT_CF_Setup_RX)
{
- *pdu_buffer_p = &CF_AppData.engine.in.rx_pdudata;
+ *pdu_buffer_p = &engine_ptr->in.rx_pdudata;
}
else
{
@@ -151,7 +156,7 @@ static void UT_CFDP_SetupBasicTestState(UT_CF_Setup_t setup,
* a member of that array, so for now it must be so.
* This always uses the same channel for now.
*/
- *channel_p = &CF_AppData.engine.channels[UT_CFDP_CHANNEL];
+ *channel_p = local_channel_p;
}
if (history_p)
{
@@ -163,25 +168,22 @@ static void UT_CFDP_SetupBasicTestState(UT_CF_Setup_t setup,
}
if (config_table_p)
{
- *config_table_p = &ut_config_table;
+ *config_table_p = &engine_ptr->config;
}
if (setup == UT_CF_Setup_TX)
{
/* transmit is likely to invoke CF_CFDP_ConstructPduHeader()
which in turn requires MsgOutGet to work */
- UT_CFDP_SetupBasicTxState(&CF_AppData.engine.out.tx_pdudata);
+ UT_CFDP_SetupBasicTxState(&engine_ptr->out.tx_pdudata);
}
else if (setup == UT_CF_Setup_RX)
{
/* most calls on the RX side will do some sort of decode, so set up for that. */
- UT_CFDP_SetupBasicRxState(&CF_AppData.engine.in.rx_pdudata);
- ut_config_table.chan[UT_CFDP_CHANNEL].rx_max_messages_per_wakeup = 1;
+ UT_CFDP_SetupBasicRxState(&engine_ptr->in.rx_pdudata);
+ local_channel_p->config.rx_max_messages_per_wakeup = 1;
}
- UT_SetDefaultReturnValue(UT_KEY(CF_GetChannelFromTxn),
- (UT_IntReturn_t)&CF_AppData.engine.channels[UT_CFDP_CHANNEL]);
-
/* reset the event ID capture between each sub-case */
UT_CF_ResetEventCapture();
}
@@ -219,11 +221,11 @@ void Test_CF_CFDP_ReceiveMessage(void)
/* Test case for:
* void CF_CFDP_ReceiveMessage(CF_Channel_t *chan);
*/
- CF_Channel_t *chan;
- CF_ConfigTable_t *config;
- CF_Transaction_t *txn;
- CFE_MSG_Type_t msg_type;
- CFE_MSG_Size_t msg_size_buf;
+ CF_Channel_t *chan;
+ CF_EngineConfig_t *config;
+ CF_Transaction_t *txn;
+ CFE_MSG_Type_t msg_type;
+ CFE_MSG_Size_t msg_size_buf;
/* no-config - the max per wakeup will be 0, and this is a noop */
UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, NULL, NULL);
@@ -231,7 +233,7 @@ void Test_CF_CFDP_ReceiveMessage(void)
/* failure in CFE_SB_ReceiveBuffer */
UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, NULL, &config);
- config->chan[UT_CFDP_CHANNEL].rx_max_messages_per_wakeup = 1;
+ chan->config.rx_max_messages_per_wakeup = 1;
UT_SetDeferredRetcode(UT_KEY(CFE_SB_ReceiveBuffer), 1, CFE_SB_NO_MESSAGE);
UtAssert_VOIDCALL(CF_CFDP_ReceiveMessage(chan));
@@ -256,14 +258,15 @@ void Test_CF_CFDP_ReceiveMessage(void)
void Test_CF_CFDP_Send(void)
{
/* Test case for:
- * void CF_CFDP_Send(uint8 chan_num, const CF_Logical_PduBuffer_t *ph)
+ * void CF_CFDP_Send(CF_Channel_t *chan_ptr, const CF_Logical_PduBuffer_t *ph)
*/
CF_Logical_PduBuffer_t *ph;
+ CF_Channel_t *chan;
/* nominal */
- UT_CFDP_SetupBasicTestState(UT_CF_Setup_TX, &ph, NULL, NULL, NULL, NULL);
- UtAssert_VOIDCALL(CF_CFDP_Send(UT_CFDP_CHANNEL, ph));
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[UT_CFDP_CHANNEL].counters.sent.pdu, 1);
+ UT_CFDP_SetupBasicTestState(UT_CF_Setup_TX, &ph, &chan, NULL, NULL, NULL);
+ UtAssert_VOIDCALL(CF_CFDP_Send(chan, ph));
+ UtAssert_UINT32_EQ(chan->stat.counters.sent.pdu, 1);
UtAssert_STUB_COUNT(CFE_MSG_SetSize, 1);
UtAssert_STUB_COUNT(CFE_SB_TransmitBuffer, 1);
}
@@ -273,27 +276,30 @@ void Test_CF_CFDP_MsgOutGet(void)
/* Test case for:
CF_Logical_PduBuffer_t *CF_CFDP_MsgOutGet(const CF_Transaction_t *txn, bool silent)
*/
- CF_Transaction_t *txn;
- CF_ConfigTable_t *config;
- CF_Channel_t *chan;
+ CF_Transaction_t *txn;
+ CF_EngineConfig_t *config;
+ CF_Channel_t *chan;
/* nominal */
- UT_CFDP_SetupBasicTestState(UT_CF_Setup_TX, NULL, NULL, NULL, &txn, NULL);
+ UT_CFDP_SetupBasicTestState(UT_CF_Setup_TX, NULL, &chan, NULL, &txn, NULL);
UtAssert_NOT_NULL(CF_CFDP_MsgOutGet(txn, false));
UtAssert_STUB_COUNT(CFE_SB_ReleaseMessageBuffer, 0);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 0);
/* This should discard the old message, and get a new one */
- UT_CFDP_SetupBasicTestState(UT_CF_Setup_TX, NULL, NULL, NULL, &txn, NULL);
+ UT_CFDP_SetupBasicTestState(UT_CF_Setup_TX, NULL, &chan, NULL, &txn, NULL);
UtAssert_NOT_NULL(CF_CFDP_MsgOutGet(txn, false));
UtAssert_STUB_COUNT(CFE_SB_ReleaseMessageBuffer, 1);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 0);
/* test the various throttling mechanisms */
- UT_CFDP_SetupBasicTestState(UT_CF_Setup_TX, NULL, NULL, NULL, &txn, &config);
- config->chan[UT_CFDP_CHANNEL].max_outgoing_messages_per_wakeup = 3;
+ UT_CFDP_SetupBasicTestState(UT_CF_Setup_TX, NULL, &chan, NULL, &txn, &config);
+ chan->config.max_outgoing_messages_per_wakeup = 3;
+ chan->outgoing_counter = 2;
UtAssert_NOT_NULL(CF_CFDP_MsgOutGet(txn, false));
+ UtAssert_BOOL_FALSE(chan->tx_blocked);
UtAssert_NULL(CF_CFDP_MsgOutGet(txn, false));
+ UtAssert_BOOL_TRUE(chan->tx_blocked);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 0);
UT_CFDP_SetupBasicTestState(UT_CF_Setup_TX, NULL, &chan, NULL, &txn, NULL);
@@ -304,25 +310,25 @@ void Test_CF_CFDP_MsgOutGet(void)
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 0);
/* transaction is suspended */
- UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, &txn, NULL);
+ UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, &txn, NULL);
txn->flags.com.suspended = true;
UtAssert_NULL(CF_CFDP_MsgOutGet(txn, false));
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 0);
/* channel is frozen */
- UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, &txn, NULL);
- CF_AppData.hk.Payload.channel_hk[UT_CFDP_CHANNEL].frozen = 1;
+ UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, &txn, NULL);
+ chan->stat.frozen = 1;
UtAssert_NULL(CF_CFDP_MsgOutGet(txn, false));
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 0);
- CF_AppData.hk.Payload.channel_hk[UT_CFDP_CHANNEL].frozen = 0;
+ chan->stat.frozen = 0;
/* no msg available from SB */
- UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, &txn, NULL);
+ UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, &txn, NULL);
UtAssert_NULL(CF_CFDP_MsgOutGet(txn, false));
UT_CF_AssertEventID(CF_CFDP_NO_MSG_ERR_EID);
/* same, but the silent flag should suppress the event */
- UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, &txn, NULL);
+ UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, &txn, NULL);
UtAssert_NULL(CF_CFDP_MsgOutGet(txn, true));
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 0);
}
diff --git a/unit-test/cf_cfdp_tests.c b/unit-test/cf_cfdp_tests.c
index 6383e3ee..c39560d3 100644
--- a/unit-test/cf_cfdp_tests.c
+++ b/unit-test/cf_cfdp_tests.c
@@ -69,7 +69,7 @@ static void UT_CFDP_SetupBasicTestState(UT_CF_Setup_t setup,
CF_Channel_t **channel_p,
CF_History_t **history_p,
CF_Transaction_t **txn_p,
- CF_ConfigTable_t **config_table_p)
+ CF_EngineConfig_t **config_table_p)
{
/*
* fake objects used to pass into CF app during unit tests.
@@ -78,7 +78,9 @@ static void UT_CFDP_SetupBasicTestState(UT_CF_Setup_t setup,
static CF_Logical_PduBuffer_t ut_pdu_buffer;
static CF_History_t ut_history;
static CF_Transaction_t ut_transaction;
- static CF_ConfigTable_t ut_config_table;
+
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+ CF_Channel_t *local_channel_p = &engine_ptr->channels[UT_CFDP_CHANNEL_IDX];
/*
* always clear all objects, regardless of what was asked for.
@@ -88,12 +90,11 @@ static void UT_CFDP_SetupBasicTestState(UT_CF_Setup_t setup,
memset(&ut_pdu_buffer, 0, sizeof(ut_pdu_buffer));
memset(&ut_history, 0, sizeof(ut_history));
memset(&ut_transaction, 0, sizeof(ut_transaction));
- memset(&ut_config_table, 0, sizeof(ut_config_table));
/* certain pointers should be connected even if they were not asked for,
* as internal code may assume these are set (test cases may un-set) */
ut_transaction.history = &ut_history;
- CF_AppData.config_table = &ut_config_table;
+ ut_transaction.chan_ptr = local_channel_p;
if (pdu_buffer_p)
{
@@ -117,7 +118,7 @@ static void UT_CFDP_SetupBasicTestState(UT_CF_Setup_t setup,
* a member of that array, so for now it must be so.
* This always uses the same channel for now.
*/
- *channel_p = &CF_AppData.engine.channels[UT_CFDP_CHANNEL];
+ *channel_p = local_channel_p;
}
if (history_p)
{
@@ -129,7 +130,7 @@ static void UT_CFDP_SetupBasicTestState(UT_CF_Setup_t setup,
}
if (config_table_p)
{
- *config_table_p = &ut_config_table;
+ *config_table_p = &engine_ptr->config;
}
if (setup == UT_CF_Setup_TX)
@@ -146,10 +147,7 @@ static void UT_CFDP_SetupBasicTestState(UT_CF_Setup_t setup,
UT_CFDP_SetupBasicRxState(&ut_pdu_buffer);
}
- UT_SetDefaultReturnValue(UT_KEY(CF_GetChannelFromTxn),
- (UT_IntReturn_t)&CF_AppData.engine.channels[UT_CFDP_CHANNEL]);
- UT_SetDefaultReturnValue(UT_KEY(CF_GetChunkListHead),
- (UT_IntReturn_t)&CF_AppData.engine.channels[UT_CFDP_CHANNEL].cs[ut_history.dir]);
+ UT_SetDefaultReturnValue(UT_KEY(CF_GetChunkListHead), (UT_IntReturn_t)&local_channel_p->cs[ut_history.dir]);
/* reset the event ID capture between each sub-case */
UT_CF_ResetEventCapture();
@@ -252,8 +250,8 @@ void Test_CF_CFDP_ArmAckTimer(void)
/* Test case for:
* void CF_CFDP_ArmAckTimer(CF_Transaction_t *txn)
*/
- CF_Transaction_t *txn;
- CF_ConfigTable_t *config;
+ CF_Transaction_t *txn;
+ CF_EngineConfig_t *config;
UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, &txn, &config);
@@ -264,35 +262,35 @@ void Test_CF_CFDP_ArmAckTimer(void)
void Test_CF_CFDP_RecvPh(void)
{
/* Test case for:
- * int CF_CFDP_RecvPh(uint8 chan_num, const CFE_SB_Buffer_t *msgbuf, CF_Logical_PduBuffer_t **pph)
+ * int CF_CFDP_RecvPh(CF_Channel_t *chan_ptr, const CFE_SB_Buffer_t *msgbuf, CF_Logical_PduBuffer_t **pph)
*/
CF_Logical_PduBuffer_t *ph;
/* nominal, file directive */
UT_CFDP_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, NULL, NULL);
- UtAssert_INT32_EQ(CF_CFDP_RecvPh(UT_CFDP_CHANNEL, ph), 0);
+ UtAssert_INT32_EQ(CF_CFDP_RecvPh(UT_CFDP_CHANNEL_PTR, ph), 0);
/* nominal, file data */
UT_CFDP_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, NULL, NULL);
ph->pdu_header.pdu_type = 1;
- UtAssert_INT32_EQ(CF_CFDP_RecvPh(UT_CFDP_CHANNEL, ph), 0);
+ UtAssert_INT32_EQ(CF_CFDP_RecvPh(UT_CFDP_CHANNEL_PTR, ph), 0);
/* decode error, fixed part */
UT_CFDP_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, NULL, NULL);
CF_CODEC_SET_DONE(ph->pdec);
- UtAssert_INT32_EQ(CF_CFDP_RecvPh(UT_CFDP_CHANNEL, ph), CF_SHORT_PDU_ERROR);
+ UtAssert_INT32_EQ(CF_CFDP_RecvPh(UT_CFDP_CHANNEL_PTR, ph), CF_SHORT_PDU_ERROR);
UT_CF_AssertEventID(CF_PDU_SHORT_HEADER_ERR_EID);
/* decode error, large file bit set */
UT_CFDP_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, NULL, NULL);
ph->pdu_header.large_flag = true;
- UtAssert_INT32_EQ(CF_CFDP_RecvPh(UT_CFDP_CHANNEL, ph), CF_ERROR);
+ UtAssert_INT32_EQ(CF_CFDP_RecvPh(UT_CFDP_CHANNEL_PTR, ph), CF_ERROR);
UT_CF_AssertEventID(CF_PDU_LARGE_FILE_ERR_EID);
/* decode error, insufficient storage for EID or seq num */
UT_CFDP_SetupBasicTestState(UT_CF_Setup_RX, &ph, NULL, NULL, NULL, NULL);
UT_SetDeferredRetcode(UT_KEY(CF_CFDP_DecodeHeader), 1, CF_ERROR);
- UtAssert_INT32_EQ(CF_CFDP_RecvPh(UT_CFDP_CHANNEL, ph), CF_ERROR);
+ UtAssert_INT32_EQ(CF_CFDP_RecvPh(UT_CFDP_CHANNEL_PTR, ph), CF_ERROR);
UT_CF_AssertEventID(CF_PDU_TRUNCATION_ERR_EID);
}
@@ -820,7 +818,7 @@ void Test_CF_CFDP_AppendTlv(void)
This helper is used by EOF and FIN to set TLV values
*/
CF_Logical_PduBuffer_t *ph;
- CF_ConfigTable_t *config;
+ CF_EngineConfig_t *config;
CF_Logical_TlvList_t *tlv_list;
UT_CFDP_SetupBasicTestState(UT_CF_Setup_TX, &ph, NULL, NULL, NULL, &config);
@@ -847,56 +845,64 @@ void Test_CF_CFDP_InitEngine(void)
/* Test case for:
* int32 CF_CFDP_InitEngine(void)
*/
- CF_ConfigTable_t *config;
+ CF_EngineConfig_t *config;
+ CF_Channel_t *chan;
+ CF_Engine_t *engine_ptr = CF_GetEngine();
/* nominal call, no sem */
- UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, NULL, &config);
- UtAssert_INT32_EQ(CF_CFDP_InitEngine(), 0);
- UtAssert_BOOL_TRUE(CF_AppData.engine.enabled);
- UtAssert_STUB_COUNT(CF_FreeTransaction, CF_NUM_TRANSACTIONS_PER_CHANNEL * CF_NUM_CHANNELS);
+ memset(engine_ptr, 0, sizeof(*engine_ptr));
+ UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, NULL, &config);
+ UtAssert_INT32_EQ(CF_CFDP_InitEngine(engine_ptr), 0);
+ UtAssert_BOOL_TRUE(engine_ptr->enabled);
/* nominal call, with sem */
- UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, NULL, &config);
- config->chan[0].sem_name[0] = 'u';
- UtAssert_INT32_EQ(CF_CFDP_InitEngine(), 0);
- UtAssert_BOOL_TRUE(CF_AppData.engine.enabled);
+ memset(engine_ptr, 0, sizeof(*engine_ptr));
+ UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, NULL, &config);
+ chan->config.sem_name[0] = 'u';
+ UtAssert_INT32_EQ(CF_CFDP_InitEngine(engine_ptr), 0);
+ UtAssert_BOOL_TRUE(engine_ptr->enabled);
/* failure of OS_CountSemGetIdByName for non-name reason */
- UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, NULL, &config);
- config->chan[0].sem_name[0] = 'u';
+ memset(engine_ptr, 0, sizeof(*engine_ptr));
+ UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, NULL, &config);
+ chan->config.sem_name[0] = 'u';
UT_SetDefaultReturnValue(UT_KEY(OS_CountSemGetIdByName), OS_ERROR);
- UtAssert_INT32_EQ(CF_CFDP_InitEngine(), OS_ERROR);
- UtAssert_BOOL_FALSE(CF_AppData.engine.enabled);
+ UtAssert_INT32_EQ(CF_CFDP_InitEngine(engine_ptr), OS_ERROR);
+ UtAssert_BOOL_FALSE(engine_ptr->enabled);
UT_CF_AssertEventID(CF_INIT_SEM_ERR_EID);
/* Max retries of OS_CountSemGetIdByName - sem was never created at all */
- UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, NULL, &config);
- config->chan[0].sem_name[0] = 'u';
+ memset(engine_ptr, 0, sizeof(*engine_ptr));
+ UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, NULL, &config);
+ chan->config.sem_name[0] = 'u';
UT_SetDefaultReturnValue(UT_KEY(OS_CountSemGetIdByName), OS_ERR_NAME_NOT_FOUND);
- UtAssert_INT32_EQ(CF_CFDP_InitEngine(), OS_ERR_NAME_NOT_FOUND);
- UtAssert_BOOL_FALSE(CF_AppData.engine.enabled);
+ UtAssert_INT32_EQ(CF_CFDP_InitEngine(engine_ptr), OS_ERR_NAME_NOT_FOUND);
+ UtAssert_BOOL_FALSE(engine_ptr->enabled);
UT_CF_AssertEventID(CF_INIT_SEM_ERR_EID);
/* Retry of OS_CountSemGetIdByName, when sem was created late, and thus
* got return OS_ERR_NAME_NOT_FOUND followed by OS_SUCCESS */
- UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, NULL, &config);
- config->chan[0].sem_name[0] = 'u';
+ memset(engine_ptr, 0, sizeof(*engine_ptr));
+ UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, NULL, &config);
+ chan->config.sem_name[0] = 'u';
UT_SetDefaultReturnValue(UT_KEY(OS_CountSemGetIdByName), OS_SUCCESS);
UT_SetDeferredRetcode(UT_KEY(OS_CountSemGetIdByName), 1, OS_ERR_NAME_NOT_FOUND);
- UtAssert_INT32_EQ(CF_CFDP_InitEngine(), 0);
- UtAssert_BOOL_TRUE(CF_AppData.engine.enabled);
+ UtAssert_INT32_EQ(CF_CFDP_InitEngine(engine_ptr), 0);
+ UtAssert_BOOL_TRUE(engine_ptr->enabled);
/* failure of CFE_SB_CreatePipe */
- UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, NULL, &config);
+ memset(engine_ptr, 0, sizeof(*engine_ptr));
+ UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, NULL, &config);
UT_SetDeferredRetcode(UT_KEY(CFE_SB_CreatePipe), 1, CFE_STATUS_EXTERNAL_RESOURCE_FAIL);
- UtAssert_INT32_EQ(CF_CFDP_InitEngine(), CFE_STATUS_EXTERNAL_RESOURCE_FAIL);
- UtAssert_BOOL_FALSE(CF_AppData.engine.enabled);
+ UtAssert_INT32_EQ(CF_CFDP_InitEngine(engine_ptr), CFE_STATUS_EXTERNAL_RESOURCE_FAIL);
+ UtAssert_BOOL_FALSE(engine_ptr->enabled);
/* failure of CFE_SB_SubscribeLocal */
- UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, NULL, &config);
+ memset(engine_ptr, 0, sizeof(*engine_ptr));
+ UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, NULL, &config);
UT_SetDeferredRetcode(UT_KEY(CFE_SB_SubscribeLocal), 1, CFE_STATUS_EXTERNAL_RESOURCE_FAIL);
- UtAssert_INT32_EQ(CF_CFDP_InitEngine(), CFE_STATUS_EXTERNAL_RESOURCE_FAIL);
- UtAssert_BOOL_FALSE(CF_AppData.engine.enabled);
+ UtAssert_INT32_EQ(CF_CFDP_InitEngine(engine_ptr), CFE_STATUS_EXTERNAL_RESOURCE_FAIL);
+ UtAssert_BOOL_FALSE(engine_ptr->enabled);
}
void Test_CF_CFDP_TxFile(void)
@@ -922,7 +928,7 @@ void Test_CF_CFDP_TxFile(void)
UT_SetHandlerFunction(UT_KEY(CF_FindUnusedTransaction), UT_AltHandler_GenericPointerReturn, txn);
UT_SetHandlerFunction(UT_KEY(CF_CList_Pop), UT_AltHandler_GenericPointerReturn, &chunk_wrap.cl_node);
chan->cs[CF_Direction_TX] = &chunk_wrap.cl_node;
- UtAssert_INT32_EQ(CF_CFDP_TxFile(src, dest, CF_CFDP_CLASS_1, 1, UT_CFDP_CHANNEL, 0, 1), 0);
+ UtAssert_INT32_EQ(CF_CFDP_TxFile(src, dest, CF_CFDP_Class_1, 1, UT_CFDP_CHANNEL_PTR, 0, 1), 0);
UtAssert_STRINGBUF_EQ(dest, -1, history->fnames.dst_filename, sizeof(history->fnames.dst_filename));
UtAssert_STRINGBUF_EQ(src, -1, history->fnames.src_filename, sizeof(history->fnames.src_filename));
UtAssert_UINT32_EQ(chan->num_cmd_tx, 1);
@@ -933,7 +939,7 @@ void Test_CF_CFDP_TxFile(void)
UT_SetHandlerFunction(UT_KEY(CF_FindUnusedTransaction), UT_AltHandler_GenericPointerReturn, txn);
UT_SetHandlerFunction(UT_KEY(CF_CList_Pop), UT_AltHandler_GenericPointerReturn, &chunk_wrap.cl_node);
chan->cs[CF_Direction_TX] = &chunk_wrap.cl_node;
- UtAssert_INT32_EQ(CF_CFDP_TxFile(src, dest, CF_CFDP_CLASS_2, 1, UT_CFDP_CHANNEL, 0, 1), 0);
+ UtAssert_INT32_EQ(CF_CFDP_TxFile(src, dest, CF_CFDP_Class_2, 1, UT_CFDP_CHANNEL_PTR, 0, 1), 0);
UtAssert_STRINGBUF_EQ(dest, -1, history->fnames.dst_filename, sizeof(history->fnames.dst_filename));
UtAssert_STRINGBUF_EQ(src, -1, history->fnames.src_filename, sizeof(history->fnames.src_filename));
UtAssert_UINT32_EQ(chan->num_cmd_tx, 2);
@@ -942,29 +948,30 @@ void Test_CF_CFDP_TxFile(void)
/* max TX */
UT_CFDP_SetupBasicTestState(UT_CF_Setup_TX, NULL, &chan, &history, &txn, NULL);
chan->num_cmd_tx = CF_MAX_COMMANDED_PLAYBACK_FILES_PER_CHAN;
- UtAssert_INT32_EQ(CF_CFDP_TxFile(src, dest, CF_CFDP_CLASS_1, 1, UT_CFDP_CHANNEL, 0, 1), -1);
+ UtAssert_INT32_EQ(CF_CFDP_TxFile(src, dest, CF_CFDP_Class_1, 1, UT_CFDP_CHANNEL_PTR, 0, 1), -1);
UT_CF_AssertEventID(CF_CFDP_MAX_CMD_TX_ERR_EID);
}
void Test_CF_CFDP_StartRxTransaction(void)
{
/* Test case for:
- * CF_Transaction_t *CF_CFDP_StartRxTransaction(uint8 chan_num);
+ * CF_Transaction_t *CF_CFDP_StartRxTransaction(CF_Channel_t *chan_ptr);
*/
CF_Transaction_t *txn;
+ CF_Channel_t *chan = UT_CFDP_CHANNEL_PTR;
/* Reject at limit */
- CF_AppData.hk.Payload.channel_hk[UT_CFDP_CHANNEL].q_size[CF_QueueIdx_RX] = CF_MAX_SIMULTANEOUS_RX;
- UtAssert_NULL(CF_CFDP_StartRxTransaction(UT_CFDP_CHANNEL));
+ chan->stat.q_size[CF_QueueIdx_RX] = CF_MAX_SIMULTANEOUS_RX;
+ UtAssert_NULL(CF_CFDP_StartRxTransaction(chan));
/* Under limit but FindUnusedTransaction still fails */
- CF_AppData.hk.Payload.channel_hk[UT_CFDP_CHANNEL].q_size[CF_QueueIdx_RX] = CF_MAX_SIMULTANEOUS_RX - 1;
- UtAssert_NULL(CF_CFDP_StartRxTransaction(UT_CFDP_CHANNEL));
+ chan->stat.q_size[CF_QueueIdx_RX] = CF_MAX_SIMULTANEOUS_RX - 1;
+ UtAssert_NULL(CF_CFDP_StartRxTransaction(chan));
/* Set so FindUnusedTransaction returns non-null (nominal) */
UT_CFDP_SetupBasicTestState(UT_CF_Setup_RX, NULL, NULL, NULL, &txn, NULL);
UT_SetHandlerFunction(UT_KEY(CF_FindUnusedTransaction), UT_AltHandler_GenericPointerReturn, txn);
- UtAssert_ADDRESS_EQ(CF_CFDP_StartRxTransaction(UT_CFDP_CHANNEL), txn);
+ UtAssert_ADDRESS_EQ(CF_CFDP_StartRxTransaction(chan), txn);
UtAssert_UINT8_EQ(txn->flags.com.q_index, CF_QueueIdx_RX);
}
@@ -985,7 +992,7 @@ void Test_CF_CFDP_PlaybackDir(void)
UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, NULL, NULL);
pb = &chan->playback[0];
memset(pb, 0, sizeof(*pb));
- UtAssert_INT32_EQ(CF_CFDP_PlaybackDir(src, dest, CF_CFDP_CLASS_1, 1, UT_CFDP_CHANNEL, 0, 1), 0);
+ UtAssert_INT32_EQ(CF_CFDP_PlaybackDir(src, dest, CF_CFDP_Class_1, 1, chan, 0, 1), 0);
UtAssert_STRINGBUF_EQ(dest, -1, pb->fnames.dst_filename, sizeof(pb->fnames.dst_filename));
UtAssert_STRINGBUF_EQ(src, -1, pb->fnames.src_filename, sizeof(pb->fnames.src_filename));
UtAssert_BOOL_TRUE(pb->diropen);
@@ -994,7 +1001,7 @@ void Test_CF_CFDP_PlaybackDir(void)
/* OS_DirectoryOpen fail */
memset(pb, 0, sizeof(*pb));
UT_SetDeferredRetcode(UT_KEY(OS_DirectoryOpen), 1, OS_ERROR);
- UtAssert_INT32_EQ(CF_CFDP_PlaybackDir(src, dest, CF_CFDP_CLASS_1, 1, UT_CFDP_CHANNEL, 0, 1), -1);
+ UtAssert_INT32_EQ(CF_CFDP_PlaybackDir(src, dest, CF_CFDP_Class_1, 1, chan, 0, 1), -1);
UT_CF_AssertEventID(CF_CFDP_OPENDIR_ERR_EID);
/* no non-busy entries */
@@ -1004,16 +1011,18 @@ void Test_CF_CFDP_PlaybackDir(void)
pb = &chan->playback[i];
pb->busy = true;
}
- UtAssert_INT32_EQ(CF_CFDP_PlaybackDir(src, dest, CF_CFDP_CLASS_1, 1, UT_CFDP_CHANNEL, 0, 1), -1);
+ UtAssert_INT32_EQ(CF_CFDP_PlaybackDir(src, dest, CF_CFDP_Class_1, 1, chan, 0, 1), -1);
UT_CF_AssertEventID(CF_CFDP_DIR_SLOT_ERR_EID);
}
static int32
Ut_Hook_StateHandler_SetCount(void *UserObj, int32 StubRetcode, uint32 CallCount, const UT_StubContext_t *Context)
{
+ CF_Channel_t *chan = UserObj;
+
if (CallCount < 3)
{
- ++CF_AppData.engine.channels[UT_CFDP_CHANNEL].outgoing_counter;
+ ++chan->outgoing_counter;
}
return StubRetcode;
}
@@ -1027,12 +1036,12 @@ void Test_CF_CFDP_S_Tick_NewData(void)
CF_Channel_t *chan;
/* suspended (do nothing) */
- UT_CFDP_SetupBasicTestState(UT_CF_Setup_TX, NULL, NULL, NULL, &txn, NULL);
+ UT_CFDP_SetupBasicTestState(UT_CF_Setup_TX, NULL, &chan, NULL, &txn, NULL);
txn->flags.com.suspended = true;
UtAssert_VOIDCALL(CF_CFDP_S_Tick_NewData(txn));
/* nominal, not in normal data state (do nothing) */
- UT_CFDP_SetupBasicTestState(UT_CF_Setup_TX, NULL, NULL, NULL, &txn, NULL);
+ UT_CFDP_SetupBasicTestState(UT_CF_Setup_TX, NULL, &chan, NULL, &txn, NULL);
txn->flags.com.suspended = false;
txn->state_data.sub_state = CF_TxSubState_DATA_EOF;
UtAssert_VOIDCALL(CF_CFDP_S_Tick_NewData(txn));
@@ -1041,13 +1050,15 @@ void Test_CF_CFDP_S_Tick_NewData(void)
UT_SetHandlerFunction(UT_KEY(CF_GetChannelFromTxn), UT_AltHandler_GenericPointerReturn, chan);
txn->flags.com.suspended = false;
txn->state_data.sub_state = CF_TxSubState_DATA_NORMAL;
- UT_SetHookFunction(UT_KEY(CF_CFDP_S_SubstateSendFileData), Ut_Hook_StateHandler_SetCount, NULL);
+ UT_SetHookFunction(UT_KEY(CF_CFDP_S_SubstateSendFileData), Ut_Hook_StateHandler_SetCount, chan);
UtAssert_VOIDCALL(CF_CFDP_S_Tick_NewData(txn));
}
static void DoTickFnSetBlocked(CF_Transaction_t *txn)
{
- CF_AppData.engine.channels[txn->chan_num].tx_blocked = true;
+ CF_Channel_t *chan = CF_GetChannelFromTxn(txn);
+
+ chan->tx_blocked = true;
}
static void DoTickNoop(CF_Transaction_t *txn)
@@ -1099,25 +1110,25 @@ void Test_CF_CFDP_ProcessPollingDirectories(void)
/* Test case for:
* void CF_CFDP_ProcessPollingDirectories(CF_Channel_t *chan)
*/
- CF_Channel_t *chan;
- CF_ConfigTable_t *config;
- CF_PollDir_t *pdcfg;
- CF_Poll_t *poll;
+ CF_Channel_t *chan;
+ CF_EngineConfig_t *config;
+ CF_LocalPdConfig_t *pdcfg;
+ CF_Poll_t *poll;
UT_CFDP_SetupBasicTestState(UT_CF_Setup_TX, NULL, &chan, NULL, NULL, &config);
- pdcfg = &config->chan[UT_CFDP_CHANNEL].polldir[0];
+ pdcfg = &chan->config.polldir[0];
poll = &chan->poll[0];
/* nominal call, polldir disabled (noop) */
UtAssert_VOIDCALL(CF_CFDP_ProcessPollingDirectories(chan));
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[UT_CFDP_CHANNEL].poll_counter, 0);
+ UtAssert_UINT32_EQ(chan->stat.poll_counter, 0);
/* nominal call, polldir enabled but interval_sec == 0 */
/* Will tick because CF_Timer_Expired stub returns 0 by default (not expired) */
pdcfg->enabled = 1;
UtAssert_VOIDCALL(CF_CFDP_ProcessPollingDirectories(chan));
UtAssert_BOOL_FALSE(poll->timer_set);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[UT_CFDP_CHANNEL].poll_counter, 1);
+ UtAssert_UINT32_EQ(chan->stat.poll_counter, 1);
UtAssert_STUB_COUNT(CF_Timer_Tick, 1);
/* with interval_sec nonzero the timer should get set, but not tick */
@@ -1125,7 +1136,7 @@ void Test_CF_CFDP_ProcessPollingDirectories(void)
UtAssert_VOIDCALL(CF_CFDP_ProcessPollingDirectories(chan));
UtAssert_BOOL_TRUE(poll->timer_set);
UtAssert_STUB_COUNT(CF_Timer_Tick, 1);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[UT_CFDP_CHANNEL].poll_counter, 1);
+ UtAssert_UINT32_EQ(chan->stat.poll_counter, 1);
/* call again should tick */
UtAssert_VOIDCALL(CF_CFDP_ProcessPollingDirectories(chan));
@@ -1137,7 +1148,7 @@ void Test_CF_CFDP_ProcessPollingDirectories(void)
UtAssert_VOIDCALL(CF_CFDP_ProcessPollingDirectories(chan));
UtAssert_BOOL_FALSE(poll->timer_set);
UtAssert_BOOL_TRUE(poll->pb.busy);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[UT_CFDP_CHANNEL].poll_counter, 1);
+ UtAssert_UINT32_EQ(chan->stat.poll_counter, 1);
/* make an error occur in CF_CFDP_PlaybackDir_Initiate() */
poll->pb.busy = false; /* above would have set it true */
@@ -1167,7 +1178,7 @@ void Test_CF_CFDP_ProcessPollingDirectories(void)
/* test that call to CF_CFDP_UpdatePollPbCounted will decrement back to 0 again */
pdcfg->enabled = 0;
UtAssert_VOIDCALL(CF_CFDP_ProcessPollingDirectories(chan));
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.channel_hk[UT_CFDP_CHANNEL].poll_counter, 0);
+ UtAssert_UINT32_EQ(chan->stat.poll_counter, 0);
}
void Test_CF_CFDP_ProcessPlaybackDirectory(void)
@@ -1175,19 +1186,20 @@ void Test_CF_CFDP_ProcessPlaybackDirectory(void)
/* Test case for:
* void CF_CFDP_ProcessPlaybackDirectory(CF_Channel_t *chan, CF_Playback_t *pb)
*/
- CF_Transaction_t *txn;
- CF_History_t *history;
- CF_Channel_t *chan;
- CF_ConfigTable_t *config;
- CF_Playback_t pb;
- os_dirent_t dirent[3];
- CF_ChunkWrapper_t chunk_wrap;
+ CF_Transaction_t *txn;
+ CF_History_t *history;
+ CF_Channel_t *chan;
+ CF_EngineConfig_t *config;
+ CF_Playback_t pb;
+ os_dirent_t dirent[3];
+ CF_ChunkWrapper_t chunk_wrap;
+ CF_Engine_t *engine_ptr = CF_GetEngine();
memset(&chunk_wrap, 0, sizeof(chunk_wrap));
memset(&pb, 0, sizeof(pb));
memset(dirent, 0, sizeof(dirent));
UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, &history, &txn, &config);
- CF_AppData.engine.enabled = true;
+ engine_ptr->enabled = true;
/* diropen is true but num_ts is high so operations are restricted */
pb.busy = true;
@@ -1262,9 +1274,11 @@ static int32 Ut_Hook_TickTransactions_UpdateCount(void *UserOb
uint32 CallCount,
const UT_StubContext_t *Context)
{
+ CF_Channel_t *chan = UserObj;
+
if (CallCount < 5)
{
- ++CF_AppData.engine.channels[UT_CFDP_CHANNEL].outgoing_counter;
+ ++chan->outgoing_counter;
}
return StubRetcode;
@@ -1283,12 +1297,12 @@ void Test_CF_CFDP_TickTransactions(void)
UtAssert_STUB_COUNT(CF_CList_Traverse, 4);
UT_ResetState(UT_KEY(CF_CList_Traverse));
- UT_SetHookFunction(UT_KEY(CF_CList_Traverse), Ut_Hook_TickTransactions_SetBlocked, NULL);
+ UT_SetHookFunction(UT_KEY(CF_CList_Traverse), Ut_Hook_TickTransactions_SetBlocked, chan);
UtAssert_VOIDCALL(CF_CFDP_TickTransactions(chan));
UtAssert_STUB_COUNT(CF_CList_Traverse, 2);
UT_ResetState(UT_KEY(CF_CList_Traverse));
- UT_SetHookFunction(UT_KEY(CF_CList_Traverse), Ut_Hook_TickTransactions_UpdateCount, NULL);
+ UT_SetHookFunction(UT_KEY(CF_CList_Traverse), Ut_Hook_TickTransactions_UpdateCount, chan);
chan->tx_blocked = false;
UtAssert_VOIDCALL(CF_CFDP_TickTransactions(chan));
UtAssert_STUB_COUNT(CF_CList_Traverse, 7); /* because NAK is repeated several times */
@@ -1299,6 +1313,7 @@ void Test_CF_CFDP_CycleEngine(void)
/* Test case for:
* void CF_CFDP_CycleEngine(void)
*/
+ CF_Engine_t *engine_ptr = CF_GetEngine();
CF_Channel_t *chan;
/* nominal with engine disabled, noop */
@@ -1306,11 +1321,11 @@ void Test_CF_CFDP_CycleEngine(void)
UtAssert_VOIDCALL(CF_CFDP_CycleEngine());
/* enabled but frozen */
- CF_AppData.engine.enabled = true;
- CF_AppData.hk.Payload.channel_hk[UT_CFDP_CHANNEL].frozen = 1;
+ engine_ptr->enabled = true;
+ chan->stat.frozen = 1;
UtAssert_VOIDCALL(CF_CFDP_CycleEngine());
- CF_AppData.hk.Payload.channel_hk[UT_CFDP_CHANNEL].frozen = 0;
+ chan->stat.frozen = 0;
UtAssert_VOIDCALL(CF_CFDP_CycleEngine());
}
@@ -1322,12 +1337,12 @@ void Test_CF_CFDP_FinishTransaction(void)
CF_Transaction_t *txn;
CF_History_t *history;
- CF_Channel_t *chan;
+ CF_Channel_t *chan = UT_CFDP_CHANNEL_PTR;
CF_Playback_t pb;
memset(&pb, 0, sizeof(pb));
- CF_AppData.hk.Payload.channel_hk[UT_CFDP_CHANNEL].q_size[CF_QueueIdx_TX] = 10;
+ chan->stat.q_size[CF_QueueIdx_TX] = 10;
/* Attempt to reset a transaction that has already been freed*/
UT_CFDP_SetupBasicTestState(UT_CF_Setup_RX, NULL, NULL, NULL, &txn, NULL);
@@ -1398,8 +1413,9 @@ void Test_CF_CFDP_RecycleTransaction(void)
*/
CF_Transaction_t *txn;
CF_ChunkWrapper_t cl;
+ CF_Channel_t *chan = UT_CFDP_CHANNEL_PTR;
- CF_AppData.hk.Payload.channel_hk[UT_CFDP_CHANNEL].q_size[CF_QueueIdx_TX] = 10;
+ chan->stat.q_size[CF_QueueIdx_TX] = 10;
/* nominal */
UT_CFDP_SetupBasicTestState(UT_CF_Setup_TX, NULL, NULL, NULL, &txn, NULL);
@@ -1436,7 +1452,7 @@ void Test_CF_CFDP_RecycleTransaction(void)
UtAssert_VOIDCALL(CF_CFDP_RecycleTransaction(txn));
/* Invalid - channel not known */
- UT_ResetState(UT_KEY(CF_GetChannelFromTxn));
+ txn->chan_ptr = NULL;
UtAssert_VOIDCALL(CF_CFDP_RecycleTransaction(txn));
}
@@ -1502,18 +1518,20 @@ void Test_CF_CFDP_DisableEngine(void)
/* Test case for:
* void CF_CFDP_DisableEngine(void)
*/
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+ CF_Channel_t *chan = UT_CFDP_CHANNEL_PTR;
/* nominal call */
- CF_AppData.engine.enabled = true;
+ engine_ptr->enabled = true;
UtAssert_VOIDCALL(CF_CFDP_DisableEngine());
- UtAssert_STUB_COUNT(CFE_SB_DeletePipe, CF_NUM_CHANNELS);
- UtAssert_BOOL_FALSE(CF_AppData.engine.enabled);
+ UtAssert_STUB_COUNT(CFE_SB_DeletePipe, 1);
+ UtAssert_BOOL_FALSE(engine_ptr->enabled);
/* nominal call with playbacks and polls active */
- CF_AppData.engine.channels[UT_CFDP_CHANNEL].playback[0].busy = true;
- OS_DirectoryOpen(&CF_AppData.engine.channels[UT_CFDP_CHANNEL].playback[0].dir_id, "ut");
- CF_AppData.engine.channels[UT_CFDP_CHANNEL].poll[0].pb.busy = true;
- OS_DirectoryOpen(&CF_AppData.engine.channels[UT_CFDP_CHANNEL].poll[0].pb.dir_id, "ut");
+ chan->playback[0].busy = true;
+ OS_DirectoryOpen(&chan->playback[0].dir_id, "ut");
+ chan->poll[0].pb.busy = true;
+ OS_DirectoryOpen(&chan->poll[0].pb.dir_id, "ut");
UtAssert_VOIDCALL(CF_CFDP_DisableEngine());
UtAssert_STUB_COUNT(OS_DirectoryClose, 2);
}
@@ -1581,29 +1599,30 @@ void Test_CF_CFDP_CheckAckNakCount(void)
/* Test Case For:
* bool CF_CFDP_CheckAckNakCount(CF_Transaction_t *txn, uint8 *counter)
*/
- CF_Transaction_t *txn;
- CF_ConfigTable_t *config;
- uint8 counter;
+ CF_Transaction_t *txn;
+ CF_EngineConfig_t *config;
+ CF_Channel_t *chan;
+ uint8 counter;
- UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, &txn, &config);
- config->chan[txn->chan_num].ack_limit = 10;
+ UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, &txn, &config);
+ chan->config.ack_limit = 10;
counter = 9;
UtAssert_BOOL_TRUE(CF_CFDP_CheckAckNakCount(txn, &counter));
UtAssert_UINT8_EQ(counter, 10);
- UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, &txn, &config);
- counter = config->chan[txn->chan_num].ack_limit;
+ UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, &txn, &config);
+ counter = chan->config.ack_limit;
txn->history->dir = CF_Direction_RX;
UtAssert_BOOL_FALSE(CF_CFDP_CheckAckNakCount(txn, &counter));
- UtAssert_UINT8_EQ(counter, config->chan[txn->chan_num].ack_limit);
+ UtAssert_UINT8_EQ(counter, chan->config.ack_limit);
UT_CF_AssertEventID(CF_CFDP_R_ACK_LIMIT_ERR_EID);
- UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, NULL, &txn, &config);
- counter = config->chan[txn->chan_num].ack_limit;
+ UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, &txn, &config);
+ counter = chan->config.ack_limit;
txn->history->dir = CF_Direction_TX;
UtAssert_BOOL_FALSE(CF_CFDP_CheckAckNakCount(txn, &counter));
- UtAssert_UINT8_EQ(counter, config->chan[txn->chan_num].ack_limit);
+ UtAssert_UINT8_EQ(counter, chan->config.ack_limit);
UT_CF_AssertEventID(CF_CFDP_S_ACK_LIMIT_ERR_EID);
}
@@ -1653,32 +1672,32 @@ void Test_CF_CFDP_SetupTxTransaction(void)
*/
CF_Transaction_t txn;
CF_History_t hist;
- CF_ConfigTable_t config;
CF_CListNode_t *list_ptr;
CF_ChunkWrapper_t chunks;
+ CF_Channel_t *chan = UT_CFDP_CHANNEL_PTR;
- memset(&config, 0, sizeof(config));
memset(&chunks, 0, sizeof(chunks));
- CF_AppData.config_table = &config;
- list_ptr = NULL;
+ list_ptr = NULL;
UT_SetHandlerFunction(UT_KEY(CF_GetChunkListHead), UT_AltHandler_GenericPointerReturn, &list_ptr);
memset(&txn, 0, sizeof(txn));
memset(&hist, 0, sizeof(hist));
- txn.history = &hist;
+ txn.history = &hist;
+ txn.chan_ptr = chan;
CF_CFDP_SetTxnStatus(&txn, CF_TxnStatus_PROTOCOL_ERROR);
- CF_AppData.hk.Payload.channel_hk[txn.chan_num].q_size[txn.flags.com.q_index] = 1;
+ chan->stat.q_size[txn.flags.com.q_index] = 1;
UtAssert_VOIDCALL(CF_CFDP_SetupTxTransaction(&txn));
UtAssert_STUB_COUNT(CF_CFDP_S_Init, 0);
memset(&txn, 0, sizeof(txn));
memset(&hist, 0, sizeof(hist));
- txn.chunks = &chunks;
- txn.history = &hist;
+ txn.chunks = &chunks;
+ txn.history = &hist;
+ txn.chan_ptr = chan;
- CF_AppData.hk.Payload.channel_hk[txn.chan_num].q_size[txn.flags.com.q_index] = 1;
+ chan->stat.q_size[txn.flags.com.q_index] = 1;
UtAssert_VOIDCALL(CF_CFDP_SetupTxTransaction(&txn));
UtAssert_STUB_COUNT(CF_CFDP_S_Init, 1);
}
@@ -1689,6 +1708,7 @@ void Test_CF_CFDP_TxnStatus(void)
/* Check that it is safe to call these routines on a wiped txn */
memset(&txn, 0, sizeof(txn));
+ txn.chan_ptr = UT_CFDP_CHANNEL_PTR;
UtAssert_VOIDCALL(CF_CFDP_GetTxnStatus(&txn));
UtAssert_VOIDCALL(CF_CFDP_SetTxnStatus(&txn, CF_TxnStatus_ACK_LIMIT_NO_EOF));
}
@@ -1702,46 +1722,47 @@ void Test_CF_CFDP_SetupRxTransaction(void)
CF_Logical_PduBuffer_t ph;
CF_History_t hist;
CF_ChunkWrapper_t chunks;
+ CF_Channel_t *chan = UT_CFDP_CHANNEL_PTR;
- CF_ConfigTable_t config;
- CF_CListNode_t *list_ptr;
+ CF_CListNode_t *list_ptr;
- memset(&config, 0, sizeof(config));
memset(&ph, 0, sizeof(ph));
memset(&chunks, 0, sizeof(chunks));
- CF_AppData.config_table = &config;
- list_ptr = NULL;
+ list_ptr = NULL;
UT_SetHandlerFunction(UT_KEY(CF_GetChunkListHead), UT_AltHandler_GenericPointerReturn, &list_ptr);
memset(&txn, 0, sizeof(txn));
memset(&hist, 0, sizeof(hist));
- txn.history = &hist;
+ txn.history = &hist;
+ txn.chan_ptr = chan;
CF_CFDP_SetTxnStatus(&txn, CF_TxnStatus_PROTOCOL_ERROR);
- CF_AppData.hk.Payload.channel_hk[txn.chan_num].q_size[txn.flags.com.q_index] = 1;
+ chan->stat.q_size[txn.flags.com.q_index] = 1;
UtAssert_VOIDCALL(CF_CFDP_SetupRxTransaction(&txn, &ph));
UtAssert_NULL(txn.chunks);
UtAssert_UINT32_EQ(txn.state, CF_TxnState_HOLD);
memset(&txn, 0, sizeof(txn));
memset(&hist, 0, sizeof(hist));
- txn.history = &hist;
- txn.chunks = &chunks;
+ txn.history = &hist;
+ txn.chunks = &chunks;
+ txn.chan_ptr = chan;
- CF_AppData.hk.Payload.channel_hk[txn.chan_num].q_size[txn.flags.com.q_index] = 1;
- ph.pdu_header.txm_mode = 1;
+ chan->stat.q_size[txn.flags.com.q_index] = 1;
+ ph.pdu_header.txm_mode = 1;
UtAssert_VOIDCALL(CF_CFDP_SetupRxTransaction(&txn, &ph));
UtAssert_UINT32_EQ(txn.state, CF_TxnState_R1);
UtAssert_STUB_COUNT(CF_CFDP_R_Init, 1);
memset(&txn, 0, sizeof(txn));
memset(&hist, 0, sizeof(hist));
- txn.history = &hist;
- txn.chunks = &chunks;
+ txn.history = &hist;
+ txn.chunks = &chunks;
+ txn.chan_ptr = chan;
- CF_AppData.hk.Payload.channel_hk[txn.chan_num].q_size[txn.flags.com.q_index] = 1;
- ph.pdu_header.txm_mode = 0;
+ chan->stat.q_size[txn.flags.com.q_index] = 1;
+ ph.pdu_header.txm_mode = 0;
UtAssert_VOIDCALL(CF_CFDP_SetupRxTransaction(&txn, &ph));
UtAssert_UINT32_EQ(txn.state, CF_TxnState_R2);
UtAssert_STUB_COUNT(CF_CFDP_R_Init, 2);
@@ -1755,7 +1776,7 @@ void Test_CF_CFDP_ReceivePdu(void)
CF_Channel_t *chan;
CF_Logical_PduBuffer_t *ph;
CF_Transaction_t *txn;
- CF_ConfigTable_t *config;
+ CF_EngineConfig_t *config;
CF_ChunkWrapper_t chunk_wrap;
memset(&chunk_wrap, 0, sizeof(chunk_wrap));
@@ -1823,7 +1844,7 @@ void Test_CF_CFDP_StartFirstPending(void)
chan->qs[CF_QueueIdx_PEND] = &txn->cl_node;
/* this dequeues */
- CF_AppData.hk.Payload.channel_hk[txn->chan_num].q_size[txn->flags.com.q_index] = 1;
+ chan->stat.q_size[txn->flags.com.q_index] = 1;
UtAssert_BOOL_TRUE(CF_CFDP_StartFirstPending(chan));
}
@@ -1838,28 +1859,25 @@ void Test_CF_CFDP_CompleteTick(void)
CF_Channel_t *chan;
UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, &txn, NULL);
- UT_SetHandlerFunction(UT_KEY(CF_GetChannelFromTxn), UT_AltHandler_GenericPointerReturn, chan);
chan->tx_blocked = true;
chan->tick_resume = NULL;
UtAssert_VOIDCALL(CF_CFDP_CompleteTick(txn));
UtAssert_ADDRESS_EQ(chan->tick_resume, txn);
UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, &txn, NULL);
- UT_SetHandlerFunction(UT_KEY(CF_GetChannelFromTxn), UT_AltHandler_GenericPointerReturn, chan);
chan->tx_blocked = true;
chan->tick_resume = &txn2;
UtAssert_VOIDCALL(CF_CFDP_CompleteTick(txn));
UtAssert_ADDRESS_EQ(chan->tick_resume, &txn2);
UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, &txn, NULL);
- UT_SetHandlerFunction(UT_KEY(CF_GetChannelFromTxn), UT_AltHandler_GenericPointerReturn, chan);
chan->tx_blocked = false;
chan->tick_resume = NULL;
UtAssert_VOIDCALL(CF_CFDP_CompleteTick(txn));
UtAssert_NULL(chan->tick_resume);
UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, &chan, NULL, &txn, NULL);
- UT_ResetState(UT_KEY(CF_GetChannelFromTxn));
+ txn->chan_ptr = NULL;
chan->tx_blocked = false;
chan->tick_resume = NULL;
UtAssert_VOIDCALL(CF_CFDP_CompleteTick(txn));
@@ -1871,18 +1889,16 @@ void Test_CF_CFDP_GetTempName(void)
/* Test Case For:
* void CF_CFDP_GetTempName(const CF_History_t *hist, char *FileNameBuf, size_t FileNameSize)
*/
- CF_History_t hist;
- CF_ConfigTable_t config;
- char FileNameBuf[12];
+ CF_History_t *hist;
+ CF_EngineConfig_t *config;
+ char FileNameBuf[12];
- memset(&hist, 0, sizeof(hist));
- memset(&config, 0, sizeof(config));
+ UT_CFDP_SetupBasicTestState(UT_CF_Setup_NONE, NULL, NULL, &hist, NULL, &config);
- CF_AppData.config_table = &config;
- strcpy(config.tmp_dir, "ut");
- hist.src_eid = 3;
- hist.seq_num = 4;
- UtAssert_VOIDCALL(CF_CFDP_GetTempName(&hist, FileNameBuf, sizeof(FileNameBuf)));
+ strcpy(config->tmp_dir, "ut");
+ hist->src_eid = 3;
+ hist->seq_num = 4;
+ UtAssert_VOIDCALL(CF_CFDP_GetTempName(hist, FileNameBuf, sizeof(FileNameBuf)));
UtAssert_STRINGBUF_EQ(FileNameBuf, sizeof(FileNameBuf), "ut/3_4.tmp", -1);
}
diff --git a/unit-test/cf_cmd_tests.c b/unit-test/cf_cmd_tests.c
index fc06f8e2..60b49486 100644
--- a/unit-test/cf_cmd_tests.c
+++ b/unit-test/cf_cmd_tests.c
@@ -50,14 +50,8 @@ CF_EntityId_t Any_CF_EntityId_t(void)
return (CF_EntityId_t)Any_uint8();
}
-/* uint8 used for Any_cf_channel likely there will never be that many channels */
-uint8 Any_cf_channel(void)
-{
- return Any_uint8_LessThan(CF_NUM_CHANNELS);
-}
-
/* uint8 used for Any_cf_polldir likely there will never be that many polldirs */
-uint8 Any_cf_polldir(void)
+CF_PollIdxSelect_t Any_cf_polldir(void)
{
return Any_uint8_LessThan(CF_MAX_POLLING_DIR_PER_CHAN);
}
@@ -68,7 +62,7 @@ uint8 Any_bool_arg_t_barg(void)
return AnyCoinFlip();
}
-uint8 Any_queue_Except_q_pend(void)
+CF_QueueSelect_Enum_t Any_queue_Except_q_pend(void)
{
/* q_pend = 0, q_active = 1, q_history = 2, q_all = 3 */
return (rand() % 2) + 1; /* 0-2, + 1 -> 1-3 */
@@ -91,7 +85,7 @@ typedef struct
void *context;
} CF_TsnChanAction_fn_t_context_t;
-CF_ChanAction_Status_t Chan_action_fn_t(uint8 chan_num, void *context)
+CF_ChanAction_Status_t Chan_action_fn_t(CF_Channel_t *chan_ptr, void *context)
{
/* This one does not need to save its context, just call default so count works */
return UT_DEFAULT_IMPL(Chan_action_fn_t);
@@ -125,7 +119,7 @@ void Test_CF_NoopCmd_SendNoopEventAndAcceptCommand(void)
uint16 initial_hk_cmd_counter = Any_uint16();
memset(&utbuf, 0, sizeof(utbuf));
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_NoopCmd(&utbuf);
@@ -134,7 +128,7 @@ void Test_CF_NoopCmd_SendNoopEventAndAcceptCommand(void)
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UT_CF_AssertEventID(CF_NOOP_INF_EID);
/* Assert to show counter incremented */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
}
/*******************************************************************************
@@ -146,15 +140,15 @@ void Test_CF_NoopCmd_SendNoopEventAndAcceptCommand(void)
void Test_CF_ResetCountersCmd_tests_WhenCommandByteIsEqTo_5_SendEventAndRejectCommand(void)
{
/* Arrange */
- CF_ResetCountersCmd_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf.Payload;
- uint16 initial_hk_err_counter = Any_uint16();
+ CF_ResetCountersCmd_t utbuf;
+ CF_ResetCountersCmd_Payload_t *data = &utbuf.Payload;
+ uint16 initial_hk_err_counter = Any_uint16();
memset(&utbuf, 0, sizeof(utbuf));
- data->byte[0] = 5; /* 5 is size of 'names' */
+ data->ResetType = 5; /* 5 is size of 'names' */
- CF_AppData.hk.Payload.counters.err = initial_hk_err_counter;
+ CF_AppData.counters.err = initial_hk_err_counter;
/* Act */
CF_ResetCountersCmd(&utbuf);
@@ -163,21 +157,21 @@ void Test_CF_ResetCountersCmd_tests_WhenCommandByteIsEqTo_5_SendEventAndRejectCo
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UT_CF_AssertEventID(CF_CMD_RESET_INVALID_ERR_EID);
/* Assert incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
}
void Test_CF_ResetCountersCmd_tests_WhenCommandByteIsGreaterThan_5_SendEventAndRejectCommand(void)
{
/* Arrange */
- CF_ResetCountersCmd_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf.Payload;
- uint16 initial_hk_err_counter = Any_uint16();
+ CF_ResetCountersCmd_t utbuf;
+ CF_ResetCountersCmd_Payload_t *data = &utbuf.Payload;
+ uint16 initial_hk_err_counter = Any_uint16();
memset(&utbuf, 0, sizeof(utbuf));
- data->byte[0] = Any_uint8_GreaterThan(5); /* 5 is size of 'names' */
+ data->ResetType = Any_uint8_GreaterThan(5); /* 5 is size of 'names' */
- CF_AppData.hk.Payload.counters.err = initial_hk_err_counter;
+ CF_AppData.counters.err = initial_hk_err_counter;
/* Act */
CF_ResetCountersCmd(&utbuf);
@@ -186,20 +180,20 @@ void Test_CF_ResetCountersCmd_tests_WhenCommandByteIsGreaterThan_5_SendEventAndR
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UT_CF_AssertEventID(CF_CMD_RESET_INVALID_ERR_EID);
/* Assert incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
}
void Test_CF_ResetCountersCmd_tests_WhenCommandByteIs_command_AndResetHkCmdAndErrCountSendEvent(void)
{
/* Arrange */
- CF_ResetCountersCmd_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf.Payload;
+ CF_ResetCountersCmd_t utbuf;
+ CF_ResetCountersCmd_Payload_t *data = &utbuf.Payload;
memset(&utbuf, 0, sizeof(utbuf));
- data->byte[0] = CF_Reset_command;
- CF_AppData.hk.Payload.counters.cmd = Any_uint16_Except(0);
- CF_AppData.hk.Payload.counters.err = Any_uint16_Except(0);
+ data->ResetType = CF_Reset_command;
+ CF_AppData.counters.cmd = Any_uint16_Except(0);
+ CF_AppData.counters.err = Any_uint16_Except(0);
/* Act */
CF_ResetCountersCmd(&utbuf);
@@ -207,240 +201,202 @@ void Test_CF_ResetCountersCmd_tests_WhenCommandByteIs_command_AndResetHkCmdAndEr
/* Assert */
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UT_CF_AssertEventID(CF_RESET_INF_EID);
- UtAssert_ZERO(CF_AppData.hk.Payload.counters.cmd);
- UtAssert_ZERO(CF_AppData.hk.Payload.counters.err);
+ UtAssert_ZERO(CF_AppData.counters.cmd);
+ UtAssert_ZERO(CF_AppData.counters.err);
}
void Test_CF_ResetCountersCmd_tests_WhenCommandByteIs_fault_ResetAllHkFaultCountSendEventAndAcceptCommand(void)
{
/* Arrange */
- CF_ResetCountersCmd_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf.Payload;
- int i = 0;
- uint16 initial_hk_cmd_counter = Any_uint16();
+ CF_ResetCountersCmd_t utbuf;
+ CF_ResetCountersCmd_Payload_t *data = &utbuf.Payload;
+ uint16 initial_hk_cmd_counter = Any_uint16();
+ CF_Channel_t *chan = UT_CFDP_CHANNEL_PTR;
memset(&utbuf, 0, sizeof(utbuf));
- data->byte[0] = CF_Reset_fault;
+ data->ResetType = CF_Reset_fault;
- for (i = 0; i < CF_NUM_CHANNELS; ++i)
- {
- CF_AppData.hk.Payload.channel_hk[i].counters.fault.file_open = Any_uint16_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.fault.file_read = Any_uint16_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.fault.file_seek = Any_uint16_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.fault.file_write = Any_uint16_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.fault.file_rename = Any_uint16_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.fault.directory_read = Any_uint16_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.fault.crc_mismatch = Any_uint16_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.fault.file_size_mismatch = Any_uint16_Except(0);
- 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);
- }
+ chan->stat.counters.fault.file_open = Any_uint16_Except(0);
+ chan->stat.counters.fault.file_read = Any_uint16_Except(0);
+ chan->stat.counters.fault.file_seek = Any_uint16_Except(0);
+ chan->stat.counters.fault.file_write = Any_uint16_Except(0);
+ chan->stat.counters.fault.file_rename = Any_uint16_Except(0);
+ chan->stat.counters.fault.directory_read = Any_uint16_Except(0);
+ chan->stat.counters.fault.crc_mismatch = Any_uint16_Except(0);
+ chan->stat.counters.fault.file_size_mismatch = Any_uint16_Except(0);
+ chan->stat.counters.fault.nak_limit = Any_uint16_Except(0);
+ chan->stat.counters.fault.ack_limit = Any_uint16_Except(0);
+ chan->stat.counters.fault.inactivity_timer = Any_uint16_Except(0);
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_ResetCountersCmd(&utbuf);
/* Assert */
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
+ UtAssert_STUB_COUNT(CF_ForEachChannel, 1);
UT_CF_AssertEventID(CF_RESET_INF_EID);
- for (i = 0; i < CF_NUM_CHANNELS; ++i)
- {
- UtAssert_ZERO(CF_AppData.hk.Payload.channel_hk[i].counters.fault.file_open);
- UtAssert_ZERO(CF_AppData.hk.Payload.channel_hk[i].counters.fault.file_read);
- UtAssert_ZERO(CF_AppData.hk.Payload.channel_hk[i].counters.fault.file_seek);
- UtAssert_ZERO(CF_AppData.hk.Payload.channel_hk[i].counters.fault.file_write);
- UtAssert_ZERO(CF_AppData.hk.Payload.channel_hk[i].counters.fault.file_rename);
- UtAssert_ZERO(CF_AppData.hk.Payload.channel_hk[i].counters.fault.directory_read);
- UtAssert_ZERO(CF_AppData.hk.Payload.channel_hk[i].counters.fault.crc_mismatch);
- UtAssert_ZERO(CF_AppData.hk.Payload.channel_hk[i].counters.fault.file_size_mismatch);
- 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_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);
- }
+ UtAssert_ZERO(chan->stat.counters.fault.file_open);
+ UtAssert_ZERO(chan->stat.counters.fault.file_read);
+ UtAssert_ZERO(chan->stat.counters.fault.file_seek);
+ UtAssert_ZERO(chan->stat.counters.fault.file_write);
+ UtAssert_ZERO(chan->stat.counters.fault.file_rename);
+ UtAssert_ZERO(chan->stat.counters.fault.directory_read);
+ UtAssert_ZERO(chan->stat.counters.fault.crc_mismatch);
+ UtAssert_ZERO(chan->stat.counters.fault.file_size_mismatch);
+ UtAssert_ZERO(chan->stat.counters.fault.nak_limit);
+ UtAssert_ZERO(chan->stat.counters.fault.ack_limit);
+ UtAssert_ZERO(chan->stat.counters.fault.inactivity_timer);
+ UtAssert_MemCmpValue(&chan->stat.counters.fault,
+ 0,
+ sizeof(&chan->stat.counters.fault),
+ "fault channel was completely cleared to 0");
/* Assert to show counter incremented */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
}
void Test_CF_ResetCountersCmd_tests_WhenCommandByteIs_up_AndResetAllHkRecvCountSendEventAndAcceptCommand(void)
{
/* Arrange */
- CF_ResetCountersCmd_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf.Payload;
- int i = 0;
- uint16 initial_hk_cmd_counter = Any_uint16();
+ CF_ResetCountersCmd_t utbuf;
+ CF_ResetCountersCmd_Payload_t *data = &utbuf.Payload;
+ uint16 initial_hk_cmd_counter = Any_uint16();
+ CF_Channel_t *chan = UT_CFDP_CHANNEL_PTR;
memset(&utbuf, 0, sizeof(utbuf));
- data->byte[0] = CF_Reset_up;
+ data->ResetType = CF_Reset_up;
- for (i = 0; i < CF_NUM_CHANNELS; ++i)
- {
- CF_AppData.hk.Payload.channel_hk[i].counters.recv.file_data_bytes = Any_uint64_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.recv.pdu = Any_uint32_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.recv.error = Any_uint32_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.recv.spurious = Any_uint16_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.recv.dropped = Any_uint16_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.recv.nak_segment_requests = Any_uint32_Except(0);
- }
+ chan->stat.counters.recv.file_data_bytes = Any_uint64_Except(0);
+ chan->stat.counters.recv.pdu = Any_uint32_Except(0);
+ chan->stat.counters.recv.error = Any_uint32_Except(0);
+ chan->stat.counters.recv.spurious = Any_uint16_Except(0);
+ chan->stat.counters.recv.dropped = Any_uint16_Except(0);
+ chan->stat.counters.recv.nak_segment_requests = Any_uint32_Except(0);
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_ResetCountersCmd(&utbuf);
/* Assert */
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
+ UtAssert_STUB_COUNT(CF_ForEachChannel, 1);
UT_CF_AssertEventID(CF_RESET_INF_EID);
- for (i = 0; i < CF_NUM_CHANNELS; ++i)
- {
- UtAssert_ZERO(CF_AppData.hk.Payload.channel_hk[i].counters.recv.file_data_bytes);
- UtAssert_ZERO(CF_AppData.hk.Payload.channel_hk[i].counters.recv.pdu);
- UtAssert_ZERO(CF_AppData.hk.Payload.channel_hk[i].counters.recv.error);
- UtAssert_ZERO(CF_AppData.hk.Payload.channel_hk[i].counters.recv.spurious);
- UtAssert_ZERO(CF_AppData.hk.Payload.channel_hk[i].counters.recv.pdu);
- UtAssert_ZERO(CF_AppData.hk.Payload.channel_hk[i].counters.recv.nak_segment_requests);
- UtAssert_MemCmpValue(&CF_AppData.hk.Payload.channel_hk[i].counters.recv,
- 0,
- sizeof(&CF_AppData.hk.Payload.channel_hk[i].counters.recv),
- "recv channel %d was completely cleared to 0",
- i);
- }
+ UtAssert_ZERO(chan->stat.counters.recv.file_data_bytes);
+ UtAssert_ZERO(chan->stat.counters.recv.pdu);
+ UtAssert_ZERO(chan->stat.counters.recv.error);
+ UtAssert_ZERO(chan->stat.counters.recv.spurious);
+ UtAssert_ZERO(chan->stat.counters.recv.pdu);
+ UtAssert_ZERO(chan->stat.counters.recv.nak_segment_requests);
+ UtAssert_MemCmpValue(&chan->stat.counters.recv,
+ 0,
+ sizeof(&chan->stat.counters.recv),
+ "recv channel was completely cleared to 0");
/* Assert to show counter incremented */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
}
void Test_CF_ResetCountersCmd_tests_SWhenCommandByteIs_down_AndResetAllHkSentCountendEventAcceptCommand(void)
{
/* Arrange */
- CF_ResetCountersCmd_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf.Payload;
- uint8 i = 0;
- uint16 initial_hk_cmd_counter = Any_uint16();
+ CF_ResetCountersCmd_t utbuf;
+ CF_ResetCountersCmd_Payload_t *data = &utbuf.Payload;
+ uint16 initial_hk_cmd_counter = Any_uint16();
+ CF_Channel_t *chan = UT_CFDP_CHANNEL_PTR;
memset(&utbuf, 0, sizeof(utbuf));
- data->byte[0] = CF_Reset_down;
+ data->ResetType = CF_Reset_down;
- for (i = 0; i < CF_NUM_CHANNELS; ++i)
- {
- CF_AppData.hk.Payload.channel_hk[i].counters.sent.file_data_bytes = Any_uint64_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.sent.nak_segment_requests = Any_uint32_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.sent.pdu = Any_uint32_Except(0);
- }
+ chan->stat.counters.sent.file_data_bytes = Any_uint64_Except(0);
+ chan->stat.counters.sent.nak_segment_requests = Any_uint32_Except(0);
+ chan->stat.counters.sent.pdu = Any_uint32_Except(0);
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_ResetCountersCmd(&utbuf);
/* Assert */
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
+ UtAssert_STUB_COUNT(CF_ForEachChannel, 1);
UT_CF_AssertEventID(CF_RESET_INF_EID);
- for (i = 0; i < CF_NUM_CHANNELS; ++i)
- {
- UtAssert_ZERO(CF_AppData.hk.Payload.channel_hk[i].counters.sent.file_data_bytes);
- UtAssert_ZERO(CF_AppData.hk.Payload.channel_hk[i].counters.sent.nak_segment_requests);
- UtAssert_ZERO(CF_AppData.hk.Payload.channel_hk[i].counters.sent.pdu);
- UtAssert_MemCmpValue(&CF_AppData.hk.Payload.channel_hk[i].counters.sent,
- 0,
- sizeof(&CF_AppData.hk.Payload.channel_hk[i].counters.sent),
- "sent channel %d was completely cleared to 0",
- i);
- }
+ UtAssert_ZERO(chan->stat.counters.sent.file_data_bytes);
+ UtAssert_ZERO(chan->stat.counters.sent.nak_segment_requests);
+ UtAssert_ZERO(chan->stat.counters.sent.pdu);
+ UtAssert_MemCmpValue(&chan->stat.counters.sent,
+ 0,
+ sizeof(&chan->stat.counters.sent),
+ "sent channel was completely cleared to 0");
/* Assert to show counter incremented */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
}
void Test_CF_ResetCountersCmd_tests_WhenCommandByteIs_all_AndResetAllMemValuesSendEvent(void)
{
/* Arrange */
- CF_ResetCountersCmd_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf.Payload;
- int i = 0;
+ CF_ResetCountersCmd_t utbuf;
+ CF_ResetCountersCmd_Payload_t *data = &utbuf.Payload;
+ CF_Channel_t *chan = UT_CFDP_CHANNEL_PTR;
memset(&utbuf, 0, sizeof(utbuf));
- data->byte[0] = CF_Reset_all;
-
- CF_AppData.hk.Payload.counters.cmd = Any_uint16_Except(0);
- CF_AppData.hk.Payload.counters.err = Any_uint16_Except(0);
-
- for (i = 0; i < CF_NUM_CHANNELS; ++i)
- {
- CF_AppData.hk.Payload.channel_hk[i].counters.fault.file_open = Any_uint16_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.fault.file_read = Any_uint16_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.fault.file_seek = Any_uint16_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.fault.file_write = Any_uint16_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.fault.file_rename = Any_uint16_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.fault.directory_read = Any_uint16_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.fault.crc_mismatch = Any_uint16_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.fault.file_size_mismatch = Any_uint16_Except(0);
- 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);
- }
-
- for (i = 0; i < CF_NUM_CHANNELS; ++i)
- {
- CF_AppData.hk.Payload.channel_hk[i].counters.recv.file_data_bytes = Any_uint64_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.recv.pdu = Any_uint32_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.recv.error = Any_uint32_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.recv.spurious = Any_uint16_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.recv.dropped = Any_uint16_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.recv.nak_segment_requests = Any_uint32_Except(0);
- }
-
- for (i = 0; i < CF_NUM_CHANNELS; ++i)
- {
- CF_AppData.hk.Payload.channel_hk[i].counters.sent.file_data_bytes = Any_uint64_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.sent.nak_segment_requests = Any_uint32_Except(0);
- CF_AppData.hk.Payload.channel_hk[i].counters.sent.pdu = Any_uint32_Except(0);
- }
+ data->ResetType = CF_Reset_all;
+
+ CF_AppData.counters.cmd = Any_uint16_Except(0);
+ CF_AppData.counters.err = Any_uint16_Except(0);
+
+ chan->stat.counters.fault.file_open = Any_uint16_Except(0);
+ chan->stat.counters.fault.file_read = Any_uint16_Except(0);
+ chan->stat.counters.fault.file_seek = Any_uint16_Except(0);
+ chan->stat.counters.fault.file_write = Any_uint16_Except(0);
+ chan->stat.counters.fault.file_rename = Any_uint16_Except(0);
+ chan->stat.counters.fault.directory_read = Any_uint16_Except(0);
+ chan->stat.counters.fault.crc_mismatch = Any_uint16_Except(0);
+ chan->stat.counters.fault.file_size_mismatch = Any_uint16_Except(0);
+ chan->stat.counters.fault.nak_limit = Any_uint16_Except(0);
+ chan->stat.counters.fault.ack_limit = Any_uint16_Except(0);
+ chan->stat.counters.fault.inactivity_timer = Any_uint16_Except(0);
+
+ chan->stat.counters.recv.file_data_bytes = Any_uint64_Except(0);
+ chan->stat.counters.recv.pdu = Any_uint32_Except(0);
+ chan->stat.counters.recv.error = Any_uint32_Except(0);
+ chan->stat.counters.recv.spurious = Any_uint16_Except(0);
+ chan->stat.counters.recv.dropped = Any_uint16_Except(0);
+ chan->stat.counters.recv.nak_segment_requests = Any_uint32_Except(0);
+
+ chan->stat.counters.sent.file_data_bytes = Any_uint64_Except(0);
+ chan->stat.counters.sent.nak_segment_requests = Any_uint32_Except(0);
+ chan->stat.counters.sent.pdu = Any_uint32_Except(0);
/* Act */
CF_ResetCountersCmd(&utbuf);
/* Assert */
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
+ UtAssert_STUB_COUNT(CF_ForEachChannel, 3);
UT_CF_AssertEventID(CF_RESET_INF_EID);
- UtAssert_ZERO(CF_AppData.hk.Payload.counters.cmd);
- UtAssert_ZERO(CF_AppData.hk.Payload.counters.err);
- for (i = 0; i < CF_NUM_CHANNELS; ++i)
- {
- 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);
- }
- for (i = 0; i < CF_NUM_CHANNELS; ++i)
- {
- UtAssert_MemCmpValue(&CF_AppData.hk.Payload.channel_hk[i].counters.recv,
- 0,
- sizeof(&CF_AppData.hk.Payload.channel_hk[i].counters.recv),
- "recv channel %d was completely cleared to 0",
- i);
- }
- for (i = 0; i < CF_NUM_CHANNELS; ++i)
- {
- UtAssert_MemCmpValue(&CF_AppData.hk.Payload.channel_hk[i].counters.sent,
- 0,
- sizeof(&CF_AppData.hk.Payload.channel_hk[i].counters.sent),
- "sent channel %d was completely cleared to 0",
- i);
- }
+ UtAssert_ZERO(CF_AppData.counters.cmd);
+ UtAssert_ZERO(CF_AppData.counters.err);
+ UtAssert_MemCmpValue(&chan->stat.counters.fault,
+ 0,
+ sizeof(&chan->stat.counters.fault),
+ "fault channel was completely cleared to 0");
+ UtAssert_MemCmpValue(&chan->stat.counters.recv,
+ 0,
+ sizeof(&chan->stat.counters.recv),
+ "recv channel was completely cleared to 0");
+ UtAssert_MemCmpValue(&chan->stat.counters.sent,
+ 0,
+ sizeof(&chan->stat.counters.sent),
+ "sent channel was completely cleared to 0");
}
/*******************************************************************************
@@ -457,21 +413,21 @@ void Test_CF_TxFileCmd(void)
CF_TxFileCmd_t utbuf;
CF_TxFile_Payload_t *msg = &utbuf.Payload;
- memset(&CF_AppData.hk.Payload.counters, 0, sizeof(CF_AppData.hk.Payload.counters));
+ memset(&CF_AppData.counters, 0, sizeof(CF_AppData.counters));
/* nominal, all zero should pass checks, just calls CF_CFDP_TxFile */
memset(msg, 0, sizeof(*msg));
- msg->cfdp_class = CF_CFDP_CLASS_1;
+ msg->cfdp_class = CF_CFDP_Class_1;
UtAssert_VOIDCALL(CF_TxFileCmd(&utbuf));
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, 1);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, 1);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UT_CF_AssertEventID(CF_CMD_TX_FILE_INF_EID);
UT_CF_ResetEventCapture();
memset(msg, 0, sizeof(*msg));
- msg->cfdp_class = CF_CFDP_CLASS_2;
+ msg->cfdp_class = CF_CFDP_Class_2;
UtAssert_VOIDCALL(CF_TxFileCmd(&utbuf));
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, 2);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, 2);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UT_CF_AssertEventID(CF_CMD_TX_FILE_INF_EID);
@@ -481,14 +437,14 @@ void Test_CF_TxFileCmd(void)
msg->cfdp_class = 10;
UtAssert_VOIDCALL(CF_TxFileCmd(&utbuf));
UT_CF_AssertEventID(CF_CMD_BAD_PARAM_ERR_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 1);
UT_CF_ResetEventCapture();
memset(msg, 0, sizeof(*msg));
msg->cfdp_class = -10;
UtAssert_VOIDCALL(CF_TxFileCmd(&utbuf));
UT_CF_AssertEventID(CF_CMD_BAD_PARAM_ERR_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 2);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 2);
/* out of range arguments: bad channel */
UT_CF_ResetEventCapture();
@@ -496,7 +452,7 @@ void Test_CF_TxFileCmd(void)
msg->chan_num = CF_NUM_CHANNELS;
UtAssert_VOIDCALL(CF_TxFileCmd(&utbuf));
UT_CF_AssertEventID(CF_CMD_BAD_PARAM_ERR_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 3);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 3);
/* out of range arguments: bad keep */
UT_CF_ResetEventCapture();
@@ -504,7 +460,7 @@ void Test_CF_TxFileCmd(void)
msg->keep = 15;
UtAssert_VOIDCALL(CF_TxFileCmd(&utbuf));
UT_CF_AssertEventID(CF_CMD_BAD_PARAM_ERR_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 4);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 4);
/* CF_CFDP_TxFile fails*/
UT_CF_ResetEventCapture();
@@ -512,7 +468,7 @@ void Test_CF_TxFileCmd(void)
memset(msg, 0, sizeof(*msg));
UtAssert_VOIDCALL(CF_TxFileCmd(&utbuf));
UT_CF_AssertEventID(CF_CMD_TX_FILE_ERR_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 5);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 5);
}
/*******************************************************************************
@@ -529,32 +485,32 @@ void Test_CF_PlaybackDirCmd(void)
CF_PlaybackDirCmd_t utbuf;
CF_TxFile_Payload_t *msg = &utbuf.Payload;
- memset(&CF_AppData.hk.Payload.counters, 0, sizeof(CF_AppData.hk.Payload.counters));
+ memset(&CF_AppData.counters, 0, sizeof(CF_AppData.counters));
/* nominal, all zero should pass checks, just calls CF_CFDP_PlaybackDir */
memset(msg, 0, sizeof(*msg));
- msg->cfdp_class = CF_CFDP_CLASS_1;
+ msg->cfdp_class = CF_CFDP_Class_1;
UtAssert_VOIDCALL(CF_PlaybackDirCmd(&utbuf));
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, 1);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, 1);
memset(msg, 0, sizeof(*msg));
- msg->cfdp_class = CF_CFDP_CLASS_2;
+ msg->cfdp_class = CF_CFDP_Class_2;
UtAssert_VOIDCALL(CF_PlaybackDirCmd(&utbuf));
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, 2);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, 2);
/* out of range arguments: bad class */
memset(msg, 0, sizeof(*msg));
msg->cfdp_class = 10;
UtAssert_VOIDCALL(CF_PlaybackDirCmd(&utbuf));
UT_CF_AssertEventID(CF_CMD_BAD_PARAM_ERR_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 1);
UT_CF_ResetEventCapture();
memset(msg, 0, sizeof(*msg));
msg->cfdp_class = -10;
UtAssert_VOIDCALL(CF_PlaybackDirCmd(&utbuf));
UT_CF_AssertEventID(CF_CMD_BAD_PARAM_ERR_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 2);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 2);
/* out of range arguments: bad channel */
UT_CF_ResetEventCapture();
@@ -562,7 +518,7 @@ void Test_CF_PlaybackDirCmd(void)
msg->chan_num = CF_NUM_CHANNELS;
UtAssert_VOIDCALL(CF_PlaybackDirCmd(&utbuf));
UT_CF_AssertEventID(CF_CMD_BAD_PARAM_ERR_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 3);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 3);
/* out of range arguments: bad keep */
UT_CF_ResetEventCapture();
@@ -570,7 +526,7 @@ void Test_CF_PlaybackDirCmd(void)
msg->keep = 15;
UtAssert_VOIDCALL(CF_PlaybackDirCmd(&utbuf));
UT_CF_AssertEventID(CF_CMD_BAD_PARAM_ERR_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 4);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 4);
/* CF_CFDP_PlaybackDir fails*/
UT_CF_ResetEventCapture();
@@ -578,7 +534,7 @@ void Test_CF_PlaybackDirCmd(void)
memset(msg, 0, sizeof(*msg));
UtAssert_VOIDCALL(CF_PlaybackDirCmd(&utbuf));
UT_CF_AssertEventID(CF_CMD_PLAYBACK_DIR_ERR_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 5);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 5);
}
/*******************************************************************************
@@ -590,29 +546,22 @@ void Test_CF_PlaybackDirCmd(void)
void Test_CF_DoChanAction_CF_ALL_CHANNELS_WhenAny_fn_returns_1_Return_1(void)
{
/* Arrange */
- CF_UnionArgs_Payload_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf;
- const char *arg_errstr = "CANNOT TEST SENT TO SEND EVENT";
- CF_ChanActionFn_t arg_fn = &Chan_action_fn_t;
- int context;
- void *arg_context = &context;
- uint8 random_fn_call = Any_uint8_LessThan(CF_NUM_CHANNELS) + 1;
- CF_ChanAction_Status_t local_result;
-
- memset(&utbuf, 0, sizeof(utbuf));
+ CF_ChannelSelect_t data;
+ const char *arg_errstr = "CANNOT TEST SENT TO SEND EVENT";
+ CF_ChanActionFn_t arg_fn = &Chan_action_fn_t;
+ int context;
+ void *arg_context = &context;
+ CF_ChanAction_Status_t local_result;
- data->byte[0] = CF_ALL_CHANNELS;
+ data = CF_ALL_CHANNELS;
- UT_SetDeferredRetcode(UT_KEY(Chan_action_fn_t), random_fn_call, 1);
+ UT_SetDeferredRetcode(UT_KEY(Chan_action_fn_t), 1, 1);
/* Act */
local_result = CF_DoChanAction(data, arg_errstr, arg_fn, arg_context);
- UT_GetStubCount(UT_KEY(Chan_action_fn_t));
- UT_GetStubCount(UT_KEY(CFE_EVS_SendEvent));
-
/* Assert */
- UtAssert_STUB_COUNT(Chan_action_fn_t, CF_NUM_CHANNELS);
+ UtAssert_STUB_COUNT(Chan_action_fn_t, 1);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 0);
UtAssert_INT32_EQ(local_result, CF_ChanAction_Status_SUCCESS | 1);
}
@@ -620,28 +569,22 @@ void Test_CF_DoChanAction_CF_ALL_CHANNELS_WhenAny_fn_returns_1_Return_1(void)
void Test_CF_DoChanAction_CF_ALL_CHANNELS_WhenAll_fn_return_1_Return_1(void)
{
/* Arrange */
- CF_UnionArgs_Payload_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf;
- const char *arg_errstr = "CANNOT TEST SENT TO SEND EVENT";
- CF_ChanActionFn_t arg_fn = &Chan_action_fn_t;
- int context;
- void *arg_context = &context;
- CF_ChanAction_Status_t local_result;
-
- memset(&utbuf, 0, sizeof(utbuf));
+ CF_ChannelSelect_t data;
+ const char *arg_errstr = "CANNOT TEST SENT TO SEND EVENT";
+ CF_ChanActionFn_t arg_fn = &Chan_action_fn_t;
+ int context;
+ void *arg_context = &context;
+ CF_ChanAction_Status_t local_result;
- data->byte[0] = CF_ALL_CHANNELS;
+ data = CF_ALL_CHANNELS;
UT_SetDefaultReturnValue(UT_KEY(Chan_action_fn_t), 1);
/* Act */
local_result = CF_DoChanAction(data, arg_errstr, arg_fn, arg_context);
- UT_GetStubCount(UT_KEY(Chan_action_fn_t));
- UT_GetStubCount(UT_KEY(CFE_EVS_SendEvent));
-
/* Assert */
- UtAssert_STUB_COUNT(Chan_action_fn_t, CF_NUM_CHANNELS);
+ UtAssert_STUB_COUNT(Chan_action_fn_t, 1);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 0);
UtAssert_INT32_EQ(local_result, CF_ChanAction_Status_SUCCESS | 1);
}
@@ -649,28 +592,22 @@ void Test_CF_DoChanAction_CF_ALL_CHANNELS_WhenAll_fn_return_1_Return_1(void)
void Test_CF_DoChanAction_CF_ALL_CHANNELS_WhenNo_fn_returns_0_Return_0(void)
{
/* Arrange */
- CF_UnionArgs_Payload_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf;
- const char *arg_errstr = "CANNOT TEST SENT TO SEND EVENT";
- CF_ChanActionFn_t arg_fn = &Chan_action_fn_t;
- int context;
- void *arg_context = &context;
- CF_ChanAction_Status_t local_result;
-
- memset(&utbuf, 0, sizeof(utbuf));
+ CF_ChannelSelect_t data;
+ const char *arg_errstr = "CANNOT TEST SENT TO SEND EVENT";
+ CF_ChanActionFn_t arg_fn = &Chan_action_fn_t;
+ int context;
+ void *arg_context = &context;
+ CF_ChanAction_Status_t local_result;
- data->byte[0] = CF_ALL_CHANNELS;
+ data = CF_ALL_CHANNELS;
UT_SetDefaultReturnValue(UT_KEY(Chan_action_fn_t), 0);
/* Act */
local_result = CF_DoChanAction(data, arg_errstr, arg_fn, arg_context);
- UT_GetStubCount(UT_KEY(Chan_action_fn_t));
- UT_GetStubCount(UT_KEY(CFE_EVS_SendEvent));
-
/* Assert */
- UtAssert_STUB_COUNT(Chan_action_fn_t, CF_NUM_CHANNELS);
+ UtAssert_STUB_COUNT(Chan_action_fn_t, 1);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 0);
UtAssert_INT32_EQ(local_result, CF_ChanAction_Status_SUCCESS);
}
@@ -678,26 +615,20 @@ void Test_CF_DoChanAction_CF_ALL_CHANNELS_WhenNo_fn_returns_0_Return_0(void)
void Test_CF_DoChanAction_WhenChannel_fn_ActionReturns_1_Return_1(void)
{
/* Arrange */
- CF_UnionArgs_Payload_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf;
- const char *arg_errstr = "CANNOT TEST SENT TO SEND EVENT";
- CF_ChanActionFn_t arg_fn = &Chan_action_fn_t;
- int context;
- void *arg_context = &context;
- CF_ChanAction_Status_t local_result;
-
- memset(&utbuf, 0, sizeof(utbuf));
+ CF_ChannelSelect_t data;
+ const char *arg_errstr = "CANNOT TEST SENT TO SEND EVENT";
+ CF_ChanActionFn_t arg_fn = &Chan_action_fn_t;
+ int context;
+ void *arg_context = &context;
+ CF_ChanAction_Status_t local_result;
- data->byte[0] = Any_cf_channel();
+ data = Any_cf_chan_num();
UT_SetDefaultReturnValue(UT_KEY(Chan_action_fn_t), 1);
/* Act */
local_result = CF_DoChanAction(data, arg_errstr, arg_fn, arg_context);
- UT_GetStubCount(UT_KEY(Chan_action_fn_t));
- UT_GetStubCount(UT_KEY(CFE_EVS_SendEvent));
-
/* Assert */
UtAssert_STUB_COUNT(Chan_action_fn_t, 1);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 0);
@@ -707,26 +638,20 @@ void Test_CF_DoChanAction_WhenChannel_fn_ActionReturns_1_Return_1(void)
void Test_CF_DoChanAction_WhenChannel_fn_ActionReturns_0_Return_1(void)
{
/* Arrange */
- CF_UnionArgs_Payload_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf;
- const char *arg_errstr = "CANNOT TEST SENT TO SEND EVENT";
- CF_ChanActionFn_t arg_fn = &Chan_action_fn_t;
- int context;
- void *arg_context = &context;
- CF_ChanAction_Status_t local_result;
-
- memset(&utbuf, 0, sizeof(utbuf));
+ CF_ChannelSelect_t data;
+ const char *arg_errstr = "CANNOT TEST SENT TO SEND EVENT";
+ CF_ChanActionFn_t arg_fn = &Chan_action_fn_t;
+ int context;
+ void *arg_context = &context;
+ CF_ChanAction_Status_t local_result;
- data->byte[0] = Any_cf_channel();
+ data = Any_cf_chan_num();
UT_SetDefaultReturnValue(UT_KEY(Chan_action_fn_t), 0);
/* Act */
local_result = CF_DoChanAction(data, arg_errstr, arg_fn, arg_context);
- UT_GetStubCount(UT_KEY(Chan_action_fn_t));
- UT_GetStubCount(UT_KEY(CFE_EVS_SendEvent));
-
/* Assert */
UtAssert_STUB_COUNT(Chan_action_fn_t, 1);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 0);
@@ -736,24 +661,18 @@ void Test_CF_DoChanAction_WhenChannel_fn_ActionReturns_0_Return_1(void)
void Test_CF_DoChanAction_WhenChanNumberEq_CF_NUM_CHANNELS_Return_neg1_And_SendEvent_(void)
{
/* Arrange */
- CF_UnionArgs_Payload_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf;
- const char *arg_errstr = "CANNOT TEST SENT TO SEND EVENT";
- CF_ChanActionFn_t arg_fn = &Chan_action_fn_t;
- int context;
- void *arg_context = &context;
- CF_ChanAction_Status_t local_result;
-
- memset(&utbuf, 0, sizeof(utbuf));
+ CF_ChannelSelect_t data;
+ const char *arg_errstr = "CANNOT TEST SENT TO SEND EVENT";
+ CF_ChanActionFn_t arg_fn = &Chan_action_fn_t;
+ int context;
+ void *arg_context = &context;
+ CF_ChanAction_Status_t local_result;
- data->byte[0] = CF_NUM_CHANNELS;
+ data = CF_NUM_CHANNELS;
/* Act */
local_result = CF_DoChanAction(data, arg_errstr, arg_fn, arg_context);
- UT_GetStubCount(UT_KEY(Chan_action_fn_t));
- UT_GetStubCount(UT_KEY(CFE_EVS_SendEvent));
-
/* Assert */
UtAssert_STUB_COUNT(Chan_action_fn_t, 0);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
@@ -765,39 +684,19 @@ void Test_CF_DoChanAction_WhenChanNumberEq_CF_NUM_CHANNELS_Return_neg1_And_SendE
void Test_CF_DoChanAction_WhenBadChannelNumber_Return_neg1_And_SendEvent(void)
{
/* Arrange */
- CF_UnionArgs_Payload_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf;
- const char *arg_errstr = "CANNOT TEST SENT TO SEND EVENT";
- CF_ChanActionFn_t arg_fn = &Chan_action_fn_t;
- int context;
- void *arg_context = &context;
- CF_ChanAction_Status_t local_result;
- int catastrophe_count = 0;
-
- memset(&utbuf, 0, sizeof(utbuf));
+ CF_ChannelSelect_t data;
+ const char *arg_errstr = "CANNOT TEST SENT TO SEND EVENT";
+ CF_ChanActionFn_t arg_fn = &Chan_action_fn_t;
+ int context;
+ void *arg_context = &context;
+ CF_ChanAction_Status_t local_result;
/* force CF_ALL_CHANNELS to not be a selection possibility */
- data->byte[0] = CF_ALL_CHANNELS;
- while (data->byte[0] == CF_ALL_CHANNELS)
- {
- if (catastrophe_count == 10) /* 10 is arbitrary */
- {
- UtAssert_Message(UTASSERT_CASETYPE_ABORT,
- __FILE__,
- __LINE__,
- "CANNOT make data->byte[0] != CF_ALL_CHANNELS in 10 tries");
- }
-
- data->byte[0] = Any_uint8_GreaterThan_or_EqualTo(CF_NUM_CHANNELS);
- ++catastrophe_count;
- }
+ data = CF_ALL_CHANNELS - 2;
/* Act */
local_result = CF_DoChanAction(data, arg_errstr, arg_fn, arg_context);
- UT_GetStubCount(UT_KEY(Chan_action_fn_t));
- UT_GetStubCount(UT_KEY(CFE_EVS_SendEvent));
-
/* Assert */
UtAssert_STUB_COUNT(Chan_action_fn_t, 0);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
@@ -815,7 +714,7 @@ void Test_CF_DoChanAction_WhenBadChannelNumber_Return_neg1_And_SendEvent(void)
void Test_CF_DoFreezeThaw_Set_frozen_ToGiven_context_barg_AndReturn_0(void)
{
/* Arrange */
- uint8 arg_chan_num = Any_cf_channel();
+ CF_Channel_t *chan = UT_CFDP_CHANNEL_PTR;
CF_ChanAction_BoolArg_t context;
CF_ChanAction_Status_t local_result;
@@ -823,15 +722,15 @@ void Test_CF_DoFreezeThaw_Set_frozen_ToGiven_context_barg_AndReturn_0(void)
/* set frozen to opposite to ensure change was done - not required for test,
* but it is helpful for verification that the function did the change */
- CF_AppData.hk.Payload.channel_hk[arg_chan_num].frozen = !context.barg;
+ chan->stat.frozen = !context.barg;
/* Act */
- local_result = CF_DoFreezeThaw(arg_chan_num, &context);
+ local_result = CF_DoFreezeThaw(chan, &context);
/* Assert */
- UtAssert_True(CF_AppData.hk.Payload.channel_hk[arg_chan_num].frozen == context.barg,
+ UtAssert_True(chan->stat.frozen == context.barg,
"CF_DoFreezeThaw set frozen to %d and should be %d (context->barg))",
- CF_AppData.hk.Payload.channel_hk[arg_chan_num].frozen,
+ chan->stat.frozen,
context.barg);
UtAssert_INT32_EQ(local_result, CF_ChanAction_Status_SUCCESS);
}
@@ -845,31 +744,31 @@ void Test_CF_DoFreezeThaw_Set_frozen_ToGiven_context_barg_AndReturn_0(void)
void Test_CF_FreezeCmd_Set_frozen_To_1_AndAcceptCommand(void)
{
/* Arrange */
- CF_FreezeCmd_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf.Payload;
- uint16 initial_hk_cmd_counter = Any_uint16();
-
- /* Arrange unstubbable: CF_DoFreezeThaw via CF_DoChanAction */
- uint8 chan_num = Any_cf_channel();
+ CF_FreezeCmd_t utbuf;
+ CF_ChannelSelect_Payload_t *data = &utbuf.Payload;
+ uint16 initial_hk_cmd_counter = Any_uint16();
+ CF_Channel_t *chan;
memset(&utbuf, 0, sizeof(utbuf));
/* Arrange unstubbable: CF_DoChanAction */
- data->byte[0] = chan_num;
+ data->ChannelSelect = Any_cf_chan_num();
+ chan = CF_GetChannelPtr(data->ChannelSelect);
+ chan->stat.frozen = false;
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_FreezeCmd(&utbuf);
/* Assert */
/* Assert for CF_DoFreezeThaw */
- UtAssert_True(CF_AppData.hk.Payload.channel_hk[chan_num].frozen == 1,
+ UtAssert_True(chan->stat.frozen == 1,
"CF_DoFreezeThaw set frozen to %d and should be 1 (freeze = 1))",
- CF_AppData.hk.Payload.channel_hk[chan_num].frozen);
- UtAssert_True(CF_AppData.hk.Payload.counters.cmd == (uint16)(initial_hk_cmd_counter + 1),
- "CF_AppData.hk.Payload.counters.cmd is %d and should be 1 more than %d",
- CF_AppData.hk.Payload.counters.cmd,
+ chan->stat.frozen);
+ UtAssert_True(CF_AppData.counters.cmd == (uint16)(initial_hk_cmd_counter + 1),
+ "CF_AppData.counters.cmd is %d and should be 1 more than %d",
+ CF_AppData.counters.cmd,
initial_hk_cmd_counter);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UT_CF_AssertEventID(CF_CMD_FREEZE_INF_EID);
@@ -878,23 +777,23 @@ void Test_CF_FreezeCmd_Set_frozen_To_1_AndAcceptCommand(void)
void Test_CF_FreezeCmd_Set_frozen_To_1_AndRejectCommand(void)
{
/* Arrange */
- CF_FreezeCmd_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf.Payload;
+ CF_FreezeCmd_t utbuf;
+ CF_ChannelSelect_Payload_t *data = &utbuf.Payload;
/* Arrange unstubbable: CF_DoFreezeThaw via CF_DoChanAction */
memset(&utbuf, 0, sizeof(utbuf));
/* Arrange unstubbable: CF_DoChanAction */
- data->byte[0] = CF_NUM_CHANNELS + 1;
+ data->ChannelSelect = CF_NUM_CHANNELS + 1;
- CF_AppData.hk.Payload.counters.cmd = 0;
+ CF_AppData.counters.cmd = 0;
/* Act */
CF_FreezeCmd(&utbuf);
/* Assert */
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 1);
UT_CF_AssertEventID(CF_CMD_FREEZE_ERR_EID);
}
@@ -907,31 +806,32 @@ void Test_CF_FreezeCmd_Set_frozen_To_1_AndRejectCommand(void)
void Test_CF_ThawCmd_Set_frozen_To_0_AndAcceptCommand(void)
{
/* Arrange */
- CF_ThawCmd_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf.Payload;
- uint16 initial_hk_cmd_counter = Any_uint16();
+ CF_ThawCmd_t utbuf;
+ CF_ChannelSelect_Payload_t *data = &utbuf.Payload;
+ uint16 initial_hk_cmd_counter = Any_uint16();
/* Arrange unstubbable: CF_DoFreezeThaw via CF_DoChanAction */
- uint8 chan_num = Any_cf_channel();
+ CF_Channel_t *chan;
memset(&utbuf, 0, sizeof(utbuf));
/* Arrange unstubbable: CF_DoChanAction */
- data->byte[0] = chan_num;
+ data->ChannelSelect = Any_cf_chan_num();
+ chan = CF_GetChannelPtr(data->ChannelSelect);
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_ThawCmd(&utbuf);
/* Assert */
/* Assert for CF_DoFreezeThaw */
- UtAssert_True(CF_AppData.hk.Payload.channel_hk[chan_num].frozen == 0,
+ UtAssert_True(chan->stat.frozen == 0,
"CF_DoFreezeThaw set frozen to %d and should be 0 (thaw = 0))",
- CF_AppData.hk.Payload.channel_hk[chan_num].frozen);
- UtAssert_True(CF_AppData.hk.Payload.counters.cmd == (uint16)(initial_hk_cmd_counter + 1),
- "CF_AppData.hk.Payload.counters.cmd is %d and should be 1 more than %d",
- CF_AppData.hk.Payload.counters.cmd,
+ chan->stat.frozen);
+ UtAssert_True(CF_AppData.counters.cmd == (uint16)(initial_hk_cmd_counter + 1),
+ "CF_AppData.counters.cmd is %d and should be 1 more than %d",
+ CF_AppData.counters.cmd,
initial_hk_cmd_counter);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UT_CF_AssertEventID(CF_CMD_THAW_INF_EID);
@@ -940,23 +840,23 @@ void Test_CF_ThawCmd_Set_frozen_To_0_AndAcceptCommand(void)
void Test_CF_ThawCmd_Set_frozen_To_0_AndRejectCommand(void)
{
/* Arrange */
- CF_ThawCmd_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf.Payload;
+ CF_ThawCmd_t utbuf;
+ CF_ChannelSelect_Payload_t *data = &utbuf.Payload;
/* Arrange unstubbable: CF_DoFreezeThaw via CF_DoChanAction */
memset(&utbuf, 0, sizeof(utbuf));
/* Arrange unstubbable: CF_DoChanAction */
- data->byte[0] = CF_NUM_CHANNELS + 1;
+ data->ChannelSelect = CF_NUM_CHANNELS + 1;
- CF_AppData.hk.Payload.counters.cmd = 0;
+ CF_AppData.counters.cmd = 0;
/* Act */
CF_ThawCmd(&utbuf);
/* Assert */
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 1);
UT_CF_AssertEventID(CF_CMD_THAW_ERR_EID);
}
@@ -973,6 +873,7 @@ void Test_CF_FindTransactionBySequenceNumberAllChannels_WhenNoTransactionFoundRe
CF_EntityId_t arg_eid = Any_CF_EntityId_t();
CF_Transaction_t *local_result;
CF_Transaction_t *expected_result = NULL;
+ CF_Engine_t *engine_ptr = CF_GetEngine();
CF_FindTransactionBySequenceNumber_context_t context_CF_CFDP_FTBSN;
@@ -986,11 +887,9 @@ void Test_CF_FindTransactionBySequenceNumberAllChannels_WhenNoTransactionFoundRe
/* Act */
local_result = CF_FindTransactionBySequenceNumberAllChannels(arg_ts, arg_eid);
- UT_GetStubCount(UT_KEY(CF_FindTransactionBySequenceNumber));
-
/* Assert */
UtAssert_STUB_COUNT(CF_FindTransactionBySequenceNumber, CF_NUM_CHANNELS);
- UtAssert_ADDRESS_EQ(context_CF_CFDP_FTBSN.chan, CF_AppData.engine.channels);
+ UtAssert_ADDRESS_EQ(context_CF_CFDP_FTBSN.chan, engine_ptr->channels);
UtAssert_UINT32_EQ(context_CF_CFDP_FTBSN.transaction_sequence_number, arg_ts);
UtAssert_UINT32_EQ(context_CF_CFDP_FTBSN.src_eid, arg_eid);
UtAssert_ADDRESS_EQ(local_result, expected_result);
@@ -1025,17 +924,15 @@ void Test_CF_FindTransactionBySequenceNumberAllChannels_Return_TransactionFound(
/* Act */
local_result = CF_FindTransactionBySequenceNumberAllChannels(arg_ts, arg_eid);
- UT_GetStubCount(UT_KEY(CF_FindTransactionBySequenceNumber));
-
/* Assert */
UtAssert_STUB_COUNT(CF_FindTransactionBySequenceNumber, number_transaction_match + 1);
for (i = 0; i < number_transaction_match; ++i)
{
- UtAssert_ADDRESS_EQ(contexts_CF_CFDP_FTBSN[i].chan, CF_AppData.engine.channels + i);
+ UtAssert_ADDRESS_EQ(contexts_CF_CFDP_FTBSN[i].chan, CF_GetChannelPtr(CF_ChannelSelect_FromInt(i)));
UtAssert_UINT32_EQ(contexts_CF_CFDP_FTBSN[i].transaction_sequence_number, arg_ts);
UtAssert_UINT32_EQ(contexts_CF_CFDP_FTBSN[i].src_eid, arg_eid);
}
- UtAssert_ADDRESS_EQ(contexts_CF_CFDP_FTBSN[i].chan, CF_AppData.engine.channels + i);
+ UtAssert_ADDRESS_EQ(contexts_CF_CFDP_FTBSN[i].chan, CF_GetChannelPtr(CF_ChannelSelect_FromInt(i)));
UtAssert_UINT32_EQ(contexts_CF_CFDP_FTBSN[i].transaction_sequence_number, arg_ts);
UtAssert_UINT32_EQ(contexts_CF_CFDP_FTBSN[i].src_eid, arg_eid);
UtAssert_ADDRESS_EQ(local_result, expected_result);
@@ -1065,7 +962,7 @@ void Test_CF_TsnChanAction_SendEvent_cmd_chan_Eq_CF_COMPOUND_KEY_TransactionNotF
AnyRandomStringOfLettersOfLengthCopy(cmdstr, 10);
memcpy((char *)arg_cmdstr, &cmdstr, 10);
- arg_cmd->chan = CF_COMPOUND_KEY;
+ arg_cmd->chan_num = CF_COMPOUND_KEY;
/* Arrange unstubbable: CF_FindTransactionBySequenceNumberAllChannels */
/* set non-matching transactions */
@@ -1082,8 +979,6 @@ void Test_CF_TsnChanAction_SendEvent_cmd_chan_Eq_CF_COMPOUND_KEY_TransactionNotF
/* Act */
UtAssert_INT32_EQ(CF_TsnChanAction(arg_cmd, arg_cmdstr, arg_fn, arg_context), -1);
- UT_GetStubCount(UT_KEY(Dummy_CF_TsnChanAction_fn_t));
-
/* Assert */
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UT_CF_AssertEventID(CF_CMD_TRANS_NOT_FOUND_ERR_EID);
@@ -1108,7 +1003,7 @@ void Test_CF_TsnChanAction_cmd_chan_Eq_CF_COMPOUND_KEY_TransactionFoundRun_fn_An
AnyRandomStringOfLettersOfLengthCopy(cmdstr, 10);
memcpy((char *)arg_cmdstr, &cmdstr, 10);
- arg_cmd->chan = CF_COMPOUND_KEY;
+ arg_cmd->chan_num = CF_COMPOUND_KEY;
UT_SetDataBuffer(UT_KEY(Dummy_CF_TsnChanAction_fn_t),
&context_CF_TsnChanAction_fn_t,
@@ -1129,8 +1024,6 @@ void Test_CF_TsnChanAction_cmd_chan_Eq_CF_COMPOUND_KEY_TransactionFoundRun_fn_An
/* Act */
UtAssert_INT32_EQ(CF_TsnChanAction(arg_cmd, arg_cmdstr, arg_fn, arg_context), 1);
- UT_GetStubCount(UT_KEY(Dummy_CF_TsnChanAction_fn_t));
-
/* Assert */
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 0);
UtAssert_STUB_COUNT(Dummy_CF_TsnChanAction_fn_t, 1);
@@ -1157,7 +1050,7 @@ void Test_CF_TsnChanAction_cmd_chan_Eq_CF_ALL_CHANNELS_Return_CF_TraverseAllTran
context_CF_TATAC.forced_return = expected_result;
- arg_cmd->chan = CF_ALL_CHANNELS;
+ arg_cmd->chan_num = CF_ALL_CHANNELS;
UT_SetDataBuffer(UT_KEY(CF_TraverseAllTransactions_All_Channels),
&context_CF_TATAC,
@@ -1200,7 +1093,7 @@ void Test_CF_TsnChanAction_cmd_FailBecause_cmd_chan_IsInvalid(void)
void *arg_context = &context;
memset(&utbuf, 0, sizeof(utbuf));
- arg_cmd->chan = Any_uint8_BetweenExcludeMax(CF_NUM_CHANNELS, CF_COMPOUND_KEY);
+ arg_cmd->chan_num = CF_NUM_CHANNELS + 1;
/* Act */
UtAssert_INT32_EQ(CF_TsnChanAction(arg_cmd, arg_cmdstr, arg_fn, arg_context), -1);
@@ -1296,7 +1189,7 @@ void Test_CF_DoSuspRes(void)
CF_Transaction_Payload_t *cmd = &utbuf;
CF_ChanAction_SuspResArg_t utargs;
- memset(&CF_AppData.hk.Payload.counters, 0, sizeof(CF_AppData.hk.Payload.counters));
+ memset(&CF_AppData.counters, 0, sizeof(CF_AppData.counters));
memset(&utargs, 0, sizeof(utargs));
memset(cmd, 0, sizeof(*cmd));
@@ -1304,7 +1197,7 @@ void Test_CF_DoSuspRes(void)
/* With no setup, CF_TsnChanAction() invokes CF_TraverseAllTransactions stub, which returns 0 */
/* this should increment the reject counter because it did not match any transactions */
UtAssert_VOIDCALL(CF_DoSuspRes(cmd, 0));
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 1);
/* set up to match 1 transaction, should be accepted, but should not generate an event */
UT_CF_ResetEventCapture();
@@ -1312,7 +1205,7 @@ void Test_CF_DoSuspRes(void)
UtAssert_VOIDCALL(CF_DoSuspRes(cmd, 1));
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UT_CF_AssertEventID(CF_CMD_SUSPRES_INF_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, 1);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, 1);
/* Output the CF_ChanAction_SuspResArg_t back to the caller, to set the "same" flag to 1 */
/* this gets the case where it attempts to set to the same value, and is rejected due to that */
@@ -1324,7 +1217,7 @@ void Test_CF_DoSuspRes(void)
&utargs);
UtAssert_VOIDCALL(CF_DoSuspRes(cmd, 0));
UT_CF_AssertEventID(CF_CMD_SUSPRES_SAME_INF_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, 2);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, 2);
/* Output the CF_ChanAction_SuspResArg_t back to the caller, to set the "same" flag to 1 */
/* however this time CF_TraverseAllTransactions reports it matched multiple transactions, so it should NOT reject it
@@ -1334,7 +1227,7 @@ void Test_CF_DoSuspRes(void)
UtAssert_VOIDCALL(CF_DoSuspRes(cmd, 1));
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UT_CF_AssertEventID(CF_CMD_SUSPRES_INF_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, 3);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, 3);
}
/*******************************************************************************
@@ -1352,7 +1245,7 @@ void Test_CF_SuspendCmd_Call_CF_DoSuspRes_WithGiven_msg_And_action_1(void)
memset(&utbuf, 0, sizeof(utbuf));
/* Set to invalid channel */
- utbuf.Payload.chan = CF_NUM_CHANNELS;
+ utbuf.Payload.chan_num = CF_NUM_CHANNELS;
/* Act */
CF_SuspendCmd(&utbuf);
@@ -1363,7 +1256,7 @@ void Test_CF_SuspendCmd_Call_CF_DoSuspRes_WithGiven_msg_And_action_1(void)
UtAssert_UINT32_EQ(UT_CF_CapturedEventIDs[1], CF_CMD_SUSPRES_CHAN_ERR_EID);
/* Assert incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 1);
}
/*******************************************************************************
@@ -1380,7 +1273,7 @@ void Test_CF_ResumeCmd_Call_CF_DoSuspRes_WithGiven_msg_And_action_0(void)
memset(&utbuf, 0, sizeof(utbuf));
/* Invalid channel */
- utbuf.Payload.chan = CF_NUM_CHANNELS;
+ utbuf.Payload.chan_num = CF_NUM_CHANNELS;
/* Act */
CF_ResumeCmd(&utbuf);
@@ -1391,7 +1284,7 @@ void Test_CF_ResumeCmd_Call_CF_DoSuspRes_WithGiven_msg_And_action_0(void)
UtAssert_UINT32_EQ(UT_CF_CapturedEventIDs[1], CF_CMD_SUSPRES_CHAN_ERR_EID);
/* Assert incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 1);
}
/*******************************************************************************
@@ -1440,7 +1333,7 @@ void Test_CF_CancelCmd_Success(void)
/* Assert */
UtAssert_STUB_COUNT(CF_TraverseAllTransactions, 1);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, 1);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, 1);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UT_CF_AssertEventID(CF_CMD_CANCEL_INF_EID);
}
@@ -1459,7 +1352,7 @@ void Test_CF_CancelCmd_Failure(void)
/* Assert */
UtAssert_STUB_COUNT(CF_TraverseAllTransactions, 1);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 1);
UT_CF_AssertEventID(CF_CMD_CANCEL_CHAN_ERR_EID);
}
@@ -1503,7 +1396,7 @@ void Test_CF_AbandonCmd_Success(void)
/* Assert */
UtAssert_STUB_COUNT(CF_TraverseAllTransactions, 1);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, 1);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, 1);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UT_CF_AssertEventID(CF_CMD_ABANDON_INF_EID);
}
@@ -1522,7 +1415,7 @@ void Test_CF_AbandonCmd_Failure(void)
/* Assert */
UtAssert_STUB_COUNT(CF_TraverseAllTransactions, 1);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 1);
UT_CF_AssertEventID(CF_CMD_ABANDON_CHAN_ERR_EID);
}
@@ -1535,24 +1428,21 @@ void Test_CF_AbandonCmd_Failure(void)
void Test_CF_DoEnableDisableDequeue_Set_chan_num_EnabledFlagTo_context_barg(void)
{
/* Arrange */
- CF_ConfigTable_t config_table;
- uint8 arg_chan_num = Any_cf_channel();
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
CF_ChanAction_BoolArg_t context;
CF_ChanAction_BoolArg_t *arg_context = &context;
+ CF_Channel_t *chan = CF_GetChannelPtr(chan_num);
- CF_AppData.config_table = &config_table;
- context.barg = Any_bool_arg_t_barg();
-
- memset(&config_table, 0, sizeof(config_table));
+ context.barg = Any_bool_arg_t_barg();
/* Act */
- CF_DoEnableDisableDequeue(arg_chan_num, arg_context);
+ CF_DoEnableDisableDequeue(chan, arg_context);
/* Assert */
- UtAssert_True(CF_AppData.config_table->chan[arg_chan_num].dequeue_enabled == context.barg,
+ UtAssert_True(chan->config.dequeue_enabled == context.barg,
"Channel %u dequeue_enabled is %u and should be %u (context->barg)",
- arg_chan_num,
- CF_AppData.config_table->chan[arg_chan_num].dequeue_enabled,
+ CF_ChannelSelect_AsInt(chan_num),
+ chan->config.dequeue_enabled,
context.barg);
}
@@ -1567,38 +1457,34 @@ void Test_CF_EnableDequeueCmd_Success(void)
CF_EnableDequeueCmd_t utbuf;
/* Arrange */
- CF_UnionArgs_Payload_t *data = &utbuf.Payload;
- uint16 initial_hk_cmd_counter = Any_uint16();
+ CF_ChannelSelect_Payload_t *data = &utbuf.Payload;
+ uint16 initial_hk_cmd_counter = Any_uint16();
/* Arrange unstubbable: CF_DoEnableDisableDequeue via CF_DoChanAction */
- CF_ConfigTable_t config_table;
- uint8 chan_num = Any_cf_channel();
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ CF_Channel_t *chan = CF_GetChannelPtr(chan_num);
memset(&utbuf, 0, sizeof(utbuf));
- memset(&config_table, 0, sizeof(config_table));
-
- CF_AppData.config_table = &config_table;
/* Arrange unstubbable: CF_DoChanAction */
- data->byte[0] = chan_num;
+ data->ChannelSelect = chan_num;
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_EnableDequeueCmd(&utbuf);
/* Assert */
/* Assert for CF_DoFreezeThaw */
- UtAssert_True(CF_AppData.config_table->chan[chan_num].dequeue_enabled == 1,
+ UtAssert_True(chan->config.dequeue_enabled == 1,
"CF_EnableDequeueCmd set dequeue_enabled to %d and should be 1 (barg = 1))",
- CF_AppData.config_table->chan[chan_num].dequeue_enabled);
+ chan->config.dequeue_enabled);
/* Assert for incremented counter */
- UtAssert_True(
- CF_AppData.hk.Payload.counters.cmd == (uint16)(initial_hk_cmd_counter + 1),
- "CF_AppData.hk.Payload.counters.cmd is %d and should be 1 more than %d\nACCEPTANCE OF COMMAND (+1) SHOULD BE "
- "THE BEHAVIOR BUT IT IS NOT",
- CF_AppData.hk.Payload.counters.cmd,
- initial_hk_cmd_counter);
+ UtAssert_True(CF_AppData.counters.cmd == (uint16)(initial_hk_cmd_counter + 1),
+ "CF_AppData.counters.cmd is %d and should be 1 more than %d\nACCEPTANCE OF COMMAND (+1) SHOULD BE "
+ "THE BEHAVIOR BUT IT IS NOT",
+ CF_AppData.counters.cmd,
+ initial_hk_cmd_counter);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UT_CF_AssertEventID(CF_CMD_ENABLE_DEQUEUE_INF_EID);
}
@@ -1608,27 +1494,21 @@ void Test_CF_EnableDequeueCmd_Failure(void)
/* Arrange */
CF_EnableDequeueCmd_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf.Payload;
-
- /* Arrange unstubbable: CF_DoEnableDisableDequeue via CF_DoChanAction */
- CF_ConfigTable_t config_table;
+ CF_ChannelSelect_Payload_t *data = &utbuf.Payload;
memset(&utbuf, 0, sizeof(utbuf));
- memset(&config_table, 0, sizeof(config_table));
-
- CF_AppData.config_table = &config_table;
/* Arrange unstubbable: CF_DoChanAction */
- data->byte[0] = CF_NUM_CHANNELS + 1;
+ data->ChannelSelect = CF_NUM_CHANNELS + 1;
- CF_AppData.hk.Payload.counters.err = 0;
+ CF_AppData.counters.err = 0;
/* Act */
CF_EnableDequeueCmd(&utbuf);
/* Assert */
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 1);
UT_CF_AssertEventID(CF_CMD_ENABLE_DEQUEUE_ERR_EID);
}
@@ -1642,35 +1522,31 @@ void Test_CF_DisableDequeueCmd_Success(void)
{
CF_DisableDequeueCmd_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf.Payload;
- uint16 initial_hk_cmd_counter = Any_uint16();
+ CF_ChannelSelect_Payload_t *data = &utbuf.Payload;
+ uint16 initial_hk_cmd_counter = Any_uint16();
- /* Arrange unstubbable: CF_DoEnableDisableDequeue via CF_DoChanAction */
- CF_ConfigTable_t config_table;
- uint8 chan_num = Any_cf_channel();
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ CF_Channel_t *chan = CF_GetChannelPtr(chan_num);
memset(&utbuf, 0, sizeof(utbuf));
- memset(&config_table, 0, sizeof(config_table));
-
- CF_AppData.config_table = &config_table;
/* Arrange unstubbable: CF_DoChanAction */
- data->byte[0] = chan_num;
+ data->ChannelSelect = chan_num;
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_DisableDequeueCmd(&utbuf);
/* Assert */
/* Assert for CF_DoFreezeThaw */
- UtAssert_True(CF_AppData.config_table->chan[chan_num].dequeue_enabled == 0,
+ UtAssert_True(chan->config.dequeue_enabled == 0,
"CF_EnableDequeueCmd set dequeue_enabled to %d and should be 0 (barg = 0))",
- CF_AppData.config_table->chan[chan_num].dequeue_enabled);
+ chan->config.dequeue_enabled);
/* Assert for incremented counter */
- UtAssert_True(CF_AppData.hk.Payload.counters.cmd == (uint16)(initial_hk_cmd_counter + 1),
- "CF_AppData.hk.Payload.counters.cmd is %d and should be 1 more than %d",
- CF_AppData.hk.Payload.counters.cmd,
+ UtAssert_True(CF_AppData.counters.cmd == (uint16)(initial_hk_cmd_counter + 1),
+ "CF_AppData.counters.cmd is %d and should be 1 more than %d",
+ CF_AppData.counters.cmd,
initial_hk_cmd_counter);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UT_CF_AssertEventID(CF_CMD_DISABLE_DEQUEUE_INF_EID);
@@ -1681,27 +1557,21 @@ void Test_CF_DisableDequeueCmd_Failure(void)
/* Arrange */
CF_DisableDequeueCmd_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf.Payload;
-
- /* Arrange unstubbable: CF_DoEnableDisableDequeue via CF_DoChanAction */
- CF_ConfigTable_t config_table;
+ CF_ChannelSelect_Payload_t *data = &utbuf.Payload;
memset(&utbuf, 0, sizeof(utbuf));
- memset(&config_table, 0, sizeof(config_table));
-
- CF_AppData.config_table = &config_table;
/* Arrange unstubbable: CF_DoChanAction */
- data->byte[0] = CF_NUM_CHANNELS + 1;
+ data->ChannelSelect = CF_NUM_CHANNELS + 1;
- CF_AppData.hk.Payload.counters.err = 0;
+ CF_AppData.counters.err = 0;
/* Act */
CF_DisableDequeueCmd(&utbuf);
/* Assert */
/* Assert for CF_DoFreezeThaw */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 1);
UT_CF_AssertEventID(CF_CMD_DISABLE_DEQUEUE_ERR_EID);
}
@@ -1714,38 +1584,35 @@ void Test_CF_DisableDequeueCmd_Failure(void)
void Test_CF_DoEnableDisablePolldir_When_CF_ALL_CHANNELS_SetAllPolldirsInChannelEnabledTo_context_barg(void)
{
/* Arrange */
- CF_UnionArgs_Payload_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf;
+ CF_PollDirSelect_Payload_t utbuf;
+ CF_PollDirSelect_Payload_t *data = &utbuf;
CF_ChanAction_BoolMsgArg_t context;
CF_ChanAction_BoolMsgArg_t *arg_context = &context;
- CF_ConfigTable_t config_table;
- uint8 arg_chan_num = Any_cf_channel();
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
uint8 expected_enabled;
uint8 current_polldir = 0;
CF_ChanAction_Status_t local_result;
+ CF_Channel_t *chan = CF_GetChannelPtr(chan_num);
memset(&utbuf, 0, sizeof(utbuf));
- memset(&config_table, 0, sizeof(config_table));
- CF_AppData.config_table = &config_table;
+ data->PollDirIndx = CF_ALL_POLLDIRS;
- data->byte[1] = CF_ALL_CHANNELS;
-
- context.data = data;
- context.barg = Any_bool_arg_t_barg();
- expected_enabled = context.barg;
+ context.opaque_data = data;
+ context.barg = Any_bool_arg_t_barg();
+ expected_enabled = context.barg;
/* Act */
- local_result = CF_DoEnableDisablePolldir(arg_chan_num, arg_context);
+ local_result = CF_DoEnableDisablePolldir(chan, arg_context);
/* Assert */
for (current_polldir = 0; current_polldir < CF_MAX_POLLING_DIR_PER_CHAN; ++current_polldir)
{
- UtAssert_True(CF_AppData.config_table->chan[arg_chan_num].polldir[current_polldir].enabled == expected_enabled,
+ UtAssert_True(chan->config.polldir[current_polldir].enabled == expected_enabled,
"Channel %u Polldir %u set to %u and should be %u (context->barg)",
- arg_chan_num,
+ CF_ChannelSelect_AsInt(chan_num),
current_polldir,
- CF_AppData.config_table->chan[arg_chan_num].polldir[current_polldir].enabled,
+ chan->config.polldir[current_polldir].enabled,
expected_enabled);
}
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 0);
@@ -1755,36 +1622,33 @@ void Test_CF_DoEnableDisablePolldir_When_CF_ALL_CHANNELS_SetAllPolldirsInChannel
void Test_CF_DoEnableDisablePolldir_WhenSetToSpecificPolldirSetPolldirFrom_context_ChannelEnabledTo_context_barg(void)
{
/* Arrange */
- uint8 arg_chan_num = Any_cf_channel();
- uint8 polldir = Any_cf_polldir();
- CF_UnionArgs_Payload_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf;
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ uint8 polldir = Any_cf_polldir();
+ CF_PollDirSelect_Payload_t utbuf;
+ CF_PollDirSelect_Payload_t *data = &utbuf;
CF_ChanAction_BoolMsgArg_t context;
CF_ChanAction_BoolMsgArg_t *arg_context = &context;
- CF_ConfigTable_t config_table;
uint8 expected_enabled;
CF_ChanAction_Status_t local_result;
+ CF_Channel_t *chan = CF_GetChannelPtr(chan_num);
memset(&utbuf, 0, sizeof(utbuf));
- memset(&config_table, 0, sizeof(config_table));
-
- CF_AppData.config_table = &config_table;
- data->byte[1] = polldir;
+ data->PollDirIndx = polldir;
- context.data = data;
- context.barg = Any_bool_arg_t_barg();
- expected_enabled = context.barg;
+ context.opaque_data = data;
+ context.barg = Any_bool_arg_t_barg();
+ expected_enabled = context.barg;
/* Act */
- local_result = CF_DoEnableDisablePolldir(arg_chan_num, arg_context);
+ local_result = CF_DoEnableDisablePolldir(chan, arg_context);
/* Assert */
- UtAssert_True(CF_AppData.config_table->chan[arg_chan_num].polldir[polldir].enabled == expected_enabled,
+ UtAssert_True(chan->config.polldir[polldir].enabled == expected_enabled,
"Channel %u Polldir %u set to %u and should be %u (context->barg)",
- arg_chan_num,
+ CF_ChannelSelect_AsInt(chan_num),
polldir,
- CF_AppData.config_table->chan[arg_chan_num].polldir[polldir].enabled,
+ chan->config.polldir[polldir].enabled,
expected_enabled);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 0);
UtAssert_INT32_EQ(local_result, CF_ChanAction_Status_SUCCESS);
@@ -1793,25 +1657,23 @@ void Test_CF_DoEnableDisablePolldir_WhenSetToSpecificPolldirSetPolldirFrom_conte
void Test_CF_DoEnableDisablePolldir_FailPolldirEq_CF_MAX_POLLING_DIR_PER_CHAN_AndSendEvent(void)
{
/* Arrange */
- uint8 arg_chan_num = Any_cf_channel();
- CF_UnionArgs_Payload_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf;
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ CF_PollDirSelect_Payload_t utbuf;
+ CF_PollDirSelect_Payload_t *data = &utbuf;
CF_ChanAction_BoolMsgArg_t context;
CF_ChanAction_BoolMsgArg_t *arg_context = &context;
- CF_ConfigTable_t config_table;
CF_ChanAction_Status_t local_result;
+ CF_Channel_t *chan = CF_GetChannelPtr(chan_num);
memset(&utbuf, 0, sizeof(utbuf));
- CF_AppData.config_table = &config_table;
+ data->PollDirIndx = CF_MAX_POLLING_DIR_PER_CHAN;
- data->byte[1] = CF_MAX_POLLING_DIR_PER_CHAN;
-
- context.data = data;
- context.barg = Any_bool_arg_t_barg();
+ context.opaque_data = data;
+ context.barg = Any_bool_arg_t_barg();
/* Act */
- local_result = CF_DoEnableDisablePolldir(arg_chan_num, arg_context);
+ local_result = CF_DoEnableDisablePolldir(chan, arg_context);
/* Assert */
UT_CF_AssertEventID(CF_CMD_POLLDIR_INVALID_ERR_EID);
@@ -1822,25 +1684,23 @@ void Test_CF_DoEnableDisablePolldir_FailPolldirEq_CF_MAX_POLLING_DIR_PER_CHAN_An
void Test_CF_DoEnableDisablePolldir_FailAnyBadPolldirSendEvent(void)
{
/* Arrange */
- uint8 arg_chan_num = Any_cf_channel();
- CF_UnionArgs_Payload_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf;
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ CF_PollDirSelect_Payload_t utbuf;
+ CF_PollDirSelect_Payload_t *data = &utbuf;
CF_ChanAction_BoolMsgArg_t context;
CF_ChanAction_BoolMsgArg_t *arg_context = &context;
- CF_ConfigTable_t config_table;
CF_ChanAction_Status_t local_result;
+ CF_Channel_t *chan = CF_GetChannelPtr(chan_num);
memset(&utbuf, 0, sizeof(utbuf));
- CF_AppData.config_table = &config_table;
+ data->PollDirIndx = CF_MAX_POLLING_DIR_PER_CHAN;
- data->byte[1] = CF_MAX_POLLING_DIR_PER_CHAN;
-
- context.data = data;
- context.barg = Any_bool_arg_t_barg();
+ context.opaque_data = data;
+ context.barg = Any_bool_arg_t_barg();
/* Act */
- local_result = CF_DoEnableDisablePolldir(arg_chan_num, arg_context);
+ local_result = CF_DoEnableDisablePolldir(chan, arg_context);
/* Assert */
UT_CF_AssertEventID(CF_CMD_POLLDIR_INVALID_ERR_EID);
@@ -1857,42 +1717,39 @@ void Test_CF_DoEnableDisablePolldir_FailAnyBadPolldirSendEvent(void)
void Test_CF_EnablePolldirCmd_SuccessWhenActionSuccess(void)
{
/* Arrange */
- CF_ConfigTable_t config_table;
- uint8 channel = Any_cf_channel();
- uint8 polldir = Any_cf_polldir();
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ uint8 polldir = Any_cf_polldir();
+ CF_Channel_t *chan = CF_GetChannelPtr(chan_num);
CF_EnableDirPollingCmd_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf.Payload;
- uint16 initial_hk_cmd_counter = Any_uint16();
+ CF_PollDirSelect_Payload_t *data = &utbuf.Payload;
+ uint16 initial_hk_cmd_counter = Any_uint16();
memset(&utbuf, 0, sizeof(utbuf));
- memset(&config_table, 0, sizeof(config_table));
-
- CF_AppData.config_table = &config_table;
/* Arrange unstubbable: CF_DoChanAction */
- data->byte[0] = channel;
+ data->ChannelSelect = chan_num;
/* Arrange unstubbable: CF_DoEnableDisablePolldir */
- data->byte[1] = polldir;
+ data->PollDirIndx = polldir;
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_EnableDirPollingCmd(&utbuf);
/* Assert */
/* Assert for CF_DoEnableDisablePolldir */
- UtAssert_True(CF_AppData.config_table->chan[channel].polldir[polldir].enabled == 1,
+ UtAssert_True(chan->config.polldir[polldir].enabled == 1,
"Channel %u Polldir %u set to %u and should be 1 (context->barg)",
- channel,
+ CF_ChannelSelect_AsInt(chan_num),
polldir,
- CF_AppData.config_table->chan[channel].polldir[polldir].enabled);
+ chan->config.polldir[polldir].enabled);
/* Assert for incremented counter */
- UtAssert_True(CF_AppData.hk.Payload.counters.cmd == (uint16)(initial_hk_cmd_counter + 1),
- "CF_AppData.hk.Payload.counters.cmd is %d and should be 1 more than %d",
- CF_AppData.hk.Payload.counters.cmd,
+ UtAssert_True(CF_AppData.counters.cmd == (uint16)(initial_hk_cmd_counter + 1),
+ "CF_AppData.counters.cmd is %d and should be 1 more than %d",
+ CF_AppData.counters.cmd,
initial_hk_cmd_counter);
UT_CF_AssertEventID(CF_CMD_ENABLE_POLLDIR_INF_EID);
}
@@ -1900,21 +1757,22 @@ void Test_CF_EnablePolldirCmd_SuccessWhenActionSuccess(void)
void Test_CF_EnablePolldirCmd_FailWhenActionFail(void)
{
/* Arrange */
- uint8 channel = Any_cf_channel();
- uint8 error_polldir = Any_uint8_BetweenInclusive(CF_MAX_POLLING_DIR_PER_CHAN, CF_ALL_CHANNELS - 1);
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ uint8 error_polldir = Any_uint8_BetweenInclusive(CF_MAX_POLLING_DIR_PER_CHAN, CF_ALL_CHANNELS - 1);
- CF_EnableDirPollingCmd_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf.Payload;
- uint16 initial_hk_err_counter = Any_uint16();
+ CF_EnableDirPollingCmd_t utbuf;
+ CF_PollDirSelect_Payload_t *data = &utbuf.Payload;
+ uint16 initial_hk_err_counter = Any_uint16();
memset(&utbuf, 0, sizeof(utbuf));
/* Arrange unstubbable: CF_DoChanAction */
- data->byte[0] = channel;
+ data->ChannelSelect = chan_num;
/* Arrange unstubbable: CF_DoEnableDisablePolldir */
- data->byte[1] = error_polldir;
- CF_AppData.hk.Payload.counters.err = initial_hk_err_counter;
+ data->PollDirIndx = error_polldir;
+
+ CF_AppData.counters.err = initial_hk_err_counter;
/* Act */
CF_EnableDirPollingCmd(&utbuf);
@@ -1922,9 +1780,9 @@ void Test_CF_EnablePolldirCmd_FailWhenActionFail(void)
/* Assert */
/* Assert for CF_DoEnableDisablePolldir */
/* Assert for incremented counter */
- UtAssert_True(CF_AppData.hk.Payload.counters.err == (uint16)(initial_hk_err_counter + 1),
- "CF_AppData.hk.Payload.counters.err is %d and should be 1 more than %d",
- CF_AppData.hk.Payload.counters.err,
+ UtAssert_True(CF_AppData.counters.err == (uint16)(initial_hk_err_counter + 1),
+ "CF_AppData.counters.err is %d and should be 1 more than %d",
+ CF_AppData.counters.err,
initial_hk_err_counter);
UT_CF_AssertEventID(CF_CMD_ENABLE_POLLDIR_ERR_EID);
}
@@ -1938,41 +1796,38 @@ void Test_CF_EnablePolldirCmd_FailWhenActionFail(void)
void Test_CF_DisablePolldirCmd_SuccessWhenActionSuccess(void)
{
/* Arrange */
- CF_ConfigTable_t config_table;
- uint8 channel = Any_cf_channel();
- uint8 polldir = Any_cf_polldir();
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ uint8 polldir = Any_cf_polldir();
- CF_DisableDirPollingCmd_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf.Payload;
- uint16 initial_hk_cmd_counter = Any_uint16();
+ CF_DisableDirPollingCmd_t utbuf;
+ CF_PollDirSelect_Payload_t *data = &utbuf.Payload;
+ uint16 initial_hk_cmd_counter = Any_uint16();
+ CF_Channel_t *chan = CF_GetChannelPtr(chan_num);
memset(&utbuf, 0, sizeof(utbuf));
- memset(&config_table, 0, sizeof(config_table));
-
- CF_AppData.config_table = &config_table;
/* Arrange unstubbable: CF_DoChanAction */
- data->byte[0] = channel;
+ data->ChannelSelect = chan_num;
/* Arrange unstubbable: CF_DoEnableDisablePolldir */
- data->byte[1] = polldir;
+ data->PollDirIndx = polldir;
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_DisableDirPollingCmd(&utbuf);
/* Assert */
/* Assert for CF_DoEnableDisablePolldir */
- UtAssert_True(CF_AppData.config_table->chan[channel].polldir[polldir].enabled == 0,
+ UtAssert_True(chan->config.polldir[polldir].enabled == 0,
"Channel %u Polldir %u set to %u and should be 0 (context->barg)",
- channel,
+ CF_ChannelSelect_AsInt(chan_num),
polldir,
- CF_AppData.config_table->chan[channel].polldir[polldir].enabled);
+ chan->config.polldir[polldir].enabled);
/* Assert for incremented counter */
- UtAssert_True(CF_AppData.hk.Payload.counters.cmd == (uint16)(initial_hk_cmd_counter + 1),
- "CF_AppData.hk.Payload.counters.cmd is %d and should be 1 more than %d",
- CF_AppData.hk.Payload.counters.cmd,
+ UtAssert_True(CF_AppData.counters.cmd == (uint16)(initial_hk_cmd_counter + 1),
+ "CF_AppData.counters.cmd is %d and should be 1 more than %d",
+ CF_AppData.counters.cmd,
initial_hk_cmd_counter);
UT_CF_AssertEventID(CF_CMD_DISABLE_POLLDIR_INF_EID);
}
@@ -1980,22 +1835,22 @@ void Test_CF_DisablePolldirCmd_SuccessWhenActionSuccess(void)
void Test_CF_DisablePolldirCmd_FailWhenActionFail(void)
{
/* Arrange */
- uint8 channel = Any_cf_channel();
- uint8 error_polldir = Any_uint8_BetweenInclusive(CF_MAX_POLLING_DIR_PER_CHAN, CF_ALL_CHANNELS - 1);
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ uint8 error_polldir = Any_uint8_BetweenInclusive(CF_MAX_POLLING_DIR_PER_CHAN, CF_ALL_CHANNELS - 1);
- CF_DisableDirPollingCmd_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf.Payload;
- uint16 initial_hk_err_counter = Any_uint16();
+ CF_DisableDirPollingCmd_t utbuf;
+ CF_PollDirSelect_Payload_t *data = &utbuf.Payload;
+ uint16 initial_hk_err_counter = Any_uint16();
memset(&utbuf, 0, sizeof(utbuf));
/* Arrange unstubbable: CF_DoChanAction */
- data->byte[0] = channel;
+ data->ChannelSelect = chan_num;
/* Arrange unstubbable: CF_DoEnableDisablePolldir */
- data->byte[1] = error_polldir;
+ data->PollDirIndx = error_polldir;
- CF_AppData.hk.Payload.counters.err = initial_hk_err_counter;
+ CF_AppData.counters.err = initial_hk_err_counter;
/* Act */
CF_DisableDirPollingCmd(&utbuf);
@@ -2003,9 +1858,9 @@ void Test_CF_DisablePolldirCmd_FailWhenActionFail(void)
/* Assert */
/* Assert for CF_DoEnableDisablePolldir */
/* Assert for incremented counter*/
- UtAssert_True(CF_AppData.hk.Payload.counters.err == (uint16)(initial_hk_err_counter + 1),
- "CF_AppData.hk.Payload.counters.err is %d and should be 1 more than %d",
- CF_AppData.hk.Payload.counters.err,
+ UtAssert_True(CF_AppData.counters.err == (uint16)(initial_hk_err_counter + 1),
+ "CF_AppData.counters.err is %d and should be 1 more than %d",
+ CF_AppData.counters.err,
initial_hk_err_counter);
UT_CF_AssertEventID(CF_CMD_DISABLE_POLLDIR_ERR_EID);
}
@@ -2073,11 +1928,11 @@ void Test_CF_PurgeTransaction_Call_CF_CFDP_ResetTransaction_AndReturn_CLIST_CONT
void Test_CF_DoPurgeQueue_PendOnly(void)
{
/* Arrange */
- uint8 arg_chan_num = Any_cf_channel();
- CF_UnionArgs_Payload_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf;
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ CF_QueueSelect_Payload_t utbuf;
+ CF_QueueSelect_Payload_t *data = &utbuf;
CF_ChanAction_MsgArg_t msgarg = { data };
- CF_Channel_t *chan;
+ CF_Channel_t *chan = CF_GetChannelPtr(chan_num);
CF_CListNode_t start;
CF_CListNode_t *expected_start = &start;
CF_ChanAction_Status_t local_result;
@@ -2085,18 +1940,16 @@ void Test_CF_DoPurgeQueue_PendOnly(void)
memset(&utbuf, 0, sizeof(utbuf));
- data->byte[1] = 0; /* pend */
+ data->ChannelSelect = chan_num;
+ data->QueueSelect = CF_QueueSelect_Pending; /* pend */
UT_SetHandlerFunction(UT_KEY(CF_CList_Traverse),
UT_AltHandler_CF_CList_Traverse_POINTER,
&context_CF_CList_Traverse);
- chan = &CF_AppData.engine.channels[arg_chan_num];
chan->qs[CF_QueueIdx_PEND] = expected_start;
/* Act */
- local_result = CF_DoPurgeQueue(arg_chan_num, &msgarg);
-
- UT_GetStubCount(UT_KEY(CF_CList_Traverse));
+ local_result = CF_DoPurgeQueue(chan, &msgarg);
/* Assert */
UtAssert_STUB_COUNT(CF_CList_Traverse, 1);
@@ -2110,11 +1963,11 @@ void Test_CF_DoPurgeQueue_PendOnly(void)
void Test_CF_DoPurgeQueue_HistoryOnly(void)
{
/* Arrange */
- uint8 arg_chan_num = Any_cf_channel();
- CF_UnionArgs_Payload_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf;
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ CF_QueueSelect_Payload_t utbuf;
+ CF_QueueSelect_Payload_t *data = &utbuf;
CF_ChanAction_MsgArg_t msgarg = { data };
- CF_Channel_t *chan;
+ CF_Channel_t *chan = CF_GetChannelPtr(chan_num);
CF_CListNode_t start;
CF_CListNode_t *expected_start = &start;
CF_ChanAction_Status_t local_result;
@@ -2122,20 +1975,18 @@ void Test_CF_DoPurgeQueue_HistoryOnly(void)
memset(&utbuf, 0, sizeof(utbuf));
- data->byte[1] = 1; /* history */
+ data->ChannelSelect = chan_num;
+ data->QueueSelect = CF_QueueSelect_History; /* history */
/* set correct context type for CF_CList_Traverse stub */
UT_SetHandlerFunction(UT_KEY(CF_CList_Traverse),
UT_AltHandler_CF_CList_Traverse_POINTER,
&context_CF_CList_Traverse);
- chan = &CF_AppData.engine.channels[arg_chan_num];
chan->qs[CF_QueueIdx_HIST] = expected_start;
/* Act */
- local_result = CF_DoPurgeQueue(arg_chan_num, &msgarg);
-
- UT_GetStubCount(UT_KEY(CF_CList_Traverse));
+ local_result = CF_DoPurgeQueue(chan, &msgarg);
/* Assert */
UtAssert_STUB_COUNT(CF_CList_Traverse, 1);
@@ -2149,11 +2000,11 @@ void Test_CF_DoPurgeQueue_HistoryOnly(void)
void Test_CF_DoPurgeQueue_Both(void)
{
/* Arrange */
- uint8 arg_chan_num = Any_cf_channel();
- CF_UnionArgs_Payload_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf;
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ CF_QueueSelect_Payload_t utbuf;
+ CF_QueueSelect_Payload_t *data = &utbuf;
CF_ChanAction_MsgArg_t msgarg = { data };
- CF_Channel_t *chan;
+ CF_Channel_t *chan = CF_GetChannelPtr(chan_num);
CF_CListNode_t pend_start;
CF_CListNode_t *expected_pend_start = &pend_start;
CF_CListNode_t history_start;
@@ -2163,21 +2014,19 @@ void Test_CF_DoPurgeQueue_Both(void)
memset(&utbuf, 0, sizeof(utbuf));
- data->byte[1] = 2; /* both */
+ data->ChannelSelect = chan_num;
+ data->QueueSelect = CF_QueueSelect_All; /* both */
/* set correct context type for CF_CList_Traverse stub */
/* this must use data buffer hack to pass multiple contexts */
UT_SetHandlerFunction(UT_KEY(CF_CList_Traverse), UT_AltHandler_CF_CList_Traverse_POINTER, NULL);
UT_SetDataBuffer(UT_KEY(CF_CList_Traverse), context_CF_CList_Traverse, sizeof(context_CF_CList_Traverse), false);
- chan = &CF_AppData.engine.channels[arg_chan_num];
chan->qs[CF_QueueIdx_PEND] = expected_pend_start;
chan->qs[CF_QueueIdx_HIST] = expected_history_start;
/* Act */
- local_result = CF_DoPurgeQueue(arg_chan_num, &msgarg);
-
- UT_GetStubCount(UT_KEY(CF_CList_Traverse));
+ local_result = CF_DoPurgeQueue(chan, &msgarg);
/* Assert */
UtAssert_STUB_COUNT(CF_CList_Traverse, 2);
@@ -2195,20 +2044,20 @@ void Test_CF_DoPurgeQueue_Both(void)
void Test_CF_DoPurgeQueue_GivenBad_data_byte_1_SendEventAndReturn_neg1(void)
{
/* Arrange */
- uint8 arg_chan_num = Any_cf_channel();
- CF_UnionArgs_Payload_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf;
- CF_ChanAction_MsgArg_t msgarg = { data };
- CF_ChanAction_Status_t local_result;
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ CF_QueueSelect_Payload_t utbuf;
+ CF_QueueSelect_Payload_t *data = &utbuf;
+ CF_ChanAction_MsgArg_t msgarg = { data };
+ CF_ChanAction_Status_t local_result;
+ CF_Channel_t *chan = CF_GetChannelPtr(chan_num);
memset(&utbuf, 0, sizeof(utbuf));
- data->byte[1] = 3; /* 3 is first default value */
+ data->ChannelSelect = chan_num;
+ data->QueueSelect = 10; /* Invalid */
/* Act */
- local_result = CF_DoPurgeQueue(arg_chan_num, &msgarg);
-
- UT_GetStubCount(UT_KEY(CF_CList_Traverse));
+ local_result = CF_DoPurgeQueue(chan, &msgarg);
/* Assert */
UtAssert_INT32_EQ(local_result, CF_ChanAction_Status_ERROR);
@@ -2220,20 +2069,20 @@ void Test_CF_DoPurgeQueue_GivenBad_data_byte_1_SendEventAndReturn_neg1(void)
void Test_CF_DoPurgeQueue_AnyGivenBad_data_byte_1_SendEventAndReturn_neg1(void)
{
/* Arrange */
- uint8 arg_chan_num = Any_cf_channel();
- CF_UnionArgs_Payload_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf;
- CF_ChanAction_MsgArg_t msgarg = { data };
- CF_ChanAction_Status_t local_result;
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ CF_QueueSelect_Payload_t utbuf;
+ CF_QueueSelect_Payload_t *data = &utbuf;
+ CF_ChanAction_MsgArg_t msgarg = { data };
+ CF_ChanAction_Status_t local_result;
+ CF_Channel_t *chan = CF_GetChannelPtr(chan_num);
memset(&utbuf, 0, sizeof(utbuf));
- data->byte[1] = Any_uint8_GreaterThan_or_EqualTo(3);
+ data->ChannelSelect = chan_num;
+ data->QueueSelect = Any_uint8_GreaterThan(CF_QueueSelect_All);
/* Act */
- local_result = CF_DoPurgeQueue(arg_chan_num, &msgarg);
-
- UT_GetStubCount(UT_KEY(CF_CList_Traverse));
+ local_result = CF_DoPurgeQueue(chan, &msgarg);
/* Assert */
UtAssert_INT32_EQ(local_result, CF_ChanAction_Status_ERROR);
@@ -2251,21 +2100,21 @@ void Test_CF_DoPurgeQueue_AnyGivenBad_data_byte_1_SendEventAndReturn_neg1(void)
void Test_CF_PurgeQueueCmd_FailWhenActionFail(void)
{
/* Arrange */
- uint8 channel = Any_cf_channel();
- uint8 error_purge = 3; /* Shortest return from CF_DoPurgeQueue */
- CF_PurgeQueueCmd_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf.Payload;
- uint16 initial_hk_err_counter = Any_uint16();
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ uint8 error_purge = CF_QueueSelect_All + 1; /* Shortest return from CF_DoPurgeQueue */
+ CF_PurgeQueueCmd_t utbuf;
+ CF_QueueSelect_Payload_t *data = &utbuf.Payload;
+ uint16 initial_hk_err_counter = Any_uint16();
memset(&utbuf, 0, sizeof(utbuf));
/* Arrange unstubbable: CF_DoChanAction */
- data->byte[0] = channel;
+ data->ChannelSelect = chan_num;
/* Arrange unstubbable: CF_DoPurgeQueue */
- data->byte[1] = error_purge;
+ data->QueueSelect = error_purge;
- CF_AppData.hk.Payload.counters.err = initial_hk_err_counter;
+ CF_AppData.counters.err = initial_hk_err_counter;
/* Act */
CF_PurgeQueueCmd(&utbuf);
@@ -2273,9 +2122,9 @@ void Test_CF_PurgeQueueCmd_FailWhenActionFail(void)
/* Assert */
/* Assert for CF_DoEnableDisablePolldir */
/* Assert for incremented counter */
- UtAssert_True(CF_AppData.hk.Payload.counters.err == (uint16)(initial_hk_err_counter + 1),
- "CF_AppData.hk.Payload.counters.err is %d and should be 1 more than %d",
- CF_AppData.hk.Payload.counters.err,
+ UtAssert_True(CF_AppData.counters.err == (uint16)(initial_hk_err_counter + 1),
+ "CF_AppData.counters.err is %d and should be 1 more than %d",
+ CF_AppData.counters.err,
initial_hk_err_counter);
UT_CF_AssertEventID(CF_CMD_PURGE_QUEUE_ERR_EID);
}
@@ -2283,16 +2132,16 @@ void Test_CF_PurgeQueueCmd_FailWhenActionFail(void)
void Test_CF_PurgeQueueCmd_SuccessWhenActionSuccess(void)
{
/* Arrange */
- uint8 channel = Any_cf_channel();
- CF_PurgeQueueCmd_t utbuf;
- CF_UnionArgs_Payload_t *data = &utbuf.Payload;
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ CF_PurgeQueueCmd_t utbuf;
+ CF_QueueSelect_Payload_t *data = &utbuf.Payload;
memset(&utbuf, 0, sizeof(utbuf));
/* Arrange unstubbable: CF_DoChanAction */
- data->byte[0] = channel;
+ data->ChannelSelect = chan_num;
- CF_AppData.hk.Payload.counters.cmd = 0;
+ CF_AppData.counters.cmd = 0;
/* Act */
CF_PurgeQueueCmd(&utbuf);
@@ -2300,7 +2149,7 @@ void Test_CF_PurgeQueueCmd_SuccessWhenActionSuccess(void)
/* Assert */
/* Assert for CF_DoEnableDisablePolldir */
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, 1);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, 1);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UT_CF_AssertEventID(CF_CMD_PURGE_QUEUE_INF_EID);
}
@@ -2323,7 +2172,7 @@ void Test_CF_WriteQueueCmd_When_chan_Eq_CF_NUM_CAHNNELS_SendEventAndRejectComman
/* invalid channel */
wq->chan = CF_NUM_CHANNELS;
- CF_AppData.hk.Payload.counters.err = initial_hk_err_counter;
+ CF_AppData.counters.err = initial_hk_err_counter;
/* Act */
CF_WriteQueueCmd(&utbuf);
@@ -2332,7 +2181,7 @@ void Test_CF_WriteQueueCmd_When_chan_Eq_CF_NUM_CAHNNELS_SendEventAndRejectComman
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UT_CF_AssertEventID(CF_CMD_WQ_CHAN_ERR_EID);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
}
void Test_CF_WriteQueueCmd_When_chan_GreaterThan_CF_NUM_CAHNNELS_SendEventAndRejectCommand(void)
@@ -2345,9 +2194,9 @@ void Test_CF_WriteQueueCmd_When_chan_GreaterThan_CF_NUM_CAHNNELS_SendEventAndRej
memset(&utbuf, 0, sizeof(utbuf));
/* invalid channel */
- wq->chan = Any_uint8_GreaterThan(CF_NUM_CHANNELS);
+ wq->chan = CF_NUM_CHANNELS + 1;
- CF_AppData.hk.Payload.counters.err = initial_hk_err_counter;
+ CF_AppData.counters.err = initial_hk_err_counter;
/* Act */
CF_WriteQueueCmd(&utbuf);
@@ -2357,7 +2206,7 @@ void Test_CF_WriteQueueCmd_When_chan_GreaterThan_CF_NUM_CAHNNELS_SendEventAndRej
UT_CF_AssertEventID(CF_CMD_WQ_CHAN_ERR_EID);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
}
void Test_CF_WriteQueueCmd_WhenUpAndPendingQueueSendEventAndRejectCommand(void)
@@ -2370,13 +2219,13 @@ void Test_CF_WriteQueueCmd_WhenUpAndPendingQueueSendEventAndRejectCommand(void)
memset(&utbuf, 0, sizeof(utbuf));
/* valid channel */
- wq->chan = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ wq->chan = Any_cf_chan_num();
/* invalid combination up direction, pending queue */
wq->type = CF_Type_up;
- wq->queue = CF_Queue_pend;
+ wq->queue = CF_QueueSelect_Pending;
- CF_AppData.hk.Payload.counters.err = initial_hk_err_counter;
+ CF_AppData.counters.err = initial_hk_err_counter;
/* Act */
CF_WriteQueueCmd(&utbuf);
@@ -2386,7 +2235,7 @@ void Test_CF_WriteQueueCmd_WhenUpAndPendingQueueSendEventAndRejectCommand(void)
UT_CF_AssertEventID(CF_CMD_WQ_ARGS_ERR_EID);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
}
void Test_CF_WriteQueueCmd_When_CF_WrappedCreat_Fails_type_Is_type_up_And_queue_IsNot_q_pend_SendEventAndRejectCommand(
@@ -2401,7 +2250,7 @@ void Test_CF_WriteQueueCmd_When_CF_WrappedCreat_Fails_type_Is_type_up_And_queue_
memset(&utbuf, 0, sizeof(utbuf));
/* valid channel */
- wq->chan = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ wq->chan = Any_cf_chan_num();
/* valid combination up direction, NOT pending queue */
wq->type = CF_Type_up;
@@ -2417,7 +2266,7 @@ void Test_CF_WriteQueueCmd_When_CF_WrappedCreat_Fails_type_Is_type_up_And_queue_
sizeof(context_CF_WrappedOpenCreate),
false);
- CF_AppData.hk.Payload.counters.err = initial_hk_err_counter;
+ CF_AppData.counters.err = initial_hk_err_counter;
/* Act */
CF_WriteQueueCmd(&utbuf);
@@ -2429,7 +2278,7 @@ void Test_CF_WriteQueueCmd_When_CF_WrappedCreat_Fails_type_Is_type_up_And_queue_
UT_CF_AssertEventID(CF_CMD_WQ_OPEN_ERR_EID);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
}
void Test_CF_WriteQueueCmd_When_CF_WrappedCreat_Fails_type_IsNot_type_up_And_queue_Is_q_pend_SendEventAndRejectCommand(
@@ -2444,11 +2293,11 @@ void Test_CF_WriteQueueCmd_When_CF_WrappedCreat_Fails_type_IsNot_type_up_And_que
memset(&utbuf, 0, sizeof(utbuf));
/* valid channel */
- wq->chan = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ wq->chan = Any_cf_chan_num();
/* valid combination down direction, pending queue */
wq->type = CF_Type_down;
- wq->queue = CF_Queue_pend;
+ wq->queue = CF_QueueSelect_Pending;
/* invalid result from CF_WrappedCreat */
strncpy(wq->filename, AnyRandomStringOfLettersOfLength(10), 10);
@@ -2460,7 +2309,7 @@ void Test_CF_WriteQueueCmd_When_CF_WrappedCreat_Fails_type_IsNot_type_up_And_que
sizeof(context_CF_WrappedOpenCreate),
false);
- CF_AppData.hk.Payload.counters.err = initial_hk_err_counter;
+ CF_AppData.counters.err = initial_hk_err_counter;
/* Act */
CF_WriteQueueCmd(&utbuf);
@@ -2472,7 +2321,7 @@ void Test_CF_WriteQueueCmd_When_CF_WrappedCreat_Fails_type_IsNot_type_up_And_que
UT_CF_AssertEventID(CF_CMD_WQ_OPEN_ERR_EID);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
}
void Test_CF_WriteQueueCmd_When_wq_IsAllAnd_queue_IsAll_fd_Is_0_Call_CF_WrappedClose_SendEventCloseAndRejectCommandWhen_CF_WriteTxnQueueDataToFile_Fails(
@@ -2490,11 +2339,11 @@ void Test_CF_WriteQueueCmd_When_wq_IsAllAnd_queue_IsAll_fd_Is_0_Call_CF_WrappedC
memset(&utbuf, 0, sizeof(utbuf));
/* valid channel */
- wq->chan = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ wq->chan = Any_cf_chan_num();
/* valid combination all direction, all queue */
wq->type = CF_Type_all;
- wq->queue = CF_Queue_all;
+ wq->queue = CF_QueueSelect_All;
/* valid result from CF_WrappedCreat */
strncpy(wq->filename, AnyRandomStringOfLettersOfLength(10), 10);
@@ -2513,7 +2362,7 @@ void Test_CF_WriteQueueCmd_When_wq_IsAllAnd_queue_IsAll_fd_Is_0_Call_CF_WrappedC
false);
UT_SetDefaultReturnValue(UT_KEY(CF_WriteTxnQueueDataToFile), forced_return_CF_WriteTxnQueueDataToFile);
- CF_AppData.hk.Payload.counters.err = initial_hk_err_counter;
+ CF_AppData.counters.err = initial_hk_err_counter;
/* Act */
CF_WriteQueueCmd(&utbuf);
@@ -2524,7 +2373,7 @@ void Test_CF_WriteQueueCmd_When_wq_IsAllAnd_queue_IsAll_fd_Is_0_Call_CF_WrappedC
UT_CF_AssertEventID(CF_CMD_WQ_WRITEQ_RX_ERR_EID);
UtAssert_STUB_COUNT(CF_WrappedClose, 1);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
}
void Test_CF_WriteQueueCmd_When_CF_WriteTxnQueueDataToFile_FailsAnd_wq_IsUpAnd_queue_IsActive_fd_IsPositive_Call_CF_WrappedClose_SendEventClosesAndRejectCommand(
@@ -2543,11 +2392,11 @@ void Test_CF_WriteQueueCmd_When_CF_WriteTxnQueueDataToFile_FailsAnd_wq_IsUpAnd_q
memset(&utbuf, 0, sizeof(utbuf));
/* valid channel */
- wq->chan = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ wq->chan = Any_cf_chan_num();
/* valid combination all direction, all queue */
wq->type = CF_Type_up;
- wq->queue = CF_Queue_active;
+ wq->queue = CF_QueueSelect_Active;
/* valid result from CF_WrappedCreat */
strncpy(wq->filename, AnyRandomStringOfLettersOfLength(10), 10);
@@ -2568,7 +2417,7 @@ void Test_CF_WriteQueueCmd_When_CF_WriteTxnQueueDataToFile_FailsAnd_wq_IsUpAnd_q
UT_SetDataBuffer(UT_KEY(CF_WrappedClose), &context_CF_WrappedClose_fd, sizeof(context_CF_WrappedClose_fd), false);
- CF_AppData.hk.Payload.counters.err = initial_hk_err_counter;
+ CF_AppData.counters.err = initial_hk_err_counter;
/* Act */
CF_WriteQueueCmd(&utbuf);
@@ -2579,7 +2428,7 @@ void Test_CF_WriteQueueCmd_When_CF_WriteTxnQueueDataToFile_FailsAnd_wq_IsUpAnd_q
UT_CF_AssertEventID(CF_CMD_WQ_WRITEQ_RX_ERR_EID);
UtAssert_STUB_COUNT(CF_WrappedClose, 1);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
}
void Test_CF_WriteQueueCmd_When_CF_WriteHistoryQueueDataToFile_FailsAnd_wq_IsUpAnd_queue_IsHistory_fd_IsPositive_Call_CF_WrappedClose_SendEventCloseAndRejectCommand(
@@ -2598,11 +2447,11 @@ void Test_CF_WriteQueueCmd_When_CF_WriteHistoryQueueDataToFile_FailsAnd_wq_IsUpA
memset(&utbuf, 0, sizeof(utbuf));
/* valid channel */
- wq->chan = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ wq->chan = Any_cf_chan_num();
/* valid combination all direction, all queue */
wq->type = CF_Type_up;
- wq->queue = CF_Queue_history;
+ wq->queue = CF_QueueSelect_History;
/* valid result from CF_WrappedCreat */
strncpy(wq->filename, AnyRandomStringOfLettersOfLength(10), 10);
@@ -2623,7 +2472,7 @@ void Test_CF_WriteQueueCmd_When_CF_WriteHistoryQueueDataToFile_FailsAnd_wq_IsUpA
UT_SetDataBuffer(UT_KEY(CF_WrappedClose), &context_CF_WrappedClose_fd, sizeof(context_CF_WrappedClose_fd), false);
- CF_AppData.hk.Payload.counters.err = initial_hk_err_counter;
+ CF_AppData.counters.err = initial_hk_err_counter;
/* Act */
CF_WriteQueueCmd(&utbuf);
@@ -2634,7 +2483,7 @@ void Test_CF_WriteQueueCmd_When_CF_WriteHistoryQueueDataToFile_FailsAnd_wq_IsUpA
UT_CF_AssertEventID(CF_CMD_WQ_WRITEHIST_RX_ERR_EID);
UtAssert_STUB_COUNT(CF_WrappedClose, 1);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
}
void Test_CF_WriteQueueCmd_When_CF_WriteHistoryDataToFile_FailsOnFirstCallAnd_wq_IsDownAnd_queue_IsActive_fd_IsPositive_Call_CF_WrappedClose_SendEventCloseAndRejectCommand(
@@ -2653,11 +2502,11 @@ void Test_CF_WriteQueueCmd_When_CF_WriteHistoryDataToFile_FailsOnFirstCallAnd_wq
memset(&utbuf, 0, sizeof(utbuf));
/* valid channel */
- wq->chan = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ wq->chan = Any_cf_chan_num();
/* valid combination all direction, all queue */
wq->type = CF_Type_down;
- wq->queue = CF_Queue_active;
+ wq->queue = CF_QueueSelect_Active;
/* valid result from CF_WrappedCreat */
strncpy(wq->filename, AnyRandomStringOfLettersOfLength(10), 10);
@@ -2678,7 +2527,7 @@ void Test_CF_WriteQueueCmd_When_CF_WriteHistoryDataToFile_FailsOnFirstCallAnd_wq
UT_SetDataBuffer(UT_KEY(CF_WrappedClose), &context_CF_WrappedClose_fd, sizeof(context_CF_WrappedClose_fd), false);
- CF_AppData.hk.Payload.counters.err = initial_hk_err_counter;
+ CF_AppData.counters.err = initial_hk_err_counter;
/* Act */
CF_WriteQueueCmd(&utbuf);
@@ -2689,7 +2538,7 @@ void Test_CF_WriteQueueCmd_When_CF_WriteHistoryDataToFile_FailsOnFirstCallAnd_wq
UT_CF_AssertEventID(CF_CMD_WQ_WRITEQ_TX_ERR_EID);
UtAssert_STUB_COUNT(CF_WrappedClose, 1);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
}
void Test_CF_WriteQueueCmd_When_CF_WriteHistoryQueueDataToFile_FailsAnd_wq_IsDownAnd_queue_IsPend_fd_IsPositive_Call_CF_WrappedClose_SendEventCloseAndRejectCommand(
@@ -2708,11 +2557,11 @@ void Test_CF_WriteQueueCmd_When_CF_WriteHistoryQueueDataToFile_FailsAnd_wq_IsDow
memset(&utbuf, 0, sizeof(utbuf));
/* valid channel */
- wq->chan = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ wq->chan = Any_cf_chan_num();
/* valid combination all direction, all queue */
wq->type = CF_Type_down;
- wq->queue = CF_Queue_pend;
+ wq->queue = CF_QueueSelect_Pending;
/* valid result from CF_WrappedCreat */
strncpy(wq->filename, AnyRandomStringOfLettersOfLength(10), 10);
@@ -2733,7 +2582,7 @@ void Test_CF_WriteQueueCmd_When_CF_WriteHistoryQueueDataToFile_FailsAnd_wq_IsDow
UT_SetDataBuffer(UT_KEY(CF_WrappedClose), &context_CF_WrappedClose_fd, sizeof(context_CF_WrappedClose_fd), false);
- CF_AppData.hk.Payload.counters.err = initial_hk_err_counter;
+ CF_AppData.counters.err = initial_hk_err_counter;
/* Act */
CF_WriteQueueCmd(&utbuf);
@@ -2744,7 +2593,7 @@ void Test_CF_WriteQueueCmd_When_CF_WriteHistoryQueueDataToFile_FailsAnd_wq_IsDow
UT_CF_AssertEventID(CF_CMD_WQ_WRITEQ_PEND_ERR_EID);
UtAssert_STUB_COUNT(CF_WrappedClose, 1);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
}
void Test_CF_WriteQueueCmd_When_CF_WriteHistoryQueueDataToFile_FailsAnd_wq_IsDownAnd_queue_IsHistory_fd_IsPositive_Call_CF_WrappedClose_SendEventCloseAndRejectCommand(
@@ -2763,11 +2612,11 @@ void Test_CF_WriteQueueCmd_When_CF_WriteHistoryQueueDataToFile_FailsAnd_wq_IsDow
memset(&utbuf, 0, sizeof(utbuf));
/* valid channel */
- wq->chan = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ wq->chan = Any_cf_chan_num();
/* valid combination all direction, all queue */
wq->type = CF_Type_down;
- wq->queue = CF_Queue_history;
+ wq->queue = CF_QueueSelect_History;
/* valid result from CF_WrappedCreat */
strncpy(wq->filename, AnyRandomStringOfLettersOfLength(10), 10);
@@ -2788,7 +2637,7 @@ void Test_CF_WriteQueueCmd_When_CF_WriteHistoryQueueDataToFile_FailsAnd_wq_IsDow
UT_SetDataBuffer(UT_KEY(CF_WrappedClose), &context_CF_WrappedClose_fd, sizeof(context_CF_WrappedClose_fd), false);
- CF_AppData.hk.Payload.counters.err = initial_hk_err_counter;
+ CF_AppData.counters.err = initial_hk_err_counter;
/* Act */
CF_WriteQueueCmd(&utbuf);
@@ -2799,7 +2648,7 @@ void Test_CF_WriteQueueCmd_When_CF_WriteHistoryQueueDataToFile_FailsAnd_wq_IsDow
UT_CF_AssertEventID(CF_CMD_WQ_WRITEHIST_TX_ERR_EID);
UtAssert_STUB_COUNT(CF_WrappedClose, 1);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
}
void Test_CF_WriteQueueCmd_Success_type_AllAnd_q_All(void)
@@ -2816,11 +2665,11 @@ void Test_CF_WriteQueueCmd_Success_type_AllAnd_q_All(void)
memset(&utbuf, 0, sizeof(utbuf));
/* valid channel */
- wq->chan = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ wq->chan = Any_cf_chan_num();
/* valid combination all direction, all queue */
wq->type = CF_Type_all;
- wq->queue = CF_Queue_all;
+ wq->queue = CF_QueueSelect_All;
/* valid result from CF_WrappedCreat */
strncpy(wq->filename, AnyRandomStringOfLettersOfLength(10), 10);
@@ -2838,7 +2687,7 @@ void Test_CF_WriteQueueCmd_Success_type_AllAnd_q_All(void)
/* valid result from CF_WriteHistoryQueueDataToFile */
UT_SetDefaultReturnValue(UT_KEY(CF_WriteHistoryQueueDataToFile), forced_return_CF_WriteHistoryQueueDataToFile);
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_WriteQueueCmd(&utbuf);
@@ -2850,7 +2699,7 @@ void Test_CF_WriteQueueCmd_Success_type_AllAnd_q_All(void)
UT_CF_AssertEventID(CF_CMD_WQ_INF_EID);
UtAssert_STUB_COUNT(CF_WrappedClose, 0);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
}
void Test_CF_WriteQueueCmd_Success_type_AllAnd_q_History(void)
@@ -2866,11 +2715,11 @@ void Test_CF_WriteQueueCmd_Success_type_AllAnd_q_History(void)
memset(&utbuf, 0, sizeof(utbuf));
/* valid channel */
- wq->chan = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ wq->chan = Any_cf_chan_num();
/* valid combination all direction, all queue */
wq->type = CF_Type_all;
- wq->queue = CF_Queue_history;
+ wq->queue = CF_QueueSelect_History;
/* valid result from CF_WrappedCreat */
strncpy(wq->filename, AnyRandomStringOfLettersOfLength(10), 10);
@@ -2885,7 +2734,7 @@ void Test_CF_WriteQueueCmd_Success_type_AllAnd_q_History(void)
/* valid result from CF_WriteHistoryQueueDataToFile */
UT_SetDefaultReturnValue(UT_KEY(CF_WriteHistoryQueueDataToFile), forced_return_CF_WriteHistoryQueueDataToFile);
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_WriteQueueCmd(&utbuf);
@@ -2897,7 +2746,7 @@ void Test_CF_WriteQueueCmd_Success_type_AllAnd_q_History(void)
UT_CF_AssertEventID(CF_CMD_WQ_INF_EID);
UtAssert_STUB_COUNT(CF_WrappedClose, 0);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
}
void Test_CF_WriteQueueCmd_Success_type_AllAnd_q_Active(void)
@@ -2913,11 +2762,11 @@ void Test_CF_WriteQueueCmd_Success_type_AllAnd_q_Active(void)
memset(&utbuf, 0, sizeof(utbuf));
/* valid channel */
- wq->chan = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ wq->chan = Any_cf_chan_num();
/* valid combination all direction, all queue */
wq->type = CF_Type_all;
- wq->queue = CF_Queue_active;
+ wq->queue = CF_QueueSelect_Active;
/* valid result from CF_WrappedCreat */
strncpy(wq->filename, AnyRandomStringOfLettersOfLength(10), 10);
@@ -2932,7 +2781,7 @@ void Test_CF_WriteQueueCmd_Success_type_AllAnd_q_Active(void)
/* valid result from CF_WriteTxnQueueDataToFile */
UT_SetDefaultReturnValue(UT_KEY(CF_WriteTxnQueueDataToFile), forced_return_CF_WriteTxnQueueDataToFile);
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_WriteQueueCmd(&utbuf);
@@ -2944,7 +2793,7 @@ void Test_CF_WriteQueueCmd_Success_type_AllAnd_q_Active(void)
UT_CF_AssertEventID(CF_CMD_WQ_INF_EID);
UtAssert_STUB_COUNT(CF_WrappedClose, 0);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
}
void Test_CF_WriteQueueCmd_Success_type_AllAnd_q_Pend(void)
@@ -2960,11 +2809,11 @@ void Test_CF_WriteQueueCmd_Success_type_AllAnd_q_Pend(void)
memset(&utbuf, 0, sizeof(utbuf));
/* valid channel */
- wq->chan = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ wq->chan = Any_cf_chan_num();
/* valid combination all direction, all queue */
wq->type = CF_Type_all;
- wq->queue = CF_Queue_pend;
+ wq->queue = CF_QueueSelect_Pending;
/* valid result from CF_WrappedCreat */
strncpy(wq->filename, AnyRandomStringOfLettersOfLength(10), 10);
@@ -2979,7 +2828,7 @@ void Test_CF_WriteQueueCmd_Success_type_AllAnd_q_Pend(void)
/* valid result from CF_WriteTxnQueueDataToFile */
UT_SetDefaultReturnValue(UT_KEY(CF_WriteTxnQueueDataToFile), forced_return_CF_WriteTxnQueueDataToFile);
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_WriteQueueCmd(&utbuf);
@@ -2991,7 +2840,7 @@ void Test_CF_WriteQueueCmd_Success_type_AllAnd_q_Pend(void)
UT_CF_AssertEventID(CF_CMD_WQ_INF_EID);
UtAssert_STUB_COUNT(CF_WrappedClose, 0);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
}
void Test_CF_WriteQueueCmd_Success_type_UpAnd_q_All(void)
@@ -3008,11 +2857,11 @@ void Test_CF_WriteQueueCmd_Success_type_UpAnd_q_All(void)
memset(&utbuf, 0, sizeof(utbuf));
/* valid channel */
- wq->chan = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ wq->chan = Any_cf_chan_num();
/* valid combination all direction, all queue */
wq->type = CF_Type_up;
- wq->queue = CF_Queue_all;
+ wq->queue = CF_QueueSelect_All;
/* valid result from CF_WrappedCreat */
strncpy(wq->filename, AnyRandomStringOfLettersOfLength(10), 10);
@@ -3030,7 +2879,7 @@ void Test_CF_WriteQueueCmd_Success_type_UpAnd_q_All(void)
/* valid result from CF_WriteHistoryQueueDataToFile */
UT_SetDefaultReturnValue(UT_KEY(CF_WriteHistoryQueueDataToFile), forced_return_CF_WriteHistoryQueueDataToFile);
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_WriteQueueCmd(&utbuf);
@@ -3042,7 +2891,7 @@ void Test_CF_WriteQueueCmd_Success_type_UpAnd_q_All(void)
UT_CF_AssertEventID(CF_CMD_WQ_INF_EID);
UtAssert_STUB_COUNT(CF_WrappedClose, 0);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
}
void Test_CF_WriteQueueCmd_Success_type_UpAnd_q_History(void)
@@ -3058,11 +2907,11 @@ void Test_CF_WriteQueueCmd_Success_type_UpAnd_q_History(void)
memset(&utbuf, 0, sizeof(utbuf));
/* valid channel */
- wq->chan = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ wq->chan = Any_cf_chan_num();
/* valid combination all direction, all queue */
wq->type = CF_Type_up;
- wq->queue = CF_Queue_history;
+ wq->queue = CF_QueueSelect_History;
/* valid result from CF_WrappedCreat */
strncpy(wq->filename, AnyRandomStringOfLettersOfLength(10), 10);
@@ -3077,7 +2926,7 @@ void Test_CF_WriteQueueCmd_Success_type_UpAnd_q_History(void)
/* valid result from CF_WriteHistoryQueueDataToFile */
UT_SetDefaultReturnValue(UT_KEY(CF_WriteHistoryQueueDataToFile), forced_return_CF_WriteHistoryQueueDataToFile);
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_WriteQueueCmd(&utbuf);
@@ -3089,7 +2938,7 @@ void Test_CF_WriteQueueCmd_Success_type_UpAnd_q_History(void)
UT_CF_AssertEventID(CF_CMD_WQ_INF_EID);
UtAssert_STUB_COUNT(CF_WrappedClose, 0);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
}
void Test_CF_WriteQueueCmd_Success_type_UpAnd_q_Active(void)
@@ -3105,11 +2954,11 @@ void Test_CF_WriteQueueCmd_Success_type_UpAnd_q_Active(void)
memset(&utbuf, 0, sizeof(utbuf));
/* valid channel */
- wq->chan = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ wq->chan = Any_cf_chan_num();
/* valid combination all direction, all queue */
wq->type = CF_Type_up;
- wq->queue = CF_Queue_active;
+ wq->queue = CF_QueueSelect_Active;
/* valid result from CF_WrappedCreat */
strncpy(wq->filename, AnyRandomStringOfLettersOfLength(10), 10);
@@ -3124,7 +2973,7 @@ void Test_CF_WriteQueueCmd_Success_type_UpAnd_q_Active(void)
/* valid result from CF_WriteTxnQueueDataToFile */
UT_SetDefaultReturnValue(UT_KEY(CF_WriteTxnQueueDataToFile), forced_return_CF_WriteTxnQueueDataToFile);
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_WriteQueueCmd(&utbuf);
@@ -3136,7 +2985,7 @@ void Test_CF_WriteQueueCmd_Success_type_UpAnd_q_Active(void)
UT_CF_AssertEventID(CF_CMD_WQ_INF_EID);
UtAssert_STUB_COUNT(CF_WrappedClose, 0);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
}
/* Test_CF_WriteQueueCmd_Success_type_UpAnd_q_Pend IS an error and is handled by a previous test */
@@ -3154,11 +3003,11 @@ void Test_CF_WriteQueueCmd_Success_type_DownAnd_q_All(void)
memset(&utbuf, 0, sizeof(utbuf));
/* valid channel */
- wq->chan = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ wq->chan = Any_cf_chan_num();
/* valid combination all direction, all queue */
wq->type = CF_Type_down;
- wq->queue = CF_Queue_all;
+ wq->queue = CF_QueueSelect_All;
/* valid result from CF_WrappedCreat */
strncpy(wq->filename, AnyRandomStringOfLettersOfLength(10), 10);
@@ -3173,7 +3022,7 @@ void Test_CF_WriteQueueCmd_Success_type_DownAnd_q_All(void)
/* valid result from CF_WriteTxnQueueDataToFile */
UT_SetDefaultReturnValue(UT_KEY(CF_WriteTxnQueueDataToFile), forced_return_CF_WriteTxnQueueDataToFile);
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_WriteQueueCmd(&utbuf);
@@ -3185,7 +3034,7 @@ void Test_CF_WriteQueueCmd_Success_type_DownAnd_q_All(void)
UT_CF_AssertEventID(CF_CMD_WQ_INF_EID);
UtAssert_STUB_COUNT(CF_WrappedClose, 0);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
}
void Test_CF_WriteQueueCmd_Success_type_DownAnd_q_History(void)
@@ -3201,11 +3050,11 @@ void Test_CF_WriteQueueCmd_Success_type_DownAnd_q_History(void)
memset(&utbuf, 0, sizeof(utbuf));
/* valid channel */
- wq->chan = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ wq->chan = Any_cf_chan_num();
/* valid combination all direction, all queue */
wq->type = CF_Type_down;
- wq->queue = CF_Queue_history;
+ wq->queue = CF_QueueSelect_History;
/* valid result from CF_WrappedCreat */
strncpy(wq->filename, AnyRandomStringOfLettersOfLength(10), 10);
@@ -3220,7 +3069,7 @@ void Test_CF_WriteQueueCmd_Success_type_DownAnd_q_History(void)
/* valid result from CF_WriteTxnQueueDataToFile */
UT_SetDefaultReturnValue(UT_KEY(CF_WriteTxnQueueDataToFile), forced_return_CF_WriteTxnQueueDataToFile);
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_WriteQueueCmd(&utbuf);
@@ -3232,7 +3081,7 @@ void Test_CF_WriteQueueCmd_Success_type_DownAnd_q_History(void)
UT_CF_AssertEventID(CF_CMD_WQ_INF_EID);
UtAssert_STUB_COUNT(CF_WrappedClose, 0);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
}
void Test_CF_WriteQueueCmd_Success_type_DownAnd_q_Active(void)
@@ -3248,11 +3097,11 @@ void Test_CF_WriteQueueCmd_Success_type_DownAnd_q_Active(void)
memset(&utbuf, 0, sizeof(utbuf));
/* valid channel */
- wq->chan = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ wq->chan = Any_cf_chan_num();
/* valid combination all direction, all queue */
wq->type = CF_Type_down;
- wq->queue = CF_Queue_active;
+ wq->queue = CF_QueueSelect_Active;
/* valid result from CF_WrappedCreat */
strncpy(wq->filename, AnyRandomStringOfLettersOfLength(10), 10);
@@ -3267,7 +3116,7 @@ void Test_CF_WriteQueueCmd_Success_type_DownAnd_q_Active(void)
/* valid result from CF_WriteTxnQueueDataToFile */
UT_SetDefaultReturnValue(UT_KEY(CF_WriteTxnQueueDataToFile), forced_return_CF_WriteTxnQueueDataToFile);
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_WriteQueueCmd(&utbuf);
@@ -3279,7 +3128,7 @@ void Test_CF_WriteQueueCmd_Success_type_DownAnd_q_Active(void)
UT_CF_AssertEventID(CF_CMD_WQ_INF_EID);
UtAssert_STUB_COUNT(CF_WrappedClose, 0);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
}
void Test_CF_WriteQueueCmd_Success_type_DownAnd_q_Pend(void)
@@ -3295,11 +3144,11 @@ void Test_CF_WriteQueueCmd_Success_type_DownAnd_q_Pend(void)
memset(&utbuf, 0, sizeof(utbuf));
/* valid channel */
- wq->chan = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ wq->chan = Any_cf_chan_num();
/* valid combination all direction, all queue */
wq->type = CF_Type_down;
- wq->queue = CF_Queue_pend;
+ wq->queue = CF_QueueSelect_Pending;
/* valid result from CF_WrappedCreat */
strncpy(wq->filename, AnyRandomStringOfLettersOfLength(10), 10);
@@ -3314,7 +3163,7 @@ void Test_CF_WriteQueueCmd_Success_type_DownAnd_q_Pend(void)
/* valid result from CF_WriteTxnQueueDataToFile */
UT_SetDefaultReturnValue(UT_KEY(CF_WriteTxnQueueDataToFile), forced_return_CF_WriteTxnQueueDataToFile);
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_WriteQueueCmd(&utbuf);
@@ -3326,7 +3175,7 @@ void Test_CF_WriteQueueCmd_Success_type_DownAnd_q_Pend(void)
UT_CF_AssertEventID(CF_CMD_WQ_INF_EID);
UtAssert_STUB_COUNT(CF_WrappedClose, 0);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
}
/*******************************************************************************
@@ -3338,12 +3187,11 @@ void Test_CF_WriteQueueCmd_Success_type_DownAnd_q_Pend(void)
void Test_CF_ValidateChunkSizeCmd_val_GreaterThan_pdu_fd_data_t_FailAndReturn_1(void)
{
/* Arrange */
- uint8 arg_chan_num = Any_uint8(); /* value labeled as 'ignored' in func def */
- size_t arg_val = sizeof(CF_CFDP_PduFileDataContent_t) + 1;
+ size_t arg_val = sizeof(CF_CFDP_PduFileDataContent_t) + 1;
CF_ChanAction_Status_t local_result;
/* Act */
- local_result = CF_ValidateChunkSizeCmd(arg_val, arg_chan_num);
+ local_result = CF_ValidateChunkSizeCmd(arg_val, NULL);
/* Assert */
UtAssert_INT32_EQ(local_result, CF_ChanAction_Status_ERROR);
@@ -3352,12 +3200,11 @@ void Test_CF_ValidateChunkSizeCmd_val_GreaterThan_pdu_fd_data_t_FailAndReturn_1(
void Test_CF_ValidateChunkSizeCmd_Any_val_GreaterThan_pdu_fd_data_t_FailAndReturn_1(void)
{
/* Arrange */
- uint8 arg_chan_num = Any_uint8(); /* value labeled as 'ignored' in func def */
- uint32 arg_val = Any_uint32_GreaterThan(sizeof(CF_CFDP_PduFileDataContent_t));
+ uint32 arg_val = Any_uint32_GreaterThan(sizeof(CF_CFDP_PduFileDataContent_t));
CF_ChanAction_Status_t local_result;
/* Act */
- local_result = CF_ValidateChunkSizeCmd(arg_val, arg_chan_num);
+ local_result = CF_ValidateChunkSizeCmd(arg_val, NULL);
/* Assert */
UtAssert_INT32_EQ(local_result, CF_ChanAction_Status_ERROR);
@@ -3366,12 +3213,11 @@ void Test_CF_ValidateChunkSizeCmd_Any_val_GreaterThan_pdu_fd_data_t_FailAndRetur
void Test_CF_ValidateChunkSizeCmd_val_SizeOf_pdu_fd_data_t_SuccessAndReturn_0(void)
{
/* Arrange */
- uint8 arg_chan_num = Any_uint8(); /* value labeled as 'ignored' in func def */
- size_t arg_val = sizeof(CF_CFDP_PduFileDataContent_t);
+ size_t arg_val = sizeof(CF_CFDP_PduFileDataContent_t);
CF_ChanAction_Status_t local_result;
/* Act */
- local_result = CF_ValidateChunkSizeCmd(arg_val, arg_chan_num);
+ local_result = CF_ValidateChunkSizeCmd(arg_val, NULL);
/* Assert */
UtAssert_INT32_EQ(local_result, CF_ChanAction_Status_SUCCESS);
@@ -3380,12 +3226,11 @@ void Test_CF_ValidateChunkSizeCmd_val_SizeOf_pdu_fd_data_t_SuccessAndReturn_0(vo
void Test_CF_ValidateChunkSizeCmd_val_LessThanOrEqSizeOf_pdu_fd_data_t_SuccessAndReturn_0(void)
{
/* Arrange */
- uint8 arg_chan_num = Any_uint8(); /* value labeled as 'ignored' in func def */
- uint32 arg_val = Any_uint32_LessThan_or_EqualTo(sizeof(CF_CFDP_PduFileDataContent_t));
+ uint32 arg_val = Any_uint32_LessThan_or_EqualTo(sizeof(CF_CFDP_PduFileDataContent_t));
CF_ChanAction_Status_t local_result;
/* Act */
- local_result = CF_ValidateChunkSizeCmd(arg_val, arg_chan_num);
+ local_result = CF_ValidateChunkSizeCmd(arg_val, NULL);
/* Assert */
UtAssert_INT32_EQ(local_result, CF_ChanAction_Status_SUCCESS);
@@ -3400,12 +3245,11 @@ void Test_CF_ValidateChunkSizeCmd_val_LessThanOrEqSizeOf_pdu_fd_data_t_SuccessAn
void Test_CF_ValidateMaxOutgoingCmd_WhenGiven_val_IsNot_0_Return_0_Success(void)
{
/* Arrange */
- uint32 arg_val = Any_uint32_Except(0);
- uint8 arg_chan_num = Any_uint8(); /* Any_uint8() used here because it shows value does not matter in this test */
+ uint32 arg_val = Any_uint32_Except(0);
CF_ChanAction_Status_t local_result;
/* Act */
- local_result = CF_ValidateMaxOutgoingCmd(arg_val, arg_chan_num);
+ local_result = CF_ValidateMaxOutgoingCmd(arg_val, NULL);
/* Assert */
UtAssert_INT32_EQ(local_result, CF_ChanAction_Status_SUCCESS);
@@ -3414,16 +3258,15 @@ void Test_CF_ValidateMaxOutgoingCmd_WhenGiven_val_IsNot_0_Return_0_Success(void)
void Test_CF_ValidateMaxOutgoingCmd_WhenGiven_val_Is_0_But_sem_name_IsNot_NULL_Return_0_Success(void)
{
/* Arrange */
- uint32 arg_val = 0;
- uint8 arg_chan_num = Any_cf_chan_num(); /* Any_cf_chan_num used here because value matters to this test */
- CF_ConfigTable_t config_table;
+ uint32 arg_val = 0;
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num(); /* Any_cf_chan_num used here because value matters to this test */
CF_ChanAction_Status_t local_result;
+ CF_Channel_t *chan = CF_GetChannelPtr(chan_num);
- CF_AppData.config_table = &config_table;
- memset(CF_AppData.config_table->chan[arg_chan_num].sem_name, (char)Any_uint8_Except(0), 1);
+ memset(chan->config.sem_name, (char)Any_uint8_Except(0), 1);
/* Act */
- local_result = CF_ValidateMaxOutgoingCmd(arg_val, arg_chan_num);
+ local_result = CF_ValidateMaxOutgoingCmd(arg_val, chan);
/* Assert */
UtAssert_INT32_EQ(local_result, CF_ChanAction_Status_SUCCESS);
@@ -3432,16 +3275,15 @@ void Test_CF_ValidateMaxOutgoingCmd_WhenGiven_val_Is_0_But_sem_name_IsNot_NULL_R
void Test_CF_ValidateMaxOutgoingCmd_WhenGiven_val_Is_0_And_sem_name_Is_NULL_Return_1_Fail(void)
{
/* Arrange */
- uint32 arg_val = 0;
- uint8 arg_chan_num = Any_cf_chan_num(); /* Any_cf_chan_num used here because value matters to this test */
- CF_ConfigTable_t config_table;
+ uint32 arg_val = 0;
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num(); /* Any_cf_chan_num used here because value matters to this test */
CF_ChanAction_Status_t local_result;
+ CF_Channel_t *chan = CF_GetChannelPtr(chan_num);
- CF_AppData.config_table = &config_table;
- memset(CF_AppData.config_table->chan[arg_chan_num].sem_name, (char)0, 1);
+ memset(chan->config.sem_name, (char)0, 1);
/* Act */
- local_result = CF_ValidateMaxOutgoingCmd(arg_val, arg_chan_num);
+ local_result = CF_ValidateMaxOutgoingCmd(arg_val, chan);
/* Assert */
UtAssert_INT32_EQ(local_result, CF_ChanAction_Status_ERROR);
@@ -3456,18 +3298,17 @@ void Test_CF_ValidateMaxOutgoingCmd_WhenGiven_val_Is_0_And_sem_name_Is_NULL_Retu
void Test_CF_GetSetParamCmd(void)
{
/* Test cases for:
- * void CF_GetSetParamCmd(bool is_set, CF_GetSet_ValueID_t param_id, uint32 value, uint8 chan_num);
+ * void CF_GetSetParamCmd(bool is_set, CF_GetSet_ValueID_t param_id, uint32 value, CF_Channel_t *chan_ptr);
*/
/* Arrange */
- CF_ConfigTable_t ut_config_table;
CF_GetSet_ValueID_t param_id;
uint16 expected_count;
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+ CF_Channel_t *chan = UT_CFDP_CHANNEL_PTR;
- memset(&ut_config_table, 0, sizeof(ut_config_table));
- memset(&CF_AppData.hk.Payload.counters, 0, sizeof(CF_AppData.hk.Payload.counters));
- CF_AppData.config_table = &ut_config_table;
- expected_count = 0;
+ memset(&CF_AppData.counters, 0, sizeof(CF_AppData.counters));
+ expected_count = 0;
/* Nominal: "set" for each parameter */
for (param_id = 0; param_id < CF_GetSet_ValueID_MAX; ++param_id)
@@ -3475,20 +3316,20 @@ void Test_CF_GetSetParamCmd(void)
UT_CF_ResetEventCapture();
UtAssert_VOIDCALL(CF_GetSetParamCmd(true, param_id, 1 + param_id, UT_CFDP_CHANNEL));
UT_CF_AssertEventID(CF_CMD_GETSET1_INF_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, ++expected_count);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, ++expected_count);
}
/* each of the config parameters should have actually been set to a different value */
- UtAssert_UINT32_EQ(ut_config_table.ticks_per_second, 1);
- UtAssert_UINT32_EQ(ut_config_table.rx_crc_calc_bytes_per_wakeup, 2);
- UtAssert_UINT32_EQ(ut_config_table.chan[UT_CFDP_CHANNEL].ack_timer_s, 3);
- UtAssert_UINT32_EQ(ut_config_table.chan[UT_CFDP_CHANNEL].nak_timer_s, 4);
- UtAssert_UINT32_EQ(ut_config_table.chan[UT_CFDP_CHANNEL].inactivity_timer_s, 5);
- UtAssert_UINT32_EQ(ut_config_table.outgoing_file_chunk_size, 6);
- UtAssert_UINT32_EQ(ut_config_table.chan[UT_CFDP_CHANNEL].ack_limit, 7);
- UtAssert_UINT32_EQ(ut_config_table.chan[UT_CFDP_CHANNEL].nak_limit, 8);
- UtAssert_UINT32_EQ(ut_config_table.local_eid, 9);
- UtAssert_UINT32_EQ(ut_config_table.chan[UT_CFDP_CHANNEL].max_outgoing_messages_per_wakeup, 10);
+ UtAssert_UINT32_EQ(engine_ptr->config.ticks_per_second, 1);
+ UtAssert_UINT32_EQ(engine_ptr->config.rx_crc_calc_bytes_per_wakeup, 2);
+ UtAssert_UINT32_EQ(chan->config.ack_timer_s, 3);
+ UtAssert_UINT32_EQ(chan->config.nak_timer_s, 4);
+ UtAssert_UINT32_EQ(chan->config.inactivity_timer_s, 5);
+ UtAssert_UINT32_EQ(engine_ptr->config.outgoing_file_chunk_size, 6);
+ UtAssert_UINT32_EQ(chan->config.ack_limit, 7);
+ UtAssert_UINT32_EQ(chan->config.nak_limit, 8);
+ UtAssert_UINT32_EQ(engine_ptr->config.local_eid, 9);
+ UtAssert_UINT32_EQ(chan->config.max_outgoing_messages_per_wakeup, 10);
/* Nominal: "get" for each parameter */
for (param_id = 0; param_id < CF_GetSet_ValueID_MAX; ++param_id)
@@ -3496,20 +3337,20 @@ void Test_CF_GetSetParamCmd(void)
UT_CF_ResetEventCapture();
UtAssert_VOIDCALL(CF_GetSetParamCmd(false, param_id, 1, UT_CFDP_CHANNEL));
UT_CF_AssertEventID(CF_CMD_GETSET2_INF_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, ++expected_count);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, ++expected_count);
}
/* Bad param ID */
UT_CF_ResetEventCapture();
UtAssert_VOIDCALL(CF_GetSetParamCmd(false, CF_GetSet_ValueID_MAX, 0, UT_CFDP_CHANNEL));
UT_CF_AssertEventID(CF_CMD_GETSET_PARAM_ERR_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 1);
/* Bad channel ID */
UT_CF_ResetEventCapture();
UtAssert_VOIDCALL(CF_GetSetParamCmd(false, 0, 0, CF_NUM_CHANNELS + 1));
UT_CF_AssertEventID(CF_CMD_GETSET_CHAN_ERR_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 2);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 2);
/* Validation fail */
UT_CF_ResetEventCapture();
@@ -3518,7 +3359,7 @@ void Test_CF_GetSetParamCmd(void)
100 + sizeof(CF_CFDP_PduFileDataContent_t),
UT_CFDP_CHANNEL));
UT_CF_AssertEventID(CF_CMD_GETSET_VALIDATE_ERR_EID);
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 3);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 3);
}
/*******************************************************************************
@@ -3531,26 +3372,23 @@ void Test_CF_SetParamCmd_Call_CF_GetSetParamCmd_With_cmd_key_And_cmd_value(void)
{
/* Arrange */
CF_SetParamCmd_t utbuf;
- CF_ConfigTable_t config_table;
+ CF_Engine_t *engine_ptr = CF_GetEngine();
memset(&utbuf, 0, sizeof(utbuf));
- memset(&config_table, 0, sizeof(config_table));
utbuf.Payload.key = CF_GetSet_ValueID_ticks_per_second;
utbuf.Payload.value = 1;
- utbuf.Payload.chan_num = 0;
-
- CF_AppData.config_table = &config_table;
+ utbuf.Payload.chan_num = UT_CFDP_CHANNEL;
/* Act */
CF_SetParamCmd(&utbuf);
/* Assert */
- UtAssert_UINT32_EQ(CF_AppData.config_table->ticks_per_second, utbuf.Payload.value);
+ UtAssert_UINT32_EQ(engine_ptr->config.ticks_per_second, utbuf.Payload.value);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UtAssert_UINT32_EQ(UT_CF_CapturedEventIDs[0], CF_CMD_GETSET1_INF_EID);
/* Assert for incremented counter() */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, 1);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, 1);
}
/*******************************************************************************
@@ -3563,15 +3401,11 @@ void Test_CF_GetParamCmd_Call_CF_GetSetParamCmd_With_cmd_data_byte_0_AndConstant
{
/* Arrange */
CF_GetParamCmd_t utbuf;
- CF_ConfigTable_t config_table;
memset(&utbuf, 0, sizeof(utbuf));
- memset(&config_table, 0, sizeof(config_table));
utbuf.Payload.key = CF_GetSet_ValueID_ticks_per_second;
- utbuf.Payload.chan_num = 0;
-
- CF_AppData.config_table = &config_table;
+ utbuf.Payload.chan_num = UT_CFDP_CHANNEL;
/* Act */
CF_GetParamCmd(&utbuf);
@@ -3581,7 +3415,7 @@ void Test_CF_GetParamCmd_Call_CF_GetSetParamCmd_With_cmd_data_byte_0_AndConstant
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UtAssert_UINT32_EQ(UT_CF_CapturedEventIDs[0], CF_CMD_GETSET2_INF_EID);
/* Assert for incremented counter() */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, 1);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, 1);
}
/*******************************************************************************
@@ -3596,26 +3430,25 @@ void Test_CF_EnableEngineCmd_WithEngineNotEnableInitSuccessAndIncrementCmdCounte
CF_EnableEngineCmd_t utbuf;
uint32 forced_return_CF_CFDP_InitEngine = CFE_SUCCESS;
uint16 initial_hk_cmd_counter = Any_uint16();
+ CF_Engine_t *engine_ptr = CF_GetEngine();
memset(&utbuf, 0, sizeof(utbuf));
- CF_AppData.engine.enabled = false;
+ engine_ptr->enabled = false;
UT_SetDefaultReturnValue(UT_KEY(CF_CFDP_InitEngine), forced_return_CF_CFDP_InitEngine);
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_EnableEngineCmd(&utbuf);
- UT_GetStubCount(UT_KEY(CF_CFDP_InitEngine));
-
/* Assert */
UtAssert_STUB_COUNT(CF_CFDP_InitEngine, 1);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UT_CF_AssertEventID(CF_CMD_ENABLE_ENGINE_INF_EID);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
}
void Test_CF_EnableEngineCmd_WithEngineNotEnableFailsInitSendEventAndIncrementErrCounter(void)
@@ -3624,26 +3457,25 @@ void Test_CF_EnableEngineCmd_WithEngineNotEnableFailsInitSendEventAndIncrementEr
CF_EnableEngineCmd_t utbuf;
uint32 forced_return_CF_CFDP_InitEngine = Any_uint32_Except(CF_ChanAction_Status_SUCCESS);
uint16 initial_hk_err_counter = Any_uint16();
+ CF_Engine_t *engine_ptr = CF_GetEngine();
memset(&utbuf, 0, sizeof(utbuf));
- CF_AppData.engine.enabled = false;
+ engine_ptr->enabled = false;
UT_SetDefaultReturnValue(UT_KEY(CF_CFDP_InitEngine), forced_return_CF_CFDP_InitEngine);
- CF_AppData.hk.Payload.counters.err = initial_hk_err_counter;
+ CF_AppData.counters.err = initial_hk_err_counter;
/* Act */
CF_EnableEngineCmd(&utbuf);
- UT_GetStubCount(UT_KEY(CF_CFDP_InitEngine));
-
/* Assert */
UtAssert_STUB_COUNT(CF_CFDP_InitEngine, 1);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UT_CF_AssertEventID(CF_CMD_ENABLE_ENGINE_ERR_EID);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, (initial_hk_err_counter + 1) & 0xFFFF);
}
void Test_CF_EnableEngineCmd_WithEngineEnableFailsSendEventAndIncrementCmdCounter(void)
@@ -3651,24 +3483,23 @@ void Test_CF_EnableEngineCmd_WithEngineEnableFailsSendEventAndIncrementCmdCounte
/* Arrange */
CF_EnableEngineCmd_t utbuf;
uint16 initial_hk_cmd_counter = Any_uint16();
+ CF_Engine_t *engine_ptr = CF_GetEngine();
memset(&utbuf, 0, sizeof(utbuf));
- CF_AppData.engine.enabled = true;
+ engine_ptr->enabled = true;
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_EnableEngineCmd(&utbuf);
- UT_GetStubCount(UT_KEY(CF_CFDP_InitEngine));
-
/* Assert */
UtAssert_STUB_COUNT(CF_CFDP_InitEngine, 0);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UT_CF_AssertEventID(CF_CMD_ENG_ALREADY_ENA_INF_EID);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
}
/*******************************************************************************
@@ -3682,12 +3513,13 @@ void Test_CF_DisableEngineCmd_SuccessWhenEngineEnabledAndIncrementCmdCounter(voi
/* Arrange */
CF_DisableEngineCmd_t utbuf;
uint16 initial_hk_cmd_counter = Any_uint16();
+ CF_Engine_t *engine_ptr = CF_GetEngine();
memset(&utbuf, 0, sizeof(utbuf));
- CF_AppData.engine.enabled = true;
+ engine_ptr->enabled = true;
- CF_AppData.hk.Payload.counters.cmd = initial_hk_cmd_counter;
+ CF_AppData.counters.cmd = initial_hk_cmd_counter;
/* Act */
CF_DisableEngineCmd(&utbuf);
@@ -3698,7 +3530,7 @@ void Test_CF_DisableEngineCmd_SuccessWhenEngineEnabledAndIncrementCmdCounter(voi
UT_CF_AssertEventID(CF_CMD_DISABLE_ENGINE_INF_EID);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, (initial_hk_cmd_counter + 1) & 0xFFFF);
}
void Test_CF_DisableEngineCmd_WhenEngineDisabledAndIncrementCmdCounter(void)
@@ -3706,12 +3538,13 @@ void Test_CF_DisableEngineCmd_WhenEngineDisabledAndIncrementCmdCounter(void)
/* Arrange */
CF_DisableEngineCmd_t utbuf;
uint16 initial_hk_counter = Any_uint16();
+ CF_Engine_t *engine_ptr = CF_GetEngine();
memset(&utbuf, 0, sizeof(utbuf));
- CF_AppData.engine.enabled = false;
+ engine_ptr->enabled = false;
- CF_AppData.hk.Payload.counters.cmd = initial_hk_counter;
+ CF_AppData.counters.cmd = initial_hk_counter;
/* Act */
CF_DisableEngineCmd(&utbuf);
@@ -3721,7 +3554,7 @@ void Test_CF_DisableEngineCmd_WhenEngineDisabledAndIncrementCmdCounter(void)
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UT_CF_AssertEventID(CF_CMD_ENG_ALREADY_DIS_INF_EID);
/* Assert for incremented counter */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.cmd, (initial_hk_counter + 1) & 0xFFFF);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, (initial_hk_counter + 1) & 0xFFFF);
}
/*******************************************************************************
@@ -3730,14 +3563,40 @@ void Test_CF_DisableEngineCmd_WhenEngineDisabledAndIncrementCmdCounter(void)
**
*******************************************************************************/
-void Test_CF_SendHkCmd(void)
+void Test_CF_SendHkCmd_Nominal(void)
{
+ union
+ {
+ CFE_SB_Buffer_t sb;
+ CF_HkPacket_t hk;
+ } buf;
+ CFE_SB_Buffer_t *sb_buf = &buf.sb;
+
+ memset(&buf, 0xFF, sizeof(buf));
+ CF_AppData.counters.cmd = 10;
+ CF_AppData.counters.err = 20;
+ UT_SetDataBuffer(UT_KEY(CFE_SB_AllocateMessageBuffer), &sb_buf, sizeof(sb_buf), false);
+
+ /* Act */
+ CF_SendHkCmd(NULL);
+
+ /* Assert */
+ UtAssert_STUB_COUNT(CFE_MSG_Init, 1);
+ UtAssert_STUB_COUNT(CFE_SB_TransmitBuffer, 1);
+ UtAssert_UINT8_EQ(buf.hk.Payload.counters.cmd, CF_AppData.counters.cmd);
+ UtAssert_UINT8_EQ(buf.hk.Payload.counters.err, CF_AppData.counters.err);
+}
+
+void Test_CF_SendHkCmd_NoBuffers(void)
+{
+ UT_SetDefaultReturnValue(UT_KEY(CFE_SB_AllocateMessageBuffer), -1);
+
/* Act */
CF_SendHkCmd(NULL);
/* Assert */
- UtAssert_STUB_COUNT(CFE_SB_TimeStampMsg, 1);
- UtAssert_STUB_COUNT(CFE_SB_TransmitMsg, 1);
+ UtAssert_STUB_COUNT(CFE_MSG_Init, 0);
+ UtAssert_STUB_COUNT(CFE_SB_TransmitBuffer, 0);
}
/*******************************************************************************
@@ -4298,7 +4157,8 @@ void add_CF_DisableEngineCmd_tests(void)
void add_CF_SendHkCmd_tests(void)
{
- UtTest_Add(Test_CF_SendHkCmd, cf_cmd_tests_Setup, cf_cmd_tests_Teardown, "Test_CF_SendHkCmd");
+ UtTest_Add(Test_CF_SendHkCmd_Nominal, cf_cmd_tests_Setup, cf_cmd_tests_Teardown, "Test_CF_SendHkCmd_Nominal");
+ UtTest_Add(Test_CF_SendHkCmd_NoBuffers, cf_cmd_tests_Setup, cf_cmd_tests_Teardown, "Test_CF_SendHkCmd_NoBuffers");
}
void add_CF_WakeupCmd_tests(void)
diff --git a/unit-test/cf_dispatch_tests.c b/unit-test/cf_dispatch_tests.c
index 97d9fc7c..0c3c8e26 100644
--- a/unit-test/cf_dispatch_tests.c
+++ b/unit-test/cf_dispatch_tests.c
@@ -74,7 +74,7 @@ void Test_CF_ProcessGroundCommand_When_cmd_EqTo_CF_NUM_COMMANDS_FailAndSendEvent
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);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 1);
}
void Test_CF_ProcessGroundCommand_When_cmd_GreaterThan_CF_NUM_COMMANDS_FailAndSendEvent(void)
@@ -100,7 +100,7 @@ void Test_CF_ProcessGroundCommand_When_cmd_GreaterThan_CF_NUM_COMMANDS_FailAndSe
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);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 1);
}
void Test_CF_ProcessGroundCommand_Receives_cmd_AndLengthDoesNotMatchExpectedForThatCommandSendEventAndFailure(void)
@@ -130,7 +130,7 @@ void Test_CF_ProcessGroundCommand_Receives_cmd_AndLengthDoesNotMatchExpectedForT
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_UINT32_EQ(CF_AppData.counters.err, 1);
}
void Test_CF_ProcessGroundCommand_ReceivesCmdCode_0x00_AndCall_CF_NoopCmd_With_msg(void)
@@ -186,8 +186,8 @@ void Test_CF_ProcessGroundCommand_ReceivesCmdCode_0x0C_AndDoNothingBecause_fns_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_UINT32_EQ(CF_AppData.counters.cmd, 0);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 0);
}
/*******************************************************************************
@@ -227,8 +227,8 @@ void Test_CF_AppPipe_ProcessGroundCommand(void)
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);
+ UtAssert_UINT32_EQ(CF_AppData.counters.cmd, 0);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 1);
}
void Test_CF_AppPipe_WakeUp(void)
@@ -280,7 +280,7 @@ void Test_CF_AppPipe_UnrecognizedCommandEnterDefaultPath(void)
CF_AppPipe(arg_msg);
/* Assert */
- UtAssert_UINT32_EQ(CF_AppData.hk.Payload.counters.err, 1);
+ UtAssert_UINT32_EQ(CF_AppData.counters.err, 1);
UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1);
UT_CF_AssertEventID(CF_MID_ERR_EID);
}
diff --git a/unit-test/cf_timer_tests.c b/unit-test/cf_timer_tests.c
index 1d31148f..3a414cec 100644
--- a/unit-test/cf_timer_tests.c
+++ b/unit-test/cf_timer_tests.c
@@ -48,10 +48,9 @@ void Test_CF_Timer_Sec2Ticks_ReturnExpectedValue(void)
/* Arrange */
CF_Timer_Seconds_t arg_sec = Any_uint32();
uint32 ticks_per_second = Any_uint32();
- CF_ConfigTable_t config_table;
+ CF_Engine_t *engine_ptr = CF_GetEngine();
- CF_AppData.config_table = &config_table;
- CF_AppData.config_table->ticks_per_second = ticks_per_second;
+ engine_ptr->config.ticks_per_second = ticks_per_second;
/* Act */
UtAssert_UINT32_EQ(CF_Timer_Sec2Ticks(arg_sec), arg_sec * ticks_per_second);
@@ -66,16 +65,15 @@ void Test_CF_Timer_Sec2Ticks_ReturnExpectedValue(void)
void Test_CF_Timer_InitRelSec_ReceiveExpectedValue(void)
{
/* Arrange */
- uint32 arg_rel_sec = Any_uint32();
- CF_Timer_t timer;
- CF_Timer_t *arg_t = &timer;
+ uint32 arg_rel_sec = Any_uint32();
+ CF_Timer_t timer;
+ CF_Timer_t *arg_t = &timer;
+ CF_Engine_t *engine_ptr = CF_GetEngine();
/* Arrange unstubbalbe: CF_Timer_Sec2Ticks in same file */
- uint32 ticks_per_second = Any_uint32();
- CF_ConfigTable_t config_table;
+ uint32 ticks_per_second = Any_uint32();
- CF_AppData.config_table = &config_table;
- CF_AppData.config_table->ticks_per_second = ticks_per_second;
+ engine_ptr->config.ticks_per_second = ticks_per_second;
arg_t->tick = ticks_per_second;
diff --git a/unit-test/cf_utils_tests.c b/unit-test/cf_utils_tests.c
index 97efd604..4f37ba4e 100644
--- a/unit-test/cf_utils_tests.c
+++ b/unit-test/cf_utils_tests.c
@@ -113,14 +113,15 @@ void Test_CF_ResetHistory(void)
/* Test case for:
* void CF_ResetHistory(CF_Channel_t *chan, CF_History_t *history)
*/
- CF_History_t history;
+ CF_History_t history;
+ CF_Channel_t *chan = UT_CFDP_CHANNEL_PTR;
memset(&history, 0, sizeof(history));
- CF_AppData.hk.Payload.channel_hk[UT_CFDP_CHANNEL].q_size[CF_QueueIdx_HIST] = 4;
+ chan->stat.q_size[CF_QueueIdx_HIST] = 4;
/* nominal call */
- UtAssert_VOIDCALL(CF_ResetHistory(&CF_AppData.engine.channels[UT_CFDP_CHANNEL], &history));
+ UtAssert_VOIDCALL(CF_ResetHistory(chan, &history));
}
void Test_CF_FindUnusedTransaction(void)
@@ -135,10 +136,10 @@ void Test_CF_FindUnusedTransaction(void)
memset(&hist, 0, sizeof(hist));
memset(&txn, 0, sizeof(txn));
memset(&CF_AppData, 0, sizeof(CF_AppData));
- chan = &CF_AppData.engine.channels[UT_CFDP_CHANNEL];
- CF_AppData.hk.Payload.channel_hk[UT_CFDP_CHANNEL].q_size[CF_QueueIdx_FREE] = 2;
- CF_AppData.hk.Payload.channel_hk[UT_CFDP_CHANNEL].q_size[CF_QueueIdx_HIST_FREE] = 1;
- CF_AppData.hk.Payload.channel_hk[UT_CFDP_CHANNEL].q_size[CF_QueueIdx_HIST] = 1;
+ chan = UT_CFDP_CHANNEL_PTR;
+ chan->stat.q_size[CF_QueueIdx_FREE] = 2;
+ chan->stat.q_size[CF_QueueIdx_HIST_FREE] = 1;
+ chan->stat.q_size[CF_QueueIdx_HIST] = 1;
UtAssert_NULL(CF_FindUnusedTransaction(chan, 0));
@@ -161,15 +162,17 @@ void Test_CF_FreeTransaction(void)
* void CF_FreeTransaction(CF_Transaction_t *txn, uint8 chan)
*/
CF_Transaction_t *txn;
+ CF_Engine_t *engine_ptr = CF_GetEngine();
memset(&CF_AppData, 0, sizeof(CF_AppData));
- txn = &CF_AppData.engine.transactions[UT_CFDP_CHANNEL];
+ txn = &engine_ptr->transactions[0];
txn->flags.com.q_index = CF_QueueIdx_RX;
+ txn->chan_ptr = UT_CFDP_CHANNEL_PTR;
- UtAssert_VOIDCALL(CF_FreeTransaction(txn, UT_CFDP_CHANNEL));
+ UtAssert_VOIDCALL(CF_FreeTransaction(txn));
UtAssert_UINT32_EQ(txn->state, CF_TxnState_UNDEF);
- UtAssert_UINT8_EQ(txn->chan_num, UT_CFDP_CHANNEL);
+ UtAssert_ADDRESS_EQ(CF_GetChannelFromTxn(txn), UT_CFDP_CHANNEL_PTR);
UtAssert_STUB_COUNT(CF_CList_InsertBack, 1);
}
@@ -186,7 +189,8 @@ void Test_CF_FindTransactionBySequenceNumber_Impl(void)
memset(&hist, 0, sizeof(hist));
memset(&ctxt, 0, sizeof(ctxt));
- txn.history = &hist;
+ txn.history = &hist;
+ txn.chan_ptr = UT_CFDP_CHANNEL_PTR;
/* non-matching eid and non-matching sequence */
hist.src_eid = 12;
@@ -230,14 +234,15 @@ void Test_CF_FindTransactionBySequenceNumber(void)
CF_Transaction_t *txn;
CF_Channel_t *chan;
+ CF_Engine_t *engine_ptr = CF_GetEngine();
memset(&CF_AppData, 0, sizeof(CF_AppData));
- chan = &CF_AppData.engine.channels[UT_CFDP_CHANNEL];
+ chan = UT_CFDP_CHANNEL_PTR;
UtAssert_NULL(CF_FindTransactionBySequenceNumber(chan, 12, 34));
UtAssert_STUB_COUNT(CF_CList_Traverse, 3); /* this checks 3 different queues: RX, TX, PEND */
- txn = &CF_AppData.engine.transactions[UT_CFDP_CHANNEL];
+ txn = &engine_ptr->transactions[0];
UT_SetHandlerFunction(UT_KEY(CF_CList_Traverse), UT_AltHandler_CF_CList_Traverse_SeqArg_SetTxn, txn);
UtAssert_ADDRESS_EQ(CF_FindTransactionBySequenceNumber(chan, 12, 34), txn);
}
@@ -251,9 +256,10 @@ void Test_CF_GetChannelFromTxn(void)
memset(&txn, 0, sizeof(txn));
+ txn.chan_ptr = UT_CFDP_CHANNEL_PTR;
UtAssert_NOT_NULL(CF_GetChannelFromTxn(&txn));
- txn.chan_num = CF_NUM_CHANNELS + 1;
+ txn.chan_ptr = NULL;
UtAssert_NULL(CF_GetChannelFromTxn(&txn));
}
@@ -262,7 +268,7 @@ void Test_CF_GetChunkListHead(void)
/* Test case for:
* CF_CListNode_t **CF_GetChunkListHead(CF_Channel_t *chan, uint8 direction)
*/
- CF_Channel_t *chan = CF_AppData.engine.channels;
+ CF_Channel_t *chan = UT_CFDP_CHANNEL_PTR;
UtAssert_NULL(CF_GetChunkListHead(NULL, CF_Direction_RX));
UtAssert_NULL(CF_GetChunkListHead(chan, CF_Direction_NUM));
@@ -304,12 +310,13 @@ void Test_CF_CFDP_GetTxnStatus(void)
void Test_cf_dequeue_transaction_Call_CF_CList_Remove_AndDecrement_q_size(void)
{
/* Arrange */
- CF_Transaction_t arg_t;
- uint8 chan_num = Any_uint8_LessThan(CF_NUM_CHANNELS);
- CF_CListNode_t **expected_head;
- CF_CListNode_t *expected_cl_node;
- uint16 initial_q_size = Any_uint16_Except(0); /* 0 will CF_Assert */
- uint16 updated_q_size;
+ CF_Transaction_t arg_t;
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ CF_Channel_t *chan = CF_GetChannelPtr(chan_num);
+ CF_CListNode_t **expected_head;
+ CF_CListNode_t *expected_cl_node;
+ uint16 initial_q_size = Any_uint16_Except(0); /* 0 will CF_Assert */
+ uint16 updated_q_size;
CF_CList_Remove_context_t context_clist_remove;
@@ -317,16 +324,16 @@ void Test_cf_dequeue_transaction_Call_CF_CList_Remove_AndDecrement_q_size(void)
UT_SetDataBuffer(UT_KEY(CF_CList_Remove), &context_clist_remove, sizeof(context_clist_remove), false);
- arg_t.chan_num = chan_num;
- expected_head = &CF_AppData.engine.channels[arg_t.chan_num].qs[arg_t.flags.com.q_index];
+ arg_t.chan_ptr = chan;
+ expected_head = &chan->qs[arg_t.flags.com.q_index];
expected_cl_node = &arg_t.cl_node;
- CF_AppData.hk.Payload.channel_hk[arg_t.chan_num].q_size[arg_t.flags.com.q_index] = initial_q_size;
+ chan->stat.q_size[arg_t.flags.com.q_index] = initial_q_size;
/* Act */
CF_DequeueTransaction(&arg_t);
- updated_q_size = CF_AppData.hk.Payload.channel_hk[arg_t.chan_num].q_size[arg_t.flags.com.q_index];
+ updated_q_size = chan->stat.q_size[arg_t.flags.com.q_index];
/* Assert */
UtAssert_ADDRESS_EQ(context_clist_remove.head, expected_head);
@@ -344,7 +351,8 @@ void Test_cf_move_transaction_Call_CF_CList_InsertBack_AndSet_q_index_ToGiven_q(
/* Arrange */
CF_Transaction_t txn;
CF_Transaction_t *arg_t = &txn;
- uint8 chan_num = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ CF_Channel_t *chan = CF_GetChannelPtr(chan_num);
CF_CListNode_t **expected_remove_head;
CF_CListNode_t *expected_remove_node;
CF_CListNode_t **expected_insert_back_head;
@@ -355,20 +363,20 @@ void Test_cf_move_transaction_Call_CF_CList_InsertBack_AndSet_q_index_ToGiven_q(
memset(&txn, 0, sizeof(txn));
- arg_t->chan_num = chan_num;
+ arg_t->chan_ptr = chan;
UT_SetDataBuffer(UT_KEY(CF_CList_Remove), &context_clist_remove, sizeof(context_clist_remove), false);
- expected_remove_head = &CF_AppData.engine.channels[arg_t->chan_num].qs[arg_t->flags.com.q_index];
+ expected_remove_head = &chan->qs[arg_t->flags.com.q_index];
expected_remove_node = &arg_t->cl_node;
UT_SetDataBuffer(UT_KEY(CF_CList_InsertBack), &context_clist_insert_back, sizeof(context_clist_insert_back), false);
- expected_insert_back_head = &CF_AppData.engine.channels[arg_t->chan_num].qs[arg_q];
+ expected_insert_back_head = &chan->qs[arg_q];
expected_insert_back_node = &arg_t->cl_node;
/* Queue size needs to be >= 1 */
- CF_AppData.hk.Payload.channel_hk[arg_t->chan_num].q_size[arg_t->flags.com.q_index] = 1;
+ chan->stat.q_size[arg_t->flags.com.q_index] = 1;
/* Act */
CF_MoveTransaction(arg_t, arg_q);
@@ -391,14 +399,15 @@ void Test_cf_move_transaction_Call_CF_CList_InsertBack_AndSet_q_index_ToGiven_q(
void Test_CF_CList_Remove_Ex_Call_CF_CList_Remove_AndDecrement_q_size(void)
{
/* Arrange */
- CF_Channel_t *arg_c = &CF_AppData.engine.channels[Any_uint32_LessThan(CF_NUM_CHANNELS)];
- CF_QueueIdx_t arg_index = Any_cf_queue_index_t();
- CF_CListNode_t node;
- CF_CListNode_t *arg_node = &node;
- CF_CListNode_t **expected_remove_head;
- CF_CListNode_t *expected_remove_node;
- uint16 initial_q_size = Any_uint16_Except(0);
- uint16 updated_q_size;
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ CF_Channel_t *arg_c = CF_GetChannelPtr(chan_num);
+ CF_QueueIdx_t arg_index = Any_cf_queue_index_t();
+ CF_CListNode_t node;
+ CF_CListNode_t *arg_node = &node;
+ CF_CListNode_t **expected_remove_head;
+ CF_CListNode_t *expected_remove_node;
+ uint16 initial_q_size = Any_uint16_Except(0);
+ uint16 updated_q_size;
CF_CList_Remove_context_t context_clist_remove;
@@ -407,12 +416,12 @@ void Test_CF_CList_Remove_Ex_Call_CF_CList_Remove_AndDecrement_q_size(void)
expected_remove_head = &arg_c->qs[arg_index];
expected_remove_node = arg_node;
- CF_AppData.hk.Payload.channel_hk[arg_c - CF_AppData.engine.channels].q_size[arg_index] = initial_q_size;
+ arg_c->stat.q_size[arg_index] = initial_q_size;
/* Act */
CF_CList_Remove_Ex(arg_c, arg_index, arg_node);
- updated_q_size = CF_AppData.hk.Payload.channel_hk[arg_c - CF_AppData.engine.channels].q_size[arg_index];
+ updated_q_size = arg_c->stat.q_size[arg_index];
/* Assert */
UtAssert_STUB_COUNT(CF_CList_Remove, 1);
@@ -429,15 +438,16 @@ void Test_CF_CList_Remove_Ex_Call_CF_CList_Remove_AndDecrement_q_size(void)
void Test_CF_CList_InsertAfter_Ex_Call_CF_CList_InsertAfter_AndIncrement_q_size(void)
{
/* Arrange */
- CF_Channel_t *arg_c = &CF_AppData.engine.channels[Any_uint32_LessThan(CF_NUM_CHANNELS)];
- CF_QueueIdx_t arg_index = Any_cf_queue_index_t();
- CF_CListNode_t start;
- CF_CListNode_t *arg_start = &start;
- CF_CListNode_t after;
- CF_CListNode_t *arg_after = &after;
- CF_CListNode_t **expected_insert_after_head = &arg_c->qs[arg_index];
- uint16 initial_q_size = Any_uint16();
- uint16 updated_q_size;
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ CF_Channel_t *arg_c = CF_GetChannelPtr(chan_num);
+ CF_QueueIdx_t arg_index = Any_cf_queue_index_t();
+ CF_CListNode_t start;
+ CF_CListNode_t *arg_start = &start;
+ CF_CListNode_t after;
+ CF_CListNode_t *arg_after = &after;
+ CF_CListNode_t **expected_insert_after_head = &arg_c->qs[arg_index];
+ uint16 initial_q_size = Any_uint16();
+ uint16 updated_q_size;
CF_CList_InsertAfter_context_t context_CF_CList_InsertAfter;
@@ -446,12 +456,12 @@ void Test_CF_CList_InsertAfter_Ex_Call_CF_CList_InsertAfter_AndIncrement_q_size(
sizeof(context_CF_CList_InsertAfter),
false);
- CF_AppData.hk.Payload.channel_hk[arg_c - CF_AppData.engine.channels].q_size[arg_index] = initial_q_size;
+ arg_c->stat.q_size[arg_index] = initial_q_size;
/* Act */
CF_CList_InsertAfter_Ex(arg_c, arg_index, arg_start, arg_after);
- updated_q_size = CF_AppData.hk.Payload.channel_hk[arg_c - CF_AppData.engine.channels].q_size[arg_index];
+ updated_q_size = arg_c->stat.q_size[arg_index];
/* Assert */
UtAssert_STUB_COUNT(CF_CList_InsertAfter, 1);
@@ -469,14 +479,15 @@ void Test_CF_CList_InsertAfter_Ex_Call_CF_CList_InsertAfter_AndIncrement_q_size(
void Test_CF_CList_InsertBack_Ex_Call_CF_CList_InsertBack_AndIncrement_q_size(void)
{
/* Arrange */
- CF_Channel_t *arg_c = &CF_AppData.engine.channels[Any_uint32_LessThan(CF_NUM_CHANNELS)];
- CF_QueueIdx_t arg_index = Any_cf_queue_index_t();
- CF_CListNode_t node;
- CF_CListNode_t *arg_node = &node;
- uint16 initial_q_size = Any_uint16();
- CF_CListNode_t **expected_insert_back_head;
- CF_CListNode_t *expected_insert_back_node;
- uint16 updated_q_size;
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ CF_Channel_t *arg_c = CF_GetChannelPtr(chan_num);
+ CF_QueueIdx_t arg_index = Any_cf_queue_index_t();
+ CF_CListNode_t node;
+ CF_CListNode_t *arg_node = &node;
+ uint16 initial_q_size = Any_uint16();
+ CF_CListNode_t **expected_insert_back_head;
+ CF_CListNode_t *expected_insert_back_node;
+ uint16 updated_q_size;
CF_CList_InsertBack_context_t context_clist_insert_back;
UT_SetDataBuffer(UT_KEY(CF_CList_InsertBack), &context_clist_insert_back, sizeof(context_clist_insert_back), false);
@@ -484,12 +495,12 @@ void Test_CF_CList_InsertBack_Ex_Call_CF_CList_InsertBack_AndIncrement_q_size(vo
expected_insert_back_head = &arg_c->qs[arg_index];
expected_insert_back_node = arg_node;
- CF_AppData.hk.Payload.channel_hk[arg_c - CF_AppData.engine.channels].q_size[arg_index] = initial_q_size;
+ arg_c->stat.q_size[arg_index] = initial_q_size;
/* Act */
CF_CList_InsertBack_Ex(arg_c, arg_index, arg_node);
- updated_q_size = CF_AppData.hk.Payload.channel_hk[arg_c - CF_AppData.engine.channels].q_size[arg_index];
+ updated_q_size = arg_c->stat.q_size[arg_index];
/* Assert */
UtAssert_STUB_COUNT(CF_CList_InsertBack, 1);
@@ -710,24 +721,24 @@ void Test_CF_PrioSearch_When_t_PrioIsLessThanContextPrio_Set_context_t_To_t_AndR
void Test_CF_InsertSortPrio_Call_CF_CList_InsertBack_Ex_ListIsEmpty_AndSet_q_index_To_q(void)
{
/* Arrange */
- CF_Transaction_t txn;
- CF_Transaction_t *arg_t = &txn;
- CF_QueueIdx_t arg_q = Any_cf_queue_index_t();
- CF_Channel_t *chan;
- CF_CListNode_t **expected_insert_back_head;
- CF_CListNode_t *expected_insert_back_node;
+ CF_Transaction_t txn;
+ CF_Transaction_t *arg_t = &txn;
+ CF_QueueIdx_t arg_q = Any_cf_queue_index_t();
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ CF_Channel_t *chan = CF_GetChannelPtr(chan_num);
+ CF_CListNode_t **expected_insert_back_head;
+ CF_CListNode_t *expected_insert_back_node;
CF_CList_InsertBack_context_t context_clist_insert_back;
/* txn settings to bypass CF_Assert */
- txn.chan_num = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ txn.chan_ptr = chan;
txn.state = Any_uint8_Except(CF_TxnState_INIT);
UT_SetDataBuffer(UT_KEY(CF_CList_InsertBack), &context_clist_insert_back, sizeof(context_clist_insert_back), false);
- /* setting (&CF_AppData.engine.channels[arg_t->chan_num])->qs[arg_q] to NULL
+ /* setting (&engine_ptr->channels[arg_t->chan_num])->qs[arg_q] to NULL
* makes the list empty */
- chan = &CF_AppData.engine.channels[arg_t->chan_num];
chan->qs[arg_q] = NULL;
expected_insert_back_head = &chan->qs[arg_q];
@@ -749,17 +760,18 @@ void Test_CF_InsertSortPrio_Call_CF_CList_InsertBack_Ex_ListIsEmpty_AndSet_q_ind
void Test_CF_InsertSortPrio_Call_CF_CList_InsertAfter_Ex_AndSet_q_index_To_q(void)
{
/* Arrange */
- CF_Transaction_t p_t;
- CF_Transaction_t txn;
- CF_Transaction_t *arg_t = &txn;
- CF_QueueIdx_t arg_q = Any_cf_queue_index_t();
- CF_CListNode_t *qs;
- CF_Channel_t *chan;
- CF_CListNode_t *expected_end;
- CF_CListFn_t expected_fn;
- CF_CListNode_t **expected_insert_after_head;
- CF_CListNode_t **expected_insert_after_start;
- CF_CListNode_t **expected_insert_after_after;
+ CF_Transaction_t p_t;
+ CF_Transaction_t txn;
+ CF_Transaction_t *arg_t = &txn;
+ CF_QueueIdx_t arg_q = Any_cf_queue_index_t();
+ CF_CListNode_t *qs;
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ CF_Channel_t *chan = CF_GetChannelPtr(chan_num);
+ CF_CListNode_t *expected_end;
+ CF_CListFn_t expected_fn;
+ CF_CListNode_t **expected_insert_after_head;
+ CF_CListNode_t **expected_insert_after_start;
+ CF_CListNode_t **expected_insert_after_after;
CF_CList_Traverse_R_context_t context_cf_clist_traverse_r;
CF_CList_InsertAfter_context_t context_CF_CList_InsertAfter;
@@ -769,12 +781,11 @@ void Test_CF_InsertSortPrio_Call_CF_CList_InsertAfter_Ex_AndSet_q_index_To_q(voi
&context_cf_clist_traverse_r);
/* txn settings to bypass CF_Assert */
- txn.chan_num = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ txn.chan_ptr = chan;
txn.state = Any_uint8_Except(CF_TxnState_INIT);
- /* setting (&CF_AppData.engine.channels[arg_t->chan_num])->qs[arg_q] to
+ /* setting (&engine_ptr->channels[arg_t->chan_num])->qs[arg_q] to
* &qs makes the list NOT empty */
- chan = &CF_AppData.engine.channels[arg_t->chan_num];
chan->qs[arg_q] = (CF_CListNode_t *)&qs;
/* setup CF_Traverse_PriorityArg_t altered value */
@@ -813,15 +824,16 @@ void Test_CF_InsertSortPrio_Call_CF_CList_InsertAfter_Ex_AndSet_q_index_To_q(voi
void Test_CF_InsertSortPrio_When_p_t_Is_NULL_Call_CF_CList_InsertBack_Ex(void)
{
/* Arrange */
- CF_Transaction_t txn;
- CF_Transaction_t *arg_t = &txn;
- CF_QueueIdx_t arg_q = Any_cf_queue_index_t();
- CF_CListNode_t *qs;
- CF_Channel_t *chan;
- CF_CListNode_t *expected_end;
- CF_CListFn_t expected_fn;
- CF_CListNode_t **expected_insert_back_head;
- CF_CListNode_t *expected_insert_back_node;
+ CF_Transaction_t txn;
+ CF_Transaction_t *arg_t = &txn;
+ CF_QueueIdx_t arg_q = Any_cf_queue_index_t();
+ CF_CListNode_t *qs;
+ CF_ChannelSelect_t chan_num = Any_cf_chan_num();
+ CF_Channel_t *chan = CF_GetChannelPtr(chan_num);
+ CF_CListNode_t *expected_end;
+ CF_CListFn_t expected_fn;
+ CF_CListNode_t **expected_insert_back_head;
+ CF_CListNode_t *expected_insert_back_node;
CF_CList_Traverse_R_context_t context_cf_clist_traverse_r;
CF_CList_InsertBack_context_t context_clist_insert_back;
@@ -832,12 +844,11 @@ void Test_CF_InsertSortPrio_When_p_t_Is_NULL_Call_CF_CList_InsertBack_Ex(void)
false);
/* txn settings to bypass CF_Assert */
- txn.chan_num = Any_uint8_LessThan(CF_NUM_CHANNELS);
+ txn.chan_ptr = chan;
txn.state = Any_uint8_Except(CF_TxnState_INIT);
- /* setting (&CF_AppData.engine.channels[arg_t->chan_num])->qs[arg_q] to
+ /* setting (&engine_ptr->channels[arg_t->chan_num])->qs[arg_q] to
* &qs makes the list NOT empty */
- chan = &CF_AppData.engine.channels[arg_t->chan_num];
chan->qs[arg_q] = (CF_CListNode_t *)&qs;
/* setup CF_Traverse_PriorityArg_t altered value */
@@ -1184,6 +1195,33 @@ void Test_CF_TxnStatus_From_ConditionCode(void)
}
}
+static int32 CF_UT_ChannelFunc(CF_Engine_t *engine_ptr, CF_Channel_t *chan, void *arg)
+{
+ return UT_DEFAULT_IMPL(CF_UT_ChannelFunc);
+}
+
+void Test_CF_ForEachChannel(void)
+{
+ /* Test function for:
+ * int32 CF_ForEachChannel(CF_Engine_t *engine_ptr, CF_ChannelFunc_t fn, void *arg)
+ */
+ CF_Engine_t *engine_ptr = CF_GetEngine();
+
+ UT_ResetState(UT_KEY(CF_UT_ChannelFunc));
+ UtAssert_INT32_EQ(CF_ForEachChannel(engine_ptr, CF_UT_ChannelFunc, NULL), CFE_SUCCESS);
+ UtAssert_STUB_COUNT(CF_UT_ChannelFunc, CF_NUM_CHANNELS);
+
+ UT_ResetState(UT_KEY(CF_UT_ChannelFunc));
+ UT_SetDeferredRetcode(UT_KEY(CF_UT_ChannelFunc), 1, -1);
+ UtAssert_INT32_EQ(CF_ForEachChannel(engine_ptr, CF_UT_ChannelFunc, NULL), -1);
+ UtAssert_STUB_COUNT(CF_UT_ChannelFunc, 1);
+
+ UT_ResetState(UT_KEY(CF_UT_ChannelFunc));
+ UT_SetDeferredRetcode(UT_KEY(CF_UT_ChannelFunc), CF_NUM_CHANNELS, -1);
+ UtAssert_INT32_EQ(CF_ForEachChannel(engine_ptr, CF_UT_ChannelFunc, NULL), -1);
+ UtAssert_STUB_COUNT(CF_UT_ChannelFunc, CF_NUM_CHANNELS);
+}
+
/*******************************************************************************
**
** cf_utils_tests UtTest_Add groups
@@ -1427,4 +1465,6 @@ void UtTest_Setup(void)
add_CF_WrappedWrite_tests();
add_CF_WrappedLseek_tests();
+
+ UtTest_Add(Test_CF_ForEachChannel, cf_utils_tests_Setup, cf_utils_tests_Teardown, "Test_CF_ForEachChannel");
}
diff --git a/unit-test/stubs/cf_cfdp_handlers.c b/unit-test/stubs/cf_cfdp_handlers.c
index f41613a0..483ecf31 100644
--- a/unit-test/stubs/cf_cfdp_handlers.c
+++ b/unit-test/stubs/cf_cfdp_handlers.c
@@ -80,7 +80,7 @@ void UT_DefaultHandler_CF_CFDP_TxFile(void *UserObj, UT_EntryKey_t FuncKey, cons
strncpy(ctxt->dst_filename, ptr, sizeof(ctxt->dst_filename));
ctxt->cfdp_class = UT_Hook_GetArgValueByName(Context, "cfdp_class", CF_CFDP_Class_t);
ctxt->keep = UT_Hook_GetArgValueByName(Context, "keep", uint8);
- ctxt->chan = UT_Hook_GetArgValueByName(Context, "chan", uint8);
+ ctxt->chan = UT_Hook_GetArgValueByName(Context, "chan", CF_Channel_t *);
ctxt->priority = UT_Hook_GetArgValueByName(Context, "priority", uint8);
ctxt->dest_id = UT_Hook_GetArgValueByName(Context, "dest_id", CF_EntityId_t);
}
@@ -105,7 +105,7 @@ void UT_DefaultHandler_CF_CFDP_PlaybackDir(void *UserObj, UT_EntryKey_t FuncKey,
strncpy(ctxt->dst_filename, ptr, sizeof(ctxt->dst_filename));
ctxt->cfdp_class = UT_Hook_GetArgValueByName(Context, "cfdp_class", CF_CFDP_Class_t);
ctxt->keep = UT_Hook_GetArgValueByName(Context, "keep", uint8);
- ctxt->chan = UT_Hook_GetArgValueByName(Context, "chan", uint8);
+ ctxt->chan = UT_Hook_GetArgValueByName(Context, "chan", CF_Channel_t *);
ctxt->priority = UT_Hook_GetArgValueByName(Context, "priority", uint8);
ctxt->dest_id = UT_Hook_GetArgValueByName(Context, "dest_id", uint16);
}
diff --git a/unit-test/stubs/cf_cfdp_s_stubs.c b/unit-test/stubs/cf_cfdp_s_stubs.c
index e6e49f7b..9a17e0ad 100644
--- a/unit-test/stubs/cf_cfdp_s_stubs.c
+++ b/unit-test/stubs/cf_cfdp_s_stubs.c
@@ -39,6 +39,19 @@ void CF_CFDP_S1_Recv(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
UT_GenStub_Execute(CF_CFDP_S1_Recv, Basic, NULL);
}
+/*
+ * ----------------------------------------------------
+ * Generated stub function for CF_CFDP_S2_Recv()
+ * ----------------------------------------------------
+ */
+void CF_CFDP_S2_Recv(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
+{
+ UT_GenStub_AddParam(CF_CFDP_S2_Recv, CF_Transaction_t *, txn);
+ UT_GenStub_AddParam(CF_CFDP_S2_Recv, CF_Logical_PduBuffer_t *, ph);
+
+ UT_GenStub_Execute(CF_CFDP_S2_Recv, Basic, NULL);
+}
+
/*
* ----------------------------------------------------
* Generated stub function for CF_CFDP_S2_SubstateEofAck()
@@ -65,19 +78,6 @@ void CF_CFDP_S2_SubstateNak(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
UT_GenStub_Execute(CF_CFDP_S2_SubstateNak, Basic, NULL);
}
-/*
- * ----------------------------------------------------
- * Generated stub function for CF_CFDP_S2_Recv()
- * ----------------------------------------------------
- */
-void CF_CFDP_S2_Recv(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
-{
- UT_GenStub_AddParam(CF_CFDP_S2_Recv, CF_Transaction_t *, txn);
- UT_GenStub_AddParam(CF_CFDP_S2_Recv, CF_Logical_PduBuffer_t *, ph);
-
- UT_GenStub_Execute(CF_CFDP_S2_Recv, Basic, NULL);
-}
-
/*
* ----------------------------------------------------
* Generated stub function for CF_CFDP_S_AckTimerTick()
@@ -102,32 +102,6 @@ void CF_CFDP_S_CheckState(CF_Transaction_t *txn)
UT_GenStub_Execute(CF_CFDP_S_CheckState, Basic, NULL);
}
-/*
- * ----------------------------------------------------
- * Generated stub function for CF_CFDP_S_SubstateEarlyFin()
- * ----------------------------------------------------
- */
-void CF_CFDP_S_SubstateEarlyFin(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
-{
- UT_GenStub_AddParam(CF_CFDP_S_SubstateEarlyFin, CF_Transaction_t *, txn);
- UT_GenStub_AddParam(CF_CFDP_S_SubstateEarlyFin, CF_Logical_PduBuffer_t *, ph);
-
- UT_GenStub_Execute(CF_CFDP_S_SubstateEarlyFin, Basic, NULL);
-}
-
-/*
- * ----------------------------------------------------
- * Generated stub function for CF_CFDP_S_SubstateRecvFin()
- * ----------------------------------------------------
- */
-void CF_CFDP_S_SubstateRecvFin(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
-{
- UT_GenStub_AddParam(CF_CFDP_S_SubstateRecvFin, CF_Transaction_t *, txn);
- UT_GenStub_AddParam(CF_CFDP_S_SubstateRecvFin, CF_Logical_PduBuffer_t *, ph);
-
- UT_GenStub_Execute(CF_CFDP_S_SubstateRecvFin, Basic, NULL);
-}
-
/*
* ----------------------------------------------------
* Generated stub function for CF_CFDP_S_HandleFileRetention()
@@ -171,6 +145,32 @@ CFE_Status_t CF_CFDP_S_SendFileData(CF_Transaction_t *txn, uint32 foffs, uint32
return UT_GenStub_GetReturnValue(CF_CFDP_S_SendFileData, CFE_Status_t);
}
+/*
+ * ----------------------------------------------------
+ * Generated stub function for CF_CFDP_S_SubstateEarlyFin()
+ * ----------------------------------------------------
+ */
+void CF_CFDP_S_SubstateEarlyFin(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
+{
+ UT_GenStub_AddParam(CF_CFDP_S_SubstateEarlyFin, CF_Transaction_t *, txn);
+ UT_GenStub_AddParam(CF_CFDP_S_SubstateEarlyFin, CF_Logical_PduBuffer_t *, ph);
+
+ UT_GenStub_Execute(CF_CFDP_S_SubstateEarlyFin, Basic, NULL);
+}
+
+/*
+ * ----------------------------------------------------
+ * Generated stub function for CF_CFDP_S_SubstateRecvFin()
+ * ----------------------------------------------------
+ */
+void CF_CFDP_S_SubstateRecvFin(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
+{
+ UT_GenStub_AddParam(CF_CFDP_S_SubstateRecvFin, CF_Transaction_t *, txn);
+ UT_GenStub_AddParam(CF_CFDP_S_SubstateRecvFin, CF_Logical_PduBuffer_t *, ph);
+
+ UT_GenStub_Execute(CF_CFDP_S_SubstateRecvFin, Basic, NULL);
+}
+
/*
* ----------------------------------------------------
* Generated stub function for CF_CFDP_S_SubstateSendFileData()
diff --git a/unit-test/stubs/cf_cfdp_sbintf_stubs.c b/unit-test/stubs/cf_cfdp_sbintf_stubs.c
index afd26193..af649ced 100644
--- a/unit-test/stubs/cf_cfdp_sbintf_stubs.c
+++ b/unit-test/stubs/cf_cfdp_sbintf_stubs.c
@@ -62,9 +62,9 @@ void CF_CFDP_ReceiveMessage(CF_Channel_t *chan)
* Generated stub function for CF_CFDP_Send()
* ----------------------------------------------------
*/
-void CF_CFDP_Send(uint8 chan_num, const CF_Logical_PduBuffer_t *ph)
+void CF_CFDP_Send(CF_Channel_t *chan_ptr, const CF_Logical_PduBuffer_t *ph)
{
- UT_GenStub_AddParam(CF_CFDP_Send, uint8, chan_num);
+ UT_GenStub_AddParam(CF_CFDP_Send, CF_Channel_t *, chan_ptr);
UT_GenStub_AddParam(CF_CFDP_Send, const CF_Logical_PduBuffer_t *, ph);
UT_GenStub_Execute(CF_CFDP_Send, Basic, NULL);
diff --git a/unit-test/stubs/cf_cfdp_stubs.c b/unit-test/stubs/cf_cfdp_stubs.c
index 79c35255..a856756f 100644
--- a/unit-test/stubs/cf_cfdp_stubs.c
+++ b/unit-test/stubs/cf_cfdp_stubs.c
@@ -341,10 +341,12 @@ CF_TxnStatus_t CF_CFDP_GetTxnStatus(const CF_Transaction_t *txn)
* Generated stub function for CF_CFDP_InitEngine()
* ----------------------------------------------------
*/
-CFE_Status_t CF_CFDP_InitEngine(void)
+CFE_Status_t CF_CFDP_InitEngine(CF_Engine_t *engine_ptr)
{
UT_GenStub_SetupReturnBuffer(CF_CFDP_InitEngine, CFE_Status_t);
+ UT_GenStub_AddParam(CF_CFDP_InitEngine, CF_Engine_t *, engine_ptr);
+
UT_GenStub_Execute(CF_CFDP_InitEngine, Basic, NULL);
return UT_GenStub_GetReturnValue(CF_CFDP_InitEngine, CFE_Status_t);
@@ -355,12 +357,16 @@ CFE_Status_t CF_CFDP_InitEngine(void)
* Generated stub function for CF_CFDP_InitTxnTxFile()
* ----------------------------------------------------
*/
-void CF_CFDP_InitTxnTxFile(CF_Transaction_t *txn, CF_CFDP_Class_t cfdp_class, uint8 keep, uint8 chan, uint8 priority)
+void CF_CFDP_InitTxnTxFile(CF_Transaction_t *txn,
+ CF_CFDP_Class_t cfdp_class,
+ uint8 keep,
+ CF_Channel_t *chan,
+ uint8 priority)
{
UT_GenStub_AddParam(CF_CFDP_InitTxnTxFile, CF_Transaction_t *, txn);
UT_GenStub_AddParam(CF_CFDP_InitTxnTxFile, CF_CFDP_Class_t, cfdp_class);
UT_GenStub_AddParam(CF_CFDP_InitTxnTxFile, uint8, keep);
- UT_GenStub_AddParam(CF_CFDP_InitTxnTxFile, uint8, chan);
+ UT_GenStub_AddParam(CF_CFDP_InitTxnTxFile, CF_Channel_t *, chan);
UT_GenStub_AddParam(CF_CFDP_InitTxnTxFile, uint8, priority);
UT_GenStub_Execute(CF_CFDP_InitTxnTxFile, Basic, NULL);
@@ -375,7 +381,7 @@ CFE_Status_t CF_CFDP_PlaybackDir(const char *src_filename,
const char *dst_filename,
CF_CFDP_Class_t cfdp_class,
uint8 keep,
- uint8 chan,
+ CF_Channel_t *chan,
uint8 priority,
uint16 dest_id)
{
@@ -385,7 +391,7 @@ CFE_Status_t CF_CFDP_PlaybackDir(const char *src_filename,
UT_GenStub_AddParam(CF_CFDP_PlaybackDir, const char *, dst_filename);
UT_GenStub_AddParam(CF_CFDP_PlaybackDir, CF_CFDP_Class_t, cfdp_class);
UT_GenStub_AddParam(CF_CFDP_PlaybackDir, uint8, keep);
- UT_GenStub_AddParam(CF_CFDP_PlaybackDir, uint8, chan);
+ UT_GenStub_AddParam(CF_CFDP_PlaybackDir, CF_Channel_t *, chan);
UT_GenStub_AddParam(CF_CFDP_PlaybackDir, uint8, priority);
UT_GenStub_AddParam(CF_CFDP_PlaybackDir, uint16, dest_id);
@@ -578,11 +584,11 @@ CFE_Status_t CF_CFDP_RecvNak(CF_Transaction_t *txn, CF_Logical_PduBuffer_t *ph)
* Generated stub function for CF_CFDP_RecvPh()
* ----------------------------------------------------
*/
-CFE_Status_t CF_CFDP_RecvPh(uint8 chan_num, CF_Logical_PduBuffer_t *ph)
+CFE_Status_t CF_CFDP_RecvPh(CF_Channel_t *chan, CF_Logical_PduBuffer_t *ph)
{
UT_GenStub_SetupReturnBuffer(CF_CFDP_RecvPh, CFE_Status_t);
- UT_GenStub_AddParam(CF_CFDP_RecvPh, uint8, chan_num);
+ UT_GenStub_AddParam(CF_CFDP_RecvPh, CF_Channel_t *, chan);
UT_GenStub_AddParam(CF_CFDP_RecvPh, CF_Logical_PduBuffer_t *, ph);
UT_GenStub_Execute(CF_CFDP_RecvPh, Basic, NULL);
@@ -780,11 +786,11 @@ bool CF_CFDP_StartFirstPending(CF_Channel_t *chan)
* Generated stub function for CF_CFDP_StartRxTransaction()
* ----------------------------------------------------
*/
-CF_Transaction_t *CF_CFDP_StartRxTransaction(uint8 chan_num)
+CF_Transaction_t *CF_CFDP_StartRxTransaction(CF_Channel_t *chan)
{
UT_GenStub_SetupReturnBuffer(CF_CFDP_StartRxTransaction, CF_Transaction_t *);
- UT_GenStub_AddParam(CF_CFDP_StartRxTransaction, uint8, chan_num);
+ UT_GenStub_AddParam(CF_CFDP_StartRxTransaction, CF_Channel_t *, chan);
UT_GenStub_Execute(CF_CFDP_StartRxTransaction, Basic, NULL);
@@ -812,7 +818,7 @@ CFE_Status_t CF_CFDP_TxFile(const char *src_filename,
const char *dst_filename,
CF_CFDP_Class_t cfdp_class,
uint8 keep,
- uint8 chan,
+ CF_Channel_t *chan,
uint8 priority,
CF_EntityId_t dest_id)
{
@@ -822,7 +828,7 @@ CFE_Status_t CF_CFDP_TxFile(const char *src_filename,
UT_GenStub_AddParam(CF_CFDP_TxFile, const char *, dst_filename);
UT_GenStub_AddParam(CF_CFDP_TxFile, CF_CFDP_Class_t, cfdp_class);
UT_GenStub_AddParam(CF_CFDP_TxFile, uint8, keep);
- UT_GenStub_AddParam(CF_CFDP_TxFile, uint8, chan);
+ UT_GenStub_AddParam(CF_CFDP_TxFile, CF_Channel_t *, chan);
UT_GenStub_AddParam(CF_CFDP_TxFile, uint8, priority);
UT_GenStub_AddParam(CF_CFDP_TxFile, CF_EntityId_t, dest_id);
diff --git a/unit-test/stubs/cf_cmd_stubs.c b/unit-test/stubs/cf_cmd_stubs.c
index bf64cb2c..887ff78a 100644
--- a/unit-test/stubs/cf_cmd_stubs.c
+++ b/unit-test/stubs/cf_cmd_stubs.c
@@ -138,11 +138,11 @@ CFE_Status_t CF_DisableEngineCmd(const CF_DisableEngineCmd_t *msg)
* ----------------------------------------------------
*/
CF_ChanAction_Status_t
-CF_DoChanAction(const CF_UnionArgs_Payload_t *data, const char *errstr, CF_ChanActionFn_t fn, void *context)
+CF_DoChanAction(CF_ChannelSelect_t chan_select, const char *errstr, CF_ChanActionFn_t fn, void *context)
{
UT_GenStub_SetupReturnBuffer(CF_DoChanAction, CF_ChanAction_Status_t);
- UT_GenStub_AddParam(CF_DoChanAction, const CF_UnionArgs_Payload_t *, data);
+ UT_GenStub_AddParam(CF_DoChanAction, CF_ChannelSelect_t, chan_select);
UT_GenStub_AddParam(CF_DoChanAction, const char *, errstr);
UT_GenStub_AddParam(CF_DoChanAction, CF_ChanActionFn_t, fn);
UT_GenStub_AddParam(CF_DoChanAction, void *, context);
@@ -157,11 +157,11 @@ CF_DoChanAction(const CF_UnionArgs_Payload_t *data, const char *errstr, CF_ChanA
* Generated stub function for CF_DoEnableDisableDequeue()
* ----------------------------------------------------
*/
-CF_ChanAction_Status_t CF_DoEnableDisableDequeue(uint8 chan_num, void *arg)
+CF_ChanAction_Status_t CF_DoEnableDisableDequeue(CF_Channel_t *chan, void *arg)
{
UT_GenStub_SetupReturnBuffer(CF_DoEnableDisableDequeue, CF_ChanAction_Status_t);
- UT_GenStub_AddParam(CF_DoEnableDisableDequeue, uint8, chan_num);
+ UT_GenStub_AddParam(CF_DoEnableDisableDequeue, CF_Channel_t *, chan);
UT_GenStub_AddParam(CF_DoEnableDisableDequeue, void *, arg);
UT_GenStub_Execute(CF_DoEnableDisableDequeue, Basic, NULL);
@@ -174,11 +174,11 @@ CF_ChanAction_Status_t CF_DoEnableDisableDequeue(uint8 chan_num, void *arg)
* Generated stub function for CF_DoEnableDisablePolldir()
* ----------------------------------------------------
*/
-CF_ChanAction_Status_t CF_DoEnableDisablePolldir(uint8 chan_num, void *arg)
+CF_ChanAction_Status_t CF_DoEnableDisablePolldir(CF_Channel_t *chan, void *arg)
{
UT_GenStub_SetupReturnBuffer(CF_DoEnableDisablePolldir, CF_ChanAction_Status_t);
- UT_GenStub_AddParam(CF_DoEnableDisablePolldir, uint8, chan_num);
+ UT_GenStub_AddParam(CF_DoEnableDisablePolldir, CF_Channel_t *, chan);
UT_GenStub_AddParam(CF_DoEnableDisablePolldir, void *, arg);
UT_GenStub_Execute(CF_DoEnableDisablePolldir, Basic, NULL);
@@ -191,11 +191,11 @@ CF_ChanAction_Status_t CF_DoEnableDisablePolldir(uint8 chan_num, void *arg)
* Generated stub function for CF_DoFreezeThaw()
* ----------------------------------------------------
*/
-CF_ChanAction_Status_t CF_DoFreezeThaw(uint8 chan_num, void *arg)
+CF_ChanAction_Status_t CF_DoFreezeThaw(CF_Channel_t *chan, void *arg)
{
UT_GenStub_SetupReturnBuffer(CF_DoFreezeThaw, CF_ChanAction_Status_t);
- UT_GenStub_AddParam(CF_DoFreezeThaw, uint8, chan_num);
+ UT_GenStub_AddParam(CF_DoFreezeThaw, CF_Channel_t *, chan);
UT_GenStub_AddParam(CF_DoFreezeThaw, void *, arg);
UT_GenStub_Execute(CF_DoFreezeThaw, Basic, NULL);
@@ -208,11 +208,11 @@ CF_ChanAction_Status_t CF_DoFreezeThaw(uint8 chan_num, void *arg)
* Generated stub function for CF_DoPurgeQueue()
* ----------------------------------------------------
*/
-CF_ChanAction_Status_t CF_DoPurgeQueue(uint8 chan_num, void *arg)
+CF_ChanAction_Status_t CF_DoPurgeQueue(CF_Channel_t *chan, void *arg)
{
UT_GenStub_SetupReturnBuffer(CF_DoPurgeQueue, CF_ChanAction_Status_t);
- UT_GenStub_AddParam(CF_DoPurgeQueue, uint8, chan_num);
+ UT_GenStub_AddParam(CF_DoPurgeQueue, CF_Channel_t *, chan);
UT_GenStub_AddParam(CF_DoPurgeQueue, void *, arg);
UT_GenStub_Execute(CF_DoPurgeQueue, Basic, NULL);
@@ -348,12 +348,12 @@ CFE_Status_t CF_GetParamCmd(const CF_GetParamCmd_t *msg)
* Generated stub function for CF_GetSetParamCmd()
* ----------------------------------------------------
*/
-void CF_GetSetParamCmd(bool is_set, CF_GetSet_ValueID_t param_id, uint32 value, uint8 chan_num)
+void CF_GetSetParamCmd(bool is_set, CF_GetSet_ValueID_t param_id, uint32 value, CF_ChannelSelect_t chan_num)
{
UT_GenStub_AddParam(CF_GetSetParamCmd, bool, is_set);
UT_GenStub_AddParam(CF_GetSetParamCmd, CF_GetSet_ValueID_t, param_id);
UT_GenStub_AddParam(CF_GetSetParamCmd, uint32, value);
- UT_GenStub_AddParam(CF_GetSetParamCmd, uint8, chan_num);
+ UT_GenStub_AddParam(CF_GetSetParamCmd, CF_ChannelSelect_t, chan_num);
UT_GenStub_Execute(CF_GetSetParamCmd, Basic, NULL);
}
@@ -579,12 +579,12 @@ CFE_Status_t CF_TxFileCmd(const CF_TxFileCmd_t *msg)
* Generated stub function for CF_ValidateChunkSizeCmd()
* ----------------------------------------------------
*/
-CF_ChanAction_Status_t CF_ValidateChunkSizeCmd(CF_ChunkSize_t val, uint8 chan_num)
+CF_ChanAction_Status_t CF_ValidateChunkSizeCmd(CF_ChunkSize_t val, CF_Channel_t *chan)
{
UT_GenStub_SetupReturnBuffer(CF_ValidateChunkSizeCmd, CF_ChanAction_Status_t);
UT_GenStub_AddParam(CF_ValidateChunkSizeCmd, CF_ChunkSize_t, val);
- UT_GenStub_AddParam(CF_ValidateChunkSizeCmd, uint8, chan_num);
+ UT_GenStub_AddParam(CF_ValidateChunkSizeCmd, CF_Channel_t *, chan);
UT_GenStub_Execute(CF_ValidateChunkSizeCmd, Basic, NULL);
@@ -596,12 +596,12 @@ CF_ChanAction_Status_t CF_ValidateChunkSizeCmd(CF_ChunkSize_t val, uint8 chan_nu
* Generated stub function for CF_ValidateMaxOutgoingCmd()
* ----------------------------------------------------
*/
-CF_ChanAction_Status_t CF_ValidateMaxOutgoingCmd(uint32 val, uint8 chan_num)
+CF_ChanAction_Status_t CF_ValidateMaxOutgoingCmd(uint32 val, CF_Channel_t *chan)
{
UT_GenStub_SetupReturnBuffer(CF_ValidateMaxOutgoingCmd, CF_ChanAction_Status_t);
UT_GenStub_AddParam(CF_ValidateMaxOutgoingCmd, uint32, val);
- UT_GenStub_AddParam(CF_ValidateMaxOutgoingCmd, uint8, chan_num);
+ UT_GenStub_AddParam(CF_ValidateMaxOutgoingCmd, CF_Channel_t *, chan);
UT_GenStub_Execute(CF_ValidateMaxOutgoingCmd, Basic, NULL);
diff --git a/unit-test/stubs/cf_utils_handlers.c b/unit-test/stubs/cf_utils_handlers.c
index eb65f59c..05a99148 100644
--- a/unit-test/stubs/cf_utils_handlers.c
+++ b/unit-test/stubs/cf_utils_handlers.c
@@ -201,3 +201,29 @@ void UT_DefaultHandler_CF_WrappedOpenCreate(void *UserObj, UT_EntryKey_t FuncKey
UT_Stub_SetReturnValue(FuncKey, ctxt->forced_return);
}
}
+
+/*----------------------------------------------------------------
+ *
+ * Function: UT_DefaultHandler_CF_ForEachChannel
+ *
+ * Invokes the passed-in, as this is usually required for correct operation
+ *
+ *-----------------------------------------------------------------*/
+void UT_DefaultHandler_CF_ForEachChannel(void *UserObj, UT_EntryKey_t FuncKey, const UT_StubContext_t *Context)
+{
+ CF_Engine_t *engine_ptr = UT_Hook_GetArgValueByName(Context, "engine_ptr", CF_Engine_t *);
+ CF_ChannelFunc_t fn = UT_Hook_GetArgValueByName(Context, "fn", CF_ChannelFunc_t);
+ void *arg = UT_Hook_GetArgValueByName(Context, "arg", void *);
+ int32 ret;
+
+ if (fn)
+ {
+ ret = fn(engine_ptr, &engine_ptr->channels[UT_CFDP_CHANNEL_IDX], arg);
+ }
+ else
+ {
+ ret = CFE_SUCCESS;
+ }
+
+ UT_Stub_SetReturnValue(FuncKey, ret);
+}
diff --git a/unit-test/stubs/cf_utils_stubs.c b/unit-test/stubs/cf_utils_stubs.c
index c4828745..605ed2db 100644
--- a/unit-test/stubs/cf_utils_stubs.c
+++ b/unit-test/stubs/cf_utils_stubs.c
@@ -28,6 +28,7 @@
void UT_DefaultHandler_CF_FindTransactionBySequenceNumber(void *, UT_EntryKey_t, const UT_StubContext_t *);
void UT_DefaultHandler_CF_FindUnusedTransaction(void *, UT_EntryKey_t, const UT_StubContext_t *);
+void UT_DefaultHandler_CF_ForEachChannel(void *, UT_EntryKey_t, const UT_StubContext_t *);
void UT_DefaultHandler_CF_ResetHistory(void *, UT_EntryKey_t, const UT_StubContext_t *);
void UT_DefaultHandler_CF_TraverseAllTransactions(void *, UT_EntryKey_t, const UT_StubContext_t *);
void UT_DefaultHandler_CF_TraverseAllTransactions_All_Channels(void *, UT_EntryKey_t, const UT_StubContext_t *);
@@ -107,31 +108,32 @@ CF_Transaction_t *CF_FindUnusedTransaction(CF_Channel_t *chan, CF_Direction_t di
/*
* ----------------------------------------------------
- * Generated stub function for CF_FreeTransaction()
+ * Generated stub function for CF_ForEachChannel()
* ----------------------------------------------------
*/
-void CF_FreeTransaction(CF_Transaction_t *txn, uint8 chan)
+int32 CF_ForEachChannel(CF_Engine_t *engine_ptr, CF_ChannelFunc_t fn, void *arg)
{
- UT_GenStub_AddParam(CF_FreeTransaction, CF_Transaction_t *, txn);
- UT_GenStub_AddParam(CF_FreeTransaction, uint8, chan);
+ UT_GenStub_SetupReturnBuffer(CF_ForEachChannel, int32);
- UT_GenStub_Execute(CF_FreeTransaction, Basic, NULL);
+ UT_GenStub_AddParam(CF_ForEachChannel, CF_Engine_t *, engine_ptr);
+ UT_GenStub_AddParam(CF_ForEachChannel, CF_ChannelFunc_t, fn);
+ UT_GenStub_AddParam(CF_ForEachChannel, void *, arg);
+
+ UT_GenStub_Execute(CF_ForEachChannel, Basic, UT_DefaultHandler_CF_ForEachChannel);
+
+ return UT_GenStub_GetReturnValue(CF_ForEachChannel, int32);
}
/*
* ----------------------------------------------------
- * Generated stub function for CF_GetChannelFromTxn()
+ * Generated stub function for CF_FreeTransaction()
* ----------------------------------------------------
*/
-CF_Channel_t *CF_GetChannelFromTxn(CF_Transaction_t *txn)
+void CF_FreeTransaction(CF_Transaction_t *txn)
{
- UT_GenStub_SetupReturnBuffer(CF_GetChannelFromTxn, CF_Channel_t *);
-
- UT_GenStub_AddParam(CF_GetChannelFromTxn, CF_Transaction_t *, txn);
-
- UT_GenStub_Execute(CF_GetChannelFromTxn, Basic, NULL);
+ UT_GenStub_AddParam(CF_FreeTransaction, CF_Transaction_t *, txn);
- return UT_GenStub_GetReturnValue(CF_GetChannelFromTxn, CF_Channel_t *);
+ UT_GenStub_Execute(CF_FreeTransaction, Basic, NULL);
}
/*
diff --git a/unit-test/utilities/cf_test_utils.c b/unit-test/utilities/cf_test_utils.c
index 5a13dddb..cef15ec7 100644
--- a/unit-test/utilities/cf_test_utils.c
+++ b/unit-test/utilities/cf_test_utils.c
@@ -389,7 +389,7 @@ void AnyRandomStringOfLettersOfLengthCopy(char *random_string, size_t length)
}
/* cf specific */
-uint8 Any_cf_chan_num(void)
+CF_ChannelSelect_t Any_cf_chan_num(void)
{
- return Any_uint8_LessThan(CF_NUM_CHANNELS);
+ return (Any_uint8_LessThan(CF_NUM_CHANNELS));
}
diff --git a/unit-test/utilities/cf_test_utils.h b/unit-test/utilities/cf_test_utils.h
index 63f80f11..0960cdd7 100644
--- a/unit-test/utilities/cf_test_utils.h
+++ b/unit-test/utilities/cf_test_utils.h
@@ -45,7 +45,9 @@
#define RANDOM_VALUES_SEED 0
#endif /* !RANDOM_VALUES_SEED */
-#define UT_CFDP_CHANNEL 0
+#define UT_CFDP_CHANNEL_IDX 0
+#define UT_CFDP_CHANNEL CF_ChannelSelect_FromInt(UT_CFDP_CHANNEL_IDX)
+#define UT_CFDP_CHANNEL_PTR CF_GetChannelPtr(UT_CFDP_CHANNEL)
typedef enum
{
@@ -67,9 +69,9 @@ typedef struct
{
char src_filename[CF_FILENAME_MAX_LEN];
char dst_filename[CF_FILENAME_MAX_LEN];
+ CF_Channel_t *chan;
CF_CFDP_Class_t cfdp_class;
uint8 keep;
- uint8 chan;
uint8 priority;
CF_EntityId_t dest_id;
} CF_CFDP_TxFile_context_t;
@@ -78,9 +80,9 @@ typedef struct
{
char src_filename[CF_FILENAME_MAX_LEN];
char dst_filename[CF_FILENAME_MAX_LEN];
+ CF_Channel_t *chan;
CF_CFDP_Class_t cfdp_class;
uint8 keep;
- uint8 chan;
uint8 priority;
CF_EntityId_t dest_id;
} CF_CFDP_PlaybackDir_context_t;
@@ -252,6 +254,6 @@ int Any_int_Positive(void);
char *AnyRandomStringOfLettersOfLength(size_t length);
void AnyRandomStringOfLettersOfLengthCopy(char *random_string, size_t length);
-uint8 Any_cf_chan_num(void);
+CF_ChannelSelect_t Any_cf_chan_num(void);
#endif