Compare commits

..

3 Commits

Author SHA1 Message Date
bfcff17f34 Bump version to 4.0.4 2022-11-15 10:13:35 +00:00
6973e91ade Remove unsetting of device_queue_item.
In case the queue-item does fit the first RX window, but not the second
one, it will be set to None. If this happens, then the
save_downlink_frame step will not add the queue-item ID to the
DownlinkFrame (internal).

Then on txack, ChirpStack is unable to dequeue the payload causing the
payload to stay in the queue.
2022-11-08 15:40:37 +00:00
e2214f9485 Add coding_rate field to LoraDataRate (+ fix 2.4GHz coding-rate).
Per Regional Parameters Specification, the LoRa modulation always uses
coding-rate 4/5, however this is not the case for ISM2400 (which is
currently not covered by the reg. params) in which case coding-rate
4/8LI must be used.

Closes #51.
2022-11-08 15:19:45 +00:00
27 changed files with 130 additions and 25 deletions

8
Cargo.lock generated
View File

@ -672,7 +672,7 @@ dependencies = [
[[package]]
name = "backend"
version = "4.0.3"
version = "4.0.4"
dependencies = [
"aes-kw",
"anyhow",
@ -889,7 +889,7 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "chirpstack"
version = "4.0.3"
version = "4.0.4"
dependencies = [
"aes",
"anyhow",
@ -968,7 +968,7 @@ dependencies = [
[[package]]
name = "chirpstack_api"
version = "4.0.3"
version = "4.0.4"
dependencies = [
"hex",
"pbjson",
@ -2207,7 +2207,7 @@ dependencies = [
[[package]]
name = "lrwn"
version = "4.0.3"
version = "4.0.4"
dependencies = [
"aes",
"anyhow",

View File

@ -1,6 +1,6 @@
{
"name": "@chirpstack/chirpstack-api-grpc-web",
"version": "4.0.3",
"version": "4.0.4",
"description": "Chirpstack gRPC-web API",
"license": "MIT",
"devDependencies": {

2
api/js/package.json vendored
View File

@ -1,6 +1,6 @@
{
"name": "@chirpstack/chirpstack-api",
"version": "4.0.3",
"version": "4.0.4",
"description": "Chirpstack JS and TS API",
"license": "MIT",
"devDependencies": {

View File

@ -18,7 +18,7 @@ CLASSIFIERS = [
setup(
name='chirpstack-api',
version = "4.0.3",
version = "4.0.4",
url='https://github.com/brocaar/chirpstack-api',
author='Orne Brocaar',
author_email='info@brocaar.com',

2
api/rust/Cargo.lock generated vendored
View File

@ -117,7 +117,7 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "chirpstack_api"
version = "4.0.3"
version = "4.0.4"
dependencies = [
"hex",
"pbjson",

2
api/rust/Cargo.toml vendored
View File

@ -1,7 +1,7 @@
[package]
name = "chirpstack_api"
description = "ChirpStack Protobuf / gRPC API definitions."
version = "4.0.3"
version = "4.0.4"
authors = ["Orne Brocaar <info@brocaar.com>"]
license = "MIT"
homepage = "https://www.chirpstack.io"

View File

@ -1,6 +1,6 @@
[package]
name = "backend"
version = "4.0.3"
version = "4.0.4"
authors = ["Orne Brocaar <info@brocaar.com>"]
edition = "2018"
publish = false

View File

@ -3,7 +3,7 @@ name = "chirpstack"
description = "ChirpStack is an open-source LoRaWAN(TM) Network Server"
repository = "https://github.com/chirpstack/chirpstack"
homepage="https://www.chirpstack.io/"
version = "4.0.3"
version = "4.0.4"
authors = ["Orne Brocaar <info@brocaar.com>"]
edition = "2021"
publish = false

View File

@ -495,9 +495,6 @@ impl Data {
// Network-server FCnt.
mac_pl.fhdr.f_cnt = self.device_session.n_f_cnt_down;
// Unset queue-item.
self.device_queue_item = None;
} else {
// In this case mac-commands are sent using the FOpts field. In case there
// is a device-queue item, we will validate if it still fits within the
@ -531,7 +528,6 @@ impl Data {
} else {
f_pending = true;
mac_pl.fhdr.f_ctrl.f_pending = true;
self.device_queue_item = None;
}
}
}

View File

@ -1,3 +1,5 @@
use std::str::FromStr;
use anyhow::Result;
use rand::seq::SliceRandom;
@ -65,7 +67,9 @@ pub fn set_tx_info_data_rate(
parameters: Some(gw::modulation::Parameters::Lora(gw::LoraModulationInfo {
bandwidth: v.bandwidth,
spreading_factor: v.spreading_factor as u32,
code_rate: chirpstack_api::gw::CodeRate::Cr45.into(),
code_rate: gw::CodeRate::from_str(&v.coding_rate)
.map_err(|e| anyhow!("{}", e))?
.into(),
polarization_inversion: true,
code_rate_legacy: "".into(),
})),

View File

@ -25,6 +25,7 @@ pub fn get_uplink_dr(region_name: &str, tx_info: &chirpstack_api::gw::UplinkTxIn
lrwn::region::DataRateModulation::Lora(lrwn::region::LoraDataRate {
spreading_factor: v.spreading_factor as u8,
bandwidth: v.bandwidth,
coding_rate: v.code_rate().into(),
})
}
chirpstack_api::gw::modulation::Parameters::Fsk(v) => {
@ -57,7 +58,9 @@ pub fn set_uplink_modulation(
gw::modulation::Parameters::Lora(gw::LoraModulationInfo {
bandwidth: v.bandwidth,
spreading_factor: v.spreading_factor as u32,
code_rate: gw::CodeRate::Cr45.into(),
code_rate: gw::CodeRate::from_str(&v.coding_rate)
.map_err(|e| anyhow!("{}", e))?
.into(),
code_rate_legacy: "".into(),
polarization_inversion: true,
})

View File

@ -255,6 +255,7 @@ fn per_modultation_to_per_dr(
lrwn::region::DataRateModulation::Lora(lrwn::region::LoraDataRate {
spreading_factor: v.spreading_factor as u8,
bandwidth: v.bandwidth,
coding_rate: v.code_rate().into(),
})
}
gw::modulation::Parameters::Fsk(v) => {

View File

@ -3,7 +3,7 @@ name = "lrwn"
description = "Library for encoding / decoding LoRaWAN frames."
homepage = "https://www.chirpstack.io"
license = "MIT"
version = "4.0.3"
version = "4.0.4"
authors = ["Orne Brocaar <info@brocaar.com>"]
edition = "2018"
repository = "https://github.com/chirpstack/chirpstack"

View File

@ -42,6 +42,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 12,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -53,6 +54,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 11,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -64,6 +66,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 10,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -75,6 +78,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 9,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -86,6 +90,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 8,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -97,6 +102,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -108,6 +114,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 250000,
coding_rate: "4/5".into(),
}),
},
),

View File

@ -28,6 +28,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 12,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -39,6 +40,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 11,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -50,6 +52,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 10,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -61,6 +64,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 9,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -72,6 +76,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 8,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -83,6 +88,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -94,6 +100,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 8,
bandwidth: 500000,
coding_rate: "4/5".into(),
}),
},
),
@ -116,6 +123,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 12,
bandwidth: 500000,
coding_rate: "4/5".into(),
}),
},
),
@ -127,6 +135,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 11,
bandwidth: 500000,
coding_rate: "4/5".into(),
}),
},
),
@ -138,6 +147,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 10,
bandwidth: 500000,
coding_rate: "4/5".into(),
}),
},
),
@ -149,6 +159,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 9,
bandwidth: 500000,
coding_rate: "4/5".into(),
}),
},
),
@ -160,6 +171,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 8,
bandwidth: 500000,
coding_rate: "4/5".into(),
}),
},
),
@ -171,6 +183,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 500000,
coding_rate: "4/5".into(),
}),
},
),
@ -1362,6 +1375,7 @@ pub mod test {
dr_modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 12,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
uplink: true,
expected_dr: 0,
@ -1370,6 +1384,7 @@ pub mod test {
dr_modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 12,
bandwidth: 500000,
coding_rate: "4/5".into(),
}),
uplink: false,
expected_dr: 8,
@ -1378,6 +1393,7 @@ pub mod test {
dr_modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 8,
bandwidth: 500000,
coding_rate: "4/5".into(),
}),
uplink: true,
expected_dr: 6,
@ -1386,6 +1402,7 @@ pub mod test {
dr_modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 8,
bandwidth: 500000,
coding_rate: "4/5".into(),
}),
uplink: false,
expected_dr: 12,

