mirror of
https://github.com/chirpstack/chirpstack.git
synced 2025-06-18 15:28:12 +00:00
Change LR-FHSS code_rate to CodeRate type.
This commit is contained in:
13
api/rust/proto/chirpstack/gw/gw.proto
vendored
13
api/rust/proto/chirpstack/gw/gw.proto
vendored
@ -15,10 +15,15 @@ import "google/protobuf/struct.proto";
|
||||
|
||||
enum CodeRate {
|
||||
CR_UNDEFINED = 0;
|
||||
CR_4_5 = 1;
|
||||
CR_4_5 = 1; // LoRa
|
||||
CR_4_6 = 2;
|
||||
CR_4_7 = 3;
|
||||
CR_4_8 = 4;
|
||||
CR_3_8 = 5; // LR-FHSS
|
||||
CR_2_6 = 6;
|
||||
CR_1_4 = 7;
|
||||
CR_1_6 = 8;
|
||||
CR_5_6 = 9;
|
||||
}
|
||||
|
||||
enum DownlinkTiming {
|
||||
@ -159,7 +164,11 @@ message LrFhssModulationInfo {
|
||||
uint32 operating_channel_width = 1;
|
||||
|
||||
// Code-rate.
|
||||
string code_rate = 2;
|
||||
// Deprecated: use code_rate.
|
||||
string code_rate_legacy = 2;
|
||||
|
||||
// Code-rate.
|
||||
CodeRate code_rate = 4;
|
||||
|
||||
// Hopping grid number of steps.
|
||||
uint32 grid_steps = 3;
|
||||
|
70
api/rust/src/gw.rs
vendored
70
api/rust/src/gw.rs
vendored
@ -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()
|
||||
},
|
||||
|
Reference in New Issue
Block a user