sbgECom Library
4.0.1987-stable
C library to interface SBG Systems IMU/AHRS/INS
|
Helper methods and definitions used to handle version. More...
#include <sbgCommon.h>
Go to the source code of this file.
Data Structures | |
struct | _SbgVersion |
Macros | |
#define | SBG_VERSION_SOFT_SCHEME (0x00000001u << 31) |
#define | SBG_VERSION_SOFT_SCHEME_QUALIFIER_MASK (0x07) |
#define | SBG_VERSION_SOFT_SCHEME_QUALIFIER_SHIFT (28) |
#define | SBG_VERSION_SOFT_SCHEME_MAJOR_MASK (0x3F) |
#define | SBG_VERSION_SOFT_SCHEME_MAJOR_SHIFT (22) |
#define | SBG_VERSION_SOFT_SCHEME_MINOR_MASK (0x3F) |
#define | SBG_VERSION_SOFT_SCHEME_MINOR_SHIFT (16) |
#define | SBG_VERSION_SOFT_SCHEME_BUILD_MASK (0xFFFF) |
#define | SBG_VERSION_SOFT_SCHEME_BUILD_SHIFT (0) |
#define | SBG_VERSION_BASIC(major, minor, rev, build) |
#define | SBG_VERSION_SOFTWARE(major, minor, build, qualifier) |
Typedefs | |
typedef enum _SbgVersionQualifier | SbgVersionQualifier |
typedef enum _SbgVersionCmpThreshold | SbgVersionCmpThreshold |
typedef struct _SbgVersion | SbgVersion |
Enumerations | |
enum | _SbgVersionQualifier { SBG_VERSION_QUALIFIER_DEV = 0 , SBG_VERSION_QUALIFIER_ALPHA = 1 , SBG_VERSION_QUALIFIER_BETA = 2 , SBG_VERSION_QUALIFIER_RC = 3 , SBG_VERSION_QUALIFIER_STABLE = 4 , SBG_VERSION_QUALIFIER_HOT_FIX = 5 } |
enum | _SbgVersionCmpThreshold { SBG_VERSION_CMP_THRESHOLD_MAJOR = 0 , SBG_VERSION_CMP_THRESHOLD_MINOR = 1 , SBG_VERSION_CMP_THRESHOLD_REVISION = 2 , SBG_VERSION_CMP_THRESHOLD_BUILD = 3 , SBG_VERSION_CMP_THRESHOLD_QUALIFIER = 4 } |
Functions | |
SBG_COMMON_LIB_API void | sbgVersionCreateBasic (SbgVersion *pVersion, uint8_t major, uint8_t minor, uint8_t revision, uint8_t build) |
SBG_COMMON_LIB_API void | sbgVersionCreateSoftware (SbgVersion *pVersion, uint8_t major, uint8_t minor, uint16_t build, SbgVersionQualifier qualifier) |
SBG_COMMON_LIB_API void | sbgVersionConstructCopy (SbgVersion *pVersion, const SbgVersion *pOtherVersion) |
SBG_COMMON_LIB_API void | sbgVersionDecode (uint32_t encodedVersion, SbgVersion *pVersionInfo) |
SBG_COMMON_LIB_API uint32_t | sbgVersionEncode (const SbgVersion *pVersionInfo) |
SBG_INLINE bool | sbgVersionIsUsingSoftwareScheme (uint32_t encodedVersion) |
SBG_COMMON_LIB_API int32_t | sbgVersionCompare (const SbgVersion *pVersionA, const SbgVersion *pVersionB, SbgVersionCmpThreshold threshold) |
SBG_COMMON_LIB_API int32_t | sbgVersionCompareEncoded (uint32_t versionA, uint32_t versionB, SbgVersionCmpThreshold threshold) |
SBG_COMMON_LIB_API int32_t | sbgVersionIsWithinRange (const SbgVersion *pLowerVersion, const SbgVersion *pHigherVersion, const SbgVersion *pVersion) |
SBG_COMMON_LIB_API int32_t | sbgVersionIsWithinRangeEncoded (uint32_t lowerVersion, uint32_t higherVersion, uint32_t version) |
SBG_COMMON_LIB_API SbgErrorCode | sbgVersionToString (const SbgVersion *pVersionInfo, char *pBuffer, size_t sizeOfBuffer) |
SBG_COMMON_LIB_API SbgErrorCode | sbgVersionToStringEncoded (uint32_t version, char *pBuffer, size_t sizeOfBuffer) |
SBG_COMMON_LIB_API SbgErrorCode | sbgVersionFromString (const char *pVersionStr, SbgVersion *pVersionInfo) |
SBG_COMMON_LIB_API SbgErrorCode | sbgVersionFromStringEncoded (const char *pVersionStr, uint32_t *pVersion) |
SBG_DEPRECATED (SBG_INLINE uint32_t SBG_VERSION(uint8_t major, uint8_t minor, uint8_t rev, uint8_t build)) | |
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) |
SBG_INLINE uint8_t | SBG_VERSION_GET_MINOR (uint32_t encodedVersion) |
SBG_INLINE uint8_t | SBG_VERSION_GET_REV (uint32_t encodedVersion) |
SBG_INLINE uint8_t | SBG_VERSION_GET_BUILD (uint32_t encodedVersion) |
Helper methods and definitions used to handle version.
Version information is stored within a single uint32_t. There are two different versions schemes to better handle software revisions and file format / hardware ones.
Software version are only used for firmware and software. This versions is defined as a Major
.Minor
.Build
-Qualifier
for example: 1.3.1845-rc Major and Minor can range from 0 to 63. Build is an uint16_t ranging from 0 to 65535. Qualifier is an enum encoded on 3 bits.
Basic version is used for hardware or file formats and is the legacy one for software. This versions is defined as a Major
.Minor
.Revision
.Build
Each element is stored in an uint8_t. The Major version should NEVER go above 31
The MIT license
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define SBG_VERSION_SOFT_SCHEME (0x00000001u << 31) |
Set to 1 to indicate a version number that uses the software scheme. Set to 0 means a basic version scheme.
#define SBG_VERSION_SOFT_SCHEME_QUALIFIER_MASK (0x07) |
Mask used to keep only the version qualifier enum.
#define SBG_VERSION_SOFT_SCHEME_QUALIFIER_SHIFT (28) |
Bitshift to apply to get the qualifier enum.
#define SBG_VERSION_SOFT_SCHEME_MAJOR_MASK (0x3F) |
Mask used to keep only the major version field.
#define SBG_VERSION_SOFT_SCHEME_MAJOR_SHIFT (22) |
Bitshift used to get the major version field.
#define SBG_VERSION_SOFT_SCHEME_MINOR_MASK (0x3F) |
Mask used to keep only the minor version field.
#define SBG_VERSION_SOFT_SCHEME_MINOR_SHIFT (16) |
Bitshift used to get the minor version field.
#define SBG_VERSION_SOFT_SCHEME_BUILD_MASK (0xFFFF) |
Mask used to keep only the build version field.
#define SBG_VERSION_SOFT_SCHEME_BUILD_SHIFT (0) |
Bitshift used to get the build version field.
#define SBG_VERSION_BASIC | ( | major, | |
minor, | |||
rev, | |||
build | |||
) |
Compile a version number using the basic scheme based on major, minor, revision and build information
[in] | major | The major version between 0 to 127. |
[in] | minor | The minor version between 0 to 255. |
[in] | rev | The revision version between 0 to 255. |
[in] | build | The build number between 0 to 255. |
#define SBG_VERSION_SOFTWARE | ( | major, | |
minor, | |||
build, | |||
qualifier | |||
) |
Compile a version number using the software scheme based on major, minor, build, qualifier.
[in] | major | The major version between 0 to 63. |
[in] | minor | The minor version between 0 to 63. |
[in] | build | The build version between 0 to 65535. |
[in] | qualifier | The version qualifier within the SbgVersionQualifier enum. |
typedef enum _SbgVersionQualifier SbgVersionQualifier |
Version qualifier enum definition. This enum is used to identify if we have a basic version scheme or a software one. If it's a software one, we can easly know if the software version is a beta, a stable one.
typedef enum _SbgVersionCmpThreshold SbgVersionCmpThreshold |
Version qualifier enum definition. This enum is used to identify if we have a basic version scheme or a software one. If it's a software one, we can easily know if the software version is a beta, a stable one.
typedef struct _SbgVersion SbgVersion |
This structure contains all the fields provided by a version number. It handles both basic and software version numbers.
enum _SbgVersionQualifier |
Version qualifier enum definition. This enum is used to identify if we have a basic version scheme or a software one. If it's a software one, we can easly know if the software version is a beta, a stable one.
Version qualifier enum definition. This enum is used to identify if we have a basic version scheme or a software one. If it's a software one, we can easily know if the software version is a beta, a stable one.
SBG_COMMON_LIB_API void sbgVersionCreateBasic | ( | SbgVersion * | pVersion, |
uint8_t | major, | ||
uint8_t | minor, | ||
uint8_t | revision, | ||
uint8_t | build | ||
) |
Create a basic scheme version given the components major.minor.rev.build
[out] | pVersion | Version instance |
[in] | major | The major component between 0 to 127 |
[in] | minor | The minor component between 0 to 255 |
[in] | revision | The revision component between 0 to 255 |
[in] | build | The build component between 0 to 255 |
SBG_COMMON_LIB_API void sbgVersionCreateSoftware | ( | SbgVersion * | pVersion, |
uint8_t | major, | ||
uint8_t | minor, | ||
uint16_t | build, | ||
SbgVersionQualifier | qualifier | ||
) |
Create a software scheme version given the components major.minor.build.qualifier
[out] | pVersion | Version instance |
[in] | major | The major component between 0 to 63 |
[in] | minor | The minor component between 0 to 63 |
[in] | build | The build component between 0 to 65535 |
[in] | qualifier | The version qualifier enum value. |
SBG_COMMON_LIB_API void sbgVersionConstructCopy | ( | SbgVersion * | pVersion, |
const SbgVersion * | pOtherVersion | ||
) |
Version copy constructor.
[in] | pVersion | Version. |
[in] | pOtherVersion | Version to copy from. |
SBG_COMMON_LIB_API void sbgVersionDecode | ( | uint32_t | encodedVersion, |
SbgVersion * | pVersionInfo | ||
) |
Fill a SbgVersion structure based on an uint32_t that stores the 'compiled' version information.
[in] | encodedVersion | The version information stored within a uint32_t. |
[out] | pVersionInfo | Pointer on an allocated SbgVersion structure to fill. |
Referenced by SBG_VERSION_GET_BUILD(), SBG_VERSION_GET_MAJOR(), SBG_VERSION_GET_MINOR(), SBG_VERSION_GET_REV(), and sbgVersionIsUsingSoftwareScheme().
SBG_COMMON_LIB_API uint32_t sbgVersionEncode | ( | const SbgVersion * | pVersionInfo | ) |
Construct a uint32_t containing a version information based on a SbgVersion structure.
[in] | pVersionInfo | Pointer on a read only version structure to encode. |
SBG_INLINE bool sbgVersionIsUsingSoftwareScheme | ( | uint32_t | encodedVersion | ) |
Returns true if this encoded version number is using a software scheme.
[in] | encodedVersion | The encoded version number to test stored in a uint32_t. |
References sbgVersionDecode(), and _SbgVersion::softwareScheme.
SBG_COMMON_LIB_API int32_t sbgVersionCompare | ( | const SbgVersion * | pVersionA, |
const SbgVersion * | pVersionB, | ||
SbgVersionCmpThreshold | threshold | ||
) |
Compare two version information structures and return if the version A is greater, less or equal than the version B.
The computation is roughly result = version A - version B We can define how far we will check if the version A is greater than the version B. For example, we can only check the major or major and minor fields.
[in] | pVersionA | The first version to compare. |
[in] | pVersionB | The second version to compare. |
[in] | threshold | The comparaison threshold to know if we are checking the major, minor, revision, build, ... |
SBG_COMMON_LIB_API int32_t sbgVersionCompareEncoded | ( | uint32_t | versionA, |
uint32_t | versionB, | ||
SbgVersionCmpThreshold | threshold | ||
) |
Compare two encoded versions and return if the version A is greater, less or equal than the version B.
The computation is roughly result = version A - version B We can define how far we will check if the version A is greater than the version B. For example, we can only check the major or major and minor fields.
[in] | versionA | The first compiled version to compare. |
[in] | versionB | The second compiled version to compare. |
[in] | threshold | The comparaison threshold to know if we are checking the major, minor, revision, build, ... |
SBG_COMMON_LIB_API int32_t sbgVersionIsWithinRange | ( | const SbgVersion * | pLowerVersion, |
const SbgVersion * | pHigherVersion, | ||
const SbgVersion * | pVersion | ||
) |
Check if the provided version is between the provided version interval. All versions should have the same scheme.
[in] | pLowerVersion | The lower version bound of the interval. |
[in] | pHigherVersion | The hiver version bound of the interval. |
[in] | pVersion | The version to check. |
SBG_COMMON_LIB_API int32_t sbgVersionIsWithinRangeEncoded | ( | uint32_t | lowerVersion, |
uint32_t | higherVersion, | ||
uint32_t | version | ||
) |
Check if the provided encoded version is between the provided version interval. All versions should have the same scheme.
[in] | lowerVersion | The lower version bound of the interval. |
[in] | higherVersion | The hiver version bound of the interval. |
[in] | version | The version to check. |
SBG_COMMON_LIB_API SbgErrorCode sbgVersionToString | ( | const SbgVersion * | pVersionInfo, |
char * | pBuffer, | ||
size_t | sizeOfBuffer | ||
) |
Convert a version information to a human readable string.
[in] | pVersionInfo | Pointer on a read only version structure to convert to a human readable string. |
[out] | pBuffer | Buffer to store the version as a human readable null terminated string. |
[in] | sizeOfBuffer | Maximum buffer size including the null terminated char. |
SBG_COMMON_LIB_API SbgErrorCode sbgVersionToStringEncoded | ( | uint32_t | version, |
char * | pBuffer, | ||
size_t | sizeOfBuffer | ||
) |
Convert an encoded version number to a human readable string.
[in] | version | Encoded version value to to convert to a human readable string. |
[out] | pBuffer | Buffer to store the version as a human readable null terminated string. |
[in] | sizeOfBuffer | Maximum buffer size including the null terminated char. |
SBG_COMMON_LIB_API SbgErrorCode sbgVersionFromString | ( | const char * | pVersionStr, |
SbgVersion * | pVersionInfo | ||
) |
Convert a human readable string to a version structure.
[in] | pVersionStr | The string containing the version to convert. |
[out] | pVersionInfo | Pointer to a version structure to store the parsed version info. |
SBG_COMMON_LIB_API SbgErrorCode sbgVersionFromStringEncoded | ( | const char * | pVersionStr, |
uint32_t * | pVersion | ||
) |
Convert an encoded version number to a human readable string.
[in] | pVersionStr | The string containing the version to convert. |
[out] | pVersion | Returned encoded version value parsed from the string. |
SBG_DEPRECATED | ( | SBG_INLINE uint32_t | SBG_VERSIONuint8_t major, uint8_t minor, uint8_t rev, uint8_t build | ) |
Define all these methods as deprecated.
SBG_INLINE uint32_t SBG_VERSION | ( | uint8_t | major, |
uint8_t | minor, | ||
uint8_t | rev, | ||
uint8_t | build | ||
) |
DEPRECATED macro, please update your code
Compile a version number using the basic scheme based on major, minor, revision and build information
[in] | major | The major version between 0 to 127. |
[in] | minor | The minor version between 0 to 255. |
[in] | rev | The revision version between 0 to 255. |
[in] | build | The build number between 0 to 255. |
References SBG_VERSION_BASIC.
SBG_INLINE uint8_t SBG_VERSION_GET_MAJOR | ( | uint32_t | encodedVersion | ) |
DEPRECATED method, please update your code.
Extract a basic version scheme using legacy methods.
[in] | encodedVersion | The encoded version to extract the major version. |
References _SbgVersion::major, and sbgVersionDecode().
SBG_INLINE uint8_t SBG_VERSION_GET_MINOR | ( | uint32_t | encodedVersion | ) |
DEPRECATED method, please update your code.
Extract a basic version scheme using legacy methods.
[in] | encodedVersion | The encoded version to extract the major version. |
References _SbgVersion::minor, and sbgVersionDecode().
SBG_INLINE uint8_t SBG_VERSION_GET_REV | ( | uint32_t | encodedVersion | ) |
DEPRECATED method, please update your code.
Extract a basic version scheme using legacy methods.
[in] | encodedVersion | The encoded version to extract the major version. |
References _SbgVersion::rev, and sbgVersionDecode().
SBG_INLINE uint8_t SBG_VERSION_GET_BUILD | ( | uint32_t | encodedVersion | ) |
DEPRECATED method, please update your code.
Extract a basic version scheme using legacy methods
[in] | encodedVersion | The encoded version to extract the major version. |
References _SbgVersion::build, and sbgVersionDecode().