Skip to main content

LoraModulation

Struct LoraModulation 

Source
pub struct LoraModulation {
    pub spreading_factor: u8,
    pub bandwidth: LoraBandwidth,
    pub coding_rate_denominator: u8,
    pub explicit_header: bool,
    pub crc: bool,
    pub low_data_rate_optimization: bool,
}
Expand description

The LoRa modem settings of a link, as RegModemConfig1 to 3 and the SF6 detection registers carry them.

§Examples

use pamoja_lora::LinkSettings;
use pamoja_radios::sx127x::config::LoraModulation;

// SF7 at 125 kHz, coding rate 4/5, an explicit header, and a CRC.
let modulation = LoraModulation::from_link(&LinkSettings::new(7, 125_000)).unwrap();
assert_eq!(modulation.modem_config_1(), 0x72);
assert_eq!(modulation.modem_config_2(0), 0x74);
assert_eq!(modulation.modem_config_3(), 0x04);

Fields§

§spreading_factor: u8

The spreading factor, 6 to 12.

§bandwidth: LoraBandwidth

The signal bandwidth.

§coding_rate_denominator: u8

The coding rate denominator, 5 to 8 for 4/5 to 4/8.

§explicit_header: bool

Whether packets carry an explicit header.

§crc: bool

Whether packets carry a payload CRC.

§low_data_rate_optimization: bool

Whether low data rate optimization is on.

Implementations§

Source§

impl LoraModulation

Builds the modem settings of a link.

§Arguments
  • link - the link settings, whose spreading factor, bandwidth, coding rate, header, CRC, and low data rate optimization the radio must match.
§Returns

The settings.

§Errors

Returns ModulationError::Bandwidth for a bandwidth the SX127x does not offer, ModulationError::SpreadingFactor below SF6, and ModulationError::ExplicitHeaderAtSf6 for SF6 with an explicit header.

Source

pub const fn modem_config_1(&self) -> u8

Returns RegModemConfig1: the bandwidth in bits 7 to 4, the coding rate in bits 3 to 1, and ImplicitHeaderModeOn in bit 0.

§Returns

The register value.

Source

pub const fn modem_config_2(&self, symbol_timeout: u16) -> u8

Returns RegModemConfig2: the spreading factor in bits 7 to 4, RxPayloadCrcOn in bit 2, and the top two bits of the symbol timeout in bits 1 and 0.

§Arguments
  • symbol_timeout - the single reception timeout in symbols, from symbol_timeout.
§Returns

The register value; TxContinuousMode is off.

Source

pub const fn modem_config_3(&self) -> u8

Returns RegModemConfig3: LowDataRateOptimize in bit 3, and AgcAutoOn in bit 2 so the automatic gain control sets the LNA gain.

§Returns

The register value.

Source

pub const fn detect_optimize(&self, current: u8) -> u8

Returns RegDetectOptimize with the DetectionOptimize bits set for the spreading factor: 0x05 for SF6 and 0x03 for SF7 to SF12.

§Arguments
  • current - the register’s current value, whose other bits are kept.
§Returns

The register value.

Source

pub const fn detection_threshold(&self) -> u8

Returns RegDetectionThreshold for the spreading factor: 0x0C for SF6 and 0x0A for SF7 to SF12.

§Returns

The register value.

Trait Implementations§

Source§

impl Clone for LoraModulation

Source§

fn clone(&self) -> LoraModulation

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for LoraModulation

Source§

impl Debug for LoraModulation

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for LoraModulation

Source§

impl Hash for LoraModulation

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for LoraModulation

Source§

fn eq(&self, other: &LoraModulation) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for LoraModulation

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.