Files
pico-loader/common/SdkVersion.h
2025-11-23 17:14:17 +01:00

42 lines
1.6 KiB
C++

#pragma once
#define SDK_VERSION_MAJOR_SHIFT 24
#define SDK_VERSION_MINOR_SHIFT 16
#define SDK_VERSION_RELEASE_STEP_SHIFT 0
#define SDK_VERSION_MAJOR_MASK 0x00FF
#define SDK_VERSION_MINOR_MASK 0x00FF
#define SDK_VERSION_RELEASE_STEP_MASK 0xFFFF
#define SDK_VERSION_MAJOR_NITRO_2 2
#define SDK_VERSION_MAJOR_NITRO_3 3
#define SDK_VERSION_MAJOR_NITRO_4 4
#define SDK_VERSION_MAJOR_TWL 5
#define SDK_VERSION_RELEASE_STEP_PREVIEW 10000
#define SDK_VERSION_RELEASE_STEP_RELEASE_CANDIDATE 20000
#define SDK_VERSION_RELEASE_STEP_RELEASE 30000
/// @brief Class representing an exact SDK version.
class SdkVersion
{
u32 _version;
public:
constexpr SdkVersion(u32 version)
: _version(version) { }
constexpr SdkVersion(u32 major, u32 minor, u32 releaseStep)
: _version((major << SDK_VERSION_MAJOR_SHIFT) | (minor << SDK_VERSION_MINOR_SHIFT) | releaseStep) { }
constexpr u32 GetMajor() const { return _version >> SDK_VERSION_MAJOR_SHIFT; }
constexpr u32 GetMinor() const { return (_version >> SDK_VERSION_MINOR_SHIFT) & SDK_VERSION_MINOR_MASK; }
constexpr u32 GetReleaseClass() const { return GetReleaseStep() / 10000; }
constexpr u32 GetReleaseMajor() const { return (GetReleaseStep() % 10000) / 100; }
constexpr u32 GetReleaseMinor() const { return (GetReleaseStep() % 10000) % 100; }
constexpr u32 GetReleaseStep() const { return _version & SDK_VERSION_RELEASE_STEP_MASK; }
constexpr bool IsTwlSdk() const { return GetMajor() == SDK_VERSION_MAJOR_TWL; }
constexpr friend auto operator<=>(const SdkVersion&, const SdkVersion&) = default;
};