diff --git a/fsw/cfe-core/src/es/cfe_es_task.c b/fsw/cfe-core/src/es/cfe_es_task.c
index 1f7a3aa5d..438557069 100644
--- a/fsw/cfe-core/src/es/cfe_es_task.c
+++ b/fsw/cfe-core/src/es/cfe_es_task.c
@@ -351,13 +351,20 @@ int32 CFE_ES_TaskInit(void)
return(Status);
}
- Status = CFE_EVS_SendEvent(CFE_ES_INITSTATS_INF_EID,
- CFE_EVS_EventType_INFORMATION,
- "Versions:cFE %d.%d.%d.%d, OSAL %d.%d.%d.%d, PSP %d.%d.%d.%d, chksm %d",
- CFE_MAJOR_VERSION,CFE_MINOR_VERSION,CFE_REVISION,CFE_MISSION_REV,
- OS_MAJOR_VERSION,OS_MINOR_VERSION,OS_REVISION,OS_MISSION_REV,
- CFE_PSP_MAJOR_VERSION,CFE_PSP_MINOR_VERSION,CFE_PSP_REVISION,CFE_PSP_MISSION_REV,
- (int)CFE_ES_TaskData.HkPacket.Payload.CFECoreChecksum);
+#ifdef CFE_PSP_VERSION
+ Status = CFE_EVS_SendEvent(CFE_ES_INITSTATS_INF_EID, CFE_EVS_EventType_INFORMATION,
+ "\n%s\n,cFE chksm %d",
+ CFS_VERSIONS, (int)CFE_ES_TaskData.HkPacket.Payload.CFECoreChecksum);
+
+#else /* CFE_PSP_VERSION */
+ Status = CFE_EVS_SendEvent(CFE_ES_INITSTATS_INF_EID, CFE_EVS_EventType_INFORMATION,
+ "\n%sv%d.%d.%d.%d\n cFE chksm %d",
+ CFS_VERSIONS,
+ CFE_PSP_MAJOR_VERSION, CFE_PSP_MINOR_VERSION, CFE_PSP_REVISION, CFE_PSP_MISSION_REV,
+ (int)CFE_ES_TaskData.HkPacket.Payload.CFECoreChecksum);
+
+#endif /* CFE_PSP_VERSION */
+
if ( Status != CFE_SUCCESS )
{
CFE_ES_WriteToSysLog("ES:Error sending version event:RC=0x%08X\n", (unsigned int)Status);
@@ -788,11 +795,23 @@ int32 CFE_ES_NoopCmd(const CFE_ES_Noop_t *Cmd)
** This command will always succeed.
*/
CFE_ES_TaskData.CommandCounter++;
- CFE_EVS_SendEvent(CFE_ES_NOOP_INF_EID, CFE_EVS_EventType_INFORMATION,
- "No-op command. Versions:cFE %d.%d.%d.%d, OSAL %d.%d.%d.%d, PSP %d.%d.%d.%d",
- CFE_MAJOR_VERSION,CFE_MINOR_VERSION,CFE_REVISION,CFE_MISSION_REV,
- OS_MAJOR_VERSION,OS_MINOR_VERSION,OS_REVISION,OS_MISSION_REV,
- CFE_PSP_MAJOR_VERSION,CFE_PSP_MINOR_VERSION,CFE_PSP_REVISION,CFE_PSP_MISSION_REV);
+
+
+/* #ifdef CFE_ENABLE_EXPERIMENTS */
+
+ CFE_EVS_SendEvent(CFE_ES_NOOP_INF_EID, CFE_EVS_EventType_INFORMATION,
+ "No-op command:\n %s",
+ CFS_VERSIONS);
+/*
+//
+// CFE_EVS_SendEvent(CFE_ES_NOOP_INF_EID, CFE_EVS_EventType_INFORMATION,
+// "No-op command.\ncFS Versions:\n cFE %s\n OSAL %d.%d.%d.%d\n PSP %d.%d.%d.%d",
+// CFE_VERSION,
+// OS_VERSION, OS_MINOR_VERSION, OS_REVISION,
+// OS_MISSION_REV, CFE_PSP_MAJOR_VERSION, CFE_PSP_MINOR_VERSION, CFE_PSP_REVISION,
+// CFE_PSP_MISSION_REV);
+//
+ CFE_ENABLE_EXPERIMENTS */
return CFE_SUCCESS;
} /* End of CFE_ES_NoopCmd() */
diff --git a/fsw/cfe-core/src/evs/cfe_evs_task.c b/fsw/cfe-core/src/evs/cfe_evs_task.c
index fe9bed2e4..ad5d9e4dc 100644
--- a/fsw/cfe-core/src/evs/cfe_evs_task.c
+++ b/fsw/cfe-core/src/evs/cfe_evs_task.c
@@ -333,8 +333,7 @@ int32 CFE_EVS_TaskInit ( void )
/* Write the AppID to the global location, now that the rest of initialization is done */
CFE_EVS_GlobalData.EVS_AppID = AppID;
- EVS_SendEvent(CFE_EVS_STARTUP_EID, CFE_EVS_EventType_INFORMATION, "cFE EVS Initialized. cFE Version %d.%d.%d.%d",
- CFE_MAJOR_VERSION,CFE_MINOR_VERSION,CFE_REVISION,CFE_MISSION_REV);
+ EVS_SendEvent(CFE_EVS_STARTUP_EID, CFE_EVS_EventType_INFORMATION, "cFE EVS Initialized.\n%s", CFE_VERSION_STRING);
return CFE_SUCCESS;
@@ -644,8 +643,8 @@ bool CFE_EVS_VerifyCmdLength(CFE_SB_MsgPtr_t Msg, uint16 ExpectedLength)
*/
int32 CFE_EVS_NoopCmd(const CFE_EVS_Noop_t *data)
{
- EVS_SendEvent(CFE_EVS_NOOP_EID, CFE_EVS_EventType_INFORMATION,"No-op command. cFE Version %d.%d.%d.%d",
- CFE_MAJOR_VERSION,CFE_MINOR_VERSION,CFE_REVISION,CFE_MISSION_REV);
+ EVS_SendEvent(CFE_EVS_NOOP_EID, CFE_EVS_EventType_INFORMATION,"No-op command. %s",
+ CFE_VERSION_STRING);
return CFE_SUCCESS;
}
diff --git a/fsw/cfe-core/src/inc/cfe_version.h b/fsw/cfe-core/src/inc/cfe_version.h
index 10844e7d0..cbc4beaf7 100644
--- a/fsw/cfe-core/src/inc/cfe_version.h
+++ b/fsw/cfe-core/src/inc/cfe_version.h
@@ -19,40 +19,42 @@
*/
/*
-** File: cfe_version.h
-**
-** Purpose:
-** Provide version identifiers for the cFE core.
-*/
+ * File: cfe_version.h
+ *
+ * Purpose:
+ * Provide version identifiers for the cFE core.
+ */
-/**
+/*
* \page cfeversion Version Numbers
*
*
Version Number Semantics
*
* The version number is a sequence of four numbers, generally separated by dots when written. These are, in order,
- * the Major number, the Minor number, the Implementation Revision number, and the Mission Revision number. At
+ * the Major number, the Minor number, the Revision number, and the Mission Revision number. At
* their option, Missions may modify the Mission Revision information as needed to suit their needs.
*
- * The Major number shall be incremented on release to indicate when there is a change to an API
- * that may cause existing correctly-written cFS components to stop working. It may also be incremented for a
+ * It is important to note that Major, Minor, and Revision numbers are only updated upon official releases of tagged
+ * versions, \b NOT on development builds.
+ *
+ * The MAJOR number shall be incremented on release to indicate when there is a change to an API
+ * that may cause existing, correctly-written cFS components to stop working. It may also be incremented for a
* release that contains changes deemed to be of similar impact, even if there are no actual changes to the API.
*
- * The Minor number shall be incremented on release to indicate the addition of features to the API,
+ * The MINOR number shall be incremented on release to indicate the addition of features to the API
* which do not break the existing code. It may also be incremented for a release that contains changes deemed
* to be of similar impact, even if there are no actual updates to the API.
*
- * The Implementation Revision Version number shall be incremented on changes to software in the master branch,
- * or other changes that benefit from unique identification. It is used for identifying open source development
- * versions. It is important to note that Major and Minor numbers are only updated upon official releases
- * of tagged versions (see the release tab), \b NOT on development version updates in the master branch.
+ * The REVISION number shall be incremented on changes that benefit from unique identification such as bug fixes or
+ * major documentation updates. The Revision number may also be updated if there are other changes contained within a
+ * release that make it desirable for applications to distinguish one release from another.
*
- * The Major, Minor, and Implementation Revision numbers are provided in this header file as part of the API
+ * The Major, Minor, and Revision numbers are provided in this header file as part of the API
* definition; this macro must expand to a simple integer value, so that it can be used in simple if directives
* by the macro preprocessor.
*
* The Mission Version number shall be set to zero in all officially released packages, and is entirely reserved
- * for the use of the mission. The Mission Version is provided as a simple macro defined in the cfe_platform_cfg.h
+ * for the use of the mission. The Mission Version is provided as a simple macro defined in the cfe_platform_cfg.h
* header file.
*
* Version Number Flexibility
@@ -63,20 +65,29 @@
* The minor number may increment when there have been no augmentations to the API, if changes are as significant as
* additions to the public API.
*
- * The revision numbers may update in implementations where no actual implementation-specific code has changed, if
+ * The revision numbers may increment in implementations where no actual implementation-specific code has changed, if
* there are other changes within the release with similar significance.
*
* How and Where Defined
*
* The Major, Minor, and Revision components of the version are provided as simple macros defined in the cfe_version.h
- * header file as part of the API definition; these macros must expand to simple integer values, so that they can be used
- * in simple if directives by the macro preprocessor.
+ * header file as part of the API definition; these macros must expand to simple integer values, so that they can be
+ * used in simple if directives by the macro preprocessor.
*
* The Mission Version is provided as a simple macro defined in the cfe_platform_cfg.h header file. As delivered in
* official releases, these macros must expand to simple integer values, so that they can be used in simple macro
* preprocessor conditions, but delivered code should not prevent a mission from, for example, deciding that the Mission
* Version is actually a text string.
*
+ * Identification of development builds
+ *
+ * In order to distinguish between development versions, we also provide a BUILDNUMBER.
+ *
+ * The BUILD_NUMBER reflects the number of commits since a specified baseline git tag for each particular component. The
+ * BUILD_NUMBER integer increases monotonically for a given development cycle. The development cycle can be identified by
+ * the git tag baseline in the CFE_VERSION macro, which looks like vX.Y.Z+dev, or by the codename in the version string.
+ * When a new baseline tag and codename are created, the the BUILDNUMBER resets to zero and begins increasing from that
+ * new epoch.
*/
#ifndef _cfe_version_
@@ -90,12 +101,94 @@
#include
+
+/* Development Build Macro Definitions */
+#define CFE_BUILD_NUMBER 295 /* Number of commits since baseline */
+#define CFE_BUILD_BASELINE "v6.7.0+dev" /* Number of commits since baseline */
+
/*
-** Macro Definitions
+* Macro Definitions
+* ONLY APPLY for OFFICIAL releases
+*/
+#define CFE_MAJOR_VERSION 6 /**< @brief Major version number */
+#define CFE_MINOR_VERSION 7 /**< @brief Minor version number */
+#define CFE_REVISION 0 /**< @brief Revision number */
+#define CFE_MISSION_REV 0 /**< @brief Mission revision */
+
+/* Helper functions to concatenate strings from integer macros */
+#define CFE_STR_HELPER(x) #x
+#define CFE_STR(x) CFE_STR_HELPER(x)
+
+#define CFE_VERSION CFE_BUILD_BASELINE CFE_STR(CFE_BUILD_NUMBER) /* Baseling git tag + Number of commits since baseline */
+
+#define CFE_VERSION_STRING /* Used to report the full version */ \
+ " cFE Development Build\n " \
+ CFE_VERSION " (Codename: Bootes)" /* Codename for current development */ \
+ "\n Last Offical Release: cfe v6.7.0" /* For full support please use this version */
+
+
+/* TEMPLATES for Official Releases */
+
+/* Official Release format for CFE_VERSION */
+ /*
+ #define CFE_VERSION \
+ CFE_STR(CFE_MAJOR_VERSION) "." \
+ CFE_STR(CFE_MINOR_VERSION) "." \
+ CFE_STR(CFE_REVISION) "." \
+ CFE_STR(CFE_MISSION_REV)
+ */
+
+ /* Official Release OS_VERSION_STRING Format */
+ /*
+ #define CFE_VERSION_STRING "cFE version " CFE_VERSION
+ */
+
+/* END TEMPLATES */
+
+
+/* Component Version Definitions */
+/* Here for backwards compatibility for integration test
*/
-#define CFE_MAJOR_VERSION 6
-#define CFE_MINOR_VERSION 7
-#define CFE_REVISION 21
+#ifndef OS_VERSION /* This will be defined by osal in the future */
+#define OS_VERSION \
+ CFE_STR(OS_MAJOR_VERSION) "." \
+ CFE_STR(OS_MINOR_VERSION) "." \
+ CFE_STR(OS_REVISION) "." \
+ CFE_STR(OS_MISSION_REV)
+#endif
+
+/* Combined string with formated combination of all major component versions */
+/* Keeping as a conditional definition based on PSP intricacies */
+#ifdef CFE_PSP_VERSION
+#define CFS_VERSIONS \
+"cFS Development Version (Codename: Bootes)\n" \
+ " cfe: " CFE_VERSION "\n" \
+ " osal: " OS_VERSION "\n" \
+ " psp: " CFE_PSP_VERSION
+#else
+#define CFS_VERSIONS \
+"cFS Development Version (Codename: Bootes)\n" \
+ " cfe: " CFE_VERSION "\n" \
+ " osal: " OS_VERSION "\n" \
+ " psp: "
+#endif
+
+/* Use the following templates for Official Releases ONLY */
+ /* Official Release format for CFE_VERSION */
+ /*
+ #define CFE_VERSION "v" \
+ CFE_STR(CFE_MAJOR_VERSION) "." \
+ CFE_STR(CFE_MINOR_VERSION) "." \
+ CFE_STR(CFE_REVISION) "." \
+ CFE_STR(CFE_MISSION_REV)
+ */
+
+ /* Official Release format for CFE_VERSION_STRING */
+ /*
+ #define CFE_VERSION_STRING "cFE " CFE_VERSION
+ */
+/* END TEMPLATES */
+
-#endif /* _cfe_version_ */
+#endif /* _cfe_version_ */
diff --git a/fsw/cfe-core/src/sb/cfe_sb_task.c b/fsw/cfe-core/src/sb/cfe_sb_task.c
index 9a1bc200c..b36d2f173 100644
--- a/fsw/cfe-core/src/sb/cfe_sb_task.c
+++ b/fsw/cfe-core/src/sb/cfe_sb_task.c
@@ -490,8 +490,7 @@ void CFE_SB_ProcessCmdPipePkt(void) {
int32 CFE_SB_NoopCmd(const CFE_SB_Noop_t *data)
{
CFE_EVS_SendEvent(CFE_SB_CMD0_RCVD_EID,CFE_EVS_EventType_INFORMATION,
- "No-op Cmd Rcvd. cFE Version %d.%d.%d.%d",
- CFE_MAJOR_VERSION,CFE_MINOR_VERSION,CFE_REVISION,CFE_MISSION_REV);
+ "No-op Cmd Rcvd. %s", CFE_VERSION_STRING);
CFE_SB.HKTlmMsg.Payload.CommandCounter++;
return CFE_SUCCESS;
diff --git a/fsw/cfe-core/src/tbl/cfe_tbl_task.c b/fsw/cfe-core/src/tbl/cfe_tbl_task.c
index 337ece94f..792917cba 100644
--- a/fsw/cfe-core/src/tbl/cfe_tbl_task.c
+++ b/fsw/cfe-core/src/tbl/cfe_tbl_task.c
@@ -214,8 +214,7 @@ int32 CFE_TBL_TaskInit(void)
/*
** Task startup event message
*/
- Status = CFE_EVS_SendEvent(CFE_TBL_INIT_INF_EID, CFE_EVS_EventType_INFORMATION, "cFE TBL Initialized. cFE Version %d.%d.%d.%d",
- CFE_MAJOR_VERSION,CFE_MINOR_VERSION,CFE_REVISION,CFE_MISSION_REV);
+ Status = CFE_EVS_SendEvent(CFE_TBL_INIT_INF_EID, CFE_EVS_EventType_INFORMATION, "cFE TBL Initialized.\n%s", CFE_VERSION_STRING);
if(Status != CFE_SUCCESS)
{
diff --git a/fsw/cfe-core/src/tbl/cfe_tbl_task_cmds.c b/fsw/cfe-core/src/tbl/cfe_tbl_task_cmds.c
index 3fad56d95..4c3bc3c81 100644
--- a/fsw/cfe-core/src/tbl/cfe_tbl_task_cmds.c
+++ b/fsw/cfe-core/src/tbl/cfe_tbl_task_cmds.c
@@ -328,8 +328,7 @@ void CFE_TBL_GetTblRegData(void)
int32 CFE_TBL_NoopCmd(const CFE_TBL_Noop_t *data)
{
/* Acknowledge receipt of NOOP with Event Message */
- CFE_EVS_SendEvent(CFE_TBL_NOOP_INF_EID, CFE_EVS_EventType_INFORMATION, "No-op command. cFE Version %d.%d.%d.%d",
- CFE_MAJOR_VERSION,CFE_MINOR_VERSION,CFE_REVISION,CFE_MISSION_REV);
+ CFE_EVS_SendEvent(CFE_TBL_NOOP_INF_EID, CFE_EVS_EventType_INFORMATION, "No-op command. %s", CFE_VERSION_STRING);
return CFE_TBL_INC_CMD_CTR;
diff --git a/fsw/cfe-core/src/time/cfe_time_task.c b/fsw/cfe-core/src/time/cfe_time_task.c
index 000073363..98fb4cf47 100644
--- a/fsw/cfe-core/src/time/cfe_time_task.c
+++ b/fsw/cfe-core/src/time/cfe_time_task.c
@@ -815,8 +815,7 @@ int32 CFE_TIME_NoopCmd(const CFE_TIME_Noop_t *data)
CFE_TIME_TaskData.CommandCounter++;
CFE_EVS_SendEvent(CFE_TIME_NOOP_EID, CFE_EVS_EventType_INFORMATION,
- "No-op command. cFE Version %d.%d.%d.%d",
- CFE_MAJOR_VERSION,CFE_MINOR_VERSION,CFE_REVISION,CFE_MISSION_REV);
+ "No-op command. %s", CFE_VERSION_STRING);
return CFE_SUCCESS;