sbgECom Library  5.1.708-stable
Interface SBG Systems IMU/AHRS/INS
sbgVersion.h
Go to the documentation of this file.
1 
48 #ifndef SBG_VERSION_H
49 #define SBG_VERSION_H
50 
51 #ifdef __cplusplus
52 extern "C" {
53 #endif
54 
55 // Project headers
56 #include <sbgCommon.h>
57 
58 
59 //----------------------------------------------------------------------//
60 //- Version related definitions -//
61 //----------------------------------------------------------------------//
62 #define SBG_VERSION_SOFT_SCHEME (0x00000001u << 31)
64 #define SBG_VERSION_SOFT_SCHEME_QUALIFIER_MASK (0x07)
65 #define SBG_VERSION_SOFT_SCHEME_QUALIFIER_SHIFT (28)
67 #define SBG_VERSION_SOFT_SCHEME_MAJOR_MASK (0x3F)
68 #define SBG_VERSION_SOFT_SCHEME_MAJOR_SHIFT (22)
70 #define SBG_VERSION_SOFT_SCHEME_MINOR_MASK (0x3F)
71 #define SBG_VERSION_SOFT_SCHEME_MINOR_SHIFT (16)
73 #define SBG_VERSION_SOFT_SCHEME_BUILD_MASK (0xFFFF)
74 #define SBG_VERSION_SOFT_SCHEME_BUILD_SHIFT (0)
82 {
90 
97 {
104 
105 /*
106  * DEPRECATED compatibility definitions
107  */
108 #define SBG_VERSION_CMP_THRESOLD_MAJOR SBG_VERSION_CMP_THRESHOLD_MAJOR
109 #define SBG_VERSION_CMP_THRESOLD_MINOR SBG_VERSION_CMP_THRESHOLD_MINOR
110 #define SBG_VERSION_CMP_THRESOLD_REVISION SBG_VERSION_CMP_THRESHOLD_REVISION
111 #define SBG_VERSION_CMP_THRESOLD_BUILD SBG_VERSION_CMP_THRESHOLD_BUILD
112 #define SBG_VERSION_CMP_THRESOLD_QUALIFIER SBG_VERSION_CMP_THRESHOLD_QUALIFIER
113 
118 typedef struct _SbgVersion
119 {
122  uint8_t major;
123  uint8_t minor;
124  uint8_t rev;
125  uint16_t build;
127 
128 //----------------------------------------------------------------------//
129 //- Macro definitions for encode versions -//
130 //----------------------------------------------------------------------//
131 
141 #define SBG_VERSION_BASIC(major, minor, rev, build) ( (((uint32_t)(major)) << 24) | \
142  (((uint32_t)(minor)) << 16) | \
143  (((uint32_t)(rev)) << 8) | \
144  (((uint32_t)(build))) )
145 
155 #define SBG_VERSION_SOFTWARE(major, minor, build, qualifier) ( SBG_VERSION_SOFT_SCHEME | \
156  ((((uint32_t)(qualifier)) & SBG_VERSION_SOFT_SCHEME_QUALIFIER_MASK) << SBG_VERSION_SOFT_SCHEME_QUALIFIER_SHIFT) | \
157  ((((uint32_t)(major)) & SBG_VERSION_SOFT_SCHEME_MAJOR_MASK) << SBG_VERSION_SOFT_SCHEME_MAJOR_SHIFT) | \
158  ((((uint32_t)(minor)) & SBG_VERSION_SOFT_SCHEME_MINOR_MASK) << SBG_VERSION_SOFT_SCHEME_MINOR_SHIFT) | \
159  ((((uint32_t)(build)) & SBG_VERSION_SOFT_SCHEME_BUILD_MASK) << SBG_VERSION_SOFT_SCHEME_BUILD_SHIFT) )
160 //----------------------------------------------------------------------//
161 //- Constructor -//
162 //----------------------------------------------------------------------//
163 
173 SBG_COMMON_LIB_API void sbgVersionCreateBasic(SbgVersion *pVersion, uint8_t major, uint8_t minor, uint8_t revision, uint8_t build);
174 
184 SBG_COMMON_LIB_API void sbgVersionCreateSoftware(SbgVersion *pVersion, uint8_t major, uint8_t minor, uint16_t build, SbgVersionQualifier qualifier);
185 
192 SBG_COMMON_LIB_API void sbgVersionConstructCopy(SbgVersion *pVersion, const SbgVersion *pOtherVersion);
193 
194 //----------------------------------------------------------------------//
195 //- Version encoding / decoding methods -//
196 //----------------------------------------------------------------------//
197 
204 SBG_COMMON_LIB_API void sbgVersionDecode(uint32_t encodedVersion, SbgVersion *pVersionInfo);
205 
212 SBG_COMMON_LIB_API uint32_t sbgVersionEncode(const SbgVersion *pVersionInfo);
213 
214 //----------------------------------------------------------------------//
215 //- Version parameters methods -//
216 //----------------------------------------------------------------------//
217 
224 SBG_INLINE bool sbgVersionIsUsingSoftwareScheme(uint32_t encodedVersion)
225 {
226  SbgVersion decodedVersion;
227 
228  //
229  // Decode the version first
230  //
231  sbgVersionDecode(encodedVersion, &decodedVersion);
232 
233  //
234  // Returns if the version is using a software scheme
235  //
236  return decodedVersion.softwareScheme;
237 }
238 
239 //----------------------------------------------------------------------//
240 //- Version comparaison methods -//
241 //----------------------------------------------------------------------//
242 
255 SBG_COMMON_LIB_API int32_t sbgVersionCompare(const SbgVersion *pVersionA, const SbgVersion *pVersionB, SbgVersionCmpThreshold threshold);
256 
269 SBG_COMMON_LIB_API int32_t sbgVersionCompareEncoded(uint32_t versionA, uint32_t versionB, SbgVersionCmpThreshold threshold);
270 
282 SBG_COMMON_LIB_API int32_t sbgVersionIsWithinRange(const SbgVersion *pLowerVersion, const SbgVersion *pHigherVersion, const SbgVersion *pVersion);
283 
295 SBG_COMMON_LIB_API int32_t sbgVersionIsWithinRangeEncoded(uint32_t lowerVersion, uint32_t higherVersion, uint32_t version);
296 
297 
298 //----------------------------------------------------------------------//
299 //- Version to string methods -//
300 //----------------------------------------------------------------------//
301 
311 SBG_COMMON_LIB_API SbgErrorCode sbgVersionToString(const SbgVersion *pVersionInfo, char *pBuffer, size_t sizeOfBuffer);
312 
322 SBG_COMMON_LIB_API SbgErrorCode sbgVersionToStringEncoded(uint32_t version, char *pBuffer, size_t sizeOfBuffer);
323 
324 //----------------------------------------------------------------------//
325 //- String to version methods -//
326 //----------------------------------------------------------------------//
327 
340 
352 SBG_COMMON_LIB_API SbgErrorCode sbgVersionFromStringEncoded(const char *pString, uint32_t *pVersion);
353 
354 //----------------------------------------------------------------------//
355 //- Legacy version system methods -//
356 //----------------------------------------------------------------------//
357 
361 SBG_DEPRECATED(SBG_INLINE uint32_t SBG_VERSION(uint8_t major, uint8_t minor, uint8_t rev, uint8_t build));
362 SBG_DEPRECATED(SBG_INLINE uint8_t SBG_VERSION_GET_MAJOR(uint32_t encodedVersion));
363 SBG_DEPRECATED(SBG_INLINE uint8_t SBG_VERSION_GET_MINOR(uint32_t encodedVersion));
364 SBG_DEPRECATED(SBG_INLINE uint8_t SBG_VERSION_GET_REV(uint32_t encodedVersion));
365 SBG_DEPRECATED(SBG_INLINE uint8_t SBG_VERSION_GET_BUILD(uint32_t encodedVersion));
366 
378 SBG_INLINE uint32_t SBG_VERSION(uint8_t major, uint8_t minor, uint8_t rev, uint8_t build)
379 {
380  //
381  // The SBG_VERSION macro is the basic version scheme.
382  //
383  return SBG_VERSION_BASIC(major, minor, rev, build);
384 }
385 
394 SBG_INLINE uint8_t SBG_VERSION_GET_MAJOR(uint32_t encodedVersion)
395 {
396  SbgVersion versionInfo;
397 
398  //
399  // Decode the version information
400  //
401  sbgVersionDecode(encodedVersion, &versionInfo);
402 
403  //
404  // Return the major version
405  //
406  return versionInfo.major;
407 }
408 
417 SBG_INLINE uint8_t SBG_VERSION_GET_MINOR(uint32_t encodedVersion)
418 {
419  SbgVersion versionInfo;
420 
421  //
422  // Decode the version information
423  //
424  sbgVersionDecode(encodedVersion, &versionInfo);
425 
426  //
427  // Return the major version
428  //
429  return versionInfo.minor;
430 }
431 
440 SBG_INLINE uint8_t SBG_VERSION_GET_REV(uint32_t encodedVersion)
441 {
442  SbgVersion versionInfo;
443 
444  //
445  // Decode the version information
446  //
447  sbgVersionDecode(encodedVersion, &versionInfo);
448 
449  //
450  // Return the major version
451  //
452  return versionInfo.rev;
453 }
454 
463 SBG_INLINE uint8_t SBG_VERSION_GET_BUILD(uint32_t encodedVersion)
464 {
465  SbgVersion versionInfo;
466 
467  //
468  // Decode the version information
469  //
470  sbgVersionDecode(encodedVersion, &versionInfo);
471 
472  //
473  // Return the major version
474  //
475  return (uint8_t)versionInfo.build;
476 }
477 
478 
479 #ifdef __cplusplus
480 }
481 #endif
482 
483 #endif // SBG_VERSION_H
Main header for the SBG Systems common C library.
#define SBG_INLINE
Definition: sbgDefines.h:227
#define SBG_COMMON_LIB_API
Definition: sbgDefines.h:79
enum _SbgErrorCode SbgErrorCode
SBG_COMMON_LIB_API SbgErrorCode sbgVersionToStringEncoded(uint32_t version, char *pBuffer, size_t sizeOfBuffer)
SBG_COMMON_LIB_API int32_t sbgVersionIsWithinRangeEncoded(uint32_t lowerVersion, uint32_t higherVersion, uint32_t version)
_SbgVersionCmpThreshold
Definition: sbgVersion.h:97
@ SBG_VERSION_CMP_THRESHOLD_QUALIFIER
Definition: sbgVersion.h:102
@ SBG_VERSION_CMP_THRESHOLD_MAJOR
Definition: sbgVersion.h:98
@ SBG_VERSION_CMP_THRESHOLD_BUILD
Definition: sbgVersion.h:101
@ SBG_VERSION_CMP_THRESHOLD_REVISION
Definition: sbgVersion.h:100
@ SBG_VERSION_CMP_THRESHOLD_MINOR
Definition: sbgVersion.h:99
SBG_INLINE bool sbgVersionIsUsingSoftwareScheme(uint32_t encodedVersion)
Definition: sbgVersion.h:224
#define SBG_VERSION_BASIC(major, minor, rev, build)
Definition: sbgVersion.h:141
SBG_COMMON_LIB_API void sbgVersionDecode(uint32_t encodedVersion, SbgVersion *pVersionInfo)
SBG_COMMON_LIB_API void sbgVersionCreateBasic(SbgVersion *pVersion, uint8_t major, uint8_t minor, uint8_t revision, uint8_t build)
_SbgVersionQualifier
Definition: sbgVersion.h:82
@ SBG_VERSION_QUALIFIER_BETA
Definition: sbgVersion.h:85
@ SBG_VERSION_QUALIFIER_RC
Definition: sbgVersion.h:86
@ SBG_VERSION_QUALIFIER_HOT_FIX
Definition: sbgVersion.h:88
@ SBG_VERSION_QUALIFIER_DEV
Definition: sbgVersion.h:83
@ SBG_VERSION_QUALIFIER_ALPHA
Definition: sbgVersion.h:84
@ SBG_VERSION_QUALIFIER_STABLE
Definition: sbgVersion.h:87
SBG_COMMON_LIB_API int32_t sbgVersionCompare(const SbgVersion *pVersionA, const SbgVersion *pVersionB, SbgVersionCmpThreshold threshold)
enum _SbgVersionCmpThreshold SbgVersionCmpThreshold
SBG_COMMON_LIB_API SbgErrorCode sbgVersionFromString(const char *pString, SbgVersion *pVersion)
SBG_COMMON_LIB_API int32_t sbgVersionIsWithinRange(const SbgVersion *pLowerVersion, const SbgVersion *pHigherVersion, const SbgVersion *pVersion)
SBG_INLINE uint8_t SBG_VERSION_GET_BUILD(uint32_t encodedVersion)
Definition: sbgVersion.h:463
struct _SbgVersion SbgVersion
SBG_INLINE uint8_t SBG_VERSION_GET_REV(uint32_t encodedVersion)
Definition: sbgVersion.h:440
SBG_COMMON_LIB_API int32_t sbgVersionCompareEncoded(uint32_t versionA, uint32_t versionB, SbgVersionCmpThreshold threshold)
SBG_COMMON_LIB_API void sbgVersionConstructCopy(SbgVersion *pVersion, const SbgVersion *pOtherVersion)
SBG_INLINE uint32_t SBG_VERSION(uint8_t major, uint8_t minor, uint8_t rev, uint8_t build)
Definition: sbgVersion.h:378
SBG_COMMON_LIB_API void sbgVersionCreateSoftware(SbgVersion *pVersion, uint8_t major, uint8_t minor, uint16_t build, SbgVersionQualifier qualifier)
SBG_INLINE uint8_t SBG_VERSION_GET_MINOR(uint32_t encodedVersion)
Definition: sbgVersion.h:417
SBG_COMMON_LIB_API uint32_t sbgVersionEncode(const SbgVersion *pVersionInfo)
SBG_COMMON_LIB_API SbgErrorCode sbgVersionFromStringEncoded(const char *pString, uint32_t *pVersion)
enum _SbgVersionQualifier SbgVersionQualifier
SBG_DEPRECATED(SBG_INLINE uint32_t SBG_VERSION(uint8_t major, uint8_t minor, uint8_t rev, uint8_t build))
SBG_INLINE uint8_t SBG_VERSION_GET_MAJOR(uint32_t encodedVersion)
Definition: sbgVersion.h:394
SBG_COMMON_LIB_API SbgErrorCode sbgVersionToString(const SbgVersion *pVersionInfo, char *pBuffer, size_t sizeOfBuffer)
Definition: sbgVersion.h:119
uint8_t rev
Definition: sbgVersion.h:124
uint8_t minor
Definition: sbgVersion.h:123
uint8_t major
Definition: sbgVersion.h:122
SbgVersionQualifier qualifier
Definition: sbgVersion.h:121
uint16_t build
Definition: sbgVersion.h:125
bool softwareScheme
Definition: sbgVersion.h:120