use deku::prelude::*;
use crate::{network::Addressee, types::VarInt, session::QoS};
#[derive(DekuRead, DekuWrite, Default, Debug, Clone, PartialEq)]
pub struct Dash7InterfaceConfiguration {
pub qos: QoS,
pub dormant_session_timeout: VarInt,
#[cfg(not(feature = "subiot_v0"))]
pub te: VarInt,
pub addressee: Addressee,
}
#[derive(DekuRead, DekuWrite, Default, Debug, Clone, PartialEq)]
pub struct LoRaWANInterfaceConfiguration {
#[deku(pad_bits_before = "5", bits = 1)]
pub adr_enabled: bool,
#[deku(bits = 1)]
pub request_ack: bool,
#[deku(pad_bits_before = "1")]
pub application_port: u8,
pub data_rate: u8,
}
#[derive(DekuRead, DekuWrite, Default, Debug, Clone, PartialEq)]
pub struct LoRaWANOTAAInterfaceConfiguration {
pub base: LoRaWANInterfaceConfiguration,
#[deku(count = "8")]
pub device_eui: Vec<u8>,
#[deku(count = "8")]
pub app_eui: Vec<u8>,
#[deku(count = "16")]
pub app_key: Vec<u8>,
}
#[derive(DekuRead, DekuWrite, Default, Debug, Clone, PartialEq)]
pub struct LoRaWANABPInterfaceConfiguration {
pub base: LoRaWANInterfaceConfiguration,
#[deku(count = "16")]
pub network_session_key: Vec<u8>,
#[deku(count = "16")]
pub app_session_key: Vec<u8>,
pub device_address: u32,
pub network_id: u32,
}
#[derive(DekuRead, DekuWrite, Debug, Clone, Copy, PartialEq)]
#[deku(bits = 8, type = "u8")]
pub enum InterfaceType {
#[deku(id = "0x00")]
Host,
#[deku(id = "0x01")]
Serial,
#[deku(id = "0x02")]
LoRaWanABP,
#[deku(id = "0x03")]
LoRaWanOTAA,
#[deku(id = "0xD7")]
Dash7,
#[deku(id_pat = "_")]
Unknown,
}
#[derive(DekuRead, DekuWrite, Debug, Clone, PartialEq)]
#[deku(ctx = "interface_type: InterfaceType", id = "interface_type")]
pub enum InterfaceConfiguration {
#[deku(id = "InterfaceType::Host")]
Host,
#[deku(id = "InterfaceType::Serial")]
Serial,
#[deku(id = "InterfaceType::LoRaWanABP")]
LoRaWanABP(LoRaWANABPInterfaceConfiguration),
#[deku(id = "InterfaceType::LoRaWanOTAA")]
LoRaWanOTAA(LoRaWANOTAAInterfaceConfiguration),
#[deku(id = "InterfaceType::Dash7")]
Dash7(Dash7InterfaceConfiguration),
#[deku(id_pat = "_")]
Unknown,
}