View File

@ -28,6 +28,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 12,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -39,6 +40,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 11,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -50,6 +52,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 10,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -61,6 +64,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 9,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -72,6 +76,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 8,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -83,6 +88,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -94,6 +100,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 500000,
coding_rate: "4/5".into(),
}),
},
),

View File

@ -28,6 +28,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 12,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -39,6 +40,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 11,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -50,6 +52,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 10,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -61,6 +64,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 9,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -72,6 +76,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 8,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -83,6 +88,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -94,6 +100,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 250000,
coding_rate: "4/5".into(),
}),
},
),

View File

@ -28,6 +28,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 12,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -39,6 +40,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 11,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -50,6 +52,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 10,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -61,6 +64,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 9,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -72,6 +76,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 8,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -83,6 +88,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -94,6 +100,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 250000,
coding_rate: "4/5".into(),
}),
},
),

View File

@ -28,6 +28,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 12,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -39,6 +40,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 11,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -50,6 +52,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 10,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -61,6 +64,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 9,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -72,6 +76,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 8,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -83,6 +88,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -94,6 +100,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 250000,
coding_rate: "4/5".into(),
}),
},
),
@ -764,6 +771,7 @@ mod tests {
DataRateModulation::Lora(LoraDataRate {
spreading_factor: 12,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
0,
),
@ -772,6 +780,7 @@ mod tests {
DataRateModulation::Lora(LoraDataRate {
spreading_factor: 12,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
0,
),
@ -780,6 +789,7 @@ mod tests {
DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
5,
),
@ -788,6 +798,7 @@ mod tests {
DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
5,
),
@ -796,6 +807,7 @@ mod tests {
DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 250000,
coding_rate: "4/5".into(),
}),
6,
),
@ -804,6 +816,7 @@ mod tests {
DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 250000,
coding_rate: "4/5".into(),
}),
6,
),

