#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub struct Config {
pub channel: UwbChannel,
pub sfd_sequence: SfdSequence,
pub pulse_repetition_frequency: PulseRepetitionFrequency,
pub preamble_length: PreambleLength,
pub bitrate: BitRate,
pub frame_filtering: bool,
pub ranging_enable: bool,
pub sts_mode: StsMode,
pub sts_len: StsLen,
pub sfd_timeout: u32,
}
impl Default for Config {
fn default() -> Self {
Config {
channel: Default::default(),
sfd_sequence: Default::default(),
pulse_repetition_frequency: Default::default(),
preamble_length: Default::default(),
bitrate: Default::default(),
frame_filtering: false,
ranging_enable: false,
sts_mode: Default::default(), sts_len: Default::default(),
sfd_timeout: 121,
}
}
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Default)]
pub enum BitRate {
#[default]
Kbps850 = 0,
Kbps6800 = 1,
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Default)]
pub enum PulseRepetitionFrequency {
Mhz16 = 0b01,
#[default]
Mhz64 = 0b10,
}
impl PulseRepetitionFrequency {
pub fn get_recommended_rx_tune_en(&self) -> u8 {
match self {
PulseRepetitionFrequency::Mhz16 => 0,
PulseRepetitionFrequency::Mhz64 => 1,
}
}
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Default)]
pub enum PreambleLength {
Symbols64 = 0b0001,
Symbols1024 = 0b0010,
Symbols4096 = 0b0011,
Symbols32 = 0b0100,
#[default]
Symbols128 = 0b0101,
Symbols1536 = 0b0110,
Symbols256 = 0b1001,
Symbols2048 = 0b1010,
Symbols512 = 0b1101,
Symbols72 = 0b0111,
}
impl PreambleLength {
pub fn get_recommended_pac_size(&self) -> u8 {
match self {
PreambleLength::Symbols32 => 3, PreambleLength::Symbols64 => 0, PreambleLength::Symbols128 => 1, PreambleLength::Symbols256 => 1,
PreambleLength::Symbols512 => 1,
PreambleLength::Symbols1024 => 1,
PreambleLength::Symbols1536 => 1,
PreambleLength::Symbols2048 => 1,
PreambleLength::Symbols4096 => 1,
PreambleLength::Symbols72 => 1, }
}
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Default)]
pub enum SfdSequence {
#[default]
IeeeShort = 0b00,
Decawave8 = 0b01,
Decawave16 = 0b10,
Ieee = 0b11,
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Default)]
pub enum UwbChannel {
#[default]
Channel5 = 0,
Channel9 = 1,
}
impl UwbChannel {
pub fn get_recommended_preamble_code(&self, prf_value: PulseRepetitionFrequency) -> u8 {
match (self, prf_value) {
(UwbChannel::Channel5, PulseRepetitionFrequency::Mhz16) => 4, (UwbChannel::Channel9, PulseRepetitionFrequency::Mhz16) => 4, (UwbChannel::Channel5, PulseRepetitionFrequency::Mhz64) => 9, (UwbChannel::Channel9, PulseRepetitionFrequency::Mhz64) => 9, }
}
pub fn get_recommended_rf_tx_ctrl_2(&self) -> u32 {
match self {
UwbChannel::Channel5 => 0x1C071134,
UwbChannel::Channel9 => 0x1C010034,
}
}
pub fn get_recommended_pll_conf(&self) -> u16 {
match self {
UwbChannel::Channel5 => 0x1F3C,
UwbChannel::Channel9 => 0x0F3C,
}
}
pub fn get_recommended_dgc_lut_0(&self) -> u32 {
match self {
UwbChannel::Channel5 => 0x0001C0FD,
UwbChannel::Channel9 => 0x0002A8FE,
}
}
pub fn get_recommended_dgc_lut_1(&self) -> u32 {
match self {
UwbChannel::Channel5 => 0x0001C43E,
UwbChannel::Channel9 => 0x0002AC36,
}
}
pub fn get_recommended_dgc_lut_2(&self) -> u32 {
match self {
UwbChannel::Channel5 => 0x0001C6BE,
UwbChannel::Channel9 => 0x0002A5FE,
}
}
pub fn get_recommended_dgc_lut_3(&self) -> u32 {
match self {
UwbChannel::Channel5 => 0x0001C77E,
UwbChannel::Channel9 => 0x0002AF3E,
}
}
pub fn get_recommended_dgc_lut_4(&self) -> u32 {
match self {
UwbChannel::Channel5 => 0x0001CF36,
UwbChannel::Channel9 => 0x0002AF7D,
}
}
pub fn get_recommended_dgc_lut_5(&self) -> u32 {
match self {
UwbChannel::Channel5 => 0x0001CFB5,
UwbChannel::Channel9 => 0x0002AFB5,
}
}
pub fn get_recommended_dgc_lut_6(&self) -> u32 {
match self {
UwbChannel::Channel5 => 0x0001CFF5,
UwbChannel::Channel9 => 0x0002AFB5,
}
}
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Default)]
pub enum StsMode {
#[default]
StsModeOff = 0,
StsMode1 = 1,
StsMode2 = 2,
StsModeND = 3,
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Default)]
pub enum StsLen {
StsLen32 = 0,
#[default]
StsLen64 = 1,
StsLen128 = 2,
StsLen256 = 3,
StsLen512 = 4,
StsLen1024 = 5,
StsLn2048 = 6,
}