sx126x 0.3.0

A driver for the SX126X Family of LoRa modems
Documentation
#[derive(Copy, Clone)]
pub struct CalibParam {
    inner: u8,
}

impl From<CalibParam> for u8 {
    fn from(val: CalibParam) -> Self {
        val.inner
    }
}

impl From<u8> for CalibParam {
    fn from(val: u8) -> Self {
        Self { inner: val & 0x7F }
    }
}

impl CalibParam {
    pub const fn new(
        rc64k_en: bool,
        rc13_en: bool,
        pll_en: bool,
        adc_pulse_en: bool,
        adc_bulk_n_en: bool,
        adc_bulk_p_en: bool,
        image_en: bool,
    ) -> Self {
        let inner = (rc64k_en as u8)
            | (rc13_en as u8) << 1
            | (pll_en as u8) << 2
            | (adc_pulse_en as u8) << 3
            | (adc_bulk_n_en as u8) << 4
            | (adc_bulk_p_en as u8) << 5
            | (image_en as u8) << 6;
        Self { inner }
    }

    pub const fn all() -> Self {
        Self::new(true, true, true, true, true, true, true)
    }
}

#[derive(Copy, Clone)]
#[repr(u16)]
pub enum CalibImageFreq {
    MHz430_440 = 0x6B_6F,
    MHz470_510 = 0x75_81,
    MHz779_787 = 0xC1_C5,
    MHz863_870 = 0xD7_DB,
    MHz902_928 = 0xE1_E9,
}

impl From<CalibImageFreq> for [u8; 2] {
    fn from(val: CalibImageFreq) -> Self {
        (val as u16).to_be_bytes()
    }
}

impl CalibImageFreq {
    pub const fn from_rf_frequency(rf_frequency: u32) -> Self {
        match rf_frequency / 1000000 {
            902..=928 => Self::MHz902_928,
            863..=870 => Self::MHz863_870,
            779..=787 => Self::MHz779_787,
            470..=510 => Self::MHz470_510,
            430..=440 => Self::MHz430_440,
            _ => Self::MHz902_928, // Default
        }
    }
}