Implement full SSD1306 OLED display support: - Splash screen on boot (1.5s) with project name, version, board - Dashboard showing radio state, config, counters, RSSI/SNR - RSSI history sparkline (64-sample ring buffer, 2px-wide bars) - DisplayOn/DisplayOff host commands routed via dedicated channel - Pure render functions against generic DrawTarget (no hardware coupling) - Display on/off control bypasses radio task entirely Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
semver
Semantic version parsing and comparison.
Semantic versioning (see http://semver.org/) is a set of rules for assigning version numbers.
SemVer and the Rust ecosystem
Rust itself follows the SemVer specification, as does its standard libraries. The two are not tied together.
Cargo, Rust's package manager, uses SemVer to determine which versions of packages you need installed.
Installation
To use semver, add this to your [dependencies] section:
semver = "0.7.0"
And this to your crate root:
extern crate semver;
Versions
At its simplest, the semver crate allows you to construct Version objects using the parse
method:
use semver::Version;
assert!(Version::parse("1.2.3") == Ok(Version {
major: 1,
minor: 2,
patch: 3,
pre: vec!(),
build: vec!(),
}));
If you have multiple Versions, you can use the usual comparison operators to compare them:
use semver::Version;
assert!(Version::parse("1.2.3-alpha") != Version::parse("1.2.3-beta"));
assert!(Version::parse("1.2.3-alpha2") > Version::parse("1.2.0"));
Requirements
The semver crate also provides the ability to compare requirements, which are more complex
comparisons.
For example, creating a requirement that only matches versions greater than or equal to 1.0.0:
use semver::Version;
use semver::VersionReq;
let r = VersionReq::parse(">= 1.0.0").unwrap();
let v = Version::parse("1.0.0").unwrap();
assert!(r.to_string() == ">= 1.0.0".to_string());
assert!(r.matches(&v))
It also allows parsing of ~x.y.z and ^x.y.z requirements as defined at
https://www.npmjs.org/doc/misc/semver.html
Tilde requirements specify a minimal version with some updates:
~1.2.3 := >=1.2.3 <1.3.0
~1.2 := >=1.2.0 <1.3.0
~1 := >=1.0.0 <2.0.0
Caret requirements allow SemVer compatible updates to a specified version,
0.x and 0.x+1 are not considered compatible, but 1.x and 1.x+1 are.
0.0.x is not considered compatible with any other version.
Missing minor and patch versions are desugared to 0 but allow flexibility for that value.
^1.2.3 := >=1.2.3 <2.0.0
^0.2.3 := >=0.2.3 <0.3.0
^0.0.3 := >=0.0.3 <0.0.4
^0.0 := >=0.0.0 <0.1.0
^0 := >=0.0.0 <1.0.0