diff --git a/src/display/render.rs b/src/display/render.rs index 5013120b..a39d2953 100644 --- a/src/display/render.rs +++ b/src/display/render.rs @@ -106,7 +106,7 @@ pub fn dashboard( Bandwidth::Khz250 => "250kHz", Bandwidth::Khz500 => "500kHz", }; - let _ = write!(buf, "{} SF{} CR4/{}", bw_str, cfg.sf, cr_denom(cfg.cr)); + let _ = write!(buf, "{} SF{} CR4/{}", bw_str, cfg.sf, cfg.cr); Text::new(&buf, Point::new(0, FONT_H * 2 - 1), style) .draw(target) .ok(); @@ -244,12 +244,3 @@ pub fn blank(target: &mut impl DrawTarget) { let _ = target.clear(BinaryColor::Off); } -fn cr_denom(cr: crate::protocol::CodingRate) -> u8 { - use crate::protocol::CodingRate; - match cr { - CodingRate::Cr4_5 => 5, - CodingRate::Cr4_6 => 6, - CodingRate::Cr4_7 => 7, - CodingRate::Cr4_8 => 8, - } -} diff --git a/src/protocol.rs b/src/protocol.rs index adc279ce..3741d07f 100644 --- a/src/protocol.rs +++ b/src/protocol.rs @@ -20,23 +20,15 @@ pub enum Bandwidth { Khz500 = 9, } -/// LoRa forward error correction coding rate. -#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, defmt::Format)] -#[repr(u8)] -pub enum CodingRate { - Cr4_5 = 1, - Cr4_6 = 2, - Cr4_7 = 3, - Cr4_8 = 4, -} - /// Complete LoRa radio configuration. #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, defmt::Format)] pub struct RadioConfig { pub freq_hz: u32, pub bw: Bandwidth, + /// Spreading factor (5-12). pub sf: u8, - pub cr: CodingRate, + /// Coding rate denominator (5-8). E.g. 5 = CR 4/5, 8 = CR 4/8. + pub cr: u8, pub sync_word: u16, pub tx_power_dbm: i8, } @@ -77,13 +69,15 @@ pub enum Response { } /// Error codes reported to the host. +/// +/// Variant indices match postcard wire encoding (0-based). #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, defmt::Format)] #[repr(u8)] pub enum ErrorCode { - InvalidConfig = 1, - RadioBusy = 2, - TxTimeout = 3, - CrcError = 4, - NotConfigured = 5, - NoDisplay = 6, + InvalidConfig = 0, + RadioBusy = 1, + TxTimeout = 2, + CrcError = 3, + NotConfigured = 4, + NoDisplay = 5, } diff --git a/src/radio/task.rs b/src/radio/task.rs index 957d4c0a..703b0699 100644 --- a/src/radio/task.rs +++ b/src/radio/task.rs @@ -206,13 +206,17 @@ fn to_sf(sf: u8) -> lora_phy::mod_params::SpreadingFactor { } } -fn to_cr(cr: protocol::CodingRate) -> lora_phy::mod_params::CodingRate { +fn to_cr(cr: u8) -> lora_phy::mod_params::CodingRate { use lora_phy::mod_params::CodingRate::*; match cr { - protocol::CodingRate::Cr4_5 => _4_5, - protocol::CodingRate::Cr4_6 => _4_6, - protocol::CodingRate::Cr4_7 => _4_7, - protocol::CodingRate::Cr4_8 => _4_8, + 5 => _4_5, + 6 => _4_6, + 7 => _4_7, + 8 => _4_8, + _ => { + debug_assert!(false, "BUG: unvalidated CR {}", cr); + _4_5 + } } } diff --git a/tools/meshcore_rx.py b/tools/meshcore_rx.py index 3e643ac9..bfce55cc 100755 --- a/tools/meshcore_rx.py +++ b/tools/meshcore_rx.py @@ -914,7 +914,7 @@ RADIO_CONFIG = { "freq_hz": 910_525_000, "bw": 6, # Khz62 = variant index 6 "sf": 7, - "cr": 0, # Cr4_5 = variant index 0 + "cr": 5, # CR 4/5 — denominator value "sync_word": 0x3444, "tx_power_dbm": 14, }