View File

@ -28,6 +28,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 12,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -39,6 +40,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 11,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -50,6 +52,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 10,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -61,6 +64,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 9,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -72,6 +76,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 8,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -83,6 +88,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),

View File

@ -28,6 +28,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 12,
bandwidth: 812000,
coding_rate: "4/8LI".into(),
}),
},
),
@ -39,6 +40,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 11,
bandwidth: 812000,
coding_rate: "4/8LI".into(),
}),
},
),
@ -50,6 +52,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 10,
bandwidth: 812000,
coding_rate: "4/8LI".into(),
}),
},
),
@ -61,6 +64,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 9,
bandwidth: 812000,
coding_rate: "4/8LI".into(),
}),
},
),
@ -72,6 +76,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 8,
bandwidth: 812000,
coding_rate: "4/8LI".into(),
}),
},
),
@ -83,6 +88,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 812000,
coding_rate: "4/8LI".into(),
}),
},
),
@ -94,6 +100,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 6,
bandwidth: 812000,
coding_rate: "4/8LI".into(),
}),
},
),
@ -105,6 +112,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 5,
bandwidth: 812000,
coding_rate: "4/8LI".into(),
}),
},
),

View File

@ -28,6 +28,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 12,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -39,6 +40,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 11,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -50,6 +52,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 10,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -61,6 +64,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 9,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -72,6 +76,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 8,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -83,6 +88,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),

