sbgECom Library  4.0.1987-stable
C library to interface SBG Systems IMU/AHRS/INS
sbgVersion.h
Go to the documentation of this file.
1 
47 #ifndef SBG_VERSION_H
48 #define SBG_VERSION_H
49 
50 #ifdef __cplusplus
51 extern "C" {
52 #endif
53 
54 // Project headers
55 #include <sbgCommon.h>
56 
57 
58 //----------------------------------------------------------------------//
59 //- Version related definitions -//
60 //----------------------------------------------------------------------//
61 #define SBG_VERSION_SOFT_SCHEME (0x00000001u << 31)
63 #define SBG_VERSION_SOFT_SCHEME_QUALIFIER_MASK (0x07)
64 #define SBG_VERSION_SOFT_SCHEME_QUALIFIER_SHIFT (28)
66 #define SBG_VERSION_SOFT_SCHEME_MAJOR_MASK (0x3F)
67 #define SBG_VERSION_SOFT_SCHEME_MAJOR_SHIFT (22)
69 #define SBG_VERSION_SOFT_SCHEME_MINOR_MASK (0x3F)
70 #define SBG_VERSION_SOFT_SCHEME_MINOR_SHIFT (16)
72 #define SBG_VERSION_SOFT_SCHEME_BUILD_MASK (0xFFFF)
73 #define SBG_VERSION_SOFT_SCHEME_BUILD_SHIFT (0)
81 {
89 
96 {
103 
104 /*
105  * DEPRECATED compatibility definitions
106  */
107 #define SBG_VERSION_CMP_THRESOLD_MAJOR SBG_VERSION_CMP_THRESHOLD_MAJOR
108 #define SBG_VERSION_CMP_THRESOLD_MINOR SBG_VERSION_CMP_THRESHOLD_MINOR
109 #define SBG_VERSION_CMP_THRESOLD_REVISION SBG_VERSION_CMP_THRESHOLD_REVISION
110 #define SBG_VERSION_CMP_THRESOLD_BUILD SBG_VERSION_CMP_THRESHOLD_BUILD
111 #define SBG_VERSION_CMP_THRESOLD_QUALIFIER SBG_VERSION_CMP_THRESHOLD_QUALIFIER
112 
117 typedef struct _SbgVersion
118 {
121  uint8_t major;
122  uint8_t minor;
123  uint8_t rev;
124  uint16_t build;
126 
127 //----------------------------------------------------------------------//
128 //- Macro definitions for encode versions -//
129 //----------------------------------------------------------------------//
130 
140 #define SBG_VERSION_BASIC(major, minor, rev, build) ( (((uint32_t)(major)) << 24) | \
141  (((uint32_t)(minor)) << 16) | \
142  (((uint32_t)(rev)) << 8) | \
143  (((uint32_t)(build))) )
144 
154 #define SBG_VERSION_SOFTWARE(major, minor, build, qualifier) ( SBG_VERSION_SOFT_SCHEME | \
155  ((((uint32_t)(qualifier)) & SBG_VERSION_SOFT_SCHEME_QUALIFIER_MASK) << SBG_VERSION_SOFT_SCHEME_QUALIFIER_SHIFT) | \
156  ((((uint32_t)(major)) & SBG_VERSION_SOFT_SCHEME_MAJOR_MASK) << SBG_VERSION_SOFT_SCHEME_MAJOR_SHIFT) | \
157  ((((uint32_t)(minor)) & SBG_VERSION_SOFT_SCHEME_MINOR_MASK) << SBG_VERSION_SOFT_SCHEME_MINOR_SHIFT) | \
158  ((((uint32_t)(build)) & SBG_VERSION_SOFT_SCHEME_BUILD_MASK) << SBG_VERSION_SOFT_SCHEME_BUILD_SHIFT) )
159 //----------------------------------------------------------------------//
160 //- Constructor -//
161 //----------------------------------------------------------------------//
162 
172 SBG_COMMON_LIB_API void sbgVersionCreateBasic(SbgVersion *pVersion, uint8_t major, uint8_t minor, uint8_t revision, uint8_t build);
173 
183 SBG_COMMON_LIB_API void sbgVersionCreateSoftware(SbgVersion *pVersion, uint8_t major, uint8_t minor, uint16_t build, SbgVersionQualifier qualifier);
184 
191 SBG_COMMON_LIB_API void sbgVersionConstructCopy(SbgVersion *pVersion, const SbgVersion *pOtherVersion);
192 
193 //----------------------------------------------------------------------//
194 //- Version encoding / decoding methods -//
195 //----------------------------------------------------------------------//
196 
203 SBG_COMMON_LIB_API void sbgVersionDecode(uint32_t encodedVersion, SbgVersion *pVersionInfo);
204 
211 SBG_COMMON_LIB_API uint32_t sbgVersionEncode(const SbgVersion *pVersionInfo);
212 
213 //----------------------------------------------------------------------//
214 //- Version parameters methods -//
215 //----------------------------------------------------------------------//
216 
223 SBG_INLINE bool sbgVersionIsUsingSoftwareScheme(uint32_t encodedVersion)
224 {
225  SbgVersion decodedVersion;
226 
227  //
228  // Decode the version first
229  //
230  sbgVersionDecode(encodedVersion, &decodedVersion);
231 
232  //
233  // Returns if the version is using a software scheme
234  //
235  return decodedVersion.softwareScheme;
236 }
237 
238 //----------------------------------------------------------------------//
239 //- Version comparaison methods -//
240 //----------------------------------------------------------------------//
241 
254 SBG_COMMON_LIB_API int32_t sbgVersionCompare(const SbgVersion *pVersionA, const SbgVersion *pVersionB, SbgVersionCmpThreshold threshold);
255 
268 SBG_COMMON_LIB_API int32_t sbgVersionCompareEncoded(uint32_t versionA, uint32_t versionB, SbgVersionCmpThreshold threshold);
269 
281 SBG_COMMON_LIB_API int32_t sbgVersionIsWithinRange(const SbgVersion *pLowerVersion, const SbgVersion *pHigherVersion, const SbgVersion *pVersion);
282 
294 SBG_COMMON_LIB_API int32_t sbgVersionIsWithinRangeEncoded(uint32_t lowerVersion, uint32_t higherVersion, uint32_t version);
295 
296 
297 //----------------------------------------------------------------------//
298 //- Version to string methods -//
299 //----------------------------------------------------------------------//
300 
310 SBG_COMMON_LIB_API SbgErrorCode sbgVersionToString(const SbgVersion *pVersionInfo, char *pBuffer, size_t sizeOfBuffer);
311 
321 SBG_COMMON_LIB_API SbgErrorCode sbgVersionToStringEncoded(uint32_t version, char *pBuffer, size_t sizeOfBuffer);
322 
323 //----------------------------------------------------------------------//
324 //- String to version methods -//
325 //----------------------------------------------------------------------//
326 
334 SBG_COMMON_LIB_API SbgErrorCode sbgVersionFromString(const char *pVersionStr, SbgVersion *pVersionInfo);
335 
343 SBG_COMMON_LIB_API SbgErrorCode sbgVersionFromStringEncoded(const char *pVersionStr, uint32_t *pVersion);
344 
345 //----------------------------------------------------------------------//
346 //- Legacy version system methods -//
347 //----------------------------------------------------------------------//
348 
352 SBG_DEPRECATED(SBG_INLINE uint32_t SBG_VERSION(uint8_t major, uint8_t minor, uint8_t rev, uint8_t build));
353 SBG_DEPRECATED(SBG_INLINE uint8_t SBG_VERSION_GET_MAJOR(uint32_t encodedVersion));
354 SBG_DEPRECATED(SBG_INLINE uint8_t SBG_VERSION_GET_MINOR(uint32_t encodedVersion));
355 SBG_DEPRECATED(SBG_INLINE uint8_t SBG_VERSION_GET_REV(uint32_t encodedVersion));
356 SBG_DEPRECATED(SBG_INLINE uint8_t SBG_VERSION_GET_BUILD(uint32_t encodedVersion));
357 
369 SBG_INLINE uint32_t SBG_VERSION(uint8_t major, uint8_t minor, uint8_t rev, uint8_t build)
370 {
371  //
372  // The SBG_VERSION macro is the basic version scheme.
373  //
374  return SBG_VERSION_BASIC(major, minor, rev, build);
375 }
376 
385 SBG_INLINE uint8_t SBG_VERSION_GET_MAJOR(uint32_t encodedVersion)
386 {
387  SbgVersion versionInfo;
388 
389  //
390  // Decode the version information
391  //
392  sbgVersionDecode(encodedVersion, &versionInfo);
393 
394  //
395  // Return the major version
396  //
397  return versionInfo.major;
398 }
399 
408 SBG_INLINE uint8_t SBG_VERSION_GET_MINOR(uint32_t encodedVersion)
409 {
410  SbgVersion versionInfo;
411 
412  //
413  // Decode the version information
414  //
415  sbgVersionDecode(encodedVersion, &versionInfo);
416 
417  //
418  // Return the major version
419  //
420  return versionInfo.minor;
421 }
422 
431 SBG_INLINE uint8_t SBG_VERSION_GET_REV(uint32_t encodedVersion)
432 {
433  SbgVersion versionInfo;
434 
435  //
436  // Decode the version information
437  //
438  sbgVersionDecode(encodedVersion, &versionInfo);
439 
440  //
441  // Return the major version
442  //
443  return versionInfo.rev;
444 }
445 
454 SBG_INLINE uint8_t SBG_VERSION_GET_BUILD(uint32_t encodedVersion)
455 {
456  SbgVersion versionInfo;
457 
458  //
459  // Decode the version information
460  //
461  sbgVersionDecode(encodedVersion, &versionInfo);
462 
463  //
464  // Return the major version
465  //
466  return (uint8_t)versionInfo.build;
467 }
468 
469 
470 #ifdef __cplusplus
471 }
472 #endif
473 
474 #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:96
@ SBG_VERSION_CMP_THRESHOLD_QUALIFIER
Definition: sbgVersion.h:101
@ SBG_VERSION_CMP_THRESHOLD_MAJOR
Definition: sbgVersion.h:97
@ SBG_VERSION_CMP_THRESHOLD_BUILD
Definition: sbgVersion.h:100
@ SBG_VERSION_CMP_THRESHOLD_REVISION
Definition: sbgVersion.h:99
@ SBG_VERSION_CMP_THRESHOLD_MINOR
Definition: sbgVersion.h:98
SBG_INLINE bool sbgVersionIsUsingSoftwareScheme(uint32_t encodedVersion)
Definition: sbgVersion.h:223
#define SBG_VERSION_BASIC(major, minor, rev, build)
Definition: sbgVersion.h:140
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:81
@ SBG_VERSION_QUALIFIER_BETA
Definition: sbgVersion.h:84
@ SBG_VERSION_QUALIFIER_RC
Definition: sbgVersion.h:85
@ SBG_VERSION_QUALIFIER_HOT_FIX
Definition: sbgVersion.h:87
@ SBG_VERSION_QUALIFIER_DEV
Definition: sbgVersion.h:82
@ SBG_VERSION_QUALIFIER_ALPHA
Definition: sbgVersion.h:83
@ SBG_VERSION_QUALIFIER_STABLE
Definition: sbgVersion.h:86
SBG_COMMON_LIB_API int32_t sbgVersionCompare(const SbgVersion *pVersionA, const SbgVersion *pVersionB, SbgVersionCmpThreshold threshold)
SBG_COMMON_LIB_API SbgErrorCode sbgVersionFromStringEncoded(const char *pVersionStr, uint32_t *pVersion)
enum _SbgVersionCmpThreshold SbgVersionCmpThreshold
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:454
struct _SbgVersion SbgVersion
SBG_COMMON_LIB_API SbgErrorCode sbgVersionFromString(const char *pVersionStr, SbgVersion *pVersionInfo)
SBG_INLINE uint8_t SBG_VERSION_GET_REV(uint32_t encodedVersion)
Definition: sbgVersion.h:431
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:369
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:408
SBG_COMMON_LIB_API uint32_t sbgVersionEncode(const SbgVersion *pVersionInfo)
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:385
SBG_COMMON_LIB_API SbgErrorCode sbgVersionToString(const SbgVersion *pVersionInfo, char *pBuffer, size_t sizeOfBuffer)
Definition: sbgVersion.h:118
uint8_t rev
Definition: sbgVersion.h:123
uint8_t minor
Definition: sbgVersion.h:122
uint8_t major
Definition: sbgVersion.h:121
SbgVersionQualifier qualifier
Definition: sbgVersion.h:120
uint16_t build
Definition: sbgVersion.h:124
bool softwareScheme
Definition: sbgVersion.h:119