mirror of
https://github.com/chirpstack/chirpstack.git
synced 2025-07-21 14:26:42 +00:00
Compare commits
8 Commits
v4.13.0-te
...
fix_and_al
Author | SHA1 | Date | |
---|---|---|---|
|
7b4f94375c | ||
|
29674fc318 | ||
|
8804f774fb | ||
|
3a0de8196f | ||
|
46bb01ccdc | ||
|
26cca09ce8 | ||
|
c016cd1f7d | ||
|
1ead82e8a5 |
4
.github/workflows/main.yml
vendored
4
.github/workflows/main.yml
vendored
@@ -28,7 +28,7 @@ jobs:
|
||||
name: Install Nix
|
||||
uses: cachix/install-nix-action@v27
|
||||
with:
|
||||
nix_path: nixpkgs=channel:nixos-24.11
|
||||
nix_path: nixpkgs=channel:nixos-25.05
|
||||
-
|
||||
name: Cargo cache
|
||||
uses: actions/cache@v4
|
||||
@@ -69,7 +69,7 @@ jobs:
|
||||
name: Install Nix
|
||||
uses: cachix/install-nix-action@v27
|
||||
with:
|
||||
nix_path: nixpkgs=channel:nixos-24.11
|
||||
nix_path: nixpkgs=channel:nixos-25.05
|
||||
-
|
||||
name: Cargo cache
|
||||
uses: actions/cache@v4
|
||||
|
444
Cargo.lock
generated
444
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
6
api/go/go.mod
vendored
6
api/go/go.mod
vendored
@@ -11,8 +11,8 @@ require (
|
||||
|
||||
require (
|
||||
github.com/golang/protobuf v1.5.4 // indirect
|
||||
golang.org/x/net v0.36.0 // indirect
|
||||
golang.org/x/sys v0.30.0 // indirect
|
||||
golang.org/x/text v0.22.0 // indirect
|
||||
golang.org/x/net v0.38.0 // indirect
|
||||
golang.org/x/sys v0.31.0 // indirect
|
||||
golang.org/x/text v0.23.0 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240325203815-454cdb8f5daa // indirect
|
||||
)
|
||||
|
12
api/go/go.sum
vendored
12
api/go/go.sum
vendored
@@ -2,12 +2,12 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek
|
||||
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
|
||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
golang.org/x/net v0.36.0 h1:vWF2fRbw4qslQsQzgFqZff+BItCvGFQqKzKIzx1rmoA=
|
||||
golang.org/x/net v0.36.0/go.mod h1:bFmbeoIPfrw4sMHNhb4J9f6+tPziuGjq7Jk/38fxi1I=
|
||||
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
|
||||
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
|
||||
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
|
||||
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
|
||||
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
|
||||
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
|
||||
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
|
||||
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240325203815-454cdb8f5daa h1:Jt1XW5PaLXF1/ePZrznsh/aAUvI7Adfc3LY1dAKlzRs=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240325203815-454cdb8f5daa/go.mod h1:K4kfzHtI0kqWA79gecJarFtDn/Mls+GxQcg3Zox91Ac=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240325203815-454cdb8f5daa h1:RBgMaUMP+6soRkik4VoN8ojR2nex2TqZwjSSogic+eo=
|
||||
|
10
api/proto/api/device_profile.proto
vendored
10
api/proto/api/device_profile.proto
vendored
@@ -240,11 +240,15 @@ message DeviceProfile {
|
||||
// from the device (if requested).
|
||||
uint32 class_b_timeout = 16;
|
||||
|
||||
// Class-B ping-slots per beacon period.
|
||||
// Class-B ping-slot periodicity.
|
||||
// Valid options are: 0 - 7.
|
||||
//
|
||||
// The actual number of ping-slots per beacon period equals to 2^k.
|
||||
uint32 class_b_ping_slot_nb_k = 17;
|
||||
// Number of ping-slots per beacon-period:
|
||||
// pingNb = 2^(7-periodicity)
|
||||
//
|
||||
// Periodicity: 0 = 128 ping-slots per beacon period = ~ every 1 sec
|
||||
// Periodicity: 7 = 1 ping-slot per beacon period = ~ every 128 sec
|
||||
uint32 class_b_ping_slot_periodicity = 17;
|
||||
|
||||
// Class-B ping-slot DR.
|
||||
uint32 class_b_ping_slot_dr = 18;
|
||||
|
10
api/proto/api/device_profile_template.proto
vendored
10
api/proto/api/device_profile_template.proto
vendored
@@ -117,11 +117,15 @@ message DeviceProfileTemplate {
|
||||
// This is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested).
|
||||
uint32 class_b_timeout = 18;
|
||||
|
||||
// Class-B ping-slots per beacon period.
|
||||
// Class-B ping-slot periodicity (only for Class-B).
|
||||
// Valid options are: 0 - 7.
|
||||
//
|
||||
// The actual number of ping-slots per beacon period equals to 2^k.
|
||||
uint32 class_b_ping_slot_nb_k = 19;
|
||||
// Number of ping-slots per beacon-period:
|
||||
// pingNb = 2^(7-periodicity)
|
||||
//
|
||||
// Periodicity: 0 = 128 ping-slots per beacon period = ~ every 1 sec
|
||||
// Periodicity: 7 = 1 ping-slot per beacon period = ~ every 128 sec
|
||||
uint32 class_b_ping_slot_periodicity = 19;
|
||||
|
||||
// Class-B ping-slot DR.
|
||||
uint32 class_b_ping_slot_dr = 20;
|
||||
|
9
api/proto/api/fuota.proto
vendored
9
api/proto/api/fuota.proto
vendored
@@ -104,7 +104,14 @@ message FuotaDeployment {
|
||||
uint32 multicast_dr = 7;
|
||||
|
||||
// Multicast ping-slot period (Class-B only).
|
||||
uint32 multicast_class_b_ping_slot_nb_k = 8;
|
||||
// Valid options are: 0 - 7.
|
||||
//
|
||||
// Number of ping-slots per beacon-period:
|
||||
// pingNb = 2^(7-periodicity)
|
||||
//
|
||||
// Periodicity: 0 = 128 ping-slots per beacon period = ~ every 1 sec
|
||||
// Periodicity: 7 = 1 ping-slot per beacon period = ~ every 128 sec
|
||||
uint32 multicast_class_b_ping_slot_periodicity = 8;
|
||||
|
||||
// Multicast frequency (Hz).
|
||||
uint32 multicast_frequency = 9;
|
||||
|
16
api/proto/api/multicast_group.proto
vendored
16
api/proto/api/multicast_group.proto
vendored
@@ -165,15 +165,15 @@ message MulticastGroup {
|
||||
// Frequency (Hz).
|
||||
uint32 frequency = 11;
|
||||
|
||||
// Ping-slot period (only for Class-B).
|
||||
// Deprecated: use class_b_ping_slot_nb_k.
|
||||
uint32 class_b_ping_slot_period = 12;
|
||||
|
||||
// Class-B ping-slots per beacon period (only for Class-B).
|
||||
// Valid options are: 0 - 7;
|
||||
// Class-B ping-slot periodicity (only for Class-B).
|
||||
// Valid options are: 0 - 7.
|
||||
//
|
||||
// The actual number of ping-slots per beacon period equals to 2^k.
|
||||
uint32 class_b_ping_slot_nb_k = 14;
|
||||
// Number of ping-slots per beacon-period:
|
||||
// pingNb = 2^(7-periodicity)
|
||||
//
|
||||
// Periodicity: 0 = 128 ping-slots per beacon period = ~ every 1 sec
|
||||
// Periodicity: 7 = 1 ping-slot per beacon period = ~ every 128 sec
|
||||
uint32 class_b_ping_slot_periodicity = 14;
|
||||
|
||||
// Scheduling type (only for Class-C).
|
||||
MulticastGroupSchedulingType class_c_scheduling_type = 13;
|
||||
|
2
api/proto/common/common.proto
vendored
2
api/proto/common/common.proto
vendored
@@ -67,7 +67,7 @@ enum Region {
|
||||
ISM2400 = 11;
|
||||
}
|
||||
|
||||
enum MType {
|
||||
enum FType {
|
||||
// JoinRequest.
|
||||
JOIN_REQUEST = 0;
|
||||
|
||||
|
8
api/proto/stream/frame.proto
vendored
8
api/proto/stream/frame.proto
vendored
@@ -24,8 +24,8 @@ message UplinkFrameLog {
|
||||
// RX meta-data.
|
||||
repeated gw.UplinkRxInfo rx_info = 3;
|
||||
|
||||
// Message type.
|
||||
common.MType m_type = 4;
|
||||
// Frame type.
|
||||
common.FType f_type = 4;
|
||||
|
||||
// Device address (optional).
|
||||
string dev_addr = 5;
|
||||
@@ -59,8 +59,8 @@ message DownlinkFrameLog {
|
||||
// Gateway ID (EUI64).
|
||||
string gateway_id = 5;
|
||||
|
||||
// Message type.
|
||||
common.MType m_type = 6;
|
||||
// Frame type.
|
||||
common.FType f_type = 6;
|
||||
|
||||
// Device address (optional).
|
||||
string dev_addr = 7;
|
||||
|
8
api/proto/stream/meta.proto
vendored
8
api/proto/stream/meta.proto
vendored
@@ -32,8 +32,8 @@ message UplinkMeta {
|
||||
// Application payload byte count.
|
||||
uint32 application_payload_byte_count = 6;
|
||||
|
||||
// Message type.
|
||||
common.MType message_type = 7;
|
||||
// Frame type.
|
||||
common.FType frame_type = 7;
|
||||
}
|
||||
|
||||
message DownlinkMeta {
|
||||
@@ -55,8 +55,8 @@ message DownlinkMeta {
|
||||
// Application payload byte count.
|
||||
uint32 application_payload_byte_count = 6;
|
||||
|
||||
// Message type.
|
||||
common.MType message_type = 7;
|
||||
// Frame type.
|
||||
common.FType frame_type = 7;
|
||||
|
||||
// Gateway ID (EUI64).
|
||||
string gateway_id = 8;
|
||||
|
@@ -240,11 +240,15 @@ message DeviceProfile {
|
||||
// from the device (if requested).
|
||||
uint32 class_b_timeout = 16;
|
||||
|
||||
// Class-B ping-slots per beacon period.
|
||||
// Class-B ping-slot periodicity.
|
||||
// Valid options are: 0 - 7.
|
||||
//
|
||||
// The actual number of ping-slots per beacon period equals to 2^k.
|
||||
uint32 class_b_ping_slot_nb_k = 17;
|
||||
// Number of ping-slots per beacon-period:
|
||||
// pingNb = 2^(7-periodicity)
|
||||
//
|
||||
// Periodicity: 0 = 128 ping-slots per beacon period = ~ every 1 sec
|
||||
// Periodicity: 7 = 1 ping-slot per beacon period = ~ every 128 sec
|
||||
uint32 class_b_ping_slot_periodicity = 17;
|
||||
|
||||
// Class-B ping-slot DR.
|
||||
uint32 class_b_ping_slot_dr = 18;
|
||||
|
@@ -117,11 +117,15 @@ message DeviceProfileTemplate {
|
||||
// This is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested).
|
||||
uint32 class_b_timeout = 18;
|
||||
|
||||
// Class-B ping-slots per beacon period.
|
||||
// Class-B ping-slot periodicity (only for Class-B).
|
||||
// Valid options are: 0 - 7.
|
||||
//
|
||||
// The actual number of ping-slots per beacon period equals to 2^k.
|
||||
uint32 class_b_ping_slot_nb_k = 19;
|
||||
// Number of ping-slots per beacon-period:
|
||||
// pingNb = 2^(7-periodicity)
|
||||
//
|
||||
// Periodicity: 0 = 128 ping-slots per beacon period = ~ every 1 sec
|
||||
// Periodicity: 7 = 1 ping-slot per beacon period = ~ every 128 sec
|
||||
uint32 class_b_ping_slot_periodicity = 19;
|
||||
|
||||
// Class-B ping-slot DR.
|
||||
uint32 class_b_ping_slot_dr = 20;
|
||||
|
9
api/rust/proto/chirpstack/api/fuota.proto
vendored
9
api/rust/proto/chirpstack/api/fuota.proto
vendored
@@ -104,7 +104,14 @@ message FuotaDeployment {
|
||||
uint32 multicast_dr = 7;
|
||||
|
||||
// Multicast ping-slot period (Class-B only).
|
||||
uint32 multicast_class_b_ping_slot_nb_k = 8;
|
||||
// Valid options are: 0 - 7.
|
||||
//
|
||||
// Number of ping-slots per beacon-period:
|
||||
// pingNb = 2^(7-periodicity)
|
||||
//
|
||||
// Periodicity: 0 = 128 ping-slots per beacon period = ~ every 1 sec
|
||||
// Periodicity: 7 = 1 ping-slot per beacon period = ~ every 128 sec
|
||||
uint32 multicast_class_b_ping_slot_periodicity = 8;
|
||||
|
||||
// Multicast frequency (Hz).
|
||||
uint32 multicast_frequency = 9;
|
||||
|
@@ -165,15 +165,15 @@ message MulticastGroup {
|
||||
// Frequency (Hz).
|
||||
uint32 frequency = 11;
|
||||
|
||||
// Ping-slot period (only for Class-B).
|
||||
// Deprecated: use class_b_ping_slot_nb_k.
|
||||
uint32 class_b_ping_slot_period = 12;
|
||||
|
||||
// Class-B ping-slots per beacon period (only for Class-B).
|
||||
// Valid options are: 0 - 7;
|
||||
// Class-B ping-slot periodicity (only for Class-B).
|
||||
// Valid options are: 0 - 7.
|
||||
//
|
||||
// The actual number of ping-slots per beacon period equals to 2^k.
|
||||
uint32 class_b_ping_slot_nb_k = 14;
|
||||
// Number of ping-slots per beacon-period:
|
||||
// pingNb = 2^(7-periodicity)
|
||||
//
|
||||
// Periodicity: 0 = 128 ping-slots per beacon period = ~ every 1 sec
|
||||
// Periodicity: 7 = 1 ping-slot per beacon period = ~ every 128 sec
|
||||
uint32 class_b_ping_slot_periodicity = 14;
|
||||
|
||||
// Scheduling type (only for Class-C).
|
||||
MulticastGroupSchedulingType class_c_scheduling_type = 13;
|
||||
|
@@ -67,7 +67,7 @@ enum Region {
|
||||
ISM2400 = 11;
|
||||
}
|
||||
|
||||
enum MType {
|
||||
enum FType {
|
||||
// JoinRequest.
|
||||
JOIN_REQUEST = 0;
|
||||
|
||||
|
8
api/rust/proto/chirpstack/stream/frame.proto
vendored
8
api/rust/proto/chirpstack/stream/frame.proto
vendored
@@ -24,8 +24,8 @@ message UplinkFrameLog {
|
||||
// RX meta-data.
|
||||
repeated gw.UplinkRxInfo rx_info = 3;
|
||||
|
||||
// Message type.
|
||||
common.MType m_type = 4;
|
||||
// Frame type.
|
||||
common.FType f_type = 4;
|
||||
|
||||
// Device address (optional).
|
||||
string dev_addr = 5;
|
||||
@@ -59,8 +59,8 @@ message DownlinkFrameLog {
|
||||
// Gateway ID (EUI64).
|
||||
string gateway_id = 5;
|
||||
|
||||
// Message type.
|
||||
common.MType m_type = 6;
|
||||
// Frame type.
|
||||
common.FType f_type = 6;
|
||||
|
||||
// Device address (optional).
|
||||
string dev_addr = 7;
|
||||
|
8
api/rust/proto/chirpstack/stream/meta.proto
vendored
8
api/rust/proto/chirpstack/stream/meta.proto
vendored
@@ -32,8 +32,8 @@ message UplinkMeta {
|
||||
// Application payload byte count.
|
||||
uint32 application_payload_byte_count = 6;
|
||||
|
||||
// Message type.
|
||||
common.MType message_type = 7;
|
||||
// Frame type.
|
||||
common.FType frame_type = 7;
|
||||
}
|
||||
|
||||
message DownlinkMeta {
|
||||
@@ -55,8 +55,8 @@ message DownlinkMeta {
|
||||
// Application payload byte count.
|
||||
uint32 application_payload_byte_count = 6;
|
||||
|
||||
// Message type.
|
||||
common.MType message_type = 7;
|
||||
// Frame type.
|
||||
common.FType frame_type = 7;
|
||||
|
||||
// Gateway ID (EUI64).
|
||||
string gateway_id = 8;
|
||||
|
18
api/rust/src/common.rs
vendored
18
api/rust/src/common.rs
vendored
@@ -7,17 +7,17 @@ include!(concat!(env!("OUT_DIR"), "/common/common.rs"));
|
||||
include!(concat!(env!("OUT_DIR"), "/common/common.serde.rs"));
|
||||
|
||||
#[allow(clippy::from_over_into)]
|
||||
impl Into<String> for MType {
|
||||
impl Into<String> for FType {
|
||||
fn into(self) -> String {
|
||||
match self {
|
||||
MType::JoinRequest => "JoinRequest",
|
||||
MType::JoinAccept => "JoinAccept",
|
||||
MType::UnconfirmedDataUp => "UnconfirmedDataUp",
|
||||
MType::UnconfirmedDataDown => "UnconfirmedDataDown",
|
||||
MType::ConfirmedDataUp => "ConfirmedDataUp",
|
||||
MType::ConfirmedDataDown => "ConfirmedDataDown",
|
||||
MType::RejoinRequest => "RejoinRequest",
|
||||
MType::Proprietary => "Proprietary",
|
||||
FType::JoinRequest => "JoinRequest",
|
||||
FType::JoinAccept => "JoinAccept",
|
||||
FType::UnconfirmedDataUp => "UnconfirmedDataUp",
|
||||
FType::UnconfirmedDataDown => "UnconfirmedDataDown",
|
||||
FType::ConfirmedDataUp => "ConfirmedDataUp",
|
||||
FType::ConfirmedDataDown => "ConfirmedDataDown",
|
||||
FType::RejoinRequest => "RejoinRequest",
|
||||
FType::Proprietary => "Proprietary",
|
||||
}
|
||||
.to_string()
|
||||
}
|
||||
|
@@ -10,7 +10,7 @@
|
||||
|
||||
[dependencies]
|
||||
chirpstack_api = { path = "../api/rust", version = "4.13.0-test.1" }
|
||||
redis = { version = "0.29", features = [
|
||||
redis = { version = "0.31", features = [
|
||||
"cluster-async",
|
||||
"tokio-rustls-comp",
|
||||
] }
|
||||
|
@@ -34,8 +34,8 @@
|
||||
tokio-postgres = { version = "0.7", optional = true }
|
||||
tokio-postgres-rustls = { version = "0.13", optional = true }
|
||||
bigdecimal = "0.4"
|
||||
redis = { version = "0.29", features = ["tls-rustls", "tokio-rustls-comp"] }
|
||||
deadpool-redis = { version = "0.20", features = ["cluster", "serde"] }
|
||||
redis = { version = "0.31", features = ["tls-rustls", "tokio-rustls-comp"] }
|
||||
deadpool-redis = { version = "0.21", features = ["cluster", "serde"] }
|
||||
|
||||
# Logging
|
||||
tracing = "0.1"
|
||||
@@ -137,7 +137,7 @@
|
||||
] }
|
||||
|
||||
# Misc
|
||||
uuid = { version = "1.16", features = ["v4", "serde"] }
|
||||
uuid = { version = "1.17", features = ["v4", "serde"] }
|
||||
chrono = "0.4"
|
||||
async-trait = "0.1"
|
||||
aes = "0.8"
|
||||
|
@@ -0,0 +1,8 @@
|
||||
alter table fuota_deployment
|
||||
rename column multicast_class_b_ping_slot_periodicity to multicast_class_b_ping_slot_nb_k;
|
||||
|
||||
alter table multicast_group
|
||||
rename column class_b_ping_slot_periodicity to class_b_ping_slot_nb_k;
|
||||
|
||||
alter table device_profile_template
|
||||
rename column class_b_ping_slot_periodicity to class_b_ping_slot_nb_k;
|
@@ -0,0 +1,8 @@
|
||||
alter table device_profile_template
|
||||
rename column class_b_ping_slot_nb_k to class_b_ping_slot_periodicity;
|
||||
|
||||
alter table multicast_group
|
||||
rename column class_b_ping_slot_nb_k to class_b_ping_slot_periodicity;
|
||||
|
||||
alter table fuota_deployment
|
||||
rename column multicast_class_b_ping_slot_nb_k to multicast_class_b_ping_slot_periodicity;
|
@@ -0,0 +1,8 @@
|
||||
alter table fuota_deployment
|
||||
rename column multicast_class_b_ping_slot_periodicity to multicast_class_b_ping_slot_nb_k;
|
||||
|
||||
alter table multicast_group
|
||||
rename column class_b_ping_slot_periodicity to class_b_ping_slot_nb_k;
|
||||
|
||||
alter table device_profile_template
|
||||
rename column class_b_ping_slot_periodicity to class_b_ping_slot_nb_k;
|
@@ -0,0 +1,8 @@
|
||||
alter table device_profile_template
|
||||
rename column class_b_ping_slot_nb_k to class_b_ping_slot_periodicity;
|
||||
|
||||
alter table multicast_group
|
||||
rename column class_b_ping_slot_nb_k to class_b_ping_slot_periodicity;
|
||||
|
||||
alter table fuota_deployment
|
||||
rename column multicast_class_b_ping_slot_nb_k to multicast_class_b_ping_slot_periodicity;
|
@@ -252,7 +252,7 @@ async fn _handle_pr_start_req(b: &[u8]) -> Result<backend::PRStartAnsPayload> {
|
||||
let pl: backend::PRStartReqPayload = serde_json::from_slice(b)?;
|
||||
let phy = lrwn::PhyPayload::from_slice(&pl.phy_payload)?;
|
||||
|
||||
if phy.mhdr.m_type == lrwn::MType::JoinRequest {
|
||||
if phy.mhdr.f_type == lrwn::FType::JoinRequest {
|
||||
_handle_pr_start_req_join(pl, phy).await
|
||||
} else {
|
||||
_handle_pr_start_req_data(pl, phy).await
|
||||
|
@@ -94,7 +94,7 @@ impl DeviceProfileService for DeviceProfile {
|
||||
class_b_params: if req_dp.supports_class_b {
|
||||
Some(fields::ClassBParams {
|
||||
timeout: req_dp.class_b_timeout as u16,
|
||||
ping_slot_nb_k: req_dp.class_b_ping_slot_nb_k as u8,
|
||||
ping_slot_periodicity: req_dp.class_b_ping_slot_periodicity as u8,
|
||||
ping_slot_dr: req_dp.class_b_ping_slot_dr as u8,
|
||||
ping_slot_freq: req_dp.class_b_ping_slot_freq,
|
||||
})
|
||||
@@ -205,7 +205,7 @@ impl DeviceProfileService for DeviceProfile {
|
||||
supports_class_b: dp.supports_class_b,
|
||||
supports_class_c: dp.supports_class_c,
|
||||
class_b_timeout: class_b_params.timeout as u32,
|
||||
class_b_ping_slot_nb_k: class_b_params.ping_slot_nb_k as u32,
|
||||
class_b_ping_slot_periodicity: class_b_params.ping_slot_periodicity as u32,
|
||||
class_b_ping_slot_dr: class_b_params.ping_slot_dr as u32,
|
||||
class_b_ping_slot_freq: class_b_params.ping_slot_freq as u32,
|
||||
class_c_timeout: class_c_params.timeout as u32,
|
||||
@@ -350,7 +350,7 @@ impl DeviceProfileService for DeviceProfile {
|
||||
class_b_params: if req_dp.supports_class_b {
|
||||
Some(fields::ClassBParams {
|
||||
timeout: req_dp.class_b_timeout as u16,
|
||||
ping_slot_nb_k: req_dp.class_b_ping_slot_nb_k as u8,
|
||||
ping_slot_periodicity: req_dp.class_b_ping_slot_periodicity as u8,
|
||||
ping_slot_dr: req_dp.class_b_ping_slot_dr as u8,
|
||||
ping_slot_freq: req_dp.class_b_ping_slot_freq,
|
||||
})
|
||||
|
@@ -60,7 +60,7 @@ impl DeviceProfileTemplateService for DeviceProfileTemplate {
|
||||
supports_class_b: req_dp.supports_class_b,
|
||||
supports_class_c: req_dp.supports_class_c,
|
||||
class_b_timeout: req_dp.class_b_timeout as i32,
|
||||
class_b_ping_slot_nb_k: req_dp.class_b_ping_slot_nb_k as i32,
|
||||
class_b_ping_slot_periodicity: req_dp.class_b_ping_slot_periodicity as i32,
|
||||
class_b_ping_slot_dr: req_dp.class_b_ping_slot_dr as i16,
|
||||
class_b_ping_slot_freq: req_dp.class_b_ping_slot_freq as i64,
|
||||
class_c_timeout: req_dp.class_c_timeout as i32,
|
||||
@@ -132,7 +132,7 @@ impl DeviceProfileTemplateService for DeviceProfileTemplate {
|
||||
supports_class_b: dp.supports_class_b,
|
||||
supports_class_c: dp.supports_class_c,
|
||||
class_b_timeout: dp.class_b_timeout as u32,
|
||||
class_b_ping_slot_nb_k: dp.class_b_ping_slot_nb_k as u32,
|
||||
class_b_ping_slot_periodicity: dp.class_b_ping_slot_periodicity as u32,
|
||||
class_b_ping_slot_dr: dp.class_b_ping_slot_dr as u32,
|
||||
class_b_ping_slot_freq: dp.class_b_ping_slot_freq as u32,
|
||||
class_c_timeout: dp.class_c_timeout as u32,
|
||||
@@ -201,7 +201,7 @@ impl DeviceProfileTemplateService for DeviceProfileTemplate {
|
||||
supports_class_b: req_dp.supports_class_b,
|
||||
supports_class_c: req_dp.supports_class_c,
|
||||
class_b_timeout: req_dp.class_b_timeout as i32,
|
||||
class_b_ping_slot_nb_k: req_dp.class_b_ping_slot_nb_k as i32,
|
||||
class_b_ping_slot_periodicity: req_dp.class_b_ping_slot_periodicity as i32,
|
||||
class_b_ping_slot_dr: req_dp.class_b_ping_slot_dr as i16,
|
||||
class_b_ping_slot_freq: req_dp.class_b_ping_slot_freq as i64,
|
||||
class_c_timeout: req_dp.class_c_timeout as i32,
|
||||
|
@@ -63,7 +63,8 @@ impl FuotaService for Fuota {
|
||||
.multicast_class_c_scheduling_type()
|
||||
.from_proto(),
|
||||
multicast_dr: req_dp.multicast_dr as i16,
|
||||
multicast_class_b_ping_slot_nb_k: req_dp.multicast_class_b_ping_slot_nb_k as i16,
|
||||
multicast_class_b_ping_slot_periodicity: req_dp.multicast_class_b_ping_slot_periodicity
|
||||
as i16,
|
||||
multicast_frequency: req_dp.multicast_frequency as i64,
|
||||
multicast_timeout: req_dp.multicast_timeout as i16,
|
||||
unicast_max_retry_count: req_dp.unicast_max_retry_count as i16,
|
||||
@@ -138,7 +139,8 @@ impl FuotaService for Fuota {
|
||||
.to_proto()
|
||||
.into(),
|
||||
multicast_dr: dp.multicast_dr as u32,
|
||||
multicast_class_b_ping_slot_nb_k: dp.multicast_class_b_ping_slot_nb_k as u32,
|
||||
multicast_class_b_ping_slot_periodicity: dp.multicast_class_b_ping_slot_periodicity
|
||||
as u32,
|
||||
multicast_frequency: dp.multicast_frequency as u32,
|
||||
multicast_timeout: dp.multicast_timeout as u32,
|
||||
unicast_max_retry_count: dp.unicast_max_retry_count as u32,
|
||||
@@ -217,7 +219,8 @@ impl FuotaService for Fuota {
|
||||
.multicast_class_c_scheduling_type()
|
||||
.from_proto(),
|
||||
multicast_dr: req_dp.multicast_dr as i16,
|
||||
multicast_class_b_ping_slot_nb_k: req_dp.multicast_class_b_ping_slot_nb_k as i16,
|
||||
multicast_class_b_ping_slot_periodicity: req_dp.multicast_class_b_ping_slot_periodicity
|
||||
as i16,
|
||||
multicast_frequency: req_dp.multicast_frequency as i64,
|
||||
multicast_timeout: req_dp.multicast_timeout as i16,
|
||||
unicast_max_retry_count: req_dp.unicast_max_retry_count as i16,
|
||||
|
@@ -193,17 +193,17 @@ impl FromProto<Aggregation> for common::Aggregation {
|
||||
}
|
||||
}
|
||||
|
||||
impl ToProto<common::MType> for lrwn::MType {
|
||||
fn to_proto(self) -> common::MType {
|
||||
impl ToProto<common::FType> for lrwn::FType {
|
||||
fn to_proto(self) -> common::FType {
|
||||
match self {
|
||||
lrwn::MType::JoinRequest => common::MType::JoinRequest,
|
||||
lrwn::MType::JoinAccept => common::MType::JoinAccept,
|
||||
lrwn::MType::UnconfirmedDataUp => common::MType::UnconfirmedDataUp,
|
||||
lrwn::MType::UnconfirmedDataDown => common::MType::UnconfirmedDataDown,
|
||||
lrwn::MType::ConfirmedDataUp => common::MType::ConfirmedDataUp,
|
||||
lrwn::MType::ConfirmedDataDown => common::MType::ConfirmedDataDown,
|
||||
lrwn::MType::RejoinRequest => common::MType::RejoinRequest,
|
||||
lrwn::MType::Proprietary => common::MType::Proprietary,
|
||||
lrwn::FType::JoinRequest => common::FType::JoinRequest,
|
||||
lrwn::FType::JoinAccept => common::FType::JoinAccept,
|
||||
lrwn::FType::UnconfirmedDataUp => common::FType::UnconfirmedDataUp,
|
||||
lrwn::FType::UnconfirmedDataDown => common::FType::UnconfirmedDataDown,
|
||||
lrwn::FType::ConfirmedDataUp => common::FType::ConfirmedDataUp,
|
||||
lrwn::FType::ConfirmedDataDown => common::FType::ConfirmedDataDown,
|
||||
lrwn::FType::RejoinRequest => common::FType::RejoinRequest,
|
||||
lrwn::FType::Proprietary => common::FType::Proprietary,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -61,14 +61,7 @@ impl MulticastGroupService for MulticastGroup {
|
||||
.to_string(),
|
||||
dr: req_mg.dr as i16,
|
||||
frequency: req_mg.frequency as i64,
|
||||
class_b_ping_slot_nb_k: if req_mg.class_b_ping_slot_period != 0 {
|
||||
// For backwards compatibility.
|
||||
(req_mg.class_b_ping_slot_period / 32)
|
||||
.checked_ilog2()
|
||||
.unwrap_or_default()
|
||||
} else {
|
||||
req_mg.class_b_ping_slot_nb_k
|
||||
} as i16,
|
||||
class_b_ping_slot_periodicity: req_mg.class_b_ping_slot_periodicity as i16,
|
||||
class_c_scheduling_type: req_mg.class_c_scheduling_type().from_proto(),
|
||||
..Default::default()
|
||||
};
|
||||
@@ -121,8 +114,7 @@ impl MulticastGroupService for MulticastGroup {
|
||||
.into(),
|
||||
dr: mg.dr as u32,
|
||||
frequency: mg.frequency as u32,
|
||||
class_b_ping_slot_period: (1 << (mg.class_b_ping_slot_nb_k as u32)) * 32,
|
||||
class_b_ping_slot_nb_k: mg.class_b_ping_slot_nb_k as u32,
|
||||
class_b_ping_slot_periodicity: mg.class_b_ping_slot_periodicity as u32,
|
||||
class_c_scheduling_type: mg.class_c_scheduling_type.to_proto().into(),
|
||||
}),
|
||||
created_at: Some(helpers::datetime_to_prost_timestamp(&mg.created_at)),
|
||||
@@ -168,14 +160,7 @@ impl MulticastGroupService for MulticastGroup {
|
||||
.to_string(),
|
||||
dr: req_mg.dr as i16,
|
||||
frequency: req_mg.frequency as i64,
|
||||
class_b_ping_slot_nb_k: if req_mg.class_b_ping_slot_period != 0 {
|
||||
// For backwards compatibility.
|
||||
(req_mg.class_b_ping_slot_period / 32)
|
||||
.checked_ilog2()
|
||||
.unwrap_or_default()
|
||||
} else {
|
||||
req_mg.class_b_ping_slot_nb_k
|
||||
} as i16,
|
||||
class_b_ping_slot_periodicity: req_mg.class_b_ping_slot_periodicity as i16,
|
||||
class_c_scheduling_type: req_mg.class_c_scheduling_type().from_proto(),
|
||||
..Default::default()
|
||||
})
|
||||
@@ -606,7 +591,7 @@ pub mod test {
|
||||
group_type: api::MulticastGroupType::ClassC.into(),
|
||||
dr: 3,
|
||||
frequency: 868300000,
|
||||
class_b_ping_slot_nb_k: 1,
|
||||
class_b_ping_slot_periodicity: 1,
|
||||
class_c_scheduling_type: api::MulticastGroupSchedulingType::GpsTime.into(),
|
||||
..Default::default()
|
||||
}),
|
||||
@@ -636,8 +621,7 @@ pub mod test {
|
||||
group_type: api::MulticastGroupType::ClassC.into(),
|
||||
dr: 3,
|
||||
frequency: 868300000,
|
||||
class_b_ping_slot_nb_k: 1,
|
||||
class_b_ping_slot_period: 64,
|
||||
class_b_ping_slot_periodicity: 1,
|
||||
class_c_scheduling_type: api::MulticastGroupSchedulingType::GpsTime.into(),
|
||||
}),
|
||||
get_resp.get_ref().multicast_group
|
||||
@@ -659,8 +643,7 @@ pub mod test {
|
||||
group_type: api::MulticastGroupType::ClassB.into(),
|
||||
dr: 2,
|
||||
frequency: 868200000,
|
||||
class_b_ping_slot_nb_k: 2,
|
||||
class_b_ping_slot_period: 0,
|
||||
class_b_ping_slot_periodicity: 2,
|
||||
class_c_scheduling_type: api::MulticastGroupSchedulingType::Delay.into(),
|
||||
}),
|
||||
},
|
||||
@@ -688,8 +671,7 @@ pub mod test {
|
||||
group_type: api::MulticastGroupType::ClassB.into(),
|
||||
dr: 2,
|
||||
frequency: 868200000,
|
||||
class_b_ping_slot_nb_k: 2,
|
||||
class_b_ping_slot_period: 128,
|
||||
class_b_ping_slot_periodicity: 2,
|
||||
class_c_scheduling_type: api::MulticastGroupSchedulingType::Delay.into(),
|
||||
}),
|
||||
get_resp.get_ref().multicast_group
|
||||
|
@@ -149,7 +149,9 @@ impl Flow {
|
||||
group_type: self.fuota_deployment.multicast_group_type.clone(),
|
||||
frequency: self.fuota_deployment.multicast_frequency,
|
||||
dr: self.fuota_deployment.multicast_dr,
|
||||
class_b_ping_slot_nb_k: self.fuota_deployment.multicast_class_b_ping_slot_nb_k,
|
||||
class_b_ping_slot_periodicity: self
|
||||
.fuota_deployment
|
||||
.multicast_class_b_ping_slot_periodicity,
|
||||
class_c_scheduling_type: self.fuota_deployment.multicast_class_c_scheduling_type,
|
||||
..Default::default()
|
||||
})
|
||||
@@ -577,7 +579,7 @@ impl Flow {
|
||||
time_out_periodicity:
|
||||
multicastsetup::v1::McClassBSessionReqPayloadTimeOutPeriodicity {
|
||||
time_out: self.fuota_deployment.multicast_timeout as u8,
|
||||
periodicity: self.fuota_deployment.multicast_class_b_ping_slot_nb_k
|
||||
periodicity: self.fuota_deployment.multicast_class_b_ping_slot_periodicity
|
||||
as u8,
|
||||
},
|
||||
dl_frequ: self.fuota_deployment.multicast_frequency as u32,
|
||||
@@ -619,7 +621,7 @@ impl Flow {
|
||||
time_out_periodicity:
|
||||
multicastsetup::v2::McClassBSessionReqPayloadTimeOutPeriodicity {
|
||||
time_out: self.fuota_deployment.multicast_timeout as u8,
|
||||
periodicity: self.fuota_deployment.multicast_class_b_ping_slot_nb_k
|
||||
periodicity: self.fuota_deployment.multicast_class_b_ping_slot_periodicity
|
||||
as u8,
|
||||
},
|
||||
dl_frequ: self.fuota_deployment.multicast_frequency as u32,
|
||||
|
@@ -265,7 +265,7 @@ async fn import_device(
|
||||
supports_class_b: prof.supports_class_b,
|
||||
supports_class_c: prof.supports_class_c,
|
||||
class_b_timeout: prof.class_b_timeout as i32,
|
||||
class_b_ping_slot_nb_k: match prof.ping_slot_period {
|
||||
class_b_ping_slot_periodicity: match prof.ping_slot_period {
|
||||
128 => 7,
|
||||
64 => 6,
|
||||
32 => 5,
|
||||
|
@@ -94,7 +94,7 @@ pub struct ProfileAbp {
|
||||
#[derive(Default, Deserialize)]
|
||||
pub struct ProfileClassB {
|
||||
pub timeout_secs: usize,
|
||||
pub ping_slot_nb_k: usize,
|
||||
pub ping_slot_periodicity: usize,
|
||||
pub ping_slot_dr: usize,
|
||||
pub ping_slot_freq: usize,
|
||||
}
|
||||
@@ -239,7 +239,7 @@ async fn handle_profile(
|
||||
supports_class_b: profile_conf.profile.supports_class_b,
|
||||
supports_class_c: profile_conf.profile.supports_class_c,
|
||||
class_b_timeout: profile_conf.profile.class_b.timeout_secs as i32,
|
||||
class_b_ping_slot_nb_k: profile_conf.profile.class_b.ping_slot_nb_k as i32,
|
||||
class_b_ping_slot_periodicity: profile_conf.profile.class_b.ping_slot_periodicity as i32,
|
||||
class_b_ping_slot_dr: profile_conf.profile.class_b.ping_slot_dr as i16,
|
||||
class_b_ping_slot_freq: profile_conf.profile.class_b.ping_slot_freq as i64,
|
||||
class_c_timeout: profile_conf.profile.class_c.timeout_secs as i32,
|
||||
|
@@ -736,7 +736,7 @@ impl Data {
|
||||
|
||||
// LoRaWAN MHDR
|
||||
let mut mhdr = lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
};
|
||||
|
||||
@@ -794,7 +794,7 @@ impl Data {
|
||||
mac_pl.frm_payload = Some(lrwn::FRMPayload::Raw(qi.data.clone()));
|
||||
|
||||
if qi.confirmed {
|
||||
mhdr.m_type = lrwn::MType::ConfirmedDataDown;
|
||||
mhdr.f_type = lrwn::FType::ConfirmedDataDown;
|
||||
}
|
||||
|
||||
item.remaining_payload_size -= qi.data.len();
|
||||
@@ -867,7 +867,7 @@ impl Data {
|
||||
for item in self.downlink_frame.items.iter_mut() {
|
||||
let mut relay_phy = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -915,7 +915,7 @@ impl Data {
|
||||
for item in self.downlink_frame_items.iter_mut() {
|
||||
let mut relay_phy = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
|
@@ -466,7 +466,7 @@ impl JoinAccept<'_> {
|
||||
|
||||
let mut relay_phy = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
|
@@ -199,7 +199,7 @@ impl Multicast {
|
||||
|
||||
let mut phy = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
|
@@ -3,7 +3,7 @@ use chrono::{Duration, Utc};
|
||||
use tracing::{error, info, span, trace, Instrument, Level};
|
||||
use uuid::Uuid;
|
||||
|
||||
use lrwn::{AES128Key, MType, Payload, PhyPayload, EUI64};
|
||||
use lrwn::{AES128Key, FType, Payload, PhyPayload, EUI64};
|
||||
|
||||
use crate::api::helpers::ToProto;
|
||||
use crate::storage::{
|
||||
@@ -589,13 +589,13 @@ impl TxAck {
|
||||
tx_info: dfi.tx_info.clone(),
|
||||
downlink_id: gw_df.downlink_id,
|
||||
gateway_id: gw_df.gateway_id.clone(),
|
||||
m_type: match &phy.mhdr.m_type {
|
||||
MType::JoinAccept => common::MType::JoinAccept,
|
||||
MType::UnconfirmedDataDown => common::MType::UnconfirmedDataDown,
|
||||
MType::ConfirmedDataDown => common::MType::ConfirmedDataDown,
|
||||
MType::Proprietary => common::MType::Proprietary,
|
||||
f_type: match &phy.mhdr.f_type {
|
||||
FType::JoinAccept => common::FType::JoinAccept,
|
||||
FType::UnconfirmedDataDown => common::FType::UnconfirmedDataDown,
|
||||
FType::ConfirmedDataDown => common::FType::ConfirmedDataDown,
|
||||
FType::Proprietary => common::FType::Proprietary,
|
||||
_ => {
|
||||
return Err(anyhow!("Unepxected MType: {}", phy.mhdr.m_type));
|
||||
return Err(anyhow!("Unepxected FType: {}", phy.mhdr.f_type));
|
||||
}
|
||||
}
|
||||
.into(),
|
||||
@@ -658,7 +658,7 @@ impl TxAck {
|
||||
tx_info: dfl.tx_info.clone(),
|
||||
downlink_id: dfl.downlink_id,
|
||||
gateway_id: dfl.gateway_id.clone(),
|
||||
m_type: dfl.m_type,
|
||||
f_type: dfl.f_type,
|
||||
dev_addr: dfl.dev_addr.clone(),
|
||||
dev_eui: dfl.dev_eui.clone(),
|
||||
plaintext_f_opts: true,
|
||||
@@ -719,7 +719,7 @@ impl TxAck {
|
||||
} else {
|
||||
0
|
||||
} as u32,
|
||||
message_type: phy.mhdr.m_type.to_proto().into(),
|
||||
frame_type: phy.mhdr.f_type.to_proto().into(),
|
||||
gateway_id: df.downlink_frame.as_ref().unwrap().gateway_id.clone(),
|
||||
};
|
||||
|
||||
@@ -803,15 +803,15 @@ impl TxAck {
|
||||
}
|
||||
|
||||
fn is_unconfirmed_downlink(&self) -> bool {
|
||||
if self.phy_payload.as_ref().unwrap().mhdr.m_type == lrwn::MType::UnconfirmedDataDown {
|
||||
if self.phy_payload.as_ref().unwrap().mhdr.f_type == lrwn::FType::UnconfirmedDataDown {
|
||||
return true;
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
fn is_unconfirmed_downlink_relayed(&self) -> bool {
|
||||
if self.phy_payload_relayed.as_ref().unwrap().mhdr.m_type
|
||||
== lrwn::MType::UnconfirmedDataDown
|
||||
if self.phy_payload_relayed.as_ref().unwrap().mhdr.f_type
|
||||
== lrwn::FType::UnconfirmedDataDown
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@@ -819,14 +819,14 @@ impl TxAck {
|
||||
}
|
||||
|
||||
fn is_confirmed_downlink(&self) -> bool {
|
||||
if self.phy_payload.as_ref().unwrap().mhdr.m_type == lrwn::MType::ConfirmedDataDown {
|
||||
if self.phy_payload.as_ref().unwrap().mhdr.f_type == lrwn::FType::ConfirmedDataDown {
|
||||
return true;
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
fn is_confirmed_downlink_relayed(&self) -> bool {
|
||||
if self.phy_payload_relayed.as_ref().unwrap().mhdr.m_type == lrwn::MType::ConfirmedDataDown
|
||||
if self.phy_payload_relayed.as_ref().unwrap().mhdr.f_type == lrwn::FType::ConfirmedDataDown
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
@@ -20,6 +20,7 @@ fn get_client() -> Client {
|
||||
.get_or_init(|| {
|
||||
Client::builder()
|
||||
.timeout(Duration::from_secs(5))
|
||||
.use_rustls_tls()
|
||||
.build()
|
||||
.unwrap()
|
||||
})
|
||||
|
@@ -106,7 +106,7 @@ pub mod test {
|
||||
ch: 0,
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
|
@@ -53,7 +53,7 @@ pub mod test {
|
||||
ch: 0,
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
|
@@ -338,7 +338,7 @@ pub mod test {
|
||||
ch: 0,
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
|
@@ -77,7 +77,7 @@ pub mod test {
|
||||
ch: 0,
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
|
@@ -175,7 +175,7 @@ pub mod test {
|
||||
ch: 0,
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
|
@@ -80,7 +80,7 @@ pub mod test {
|
||||
class_b_params: Some(fields::ClassBParams {
|
||||
ping_slot_dr: 2,
|
||||
ping_slot_freq: 868100000,
|
||||
ping_slot_nb_k: 1,
|
||||
ping_slot_periodicity: 6,
|
||||
timeout: 0,
|
||||
}),
|
||||
..Default::default()
|
||||
|
@@ -730,17 +730,37 @@ pub async fn list(
|
||||
true => match order_by {
|
||||
OrderBy::Name => q.order_by(device::dsl::name.desc()),
|
||||
OrderBy::DevEui => q.order_by(device::dsl::dev_eui.desc()),
|
||||
OrderBy::LastSeenAt => q
|
||||
.order_by(device::dsl::last_seen_at.desc())
|
||||
.then_order_by(device::dsl::name),
|
||||
OrderBy::LastSeenAt => {
|
||||
#[cfg(feature = "postgres")]
|
||||
{
|
||||
q.order_by(device::dsl::last_seen_at.desc().nulls_last())
|
||||
.then_order_by(device::dsl::name)
|
||||
}
|
||||
|
||||
#[cfg(feature = "sqlite")]
|
||||
{
|
||||
q.order_by(device::dsl::last_seen_at.desc())
|
||||
.then_order_by(device::dsl::name)
|
||||
}
|
||||
}
|
||||
OrderBy::DeviceProfileName => q.order_by(device_profile::dsl::name.desc()),
|
||||
},
|
||||
false => match order_by {
|
||||
OrderBy::Name => q.order_by(device::dsl::name),
|
||||
OrderBy::DevEui => q.order_by(device::dsl::dev_eui),
|
||||
OrderBy::LastSeenAt => q
|
||||
.order_by(device::dsl::last_seen_at)
|
||||
.then_order_by(device::dsl::name),
|
||||
OrderBy::LastSeenAt => {
|
||||
#[cfg(feature = "postgres")]
|
||||
{
|
||||
q.order_by(device::dsl::last_seen_at.asc().nulls_first())
|
||||
.then_order_by(device::dsl::name)
|
||||
}
|
||||
|
||||
#[cfg(feature = "sqlite")]
|
||||
{
|
||||
q.order_by(device::dsl::last_seen_at.asc())
|
||||
.then_order_by(device::dsl::name)
|
||||
}
|
||||
}
|
||||
OrderBy::DeviceProfileName => q.order_by(device_profile::dsl::name),
|
||||
},
|
||||
};
|
||||
@@ -1662,7 +1682,7 @@ pub mod test {
|
||||
println!("> {}", tst.name);
|
||||
let mut phy = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
|
@@ -110,7 +110,7 @@ impl DeviceProfile {
|
||||
if let Some(class_b_params) = &self.class_b_params {
|
||||
ds.class_b_ping_slot_dr = class_b_params.ping_slot_dr as u32;
|
||||
ds.class_b_ping_slot_freq = class_b_params.ping_slot_freq;
|
||||
ds.class_b_ping_slot_nb = 1 << class_b_params.ping_slot_nb_k as u32;
|
||||
ds.class_b_ping_slot_nb = 1 << (7 - class_b_params.ping_slot_periodicity) as u32;
|
||||
}
|
||||
|
||||
if let Some(relay_params) = &self.relay_params {
|
||||
|
@@ -37,7 +37,7 @@ pub struct DeviceProfileTemplate {
|
||||
pub supports_class_b: bool,
|
||||
pub supports_class_c: bool,
|
||||
pub class_b_timeout: i32,
|
||||
pub class_b_ping_slot_nb_k: i32,
|
||||
pub class_b_ping_slot_periodicity: i32,
|
||||
pub class_b_ping_slot_dr: i16,
|
||||
pub class_b_ping_slot_freq: i64,
|
||||
pub class_c_timeout: i32,
|
||||
@@ -100,7 +100,7 @@ impl Default for DeviceProfileTemplate {
|
||||
supports_class_b: false,
|
||||
supports_class_c: false,
|
||||
class_b_timeout: 0,
|
||||
class_b_ping_slot_nb_k: 0,
|
||||
class_b_ping_slot_periodicity: 0,
|
||||
class_b_ping_slot_dr: 0,
|
||||
class_b_ping_slot_freq: 0,
|
||||
class_c_timeout: 0,
|
||||
@@ -169,7 +169,8 @@ pub async fn upsert(dp: DeviceProfileTemplate) -> Result<DeviceProfileTemplate,
|
||||
device_profile_template::supports_class_b.eq(&dp.supports_class_b),
|
||||
device_profile_template::supports_class_c.eq(&dp.supports_class_c),
|
||||
device_profile_template::class_b_timeout.eq(&dp.class_b_timeout),
|
||||
device_profile_template::class_b_ping_slot_nb_k.eq(&dp.class_b_ping_slot_nb_k),
|
||||
device_profile_template::class_b_ping_slot_periodicity
|
||||
.eq(&dp.class_b_ping_slot_periodicity),
|
||||
device_profile_template::class_b_ping_slot_dr.eq(&dp.class_b_ping_slot_dr),
|
||||
device_profile_template::class_b_ping_slot_freq.eq(&dp.class_b_ping_slot_freq),
|
||||
device_profile_template::class_c_timeout.eq(&dp.class_c_timeout),
|
||||
@@ -224,7 +225,8 @@ pub async fn update(dp: DeviceProfileTemplate) -> Result<DeviceProfileTemplate,
|
||||
device_profile_template::supports_class_b.eq(&dp.supports_class_b),
|
||||
device_profile_template::supports_class_c.eq(&dp.supports_class_c),
|
||||
device_profile_template::class_b_timeout.eq(&dp.class_b_timeout),
|
||||
device_profile_template::class_b_ping_slot_nb_k.eq(&dp.class_b_ping_slot_nb_k),
|
||||
device_profile_template::class_b_ping_slot_periodicity
|
||||
.eq(&dp.class_b_ping_slot_periodicity),
|
||||
device_profile_template::class_b_ping_slot_dr.eq(&dp.class_b_ping_slot_dr),
|
||||
device_profile_template::class_b_ping_slot_freq.eq(&dp.class_b_ping_slot_freq),
|
||||
device_profile_template::class_c_timeout.eq(&dp.class_c_timeout),
|
||||
|
@@ -61,7 +61,8 @@ impl serialize::ToSql<Text, Sqlite> for AbpParams {
|
||||
#[cfg_attr(feature = "sqlite", diesel(sql_type = Text))]
|
||||
pub struct ClassBParams {
|
||||
pub timeout: u16,
|
||||
pub ping_slot_nb_k: u8,
|
||||
#[serde(alias = "ping_slot_nb_k")]
|
||||
pub ping_slot_periodicity: u8,
|
||||
pub ping_slot_dr: u8,
|
||||
pub ping_slot_freq: u32,
|
||||
}
|
||||
|
@@ -33,7 +33,7 @@ pub struct FuotaDeployment {
|
||||
pub multicast_group_type: String,
|
||||
pub multicast_class_c_scheduling_type: fields::MulticastGroupSchedulingType,
|
||||
pub multicast_dr: i16,
|
||||
pub multicast_class_b_ping_slot_nb_k: i16,
|
||||
pub multicast_class_b_ping_slot_periodicity: i16,
|
||||
pub multicast_frequency: i64,
|
||||
pub multicast_timeout: i16,
|
||||
pub multicast_session_start: Option<DateTime<Utc>>,
|
||||
@@ -68,7 +68,7 @@ impl Default for FuotaDeployment {
|
||||
multicast_group_type: "".into(),
|
||||
multicast_class_c_scheduling_type: fields::MulticastGroupSchedulingType::DELAY,
|
||||
multicast_dr: 0,
|
||||
multicast_class_b_ping_slot_nb_k: 0,
|
||||
multicast_class_b_ping_slot_periodicity: 0,
|
||||
multicast_frequency: 0,
|
||||
multicast_timeout: 0,
|
||||
multicast_session_start: None,
|
||||
@@ -222,8 +222,8 @@ pub async fn update_deployment(d: FuotaDeployment) -> Result<FuotaDeployment, Er
|
||||
fuota_deployment::multicast_class_c_scheduling_type
|
||||
.eq(&d.multicast_class_c_scheduling_type),
|
||||
fuota_deployment::multicast_dr.eq(&d.multicast_dr),
|
||||
fuota_deployment::multicast_class_b_ping_slot_nb_k
|
||||
.eq(&d.multicast_class_b_ping_slot_nb_k),
|
||||
fuota_deployment::multicast_class_b_ping_slot_periodicity
|
||||
.eq(&d.multicast_class_b_ping_slot_periodicity),
|
||||
fuota_deployment::multicast_frequency.eq(&d.multicast_frequency),
|
||||
fuota_deployment::multicast_timeout.eq(&d.multicast_timeout),
|
||||
fuota_deployment::multicast_session_start.eq(&d.multicast_session_start),
|
||||
@@ -765,7 +765,7 @@ pub fn get_multicast_timeout(d: &FuotaDeployment) -> Result<usize> {
|
||||
match d.multicast_group_type.as_ref() {
|
||||
"B" => {
|
||||
// Calculate number of ping-slots per beacon period.
|
||||
let nb_ping_slots = 1 << (d.multicast_class_b_ping_slot_nb_k as usize);
|
||||
let nb_ping_slots = 1 << (7 - d.multicast_class_b_ping_slot_periodicity as usize);
|
||||
|
||||
// Calculate number of beacon-periods needed.
|
||||
// One beacon period is added as the first ping-slot might be in the next beacon-period.
|
||||
@@ -1221,7 +1221,7 @@ mod test {
|
||||
name: "Class-B - 1 / beacon period - 15 fragments".into(),
|
||||
deployment: FuotaDeployment {
|
||||
multicast_group_type: "B".into(),
|
||||
multicast_class_b_ping_slot_nb_k: 0,
|
||||
multicast_class_b_ping_slot_periodicity: 7,
|
||||
fragmentation_fragment_size: 10,
|
||||
fragmentation_redundancy_percentage: 50,
|
||||
payload: vec![0; 100],
|
||||
@@ -1234,7 +1234,7 @@ mod test {
|
||||
name: "Class-B - 1 / beacon period - 16 fragments".into(),
|
||||
deployment: FuotaDeployment {
|
||||
multicast_group_type: "B".into(),
|
||||
multicast_class_b_ping_slot_nb_k: 0,
|
||||
multicast_class_b_ping_slot_periodicity: 7,
|
||||
fragmentation_fragment_size: 10,
|
||||
fragmentation_redundancy_percentage: 60,
|
||||
payload: vec![0; 100],
|
||||
@@ -1247,7 +1247,7 @@ mod test {
|
||||
name: "Class-B - 16 / beacon period - 16 fragments".into(),
|
||||
deployment: FuotaDeployment {
|
||||
multicast_group_type: "B".into(),
|
||||
multicast_class_b_ping_slot_nb_k: 4,
|
||||
multicast_class_b_ping_slot_periodicity: 3,
|
||||
fragmentation_fragment_size: 10,
|
||||
fragmentation_redundancy_percentage: 60,
|
||||
payload: vec![0; 100],
|
||||
@@ -1260,7 +1260,7 @@ mod test {
|
||||
name: "Class-B - 16 / beacon period - 17 fragments".into(),
|
||||
deployment: FuotaDeployment {
|
||||
multicast_group_type: "B".into(),
|
||||
multicast_class_b_ping_slot_nb_k: 4,
|
||||
multicast_class_b_ping_slot_periodicity: 3,
|
||||
fragmentation_fragment_size: 10,
|
||||
fragmentation_redundancy_percentage: 70,
|
||||
payload: vec![0; 100],
|
||||
|
@@ -365,16 +365,36 @@ pub async fn list(
|
||||
true => match order_by {
|
||||
OrderBy::Name => q.order_by(gateway::dsl::name.desc()),
|
||||
OrderBy::GatewayId => q.order_by(gateway::dsl::gateway_id.desc()),
|
||||
OrderBy::LastSeenAt => q
|
||||
.order_by(gateway::dsl::last_seen_at.desc())
|
||||
.then_order_by(gateway::dsl::name),
|
||||
OrderBy::LastSeenAt => {
|
||||
#[cfg(feature = "postgres")]
|
||||
{
|
||||
q.order_by(gateway::dsl::last_seen_at.desc().nulls_last())
|
||||
.then_order_by(gateway::dsl::name)
|
||||
}
|
||||
|
||||
#[cfg(feature = "sqlite")]
|
||||
{
|
||||
q.order_by(gateway::dsl::last_seen_at.desc())
|
||||
.then_order_by(gateway::dsl::name)
|
||||
}
|
||||
}
|
||||
},
|
||||
false => match order_by {
|
||||
OrderBy::Name => q.order_by(gateway::dsl::name),
|
||||
OrderBy::GatewayId => q.order_by(gateway::dsl::gateway_id),
|
||||
OrderBy::LastSeenAt => q
|
||||
.order_by(gateway::dsl::last_seen_at)
|
||||
.then_order_by(gateway::dsl::name),
|
||||
OrderBy::LastSeenAt => {
|
||||
#[cfg(feature = "postgres")]
|
||||
{
|
||||
q.order_by(gateway::dsl::last_seen_at.asc().nulls_first())
|
||||
.then_order_by(gateway::dsl::name)
|
||||
}
|
||||
|
||||
#[cfg(feature = "sqlite")]
|
||||
{
|
||||
q.order_by(gateway::dsl::last_seen_at.asc())
|
||||
.then_order_by(gateway::dsl::name)
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
@@ -599,7 +619,7 @@ pub mod test {
|
||||
group_type: "C".into(),
|
||||
dr: 1,
|
||||
frequency: 868100000,
|
||||
class_b_ping_slot_nb_k: 1,
|
||||
class_b_ping_slot_periodicity: 1,
|
||||
..Default::default()
|
||||
})
|
||||
.await
|
||||
|
@@ -33,7 +33,7 @@ pub struct MulticastGroup {
|
||||
pub group_type: String,
|
||||
pub dr: i16,
|
||||
pub frequency: i64,
|
||||
pub class_b_ping_slot_nb_k: i16,
|
||||
pub class_b_ping_slot_periodicity: i16,
|
||||
pub class_c_scheduling_type: fields::MulticastGroupSchedulingType,
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ impl Default for MulticastGroup {
|
||||
group_type: "".into(),
|
||||
dr: 0,
|
||||
frequency: 0,
|
||||
class_b_ping_slot_nb_k: 0,
|
||||
class_b_ping_slot_periodicity: 0,
|
||||
class_c_scheduling_type: fields::MulticastGroupSchedulingType::DELAY,
|
||||
}
|
||||
}
|
||||
@@ -167,7 +167,7 @@ pub async fn update(mg: MulticastGroup) -> Result<MulticastGroup, Error> {
|
||||
multicast_group::group_type.eq(&mg.group_type),
|
||||
multicast_group::dr.eq(&mg.dr),
|
||||
multicast_group::frequency.eq(&mg.frequency),
|
||||
multicast_group::class_b_ping_slot_nb_k.eq(&mg.class_b_ping_slot_nb_k),
|
||||
multicast_group::class_b_ping_slot_periodicity.eq(&mg.class_b_ping_slot_periodicity),
|
||||
multicast_group::class_c_scheduling_type.eq(&mg.class_c_scheduling_type),
|
||||
))
|
||||
.get_result(&mut get_async_db_conn().await?)
|
||||
@@ -429,7 +429,7 @@ pub async fn enqueue(
|
||||
match mg.group_type.as_ref() {
|
||||
"B" => {
|
||||
// get ping nb
|
||||
let ping_nb = 1 << mg.class_b_ping_slot_nb_k as usize;
|
||||
let ping_nb = 1 << (7 - mg.class_b_ping_slot_periodicity) as usize;
|
||||
|
||||
// get max. gps epoch time.
|
||||
let res: Option<i64> =
|
||||
@@ -746,7 +746,7 @@ pub mod test {
|
||||
group_type: "C".into(),
|
||||
dr: 1,
|
||||
frequency: 868100000,
|
||||
class_b_ping_slot_nb_k: 1,
|
||||
class_b_ping_slot_periodicity: 1,
|
||||
..Default::default()
|
||||
})
|
||||
.await
|
||||
@@ -759,7 +759,7 @@ pub mod test {
|
||||
// update
|
||||
mg.name = "test-mg-updated".into();
|
||||
mg.group_type = "B".into();
|
||||
mg.class_b_ping_slot_nb_k = 4;
|
||||
mg.class_b_ping_slot_periodicity = 4;
|
||||
mg = update(mg).await.unwrap();
|
||||
let mg_get = get(&mg.id.into()).await.unwrap();
|
||||
assert_eq!(mg, mg_get);
|
||||
@@ -884,7 +884,7 @@ pub mod test {
|
||||
group_type: "C".into(),
|
||||
dr: 1,
|
||||
frequency: 868100000,
|
||||
class_b_ping_slot_nb_k: 1,
|
||||
class_b_ping_slot_periodicity: 1,
|
||||
..Default::default()
|
||||
})
|
||||
.await
|
||||
@@ -942,7 +942,7 @@ pub mod test {
|
||||
group_type: "C".into(),
|
||||
dr: 1,
|
||||
frequency: 868100000,
|
||||
class_b_ping_slot_nb_k: 1,
|
||||
class_b_ping_slot_periodicity: 1,
|
||||
..Default::default()
|
||||
})
|
||||
.await
|
||||
@@ -1002,7 +1002,7 @@ pub mod test {
|
||||
group_type: "C".into(),
|
||||
dr: 1,
|
||||
frequency: 868100000,
|
||||
class_b_ping_slot_nb_k: 1,
|
||||
class_b_ping_slot_periodicity: 1,
|
||||
class_c_scheduling_type: fields::MulticastGroupSchedulingType::DELAY,
|
||||
..Default::default()
|
||||
})
|
||||
|
@@ -153,7 +153,7 @@ diesel::table! {
|
||||
supports_class_b -> Bool,
|
||||
supports_class_c -> Bool,
|
||||
class_b_timeout -> Int4,
|
||||
class_b_ping_slot_nb_k -> Int4,
|
||||
class_b_ping_slot_periodicity -> Int4,
|
||||
class_b_ping_slot_dr -> Int2,
|
||||
class_b_ping_slot_freq -> Int8,
|
||||
class_c_timeout -> Int4,
|
||||
@@ -201,7 +201,7 @@ diesel::table! {
|
||||
#[max_length = 20]
|
||||
multicast_class_c_scheduling_type -> Varchar,
|
||||
multicast_dr -> Int2,
|
||||
multicast_class_b_ping_slot_nb_k -> Int2,
|
||||
multicast_class_b_ping_slot_periodicity -> Int2,
|
||||
multicast_frequency -> Int8,
|
||||
multicast_timeout -> Int2,
|
||||
multicast_session_start -> Nullable<Timestamptz>,
|
||||
@@ -295,7 +295,7 @@ diesel::table! {
|
||||
group_type -> Bpchar,
|
||||
dr -> Int2,
|
||||
frequency -> Int8,
|
||||
class_b_ping_slot_nb_k -> Int2,
|
||||
class_b_ping_slot_periodicity -> Int2,
|
||||
#[max_length = 20]
|
||||
class_c_scheduling_type -> Varchar,
|
||||
}
|
||||
|
@@ -133,7 +133,7 @@ diesel::table! {
|
||||
supports_class_b -> Bool,
|
||||
supports_class_c -> Bool,
|
||||
class_b_timeout -> Integer,
|
||||
class_b_ping_slot_nb_k -> Integer,
|
||||
class_b_ping_slot_periodicity -> Integer,
|
||||
class_b_ping_slot_dr -> SmallInt,
|
||||
class_b_ping_slot_freq -> BigInt,
|
||||
class_c_timeout -> Integer,
|
||||
@@ -178,7 +178,7 @@ diesel::table! {
|
||||
multicast_group_type -> Text,
|
||||
multicast_class_c_scheduling_type -> Text,
|
||||
multicast_dr -> SmallInt,
|
||||
multicast_class_b_ping_slot_nb_k -> SmallInt,
|
||||
multicast_class_b_ping_slot_periodicity -> SmallInt,
|
||||
multicast_frequency -> BigInt,
|
||||
multicast_timeout -> SmallInt,
|
||||
multicast_session_start -> Nullable<TimestamptzSqlite>,
|
||||
@@ -266,7 +266,7 @@ diesel::table! {
|
||||
group_type -> Text,
|
||||
dr -> SmallInt,
|
||||
frequency -> BigInt,
|
||||
class_b_ping_slot_nb_k -> SmallInt,
|
||||
class_b_ping_slot_periodicity -> SmallInt,
|
||||
class_c_scheduling_type -> Text,
|
||||
}
|
||||
}
|
||||
|
@@ -27,7 +27,7 @@ pub async fn log_uplink_for_gateways(ufl: &stream::UplinkFrameLog) -> Result<()>
|
||||
phy_payload: ufl.phy_payload.clone(),
|
||||
tx_info: ufl.tx_info.clone(),
|
||||
rx_info: vec![rx_info.clone()],
|
||||
m_type: ufl.m_type,
|
||||
f_type: ufl.f_type,
|
||||
dev_addr: ufl.dev_addr.clone(),
|
||||
dev_eui: ufl.dev_eui.clone(),
|
||||
time: ufl.time,
|
||||
@@ -299,7 +299,7 @@ async fn handle_stream(
|
||||
seconds: t.seconds,
|
||||
nanos: t.nanos,
|
||||
}),
|
||||
description: pl.m_type().into(),
|
||||
description: pl.f_type().into(),
|
||||
body: json!({
|
||||
"phy_payload": phy,
|
||||
"tx_info": pl.tx_info,
|
||||
@@ -340,7 +340,7 @@ async fn handle_stream(
|
||||
seconds: t.seconds,
|
||||
nanos: t.nanos,
|
||||
}),
|
||||
description: pl.m_type().into(),
|
||||
description: pl.f_type().into(),
|
||||
body: json!({
|
||||
"phy_payload": phy,
|
||||
"tx_info": pl.tx_info,
|
||||
|
@@ -80,7 +80,7 @@ async fn test_fns_uplink() {
|
||||
|
||||
let data_phy = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -266,7 +266,7 @@ async fn test_sns_uplink() {
|
||||
|
||||
let mut data_phy = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -508,7 +508,7 @@ async fn test_sns_roaming_not_allowed() {
|
||||
|
||||
let mut data_phy = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -631,7 +631,7 @@ async fn test_sns_dev_not_found() {
|
||||
|
||||
let data_phy = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
|
@@ -150,7 +150,7 @@ async fn test_gateway_filtering() {
|
||||
rx_info: rx_info_a.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -177,7 +177,7 @@ async fn test_gateway_filtering() {
|
||||
rx_info: rx_info_b.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -292,7 +292,7 @@ async fn test_lorawan_10_errors() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -325,7 +325,7 @@ async fn test_lorawan_10_errors() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -357,7 +357,7 @@ async fn test_lorawan_10_errors() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -379,7 +379,7 @@ async fn test_lorawan_10_errors() {
|
||||
rx_info: vec![rx_info.clone()],
|
||||
dev_eui: "0000000000000000".into(),
|
||||
dev_addr: "01020304".into(),
|
||||
m_type: common::MType::UnconfirmedDataUp.into(),
|
||||
f_type: common::FType::UnconfirmedDataUp.into(),
|
||||
..Default::default()
|
||||
}),
|
||||
],
|
||||
@@ -489,7 +489,7 @@ async fn test_lorawan_11_errors() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -516,7 +516,7 @@ async fn test_lorawan_11_errors() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -633,7 +633,7 @@ async fn test_lorawan_10_skip_f_cnt() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -683,7 +683,7 @@ async fn test_lorawan_10_skip_f_cnt() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -821,7 +821,7 @@ async fn test_lorawan_10_device_disabled() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -949,7 +949,7 @@ async fn test_lorawan_10_uplink() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -1022,7 +1022,7 @@ async fn test_lorawan_10_uplink() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -1081,7 +1081,7 @@ async fn test_lorawan_10_uplink() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -1154,7 +1154,7 @@ async fn test_lorawan_10_uplink() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -1206,7 +1206,7 @@ async fn test_lorawan_10_uplink() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::ConfirmedDataUp,
|
||||
f_type: lrwn::FType::ConfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -1319,7 +1319,7 @@ async fn test_lorawan_10_uplink() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::ConfirmedDataUp,
|
||||
f_type: lrwn::FType::ConfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -1457,7 +1457,7 @@ async fn test_lorawan_10_uplink() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -1597,7 +1597,7 @@ async fn test_lorawan_10_end_to_end_enc() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -1649,7 +1649,7 @@ async fn test_lorawan_10_end_to_end_enc() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -1712,7 +1712,7 @@ async fn test_lorawan_10_end_to_end_enc() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -1761,7 +1761,7 @@ async fn test_lorawan_10_end_to_end_enc() {
|
||||
assert::downlink_phy_payloads(vec![
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -1781,7 +1781,7 @@ async fn test_lorawan_10_end_to_end_enc() {
|
||||
},
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -1912,7 +1912,7 @@ async fn test_lorawan_11_uplink() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -1971,7 +1971,7 @@ async fn test_lorawan_11_uplink() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -2145,7 +2145,7 @@ async fn test_lorawan_10_rx_delay() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::ConfirmedDataUp,
|
||||
f_type: lrwn::FType::ConfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -2267,7 +2267,7 @@ async fn test_lorawan_10_rx_delay() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::ConfirmedDataUp,
|
||||
f_type: lrwn::FType::ConfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -2389,7 +2389,7 @@ async fn test_lorawan_10_rx_delay() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::ConfirmedDataUp,
|
||||
f_type: lrwn::FType::ConfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -2431,7 +2431,7 @@ async fn test_lorawan_10_rx_delay() {
|
||||
assert::downlink_phy_payloads(vec![
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -2455,7 +2455,7 @@ async fn test_lorawan_10_rx_delay() {
|
||||
},
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -2602,7 +2602,7 @@ async fn test_lorawan_10_mac_commands() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -2622,7 +2622,7 @@ async fn test_lorawan_10_mac_commands() {
|
||||
assert::downlink_phy_payloads(vec![
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -2645,7 +2645,7 @@ async fn test_lorawan_10_mac_commands() {
|
||||
},
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -2701,7 +2701,7 @@ async fn test_lorawan_10_mac_commands() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -2721,7 +2721,7 @@ async fn test_lorawan_10_mac_commands() {
|
||||
assert::downlink_phy_payloads(vec![
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -2744,7 +2744,7 @@ async fn test_lorawan_10_mac_commands() {
|
||||
},
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -2779,7 +2779,7 @@ async fn test_lorawan_10_mac_commands() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -2803,7 +2803,7 @@ async fn test_lorawan_10_mac_commands() {
|
||||
assert::downlink_phy_payloads(vec![
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -2823,7 +2823,7 @@ async fn test_lorawan_10_mac_commands() {
|
||||
},
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -2937,7 +2937,7 @@ async fn test_lorawan_11_mac_commands() {
|
||||
|
||||
let mut phy = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -2984,7 +2984,7 @@ async fn test_lorawan_11_mac_commands() {
|
||||
assert::downlink_phy_payloads(vec![
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3008,7 +3008,7 @@ async fn test_lorawan_11_mac_commands() {
|
||||
},
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3141,7 +3141,7 @@ async fn test_lorawan_10_device_queue() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3161,7 +3161,7 @@ async fn test_lorawan_10_device_queue() {
|
||||
assert::downlink_phy_payloads(vec![
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3181,7 +3181,7 @@ async fn test_lorawan_10_device_queue() {
|
||||
},
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3228,7 +3228,7 @@ async fn test_lorawan_10_device_queue() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3248,7 +3248,7 @@ async fn test_lorawan_10_device_queue() {
|
||||
assert::downlink_phy_payloads(vec![
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3270,7 +3270,7 @@ async fn test_lorawan_10_device_queue() {
|
||||
},
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3311,7 +3311,7 @@ async fn test_lorawan_10_device_queue() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3331,7 +3331,7 @@ async fn test_lorawan_10_device_queue() {
|
||||
assert::downlink_phy_payloads(vec![
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::ConfirmedDataDown,
|
||||
f_type: lrwn::FType::ConfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3351,7 +3351,7 @@ async fn test_lorawan_10_device_queue() {
|
||||
},
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::ConfirmedDataDown,
|
||||
f_type: lrwn::FType::ConfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3389,7 +3389,7 @@ async fn test_lorawan_10_device_queue() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3426,7 +3426,7 @@ async fn test_lorawan_10_device_queue() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3450,7 +3450,7 @@ async fn test_lorawan_10_device_queue() {
|
||||
assert::downlink_phy_payloads(vec![
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3476,7 +3476,7 @@ async fn test_lorawan_10_device_queue() {
|
||||
},
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3613,7 +3613,7 @@ async fn test_lorawan_11_device_queue() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3633,7 +3633,7 @@ async fn test_lorawan_11_device_queue() {
|
||||
assert::downlink_phy_payloads(vec![
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3653,7 +3653,7 @@ async fn test_lorawan_11_device_queue() {
|
||||
},
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3700,7 +3700,7 @@ async fn test_lorawan_11_device_queue() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3720,7 +3720,7 @@ async fn test_lorawan_11_device_queue() {
|
||||
assert::downlink_phy_payloads(vec![
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3742,7 +3742,7 @@ async fn test_lorawan_11_device_queue() {
|
||||
},
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3783,7 +3783,7 @@ async fn test_lorawan_11_device_queue() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3803,7 +3803,7 @@ async fn test_lorawan_11_device_queue() {
|
||||
assert::downlink_phy_payloads(vec![
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::ConfirmedDataDown,
|
||||
f_type: lrwn::FType::ConfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3823,7 +3823,7 @@ async fn test_lorawan_11_device_queue() {
|
||||
},
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::ConfirmedDataDown,
|
||||
f_type: lrwn::FType::ConfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3861,7 +3861,7 @@ async fn test_lorawan_11_device_queue() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3898,7 +3898,7 @@ async fn test_lorawan_11_device_queue() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3924,7 +3924,7 @@ async fn test_lorawan_11_device_queue() {
|
||||
assert::downlink_phy_payloads(vec![
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -3950,7 +3950,7 @@ async fn test_lorawan_11_device_queue() {
|
||||
},
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -4099,7 +4099,7 @@ async fn test_lorawan_10_adr() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -4123,7 +4123,7 @@ async fn test_lorawan_10_adr() {
|
||||
assert::downlink_phy_payloads_decoded_f_opts(vec![
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -4157,7 +4157,7 @@ async fn test_lorawan_10_adr() {
|
||||
},
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -4203,7 +4203,7 @@ async fn test_lorawan_10_adr() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -4258,7 +4258,7 @@ async fn test_lorawan_10_adr() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -4323,7 +4323,7 @@ async fn test_lorawan_10_adr() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -4367,7 +4367,7 @@ async fn test_lorawan_10_adr() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -4392,7 +4392,7 @@ async fn test_lorawan_10_adr() {
|
||||
assert::downlink_phy_payloads(vec![
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -4412,7 +4412,7 @@ async fn test_lorawan_10_adr() {
|
||||
},
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -4444,7 +4444,7 @@ async fn test_lorawan_10_adr() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -4464,7 +4464,7 @@ async fn test_lorawan_10_adr() {
|
||||
assert::downlink_phy_payloads_decoded_f_opts(vec![
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -4496,7 +4496,7 @@ async fn test_lorawan_10_adr() {
|
||||
},
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -4562,7 +4562,7 @@ async fn test_lorawan_10_adr() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -4625,7 +4625,7 @@ async fn test_lorawan_10_adr() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -4666,7 +4666,7 @@ async fn test_lorawan_10_adr() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -4691,7 +4691,7 @@ async fn test_lorawan_10_adr() {
|
||||
assert::downlink_phy_payloads_decoded_f_opts(vec![
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -4723,7 +4723,7 @@ async fn test_lorawan_10_adr() {
|
||||
},
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -4768,7 +4768,7 @@ async fn test_lorawan_10_adr() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -4911,7 +4911,7 @@ async fn test_lorawan_10_device_status_request() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -4930,7 +4930,7 @@ async fn test_lorawan_10_device_status_request() {
|
||||
assert::downlink_phy_payloads_decoded_f_opts(vec![
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -4953,7 +4953,7 @@ async fn test_lorawan_10_device_status_request() {
|
||||
},
|
||||
lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -4988,7 +4988,7 @@ async fn test_lorawan_10_device_status_request() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -5019,7 +5019,7 @@ async fn test_lorawan_10_device_status_request() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -5181,7 +5181,7 @@ async fn test_lorawan_11_receive_window_selection() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -5251,7 +5251,7 @@ async fn test_lorawan_11_receive_window_selection() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -5321,7 +5321,7 @@ async fn test_lorawan_11_receive_window_selection() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -5420,7 +5420,7 @@ async fn test_lorawan_11_receive_window_selection() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
|
@@ -133,7 +133,7 @@ async fn test_uplink() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -168,7 +168,7 @@ async fn test_uplink() {
|
||||
rx_info: rx_info.clone(),
|
||||
phy_payload: lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
|
@@ -86,7 +86,7 @@ async fn test_multicast() {
|
||||
group_type: "C".into(),
|
||||
dr: 3,
|
||||
frequency: 868300000,
|
||||
class_b_ping_slot_nb_k: 0,
|
||||
class_b_ping_slot_periodicity: 0,
|
||||
..Default::default()
|
||||
})
|
||||
.await
|
||||
|
@@ -85,7 +85,7 @@ async fn test_js() {
|
||||
|
||||
let phy = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::JoinRequest,
|
||||
f_type: lrwn::FType::JoinRequest,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::JoinRequest(lrwn::JoinRequestPayload {
|
||||
@@ -98,7 +98,7 @@ async fn test_js() {
|
||||
|
||||
let phy_ja = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::JoinAccept,
|
||||
f_type: lrwn::FType::JoinAccept,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::JoinAccept(lrwn::JoinAcceptPayload {
|
||||
|
@@ -84,7 +84,7 @@ async fn test_fns() {
|
||||
|
||||
let mut jr_phy = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::JoinRequest,
|
||||
f_type: lrwn::FType::JoinRequest,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::JoinRequest(lrwn::JoinRequestPayload {
|
||||
@@ -319,7 +319,7 @@ async fn test_sns() {
|
||||
|
||||
let mut jr_phy = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::JoinRequest,
|
||||
f_type: lrwn::FType::JoinRequest,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::JoinRequest(lrwn::JoinRequestPayload {
|
||||
@@ -504,7 +504,7 @@ async fn test_sns_roaming_not_allowed() {
|
||||
|
||||
let mut jr_phy = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::JoinRequest,
|
||||
f_type: lrwn::FType::JoinRequest,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::JoinRequest(lrwn::JoinRequestPayload {
|
||||
|
@@ -134,7 +134,7 @@ async fn test_gateway_filtering() {
|
||||
|
||||
let mut jr_pl = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::JoinRequest,
|
||||
f_type: lrwn::FType::JoinRequest,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::JoinRequest(lrwn::JoinRequestPayload {
|
||||
@@ -291,7 +291,7 @@ async fn test_lorawan_10() {
|
||||
|
||||
let mut jr_pl = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::JoinRequest,
|
||||
f_type: lrwn::FType::JoinRequest,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::JoinRequest(lrwn::JoinRequestPayload {
|
||||
@@ -305,7 +305,7 @@ async fn test_lorawan_10() {
|
||||
|
||||
let mut ja_pl = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::JoinAccept,
|
||||
f_type: lrwn::FType::JoinAccept,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::JoinAccept(lrwn::JoinAcceptPayload {
|
||||
@@ -334,7 +334,7 @@ async fn test_lorawan_10() {
|
||||
|
||||
let mut ja_cflist_pl = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::JoinAccept,
|
||||
f_type: lrwn::FType::JoinAccept,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::JoinAccept(lrwn::JoinAcceptPayload {
|
||||
@@ -561,7 +561,7 @@ async fn test_lorawan_10() {
|
||||
tx_info: Some(tx_info.clone()),
|
||||
rx_info: vec![rx_info.clone()],
|
||||
phy_payload_byte_count: 23,
|
||||
message_type: common::MType::JoinRequest.into(),
|
||||
frame_type: common::FType::JoinRequest.into(),
|
||||
..Default::default()
|
||||
}),
|
||||
],
|
||||
@@ -942,7 +942,7 @@ async fn test_lorawan_11() {
|
||||
|
||||
let mut jr_pl = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::JoinRequest,
|
||||
f_type: lrwn::FType::JoinRequest,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::JoinRequest(lrwn::JoinRequestPayload {
|
||||
@@ -956,7 +956,7 @@ async fn test_lorawan_11() {
|
||||
|
||||
let mut ja_pl = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::JoinAccept,
|
||||
f_type: lrwn::FType::JoinAccept,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::JoinAccept(lrwn::JoinAcceptPayload {
|
||||
|
@@ -164,7 +164,7 @@ async fn test_lorawan_10() {
|
||||
|
||||
let mut phy_relay_ed_unconfirmed_up = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -196,7 +196,7 @@ async fn test_lorawan_10() {
|
||||
|
||||
let mut phy_relay_ed_confirmed_up = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::ConfirmedDataUp,
|
||||
f_type: lrwn::FType::ConfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -228,7 +228,7 @@ async fn test_lorawan_10() {
|
||||
|
||||
let mut phy_relay_unconfirmed_up = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -267,7 +267,7 @@ async fn test_lorawan_10() {
|
||||
|
||||
let mut phy_relay_unconfirmed_up_adr_ack_req = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -310,7 +310,7 @@ async fn test_lorawan_10() {
|
||||
|
||||
let mut phy_relay_confirmed_up = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -349,7 +349,7 @@ async fn test_lorawan_10() {
|
||||
|
||||
let mut phy_relay_ed_unconfirmed_down_ack = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -378,7 +378,7 @@ async fn test_lorawan_10() {
|
||||
|
||||
let mut phy_relay_unconfirmed_down_ack = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -413,7 +413,7 @@ async fn test_lorawan_10() {
|
||||
|
||||
let mut phy_relay_unconfirmed_down_empty = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
|
@@ -138,7 +138,7 @@ async fn test_lorawan_10() {
|
||||
|
||||
let mut jr_pl = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::JoinRequest,
|
||||
f_type: lrwn::FType::JoinRequest,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::JoinRequest(lrwn::JoinRequestPayload {
|
||||
@@ -152,7 +152,7 @@ async fn test_lorawan_10() {
|
||||
|
||||
let mut ja_pl = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::JoinAccept,
|
||||
f_type: lrwn::FType::JoinAccept,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::JoinAccept(lrwn::JoinAcceptPayload {
|
||||
@@ -181,7 +181,7 @@ async fn test_lorawan_10() {
|
||||
|
||||
let mut phy_relay_jr = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -233,7 +233,7 @@ async fn test_lorawan_10() {
|
||||
|
||||
let mut phy_relay_ja = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataDown,
|
||||
f_type: lrwn::FType::UnconfirmedDataDown,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
|
@@ -716,7 +716,7 @@ impl Data {
|
||||
0
|
||||
}
|
||||
} as u32,
|
||||
message_type: self.phy_payload.mhdr.m_type.to_proto().into(),
|
||||
frame_type: self.phy_payload.mhdr.f_type.to_proto().into(),
|
||||
};
|
||||
|
||||
stream::meta::log_uplink(&um).await?;
|
||||
@@ -907,7 +907,7 @@ impl Data {
|
||||
dr: self.uplink_frame_set.dr as u32,
|
||||
f_cnt: self.f_cnt_up_full,
|
||||
f_port: mac.f_port.unwrap_or(0) as u32,
|
||||
confirmed: self.phy_payload.mhdr.m_type == lrwn::MType::ConfirmedDataUp,
|
||||
confirmed: self.phy_payload.mhdr.f_type == lrwn::FType::ConfirmedDataUp,
|
||||
data: match &mac.frm_payload {
|
||||
Some(lrwn::FRMPayload::Raw(b)) => b.clone(),
|
||||
_ => Vec::new(),
|
||||
@@ -1288,7 +1288,7 @@ impl Data {
|
||||
self.device_profile.as_ref().cloned().unwrap(),
|
||||
self.device.as_ref().cloned().unwrap(),
|
||||
pl.fhdr.f_ctrl.adr_ack_req || self.must_send_downlink,
|
||||
self.phy_payload.mhdr.m_type == lrwn::MType::ConfirmedDataUp,
|
||||
self.phy_payload.mhdr.f_type == lrwn::FType::ConfirmedDataUp,
|
||||
self.downlink_mac_commands.clone(),
|
||||
)
|
||||
.await?;
|
||||
@@ -1331,7 +1331,7 @@ impl Data {
|
||||
self.device_profile.as_ref().cloned().unwrap(),
|
||||
self.device.as_ref().cloned().unwrap(),
|
||||
pl.fhdr.f_ctrl.adr_ack_req || self.must_send_downlink,
|
||||
self.phy_payload.mhdr.m_type == lrwn::MType::ConfirmedDataUp,
|
||||
self.phy_payload.mhdr.f_type == lrwn::FType::ConfirmedDataUp,
|
||||
self.downlink_mac_commands.clone(),
|
||||
)
|
||||
.await?;
|
||||
@@ -1345,29 +1345,29 @@ impl Data {
|
||||
|
||||
if let lrwn::Payload::MACPayload(relay_pl) = &self.phy_payload.payload {
|
||||
if let Some(lrwn::FRMPayload::ForwardUplinkReq(pl)) = &relay_pl.frm_payload {
|
||||
match pl.payload.mhdr.m_type {
|
||||
lrwn::MType::JoinRequest => {
|
||||
match pl.payload.mhdr.f_type {
|
||||
lrwn::FType::JoinRequest => {
|
||||
super::join::JoinRequest::handle_relayed(
|
||||
super::RelayContext {
|
||||
req: pl.clone(),
|
||||
device: self.device.as_ref().unwrap().clone(),
|
||||
device_profile: self.device_profile.as_ref().unwrap().clone(),
|
||||
must_ack: self.phy_payload.mhdr.m_type
|
||||
== lrwn::MType::ConfirmedDataUp,
|
||||
must_ack: self.phy_payload.mhdr.f_type
|
||||
== lrwn::FType::ConfirmedDataUp,
|
||||
must_send_downlink: relay_pl.fhdr.f_ctrl.adr_ack_req,
|
||||
},
|
||||
self.uplink_frame_set.clone(),
|
||||
)
|
||||
.await
|
||||
}
|
||||
lrwn::MType::UnconfirmedDataUp | lrwn::MType::ConfirmedDataUp => {
|
||||
lrwn::FType::UnconfirmedDataUp | lrwn::FType::ConfirmedDataUp => {
|
||||
Data::handle_relayed(
|
||||
super::RelayContext {
|
||||
req: pl.clone(),
|
||||
device: self.device.as_ref().unwrap().clone(),
|
||||
device_profile: self.device_profile.as_ref().unwrap().clone(),
|
||||
must_ack: self.phy_payload.mhdr.m_type
|
||||
== lrwn::MType::ConfirmedDataUp,
|
||||
must_ack: self.phy_payload.mhdr.f_type
|
||||
== lrwn::FType::ConfirmedDataUp,
|
||||
must_send_downlink: relay_pl.fhdr.f_ctrl.adr_ack_req,
|
||||
},
|
||||
self.device_gateway_rx_info.as_ref().unwrap().clone(),
|
||||
@@ -1377,8 +1377,8 @@ impl Data {
|
||||
}
|
||||
_ => {
|
||||
return Err(anyhow!(
|
||||
"Handling ForwardUplinkReq for MType {} supported",
|
||||
pl.payload.mhdr.m_type
|
||||
"Handling ForwardUplinkReq for FType {} supported",
|
||||
pl.payload.mhdr.f_type
|
||||
));
|
||||
}
|
||||
}
|
||||
|
@@ -6,7 +6,7 @@ use chrono::{DateTime, Local, Utc};
|
||||
use tracing::{error, info, span, trace, warn, Instrument, Level};
|
||||
|
||||
use lrwn::{
|
||||
keys, AES128Key, CFList, DLSettings, JoinAcceptPayload, JoinRequestPayload, JoinType, MType,
|
||||
keys, AES128Key, CFList, DLSettings, FType, JoinAcceptPayload, JoinRequestPayload, JoinType,
|
||||
Major, Payload, PhyPayload, MHDR,
|
||||
};
|
||||
|
||||
@@ -636,7 +636,7 @@ impl JoinRequest {
|
||||
|
||||
let mut phy = PhyPayload {
|
||||
mhdr: MHDR {
|
||||
m_type: MType::JoinAccept,
|
||||
f_type: FType::JoinAccept,
|
||||
major: Major::LoRaWANR1,
|
||||
},
|
||||
payload: Payload::JoinAccept(JoinAcceptPayload {
|
||||
@@ -757,7 +757,7 @@ impl JoinRequest {
|
||||
dev_eui: self.device.as_ref().unwrap().dev_eui.to_string(),
|
||||
tx_info: Some(self.uplink_frame_set.tx_info.clone()),
|
||||
rx_info: self.uplink_frame_set.rx_info_set.clone(),
|
||||
message_type: common::MType::JoinRequest.into(),
|
||||
frame_type: common::FType::JoinRequest.into(),
|
||||
phy_payload_byte_count: self.uplink_frame_set.phy_payload.to_vec()?.len() as u32,
|
||||
..Default::default()
|
||||
};
|
||||
|
@@ -431,7 +431,7 @@ impl JoinRequest {
|
||||
|
||||
let mut phy = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::JoinAccept,
|
||||
f_type: lrwn::FType::JoinAccept,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::JoinAccept(lrwn::JoinAcceptPayload {
|
||||
@@ -552,7 +552,7 @@ impl JoinRequest {
|
||||
dev_eui: self.device.as_ref().unwrap().dev_eui.to_string(),
|
||||
tx_info: Some(self.uplink_frame_set.tx_info.clone()),
|
||||
rx_info: self.uplink_frame_set.rx_info_set.clone(),
|
||||
message_type: common::MType::JoinRequest.into(),
|
||||
frame_type: common::FType::JoinRequest.into(),
|
||||
phy_payload_byte_count: self.uplink_frame_set.phy_payload.to_vec()?.len() as u32,
|
||||
..Default::default()
|
||||
};
|
||||
|
@@ -24,7 +24,7 @@ use crate::storage::{
|
||||
use crate::stream;
|
||||
use chirpstack_api::{common, gw, stream as stream_pb};
|
||||
use lrwn::region::CommonName;
|
||||
use lrwn::{ForwardUplinkReq, MType, PhyPayload, EUI64};
|
||||
use lrwn::{FType, ForwardUplinkReq, PhyPayload, EUI64};
|
||||
|
||||
mod data;
|
||||
mod data_fns;
|
||||
@@ -39,7 +39,7 @@ pub mod stats;
|
||||
|
||||
#[derive(Clone, Hash, PartialEq, Eq, EncodeLabelSet, Debug)]
|
||||
struct UplinkLabels {
|
||||
m_type: String,
|
||||
f_type: String,
|
||||
}
|
||||
|
||||
static UPLINK_COUNTER: LazyLock<Family<UplinkLabels, Counter>> = LazyLock::new(|| {
|
||||
@@ -105,16 +105,16 @@ impl TryFrom<&UplinkFrameSet> for stream_pb::UplinkFrameLog {
|
||||
phy_payload: ufs.phy_payload.to_vec()?,
|
||||
tx_info: Some(ufs.tx_info.clone()),
|
||||
rx_info: ufs.rx_info_set.clone(),
|
||||
m_type: match ufs.phy_payload.mhdr.m_type {
|
||||
lrwn::MType::JoinRequest => common::MType::JoinRequest,
|
||||
lrwn::MType::RejoinRequest => common::MType::RejoinRequest,
|
||||
lrwn::MType::UnconfirmedDataUp => common::MType::UnconfirmedDataUp,
|
||||
lrwn::MType::ConfirmedDataUp => common::MType::ConfirmedDataUp,
|
||||
lrwn::MType::Proprietary => common::MType::Proprietary,
|
||||
f_type: match ufs.phy_payload.mhdr.f_type {
|
||||
lrwn::FType::JoinRequest => common::FType::JoinRequest,
|
||||
lrwn::FType::RejoinRequest => common::FType::RejoinRequest,
|
||||
lrwn::FType::UnconfirmedDataUp => common::FType::UnconfirmedDataUp,
|
||||
lrwn::FType::ConfirmedDataUp => common::FType::ConfirmedDataUp,
|
||||
lrwn::FType::Proprietary => common::FType::Proprietary,
|
||||
_ => {
|
||||
return Err(anyhow!(
|
||||
"Unexpected m_type: {}",
|
||||
ufs.phy_payload.mhdr.m_type
|
||||
"Unexpected f_type: {}",
|
||||
ufs.phy_payload.mhdr.f_type
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -324,7 +324,7 @@ pub async fn handle_uplink(
|
||||
|
||||
UPLINK_COUNTER
|
||||
.get_or_create(&UplinkLabels {
|
||||
m_type: uplink.phy_payload.mhdr.m_type.to_string(),
|
||||
f_type: uplink.phy_payload.mhdr.f_type.to_string(),
|
||||
})
|
||||
.inc();
|
||||
|
||||
@@ -336,7 +336,7 @@ pub async fn handle_uplink(
|
||||
)?;
|
||||
|
||||
info!(
|
||||
m_type = %uplink.phy_payload.mhdr.m_type,
|
||||
f_type = %uplink.phy_payload.mhdr.f_type,
|
||||
"Uplink received"
|
||||
);
|
||||
|
||||
@@ -351,13 +351,13 @@ pub async fn handle_uplink(
|
||||
.await
|
||||
.context("Log uplink for gateways")?;
|
||||
|
||||
match uplink.phy_payload.mhdr.m_type {
|
||||
MType::JoinRequest => join::JoinRequest::handle(uplink).await,
|
||||
MType::UnconfirmedDataUp | MType::ConfirmedDataUp => data::Data::handle(uplink).await,
|
||||
match uplink.phy_payload.mhdr.f_type {
|
||||
FType::JoinRequest => join::JoinRequest::handle(uplink).await,
|
||||
FType::UnconfirmedDataUp | FType::ConfirmedDataUp => data::Data::handle(uplink).await,
|
||||
_ => {
|
||||
return Err(anyhow!(
|
||||
"Unexpected m_type: {}",
|
||||
uplink.phy_payload.mhdr.m_type
|
||||
"Unexpected f_type: {}",
|
||||
uplink.phy_payload.mhdr.f_type
|
||||
))
|
||||
}
|
||||
}
|
||||
|
@@ -30,9 +30,9 @@ pub fn matches(phy_payload: &[u8], config: &Filters) -> bool {
|
||||
}
|
||||
|
||||
let mhdr = phy_payload[0];
|
||||
let m_type = mhdr >> 5;
|
||||
let f_type = mhdr >> 5;
|
||||
|
||||
let dev_addr: Option<[u8; 4]> = match m_type {
|
||||
let dev_addr: Option<[u8; 4]> = match f_type {
|
||||
// DataUp
|
||||
0x02 | 0x04 => {
|
||||
// MHDR + DevAddr
|
||||
@@ -48,7 +48,7 @@ pub fn matches(phy_payload: &[u8], config: &Filters) -> bool {
|
||||
_ => None,
|
||||
};
|
||||
|
||||
let join_eui: Option<[u8; 8]> = match m_type {
|
||||
let join_eui: Option<[u8; 8]> = match f_type {
|
||||
// JoinRequest
|
||||
0x00 => {
|
||||
// MHDR + JoinEUI + DevEUI
|
||||
@@ -362,7 +362,7 @@ mod test {
|
||||
println!("> {}", test.name);
|
||||
let phy = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::UnconfirmedDataUp,
|
||||
f_type: lrwn::FType::UnconfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -382,7 +382,7 @@ mod test {
|
||||
|
||||
let phy = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::ConfirmedDataUp,
|
||||
f_type: lrwn::FType::ConfirmedDataUp,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::MACPayload(lrwn::MACPayload {
|
||||
@@ -457,7 +457,7 @@ mod test {
|
||||
println!("> {}", test.name);
|
||||
let phy = lrwn::PhyPayload {
|
||||
mhdr: lrwn::MHDR {
|
||||
m_type: lrwn::MType::JoinRequest,
|
||||
f_type: lrwn::FType::JoinRequest,
|
||||
major: lrwn::Major::LoRaWANR1,
|
||||
},
|
||||
payload: lrwn::Payload::JoinRequest(lrwn::JoinRequestPayload {
|
||||
|
@@ -6,7 +6,7 @@ use serde::Serialize;
|
||||
|
||||
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize))]
|
||||
pub enum MType {
|
||||
pub enum FType {
|
||||
JoinRequest,
|
||||
JoinAccept,
|
||||
UnconfirmedDataUp,
|
||||
@@ -17,7 +17,7 @@ pub enum MType {
|
||||
Proprietary,
|
||||
}
|
||||
|
||||
impl fmt::Display for MType {
|
||||
impl fmt::Display for FType {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(f, "{:?}", self)
|
||||
}
|
||||
@@ -32,22 +32,22 @@ pub enum Major {
|
||||
#[derive(Debug, PartialEq, Eq, Clone)]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize))]
|
||||
pub struct MHDR {
|
||||
pub m_type: MType,
|
||||
pub f_type: FType,
|
||||
pub major: Major,
|
||||
}
|
||||
|
||||
impl MHDR {
|
||||
pub fn from_le_bytes(b: [u8; 1]) -> Result<Self> {
|
||||
Ok(MHDR {
|
||||
m_type: match b[0] >> 5 {
|
||||
0x00 => MType::JoinRequest,
|
||||
0x01 => MType::JoinAccept,
|
||||
0x02 => MType::UnconfirmedDataUp,
|
||||
0x03 => MType::UnconfirmedDataDown,
|
||||
0x04 => MType::ConfirmedDataUp,
|
||||
0x05 => MType::ConfirmedDataDown,
|
||||
0x06 => MType::RejoinRequest,
|
||||
0x07 => MType::Proprietary,
|
||||
f_type: match b[0] >> 5 {
|
||||
0x00 => FType::JoinRequest,
|
||||
0x01 => FType::JoinAccept,
|
||||
0x02 => FType::UnconfirmedDataUp,
|
||||
0x03 => FType::UnconfirmedDataDown,
|
||||
0x04 => FType::ConfirmedDataUp,
|
||||
0x05 => FType::ConfirmedDataDown,
|
||||
0x06 => FType::RejoinRequest,
|
||||
0x07 => FType::Proprietary,
|
||||
_ => return Err(anyhow!("unexpected mtype")),
|
||||
},
|
||||
major: match b[0] & 0x03 {
|
||||
@@ -58,15 +58,15 @@ impl MHDR {
|
||||
}
|
||||
|
||||
pub fn to_le_bytes(&self) -> [u8; 1] {
|
||||
let mut mhdr = match self.m_type {
|
||||
MType::JoinRequest => 0x00,
|
||||
MType::JoinAccept => 0x01,
|
||||
MType::UnconfirmedDataUp => 0x02,
|
||||
MType::UnconfirmedDataDown => 0x03,
|
||||
MType::ConfirmedDataUp => 0x04,
|
||||
MType::ConfirmedDataDown => 0x05,
|
||||
MType::RejoinRequest => 0x06,
|
||||
MType::Proprietary => 0x07,
|
||||
let mut mhdr = match self.f_type {
|
||||
FType::JoinRequest => 0x00,
|
||||
FType::JoinAccept => 0x01,
|
||||
FType::UnconfirmedDataUp => 0x02,
|
||||
FType::UnconfirmedDataDown => 0x03,
|
||||
FType::ConfirmedDataUp => 0x04,
|
||||
FType::ConfirmedDataDown => 0x05,
|
||||
FType::RejoinRequest => 0x06,
|
||||
FType::Proprietary => 0x07,
|
||||
};
|
||||
|
||||
mhdr = (mhdr << 5)
|
||||
@@ -85,7 +85,7 @@ mod tests {
|
||||
#[test]
|
||||
fn test_to_le_bytes() {
|
||||
let mhdr = MHDR {
|
||||
m_type: MType::Proprietary,
|
||||
f_type: FType::Proprietary,
|
||||
major: Major::LoRaWANR1,
|
||||
};
|
||||
|
||||
@@ -98,7 +98,7 @@ mod tests {
|
||||
assert_eq!(
|
||||
mhdr,
|
||||
MHDR {
|
||||
m_type: MType::Proprietary,
|
||||
f_type: FType::Proprietary,
|
||||
major: Major::LoRaWANR1,
|
||||
}
|
||||
);
|
||||
|
@@ -9,7 +9,7 @@ use crate::eui64::EUI64;
|
||||
use crate::fhdr::FCtrl;
|
||||
use crate::fhdr::FHDR;
|
||||
use crate::maccommand::MACCommandSet;
|
||||
use crate::mhdr::MType;
|
||||
use crate::mhdr::FType;
|
||||
use crate::netid::NetID;
|
||||
use crate::relay::{ForwardDownlinkReq, ForwardUplinkReq};
|
||||
|
||||
@@ -50,15 +50,15 @@ pub enum JoinType {
|
||||
}
|
||||
|
||||
impl Payload {
|
||||
pub fn from_slice(m_type: MType, b: &[u8]) -> Result<Self> {
|
||||
Ok(match m_type {
|
||||
MType::JoinRequest => Payload::JoinRequest(JoinRequestPayload::from_slice(b)?),
|
||||
MType::JoinAccept => Payload::Raw(b.to_vec()), // the join-accept is encrypted
|
||||
MType::UnconfirmedDataUp
|
||||
| MType::ConfirmedDataUp
|
||||
| MType::UnconfirmedDataDown
|
||||
| MType::ConfirmedDataDown => Payload::MACPayload(MACPayload::from_slice(b)?),
|
||||
MType::RejoinRequest => {
|
||||
pub fn from_slice(f_type: FType, b: &[u8]) -> Result<Self> {
|
||||
Ok(match f_type {
|
||||
FType::JoinRequest => Payload::JoinRequest(JoinRequestPayload::from_slice(b)?),
|
||||
FType::JoinAccept => Payload::Raw(b.to_vec()), // the join-accept is encrypted
|
||||
FType::UnconfirmedDataUp
|
||||
| FType::ConfirmedDataUp
|
||||
| FType::UnconfirmedDataDown
|
||||
| FType::ConfirmedDataDown => Payload::MACPayload(MACPayload::from_slice(b)?),
|
||||
FType::RejoinRequest => {
|
||||
if b.is_empty() {
|
||||
return Err(anyhow!("RejoinRequest payload is empty"));
|
||||
}
|
||||
@@ -73,7 +73,7 @@ impl Payload {
|
||||
}
|
||||
}
|
||||
}
|
||||
MType::Proprietary => Payload::Raw(b.to_vec()),
|
||||
FType::Proprietary => Payload::Raw(b.to_vec()),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -453,7 +453,7 @@ mod tests {
|
||||
assert_eq!(tst.bytes, tst.pl.to_vec().unwrap());
|
||||
assert_eq!(
|
||||
tst.pl,
|
||||
Payload::from_slice(MType::JoinRequest, &tst.bytes).unwrap()
|
||||
Payload::from_slice(FType::JoinRequest, &tst.bytes).unwrap()
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -464,7 +464,7 @@ mod tests {
|
||||
// before it can be decoded
|
||||
assert_eq!(
|
||||
Payload::Raw(vec![0x01, 0x02, 0x03]),
|
||||
Payload::from_slice(MType::JoinAccept, &[0x01, 0x02, 0x03]).unwrap()
|
||||
Payload::from_slice(FType::JoinAccept, &[0x01, 0x02, 0x03]).unwrap()
|
||||
);
|
||||
|
||||
// test decoding the (decrypted) join-accept payload
|
||||
@@ -611,7 +611,7 @@ mod tests {
|
||||
assert_eq!(tst.bytes, tst.pl.to_vec().unwrap());
|
||||
assert_eq!(
|
||||
tst.pl,
|
||||
Payload::from_slice(MType::UnconfirmedDataUp, &tst.bytes).unwrap()
|
||||
Payload::from_slice(FType::UnconfirmedDataUp, &tst.bytes).unwrap()
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -661,7 +661,7 @@ mod tests {
|
||||
assert_eq!(tst.bytes, tst.pl.to_vec().unwrap());
|
||||
assert_eq!(
|
||||
tst.pl,
|
||||
Payload::from_slice(MType::RejoinRequest, &tst.bytes).unwrap()
|
||||
Payload::from_slice(FType::RejoinRequest, &tst.bytes).unwrap()
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -677,7 +677,7 @@ mod tests {
|
||||
assert_eq!(tst.bytes, tst.pl.to_vec().unwrap());
|
||||
assert_eq!(
|
||||
tst.pl,
|
||||
Payload::from_slice(MType::Proprietary, &tst.bytes).unwrap()
|
||||
Payload::from_slice(FType::Proprietary, &tst.bytes).unwrap()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@@ -10,7 +10,7 @@ use cmac::{Cmac, Mac};
|
||||
use serde::Serialize;
|
||||
|
||||
use super::maccommand::{MACCommand, MACCommandSet};
|
||||
use super::mhdr::{MType, MHDR};
|
||||
use super::mhdr::{FType, MHDR};
|
||||
use super::payload::{FRMPayload, MACPayload, Payload};
|
||||
#[cfg(feature = "crypto")]
|
||||
use super::{
|
||||
@@ -40,7 +40,7 @@ pub enum MACVersion {
|
||||
///
|
||||
/// let mut phy = PhyPayload {
|
||||
/// mhdr: MHDR {
|
||||
/// m_type: MType::JoinRequest,
|
||||
/// f_type: FType::JoinRequest,
|
||||
/// major: Major::LoRaWANR1,
|
||||
/// },
|
||||
/// payload: Payload::JoinRequest(JoinRequestPayload {
|
||||
@@ -73,7 +73,7 @@ pub enum MACVersion {
|
||||
///
|
||||
/// let mut phy = PhyPayload {
|
||||
/// mhdr: MHDR {
|
||||
/// m_type: MType::JoinAccept,
|
||||
/// f_type: FType::JoinAccept,
|
||||
/// major: Major::LoRaWANR1,
|
||||
/// },
|
||||
/// payload: Payload::JoinAccept(JoinAcceptPayload {
|
||||
@@ -105,7 +105,7 @@ pub enum MACVersion {
|
||||
///
|
||||
/// assert_eq!(PhyPayload {
|
||||
/// mhdr: MHDR {
|
||||
/// m_type: MType::JoinAccept,
|
||||
/// f_type: FType::JoinAccept,
|
||||
/// major: Major::LoRaWANR1,
|
||||
/// },
|
||||
/// payload: Payload::JoinAccept(JoinAcceptPayload {
|
||||
@@ -135,7 +135,7 @@ pub enum MACVersion {
|
||||
///
|
||||
/// let mut phy = PhyPayload {
|
||||
/// mhdr: MHDR {
|
||||
/// m_type: MType::JoinAccept,
|
||||
/// f_type: FType::JoinAccept,
|
||||
/// major: Major::LoRaWANR1,
|
||||
/// },
|
||||
/// payload: Payload::JoinAccept(JoinAcceptPayload {
|
||||
@@ -167,7 +167,7 @@ pub enum MACVersion {
|
||||
///
|
||||
/// assert_eq!(PhyPayload {
|
||||
/// mhdr: MHDR {
|
||||
/// m_type: MType::JoinAccept,
|
||||
/// f_type: FType::JoinAccept,
|
||||
/// major: Major::LoRaWANR1,
|
||||
/// },
|
||||
/// payload: Payload::JoinAccept(JoinAcceptPayload {
|
||||
@@ -196,7 +196,7 @@ pub enum MACVersion {
|
||||
///
|
||||
/// let mut phy = PhyPayload {
|
||||
/// mhdr: MHDR {
|
||||
/// m_type: MType::ConfirmedDataUp,
|
||||
/// f_type: FType::ConfirmedDataUp,
|
||||
/// major: Major::LoRaWANR1,
|
||||
/// },
|
||||
/// payload: Payload::MACPayload(MACPayload{
|
||||
@@ -250,7 +250,7 @@ pub enum MACVersion {
|
||||
///
|
||||
/// let mut phy = PhyPayload {
|
||||
/// mhdr: MHDR{
|
||||
/// m_type: MType::UnconfirmedDataDown,
|
||||
/// f_type: FType::UnconfirmedDataDown,
|
||||
/// major: Major::LoRaWANR1,
|
||||
/// },
|
||||
/// payload: Payload::MACPayload(MACPayload{
|
||||
@@ -309,7 +309,7 @@ pub enum MACVersion {
|
||||
///
|
||||
/// let phy = PhyPayload {
|
||||
/// mhdr: MHDR {
|
||||
/// m_type: MType::Proprietary,
|
||||
/// f_type: FType::Proprietary,
|
||||
/// major: Major::LoRaWANR1,
|
||||
/// },
|
||||
/// payload: Payload::Raw(vec![0x01, 0x02, 0x03]),
|
||||
@@ -332,7 +332,7 @@ pub enum MACVersion {
|
||||
/// let ed_app_key = AES128Key::from_str("01020304050607080102030405060708").unwrap();
|
||||
/// let mut ed_phy = PhyPayload {
|
||||
/// mhdr: MHDR {
|
||||
/// m_type: MType::JoinRequest,
|
||||
/// f_type: FType::JoinRequest,
|
||||
/// major: Major::LoRaWANR1,
|
||||
/// },
|
||||
/// payload: Payload::JoinRequest(JoinRequestPayload {
|
||||
@@ -349,7 +349,7 @@ pub enum MACVersion {
|
||||
/// let relay_nwk_s_key = AES128Key::from_str("08070605040302010807060504030201").unwrap();
|
||||
/// let mut relay_phy = PhyPayload {
|
||||
/// mhdr: MHDR {
|
||||
/// m_type: MType::UnconfirmedDataUp,
|
||||
/// f_type: FType::UnconfirmedDataUp,
|
||||
/// major: Major::LoRaWANR1,
|
||||
/// },
|
||||
/// payload: Payload::MACPayload(MACPayload {
|
||||
@@ -384,7 +384,7 @@ pub enum MACVersion {
|
||||
/// relay_phy_decoded.decrypt_frm_payload(&relay_nwk_s_key).unwrap();
|
||||
/// assert_eq!(PhyPayload{
|
||||
/// mhdr: MHDR {
|
||||
/// m_type: MType::UnconfirmedDataUp,
|
||||
/// f_type: FType::UnconfirmedDataUp,
|
||||
/// major: Major::LoRaWANR1,
|
||||
/// },
|
||||
/// payload: Payload::MACPayload(MACPayload {
|
||||
@@ -420,7 +420,7 @@ pub enum MACVersion {
|
||||
/// let ed_dev_nonce = 258;
|
||||
/// let mut ed_phy = PhyPayload {
|
||||
/// mhdr: MHDR {
|
||||
/// m_type: MType::JoinAccept,
|
||||
/// f_type: FType::JoinAccept,
|
||||
/// major: Major::LoRaWANR1,
|
||||
/// },
|
||||
/// payload: Payload::JoinAccept(JoinAcceptPayload {
|
||||
@@ -445,7 +445,7 @@ pub enum MACVersion {
|
||||
/// let relay_nwk_s_key = AES128Key::from_str("08070605040302010807060504030201").unwrap();
|
||||
/// let mut relay_phy = PhyPayload {
|
||||
/// mhdr: MHDR {
|
||||
/// m_type: MType::UnconfirmedDataDown,
|
||||
/// f_type: FType::UnconfirmedDataDown,
|
||||
/// major: Major::LoRaWANR1,
|
||||
/// },
|
||||
/// payload: Payload::MACPayload(MACPayload {
|
||||
@@ -473,7 +473,7 @@ pub enum MACVersion {
|
||||
/// relay_phy_decoded.decrypt_frm_payload(&relay_nwk_s_key).unwrap();
|
||||
/// assert_eq!(PhyPayload {
|
||||
/// mhdr: MHDR {
|
||||
/// m_type: MType::UnconfirmedDataDown,
|
||||
/// f_type: FType::UnconfirmedDataDown,
|
||||
/// major: Major::LoRaWANR1,
|
||||
/// },
|
||||
/// payload: Payload::MACPayload(MACPayload {
|
||||
@@ -526,10 +526,10 @@ impl PhyPayload {
|
||||
MHDR::from_le_bytes(mhdr)?
|
||||
};
|
||||
|
||||
if mhdr.m_type == MType::Proprietary {
|
||||
if mhdr.f_type == FType::Proprietary {
|
||||
return Ok(PhyPayload {
|
||||
mhdr,
|
||||
payload: Payload::from_slice(MType::Proprietary, &b[1..])?,
|
||||
payload: Payload::from_slice(FType::Proprietary, &b[1..])?,
|
||||
mic: None,
|
||||
});
|
||||
}
|
||||
@@ -541,13 +541,13 @@ impl PhyPayload {
|
||||
));
|
||||
}
|
||||
|
||||
let m_type = mhdr.m_type;
|
||||
let f_type = mhdr.f_type;
|
||||
let mut mic: [u8; 4] = [0; 4];
|
||||
mic.clone_from_slice(&b[b_len - 4..]);
|
||||
|
||||
Ok(PhyPayload {
|
||||
mhdr,
|
||||
payload: Payload::from_slice(m_type, &b[1..b_len - 4])?,
|
||||
payload: Payload::from_slice(f_type, &b[1..b_len - 4])?,
|
||||
mic: Some(mic),
|
||||
})
|
||||
}
|
||||
@@ -808,7 +808,7 @@ impl PhyPayload {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let uplink = is_uplink(self.mhdr.m_type);
|
||||
let uplink = is_uplink(self.mhdr.f_type);
|
||||
|
||||
// a_fcnt_down is used on downlink when f_port > 0
|
||||
let a_fcnt_down = !uplink && pl.f_port.is_some() && pl.f_port.unwrap() > 0;
|
||||
@@ -842,7 +842,7 @@ impl PhyPayload {
|
||||
/// Decode f_opts to mac-commands.
|
||||
pub fn decode_f_opts_to_mac_commands(&mut self) -> Result<()> {
|
||||
if let Payload::MACPayload(pl) = &mut self.payload {
|
||||
let uplink = is_uplink(self.mhdr.m_type);
|
||||
let uplink = is_uplink(self.mhdr.f_type);
|
||||
pl.fhdr.f_opts.decode_from_raw(uplink)?;
|
||||
}
|
||||
Ok(())
|
||||
@@ -858,7 +858,7 @@ impl PhyPayload {
|
||||
/// Note that this requires a decrypted frm_payload.
|
||||
pub fn decode_frm_payload(&mut self) -> Result<()> {
|
||||
if let Payload::MACPayload(pl) = &mut self.payload {
|
||||
let uplink = is_uplink(self.mhdr.m_type);
|
||||
let uplink = is_uplink(self.mhdr.f_type);
|
||||
let f_port = pl.f_port.unwrap_or(0);
|
||||
let b = match &pl.frm_payload {
|
||||
Some(FRMPayload::Raw(v)) => v.clone(),
|
||||
@@ -883,7 +883,7 @@ impl PhyPayload {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let uplink = is_uplink(self.mhdr.m_type);
|
||||
let uplink = is_uplink(self.mhdr.f_type);
|
||||
let data = pl.frm_payload.as_ref().unwrap().to_vec()?;
|
||||
let data = encrypt_frm_payload(key, uplink, &pl.fhdr.devaddr, pl.fhdr.f_cnt, &data)?;
|
||||
|
||||
@@ -905,7 +905,7 @@ impl PhyPayload {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let uplink = is_uplink(self.mhdr.m_type);
|
||||
let uplink = is_uplink(self.mhdr.f_type);
|
||||
let data = pl.frm_payload.as_ref().unwrap().to_vec()?;
|
||||
let data = encrypt_frm_payload(key, uplink, &pl.fhdr.devaddr, pl.fhdr.f_cnt, &data)?;
|
||||
|
||||
@@ -1210,14 +1210,14 @@ pub fn encrypt_frm_payload(
|
||||
Ok(data[0..data_len].to_vec())
|
||||
}
|
||||
|
||||
fn is_uplink(m_type: MType) -> bool {
|
||||
match m_type {
|
||||
MType::JoinRequest
|
||||
| MType::UnconfirmedDataUp
|
||||
| MType::ConfirmedDataUp
|
||||
| MType::RejoinRequest => true,
|
||||
MType::JoinAccept | MType::UnconfirmedDataDown | MType::ConfirmedDataDown => false,
|
||||
MType::Proprietary => false,
|
||||
fn is_uplink(f_type: FType) -> bool {
|
||||
match f_type {
|
||||
FType::JoinRequest
|
||||
| FType::UnconfirmedDataUp
|
||||
| FType::ConfirmedDataUp
|
||||
| FType::RejoinRequest => true,
|
||||
FType::JoinAccept | FType::UnconfirmedDataDown | FType::ConfirmedDataDown => false,
|
||||
FType::Proprietary => false,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1261,7 +1261,7 @@ mod tests {
|
||||
PhyPayloadTest {
|
||||
phy: PhyPayload {
|
||||
mhdr: MHDR {
|
||||
m_type: MType::Proprietary,
|
||||
f_type: FType::Proprietary,
|
||||
major: Major::LoRaWANR1,
|
||||
},
|
||||
payload: Payload::Raw(vec![]),
|
||||
@@ -1272,7 +1272,7 @@ mod tests {
|
||||
PhyPayloadTest {
|
||||
phy: PhyPayload {
|
||||
mhdr: MHDR {
|
||||
m_type: MType::Proprietary,
|
||||
f_type: FType::Proprietary,
|
||||
major: Major::LoRaWANR1,
|
||||
},
|
||||
payload: Payload::Raw(vec![0x01, 0x02, 0x03]),
|
||||
@@ -1294,7 +1294,7 @@ mod tests {
|
||||
let tests = vec![PhyPayloadTest {
|
||||
phy: PhyPayload {
|
||||
mhdr: MHDR {
|
||||
m_type: MType::JoinRequest,
|
||||
f_type: FType::JoinRequest,
|
||||
major: Major::LoRaWANR1,
|
||||
},
|
||||
payload: Payload::JoinRequest(JoinRequestPayload {
|
||||
|
@@ -112,7 +112,7 @@ mod test {
|
||||
frequency: 868100000,
|
||||
payload: Box::new(PhyPayload {
|
||||
mhdr: MHDR {
|
||||
m_type: MType::Proprietary,
|
||||
f_type: FType::Proprietary,
|
||||
major: Major::LoRaWANR1,
|
||||
},
|
||||
payload: Payload::Raw(vec![0x01, 0x02, 0x03]),
|
||||
@@ -132,7 +132,7 @@ mod test {
|
||||
let req = ForwardDownlinkReq {
|
||||
payload: Box::new(PhyPayload {
|
||||
mhdr: MHDR {
|
||||
m_type: MType::Proprietary,
|
||||
f_type: FType::Proprietary,
|
||||
major: Major::LoRaWANR1,
|
||||
},
|
||||
payload: Payload::Raw(vec![0x01, 0x02, 0x03]),
|
||||
|
@@ -1,4 +1,4 @@
|
||||
{ pkgs ? import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/nixos-24.11.tar.gz") {} }:
|
||||
{ pkgs ? import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/nixos-25.05.tar.gz") {} }:
|
||||
|
||||
pkgs.mkShell {
|
||||
nativeBuildInputs = [
|
||||
|
@@ -70,7 +70,7 @@ function DeviceProfileTemplateForm(props: IProps) {
|
||||
// class-b
|
||||
dp.setSupportsClassB(v.supportsClassB);
|
||||
dp.setClassBTimeout(v.classBTimeout);
|
||||
dp.setClassBPingSlotNbK(v.classBPingSlotNbK);
|
||||
dp.setClassBPingSlotPeriodicity(v.classBPingSlotPeriodicity);
|
||||
dp.setClassBPingSlotDr(v.classBPingSlotDr);
|
||||
dp.setClassBPingSlotFreq(v.classBPingSlotFreq);
|
||||
|
||||
@@ -351,7 +351,7 @@ function DeviceProfileTemplateForm(props: IProps) {
|
||||
<Form.Item
|
||||
label="Class-B ping-slot periodicity"
|
||||
tooltip="This value must match the ping-slot periodicity of the device. Please refer to the device documentation."
|
||||
name="classBPingSlotNbK"
|
||||
name="classBPingSlotPeriodicity"
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
|
@@ -259,7 +259,7 @@ function DeviceProfileForm(props: IProps) {
|
||||
// class-b
|
||||
dp.setSupportsClassB(v.supportsClassB);
|
||||
dp.setClassBTimeout(v.classBTimeout);
|
||||
dp.setClassBPingSlotNbK(v.classBPingSlotNbK);
|
||||
dp.setClassBPingSlotPeriodicity(v.classBPingSlotPeriodicity);
|
||||
dp.setClassBPingSlotDr(v.classBPingSlotDr);
|
||||
dp.setClassBPingSlotFreq(v.classBPingSlotFreq);
|
||||
|
||||
@@ -376,7 +376,7 @@ function DeviceProfileForm(props: IProps) {
|
||||
supportsClassC: dp.getSupportsClassC(),
|
||||
classCTimeout: dp.getClassCTimeout(),
|
||||
classBTimeout: dp.getClassBTimeout(),
|
||||
classBPingSlotNbK: dp.getClassBPingSlotNbK(),
|
||||
classBPingSlotPeriodicity: dp.getClassBPingSlotPeriodicity(),
|
||||
classBPingSlotDr: dp.getClassBPingSlotDr(),
|
||||
classBPingSlotFreq: dp.getClassBPingSlotFreq(),
|
||||
abpRx1Delay: dp.getAbpRx1Delay(),
|
||||
@@ -662,7 +662,7 @@ function DeviceProfileForm(props: IProps) {
|
||||
<Form.Item
|
||||
label="Class-B ping-slot periodicity"
|
||||
tooltip="This value must match the ping-slot periodicity of the device. Please refer to the device documentation."
|
||||
name="classBPingSlotNbK"
|
||||
name="classBPingSlotPeriodicity"
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
|
@@ -67,7 +67,7 @@ function FuotaDeploymentForm(props: IProps) {
|
||||
d.setDeviceProfileId(v.deviceProfileId);
|
||||
d.setUnicastMaxRetryCount(v.unicastMaxRetryCount);
|
||||
d.setMulticastGroupType(v.multicastGroupType);
|
||||
d.setMulticastClassBPingSlotNbK(v.multicastClassBPingSlotNbK);
|
||||
d.setMulticastClassBPingSlotPeriodicity(v.multicastClassBPingSlotPeriodicity);
|
||||
d.setMulticastClassCSchedulingType(v.multicastClassCSchedulingType);
|
||||
d.setMulticastDr(v.multicastDr);
|
||||
d.setMulticastFrequency(v.multicastFrequency);
|
||||
@@ -199,7 +199,7 @@ function FuotaDeploymentForm(props: IProps) {
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={8}>
|
||||
<Form.Item label="Class-B ping-slot periodicity" name="multicastClassBPingSlotNbK">
|
||||
<Form.Item label="Class-B ping-slot periodicity" name="multicastClassBPingSlotPeriodicity">
|
||||
<Select disabled={!isMulticastClassB || props.disabled}>
|
||||
<Select.Option value={0}>Every second</Select.Option>
|
||||
<Select.Option value={1}>Every 2 seconds</Select.Option>
|
||||
|
@@ -47,7 +47,7 @@ function MulticastGroupForm(props: IProps) {
|
||||
mg.setFrequency(v.frequency);
|
||||
mg.setRegion(v.region);
|
||||
mg.setGroupType(v.groupType);
|
||||
mg.setClassBPingSlotNbK(v.classBPingSlotNbK);
|
||||
mg.setClassBPingSlotPeriodicity(v.classBPingSlotPeriodicity);
|
||||
mg.setClassCSchedulingType(v.classCSchedulingType);
|
||||
|
||||
props.onFinish(mg);
|
||||
@@ -146,7 +146,7 @@ function MulticastGroupForm(props: IProps) {
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={8}>
|
||||
<Form.Item label="Class-B ping-slot periodicity" name="classBPingSlotNbK">
|
||||
<Form.Item label="Class-B ping-slot periodicity" name="classBPingSlotPeriodicity">
|
||||
<Select disabled={!selectPingSlotPeriod || props.disabled}>
|
||||
<Select.Option value={0}>Every second</Select.Option>
|
||||
<Select.Option value={1}>Every 2 seconds</Select.Option>
|
||||
|
Reference in New Issue
Block a user