Change LR-FHSS code_rate to CodeRate type.

This commit is contained in:
Orne Brocaar
2022-07-22 12:19:36 +01:00
parent e7432986cd
commit c0a450c8f8
15 changed files with 805 additions and 658 deletions

70
api/rust/src/gw.rs vendored
View File

@ -1,8 +1,50 @@
use rand::Rng;
use std::error::Error;
use std::str::FromStr;
tonic::include_proto!("gw/gw");
include!(concat!(env!("OUT_DIR"), "/gw/gw.serde.rs"));
#[allow(clippy::from_over_into)]
impl Into<String> for CodeRate {
fn into(self) -> String {
match self {
CodeRate::CrUndefined => "",
CodeRate::Cr45 => "4/5",
CodeRate::Cr46 => "4/6",
CodeRate::Cr47 => "4/7",
CodeRate::Cr48 => "4/8",
CodeRate::Cr38 => "3/8",
CodeRate::Cr26 => "2/6",
CodeRate::Cr14 => "1/4",
CodeRate::Cr16 => "1/6",
CodeRate::Cr56 => "5/6",
}
.to_string()
}
}
impl FromStr for CodeRate {
type Err = Box<dyn Error>;
fn from_str(s: &str) -> Result<Self, Box<dyn Error>> {
Ok(match s {
"4/5" => CodeRate::Cr45,
"4/6" | "2/3" => CodeRate::Cr46,
"4/7" => CodeRate::Cr47,
"4/8" | "2/4" | "1/2" => CodeRate::Cr48,
"3/8" => CodeRate::Cr38,
"2/6" | "1/3" => CodeRate::Cr26,
"1/4" => CodeRate::Cr14,
"1/6" => CodeRate::Cr16,
"5/6" => CodeRate::Cr56,
_ => {
return Err("invalid code-rate".into());
}
})
}
}
#[allow(clippy::from_over_into)]
impl Into<String> for TxAckStatus {
fn into(self) -> String {
@ -35,14 +77,9 @@ impl UplinkFrame {
modulation::Parameters::Lora(LoraModulationInfo {
bandwidth: info.bandwidth * 1000,
spreading_factor: info.spreading_factor,
code_rate: match info.code_rate_legacy.as_ref() {
"4/5" => CodeRate::Cr45,
"2/3" | "4/6" => CodeRate::Cr46,
"4/7" => CodeRate::Cr47,
"1/2" | "2/4" | "4/8" => CodeRate::Cr48,
_ => CodeRate::CrUndefined,
}
.into(),
code_rate: CodeRate::from_str(&info.code_rate_legacy)
.unwrap_or(CodeRate::CrUndefined)
.into(),
code_rate_legacy: "".into(),
polarization_inversion: info.polarization_inversion,
})
@ -51,7 +88,13 @@ impl UplinkFrame {
modulation::Parameters::Fsk(info.clone())
}
uplink_tx_info_legacy::ModulationInfo::LrFhssModulationInfo(info) => {
modulation::Parameters::LrFhss(info.clone())
modulation::Parameters::LrFhss(LrFhssModulationInfo {
code_rate: CodeRate::from_str(&info.code_rate_legacy)
.unwrap_or(CodeRate::CrUndefined)
.into(),
code_rate_legacy: "".into(),
..info.clone()
})
}
}),
}),
@ -156,14 +199,7 @@ impl DownlinkFrame {
LoraModulationInfo {
bandwidth: v.bandwidth / 1000,
spreading_factor: v.spreading_factor,
code_rate_legacy: match v.code_rate() {
CodeRate::CrUndefined => "",
CodeRate::Cr45 => "4/5",
CodeRate::Cr46 => "4/6",
CodeRate::Cr47 => "4/7",
CodeRate::Cr48 => "4/8",
}
.into(),
code_rate_legacy: v.code_rate().into(),
polarization_inversion: v.polarization_inversion,
..Default::default()
},