View File

@ -274,25 +274,26 @@ pub struct DataRate {
pub modulation: DataRateModulation,
}
#[derive(Clone, PartialEq)]
#[derive(Clone, PartialEq, Debug)]
pub enum DataRateModulation {
Lora(LoraDataRate),
Fsk(FskDataRate),
LrFhss(LrFhssDataRate),
}
#[derive(Clone, PartialEq)]
#[derive(Clone, PartialEq, Debug)]
pub struct LoraDataRate {
pub spreading_factor: u8,
pub bandwidth: u32,
pub coding_rate: String,
}
#[derive(Clone, PartialEq)]
#[derive(Clone, PartialEq, Debug)]
pub struct FskDataRate {
pub bitrate: u32,
}
#[derive(Clone, PartialEq)]
#[derive(Clone, PartialEq, Debug)]
pub struct LrFhssDataRate {
pub coding_rate: String,
pub occupied_channel_width: u32,
@ -465,7 +466,7 @@ impl RegionBaseConfig {
}
}
Err(anyhow!("Unknown data-rate"))
Err(anyhow!("Unknown data-rate: {:?}", modulation))
}
fn get_data_rate(&self, dr: u8) -> Result<DataRateModulation> {

View File

@ -28,6 +28,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 12,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -39,6 +40,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 11,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -50,6 +52,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 10,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -61,6 +64,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 9,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -72,6 +76,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 8,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -83,6 +88,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -94,6 +100,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 250000,
coding_rate: "4/5".into(),
}),
},
),

View File

@ -28,6 +28,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 10,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -39,6 +40,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 9,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -50,6 +52,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 8,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -61,6 +64,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
},
),
@ -72,6 +76,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 8,
bandwidth: 500000,
coding_rate: "4/5".into(),
}),
},
),
@ -106,6 +111,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 12,
bandwidth: 500000,
coding_rate: "4/5".into(),
}),
},
),
@ -117,6 +123,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 11,
bandwidth: 500000,
coding_rate: "4/5".into(),
}),
},
),
@ -128,6 +135,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 10,
bandwidth: 500000,
coding_rate: "4/5".into(),
}),
},
),
@ -139,6 +147,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 9,
bandwidth: 500000,
coding_rate: "4/5".into(),
}),
},
),
@ -150,6 +159,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 8,
bandwidth: 500000,
coding_rate: "4/5".into(),
}),
},
),
@ -161,6 +171,7 @@ impl Configuration {
modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 7,
bandwidth: 500000,
coding_rate: "4/5".into(),
}),
},
),
@ -1054,6 +1065,7 @@ pub mod test {
dr_modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 10,
bandwidth: 125000,
coding_rate: "4/5".into(),
}),
uplink: true,
expected_dr: 0,
@ -1062,6 +1074,7 @@ pub mod test {
dr_modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 12,
bandwidth: 500000,
coding_rate: "4/5".into(),
}),
uplink: false,
expected_dr: 8,
@ -1070,6 +1083,7 @@ pub mod test {
dr_modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 8,
bandwidth: 500000,
coding_rate: "4/5".into(),
}),
uplink: true,
expected_dr: 4,
@ -1078,6 +1092,7 @@ pub mod test {
dr_modulation: DataRateModulation::Lora(LoraDataRate {
spreading_factor: 8,
bandwidth: 500000,
coding_rate: "4/5".into(),
}),
uplink: false,
expected_dr: 12,

View File

@ -1,6 +1,6 @@
{
"name": "chirpstack-ui",
"version": "4.0.3",
"version": "4.0.4",
"private": true,
"dependencies": {
"@ant-design/colors": "^6.0.0",

View File

@ -1881,7 +1881,7 @@
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
"@chirpstack/chirpstack-api-grpc-web@file:../api/grpc-web":
version "4.0.3"
version "4.0.4"
dependencies:
"@types/google-protobuf" "^3.15.2"
google-protobuf "^3.17.3"