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>
44 lines
1.2 KiB
Markdown
44 lines
1.2 KiB
Markdown
# lora-modulation
|
|
|
|
[![Latest Version]][crates.io]
|
|
[![Docs]][doc.rs]
|
|
|
|
A minimal crate for providing LoRa modulation characteristics of:
|
|
* Bandwidth
|
|
* Spreading factor
|
|
* Coding rate
|
|
|
|
Provides utility for calculating time on air.
|
|
|
|
## Usage
|
|
|
|
```rust
|
|
use lora_modulation::{BaseBandModulationParams, SpreadingFactor, Bandwidth, CodingRate};
|
|
|
|
let length = 12;
|
|
let params = BaseBandModulationParams::new(SpreadingFactor::_9, Bandwidth::_125KHz, CodingRate::_4_5);
|
|
let time_on_air = params.time_on_air_us(
|
|
Some(8), // preamble
|
|
true, // explicit header
|
|
length); // length of payload
|
|
|
|
// Time on air is 144.384 ms
|
|
assert_eq!(time_on_air, 144384);
|
|
```
|
|
|
|
```rust
|
|
use lora_modulation::{BaseBandModulationParams, SpreadingFactor, Bandwidth, CodingRate};
|
|
|
|
let symbols = 14;
|
|
let params = BaseBandModulationParams::new(SpreadingFactor::_12, Bandwidth::_125KHz, CodingRate::_4_5);
|
|
let timeout = params.symbols_to_ms(symbols);
|
|
|
|
// Timeout is 458 ms
|
|
assert_eq!(timeout, 458);
|
|
```
|
|
|
|
[Latest Version]: https://img.shields.io/crates/v/lora-modulation.svg
|
|
[crates.io]: https://crates.io/crates/lora-modulation
|
|
[Docs]: https://docs.rs/lora-modulation/badge.svg
|
|
[doc.rs]: https://docs.rs/lora-modulation
|