This commit is contained in:
Ulf Lilleengen 2021-09-14 14:58:37 +02:00 committed by Ulf Lilleengen
parent bb72f7eb98
commit fb697a2657
24 changed files with 158 additions and 43 deletions

View File

@ -113,6 +113,17 @@ impl<'d> Rcc<'d> {
} }
} }
pub fn enable_lsi(&mut self) {
let rcc = pac::RCC;
unsafe {
let csr = rcc.csr().read();
if !csr.lsion() {
rcc.csr().modify(|w| w.set_lsion(true));
while !rcc.csr().read().lsirdy() {}
}
}
}
// Safety: RCC init must have been called // Safety: RCC init must have been called
pub fn clocks(&self) -> &'static Clocks { pub fn clocks(&self) -> &'static Clocks {
unsafe { get_freqs() } unsafe { get_freqs() }

View File

@ -1,4 +1,4 @@
use crate::subghz::timeout::Timeout; use super::Timeout;
/// Number of symbols used for channel activity detection scans. /// Number of symbols used for channel activity detection scans.
/// ///

View File

@ -1,4 +1,4 @@
use crate::subghz::value_error::ValueError; use super::ValueError;
/// HSE32 load capacitor trimming. /// HSE32 load capacitor trimming.
/// ///

View File

@ -240,6 +240,14 @@ impl<'d, Tx, Rx> SubGhz<'d, Tx, Rx> {
SubGhz { spi } SubGhz { spi }
} }
pub fn is_busy(&mut self) -> bool {
rfbusys()
}
pub fn reset(&mut self) {
Self::pulse_radio_reset();
}
} }
impl<'d> SubGhz<'d, NoDma, NoDma> { impl<'d> SubGhz<'d, NoDma, NoDma> {

View File

@ -561,6 +561,16 @@ impl FskModParams {
bw > br + 2 * fdev + freq_err bw > br + 2 * fdev + freq_err
} }
/// Returns `true` if the modulation parameters are valid for a worst-case
/// crystal tolerance.
///
/// This is equivalent to [`is_valid`](Self::is_valid) with a `ppm` argument
/// of 30.
#[must_use = "the return value indicates if the modulation parameters are valid"]
pub const fn is_valid_worst_case(&self) -> bool {
self.is_valid(30)
}
/// Extracts a slice containing the packet. /// Extracts a slice containing the packet.
/// ///
/// # Example /// # Example
@ -613,11 +623,11 @@ pub enum SpreadingFactor {
/// Spreading factor 9. /// Spreading factor 9.
Sf9 = 0x09, Sf9 = 0x09,
/// Spreading factor 10. /// Spreading factor 10.
Sf10 = 0xA0, Sf10 = 0x0A,
/// Spreading factor 11. /// Spreading factor 11.
Sf11 = 0xB0, Sf11 = 0x0B,
/// Spreading factor 12. /// Spreading factor 12.
Sf12 = 0xC0, Sf12 = 0x0C,
} }
impl From<SpreadingFactor> for u8 { impl From<SpreadingFactor> for u8 {

View File

@ -2,7 +2,7 @@
/// ///
/// Used by [`set_pa_ocp`]. /// Used by [`set_pa_ocp`].
/// ///
/// [`set_pa_ocp`]: crate::subghz::SubGhz::set_pa_ocp /// [`set_pa_ocp`]: super::SubGhz::set_pa_ocp
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy)] #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))] #[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[repr(u8)] #[repr(u8)]

View File

@ -2,7 +2,7 @@
/// ///
/// Returned by [`op_error`]. /// Returned by [`op_error`].
/// ///
/// [`op_error`]: crate::subghz::SubGhz::op_error /// [`op_error`]: super::SubGhz::op_error
#[derive(Debug, PartialEq, Eq, Clone, Copy)] #[derive(Debug, PartialEq, Eq, Clone, Copy)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))] #[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[repr(u8)] #[repr(u8)]

View File

@ -2,7 +2,7 @@
/// ///
/// Argument of [`set_pa_config`]. /// Argument of [`set_pa_config`].
/// ///
/// [`set_pa_config`]: crate::subghz::SubGhz::set_pa_config /// [`set_pa_config`]: super::SubGhz::set_pa_config
#[derive(Debug, PartialEq, Eq, Clone, Copy)] #[derive(Debug, PartialEq, Eq, Clone, Copy)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))] #[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct PaConfig { pub struct PaConfig {
@ -10,6 +10,62 @@ pub struct PaConfig {
} }
impl PaConfig { impl PaConfig {
/// Optimal settings for +15dBm output power with the low-power PA.
///
/// This must be used with [`TxParams::LP_15`](super::TxParams::LP_15).
pub const LP_15: PaConfig = PaConfig::new()
.set_pa_duty_cycle(0x6)
.set_hp_max(0x0)
.set_pa(PaSel::Lp);
/// Optimal settings for +14dBm output power with the low-power PA.
///
/// This must be used with [`TxParams::LP_14`](super::TxParams::LP_14).
pub const LP_14: PaConfig = PaConfig::new()
.set_pa_duty_cycle(0x4)
.set_hp_max(0x0)
.set_pa(PaSel::Lp);
/// Optimal settings for +10dBm output power with the low-power PA.
///
/// This must be used with [`TxParams::LP_10`](super::TxParams::LP_10).
pub const LP_10: PaConfig = PaConfig::new()
.set_pa_duty_cycle(0x1)
.set_hp_max(0x0)
.set_pa(PaSel::Lp);
/// Optimal settings for +22dBm output power with the high-power PA.
///
/// This must be used with [`TxParams::HP`](super::TxParams::HP).
pub const HP_22: PaConfig = PaConfig::new()
.set_pa_duty_cycle(0x4)
.set_hp_max(0x7)
.set_pa(PaSel::Hp);
/// Optimal settings for +20dBm output power with the high-power PA.
///
/// This must be used with [`TxParams::HP`](super::TxParams::HP).
pub const HP_20: PaConfig = PaConfig::new()
.set_pa_duty_cycle(0x3)
.set_hp_max(0x5)
.set_pa(PaSel::Hp);
/// Optimal settings for +17dBm output power with the high-power PA.
///
/// This must be used with [`TxParams::HP`](super::TxParams::HP).
pub const HP_17: PaConfig = PaConfig::new()
.set_pa_duty_cycle(0x2)
.set_hp_max(0x3)
.set_pa(PaSel::Hp);
/// Optimal settings for +14dBm output power with the high-power PA.
///
/// This must be used with [`TxParams::HP`](super::TxParams::HP).
pub const HP_14: PaConfig = PaConfig::new()
.set_pa_duty_cycle(0x2)
.set_hp_max(0x2)
.set_pa(PaSel::Hp);
/// Create a new `PaConfig` struct. /// Create a new `PaConfig` struct.
/// ///
/// This is the same as `default`, but in a `const` function. /// This is the same as `default`, but in a `const` function.

View File

@ -76,7 +76,7 @@ pub enum CrcType {
/// Packet parameters for [`set_packet_params`]. /// Packet parameters for [`set_packet_params`].
/// ///
/// [`set_packet_params`]: crate::subghz::SubGhz::set_packet_params /// [`set_packet_params`]: super::SubGhz::set_packet_params
#[derive(Debug, Clone, Copy, PartialEq, Eq)] #[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))] #[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct GenericPacketParams { pub struct GenericPacketParams {
@ -311,7 +311,7 @@ impl Default for GenericPacketParams {
/// Packet parameters for [`set_lora_packet_params`]. /// Packet parameters for [`set_lora_packet_params`].
/// ///
/// [`set_lora_packet_params`]: crate::subghz::SubGhz::set_lora_packet_params /// [`set_lora_packet_params`]: super::SubGhz::set_lora_packet_params
#[derive(Debug, Clone, Copy, PartialEq, Eq)] #[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct LoRaPacketParams { pub struct LoRaPacketParams {
buf: [u8; 7], buf: [u8; 7],
@ -470,7 +470,7 @@ impl Default for LoRaPacketParams {
/// Packet parameters for [`set_lora_packet_params`]. /// Packet parameters for [`set_lora_packet_params`].
/// ///
/// [`set_lora_packet_params`]: crate::subghz::SubGhz::set_lora_packet_params /// [`set_lora_packet_params`]: super::SubGhz::set_lora_packet_params
#[derive(Debug, Clone, Copy, PartialEq, Eq)] #[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))] #[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct BpskPacketParams { pub struct BpskPacketParams {

View File

@ -1,12 +1,12 @@
use embassy_hal_common::ratio::Ratio; use super::Ratio;
use crate::subghz::status::Status; use super::Status;
/// (G)FSK packet status. /// (G)FSK packet status.
/// ///
/// Returned by [`fsk_packet_status`]. /// Returned by [`fsk_packet_status`].
/// ///
/// [`fsk_packet_status`]: crate::subghz::SubGhz::fsk_packet_status /// [`fsk_packet_status`]: super::SubGhz::fsk_packet_status
#[derive(Debug, Clone, Copy, PartialEq, Eq)] #[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct FskPacketStatus { pub struct FskPacketStatus {
buf: [u8; 4], buf: [u8; 4],
@ -37,7 +37,7 @@ impl FskPacketStatus {
} }
/// Returns `true` if a preabmle error occured. /// Returns `true` if a preabmle error occured.
pub const fn preamble_error(&self) -> bool { pub const fn preamble_err(&self) -> bool {
(self.buf[1] & (1 << 7)) != 0 (self.buf[1] & (1 << 7)) != 0
} }
@ -47,7 +47,7 @@ impl FskPacketStatus {
} }
/// Returns `true` if an address error occured. /// Returns `true` if an address error occured.
pub const fn adrs_err(&self) -> bool { pub const fn addr_err(&self) -> bool {
(self.buf[1] & (1 << 5)) != 0 (self.buf[1] & (1 << 5)) != 0
} }
@ -76,6 +76,11 @@ impl FskPacketStatus {
(self.buf[1] & 1) != 0 (self.buf[1] & 1) != 0
} }
/// Returns `true` if any error occured.
pub const fn any_err(&self) -> bool {
(self.buf[1] & 0xFC) != 0
}
/// RSSI level when the synchronization address is detected. /// RSSI level when the synchronization address is detected.
/// ///
/// Units are in dBm. /// Units are in dBm.
@ -118,9 +123,9 @@ impl defmt::Format for FskPacketStatus {
fmt, fmt,
r#"FskPacketStatus {{ r#"FskPacketStatus {{
status: {}, status: {},
preamble_error: {}, preamble_err: {},
sync_err: {}, sync_err: {},
adrs_err: {}, addr_err: {},
crc_err: {}, crc_err: {},
length_err: {}, length_err: {},
abort_err: {}, abort_err: {},
@ -130,9 +135,9 @@ impl defmt::Format for FskPacketStatus {
rssi_avg: {}, rssi_avg: {},
}}"#, }}"#,
self.status(), self.status(),
self.preamble_error(), self.preamble_err(),
self.sync_err(), self.sync_err(),
self.adrs_err(), self.addr_err(),
self.crc_err(), self.crc_err(),
self.length_err(), self.length_err(),
self.abort_err(), self.abort_err(),
@ -148,9 +153,9 @@ impl core::fmt::Display for FskPacketStatus {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
f.debug_struct("FskPacketStatus") f.debug_struct("FskPacketStatus")
.field("status", &self.status()) .field("status", &self.status())
.field("preamble_error", &self.preamble_error()) .field("preamble_err", &self.preamble_err())
.field("sync_err", &self.sync_err()) .field("sync_err", &self.sync_err())
.field("adrs_err", &self.adrs_err()) .field("addr_err", &self.addr_err())
.field("crc_err", &self.crc_err()) .field("crc_err", &self.crc_err())
.field("length_err", &self.length_err()) .field("length_err", &self.length_err())
.field("abort_err", &self.abort_err()) .field("abort_err", &self.abort_err())
@ -166,7 +171,7 @@ impl core::fmt::Display for FskPacketStatus {
/// ///
/// Returned by [`lora_packet_status`]. /// Returned by [`lora_packet_status`].
/// ///
/// [`lora_packet_status`]: crate::subghz::SubGhz::lora_packet_status /// [`lora_packet_status`]: super::SubGhz::lora_packet_status
#[derive(Debug, Clone, Copy, PartialEq, Eq)] #[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct LoRaPacketStatus { pub struct LoRaPacketStatus {
buf: [u8; 4], buf: [u8; 4],

View File

@ -2,7 +2,7 @@
/// ///
/// Argument of [`set_packet_type`] /// Argument of [`set_packet_type`]
/// ///
/// [`set_packet_type`]: crate::subghz::SubGhz::set_packet_type /// [`set_packet_type`]: super::SubGhz::set_packet_type
#[repr(u8)] #[repr(u8)]
#[derive(Debug, PartialEq, Eq, Clone, Copy)] #[derive(Debug, PartialEq, Eq, Clone, Copy)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))] #[cfg_attr(feature = "defmt", derive(defmt::Format))]

View File

@ -22,7 +22,7 @@ impl Default for InfSeqSel {
/// Generic packet control. /// Generic packet control.
/// ///
/// Argument of [`set_pkt_ctrl`](crate::subghz::SubGhz::set_pkt_ctrl). /// Argument of [`set_pkt_ctrl`](super::SubGhz::set_pkt_ctrl).
#[derive(Debug, PartialEq, Eq, Clone, Copy)] #[derive(Debug, PartialEq, Eq, Clone, Copy)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))] #[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct PktCtrl { pub struct PktCtrl {

View File

@ -2,7 +2,7 @@
/// ///
/// Argument of [`set_rx_gain`]. /// Argument of [`set_rx_gain`].
/// ///
/// [`set_rx_gain`]: crate::subghz::SubGhz::set_rx_gain /// [`set_rx_gain`]: super::SubGhz::set_rx_gain
#[repr(u8)] #[repr(u8)]
#[derive(Debug, PartialEq, Eq, Clone, Copy)] #[derive(Debug, PartialEq, Eq, Clone, Copy)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))] #[cfg_attr(feature = "defmt", derive(defmt::Format))]

View File

@ -46,7 +46,7 @@ impl Default for CurrentLim {
/// Power control. /// Power control.
/// ///
/// Argument of [`set_bit_sync`](crate::subghz::SubGhz::set_bit_sync). /// Argument of [`set_bit_sync`](super::SubGhz::set_bit_sync).
#[derive(Debug, PartialEq, Eq, Clone, Copy)] #[derive(Debug, PartialEq, Eq, Clone, Copy)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))] #[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct PwrCtrl { pub struct PwrCtrl {

View File

@ -2,7 +2,7 @@
/// ///
/// Argument of [`set_rf_frequency`]. /// Argument of [`set_rf_frequency`].
/// ///
/// [`set_rf_frequency`]: crate::subghz::SubGhz::set_rf_frequency /// [`set_rf_frequency`]: super::SubGhz::set_rf_frequency
#[derive(Debug, PartialEq, Eq, Clone, Copy, PartialOrd, Ord)] #[derive(Debug, PartialEq, Eq, Clone, Copy, PartialOrd, Ord)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))] #[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct RfFreq { pub struct RfFreq {

View File

@ -2,7 +2,7 @@
/// ///
/// Used by [`set_rx_timeout_stop`]. /// Used by [`set_rx_timeout_stop`].
/// ///
/// [`set_rx_timeout_stop`]: crate::subghz::SubGhz::set_rx_timeout_stop /// [`set_rx_timeout_stop`]: super::SubGhz::set_rx_timeout_stop
#[derive(Debug, PartialEq, Eq, Clone, Copy)] #[derive(Debug, PartialEq, Eq, Clone, Copy)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))] #[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[repr(u8)] #[repr(u8)]

View File

@ -27,7 +27,7 @@ impl Default for Startup {
/// ///
/// Argument of [`set_sleep`]. /// Argument of [`set_sleep`].
/// ///
/// [`set_sleep`]: crate::subghz::SubGhz::set_sleep /// [`set_sleep`]: super::SubGhz::set_sleep
#[derive(Debug, PartialEq, Eq, Clone, Copy)] #[derive(Debug, PartialEq, Eq, Clone, Copy)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))] #[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct SleepCfg(u8); pub struct SleepCfg(u8);

View File

@ -1,6 +1,6 @@
/// SMPS maximum drive capability. /// SMPS maximum drive capability.
/// ///
/// Argument of [`set_smps_drv`](crate::subghz::SubGhz::set_smps_drv). /// Argument of [`set_smps_drv`](super::SubGhz::set_smps_drv).
#[derive(Debug, PartialEq, Eq, Ord, PartialOrd, Clone, Copy)] #[derive(Debug, PartialEq, Eq, Ord, PartialOrd, Clone, Copy)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))] #[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[repr(u8)] #[repr(u8)]

View File

@ -2,7 +2,7 @@
/// ///
/// Used by [`set_standby`]. /// Used by [`set_standby`].
/// ///
/// [`set_standby`]: crate::subghz::SubGhz::set_standby /// [`set_standby`]: super::SubGhz::set_standby
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy)] #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))] #[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[repr(u8)] #[repr(u8)]

View File

@ -1,4 +1,4 @@
use crate::subghz::status::Status; use super::Status;
#[derive(Debug, PartialEq, Eq, Clone, Copy)] #[derive(Debug, PartialEq, Eq, Clone, Copy)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))] #[cfg_attr(feature = "defmt", derive(defmt::Format))]
@ -24,8 +24,8 @@ impl FskStats {
/// ///
/// Returned by [`fsk_stats`] and [`lora_stats`]. /// Returned by [`fsk_stats`] and [`lora_stats`].
/// ///
/// [`fsk_stats`]: crate::subghz::SubGhz::fsk_stats /// [`fsk_stats`]: super::SubGhz::fsk_stats
/// [`lora_stats`]: crate::subghz::SubGhz::lora_stats /// [`lora_stats`]: super::SubGhz::lora_stats
#[derive(Debug, Eq, PartialEq, Clone, Copy)] #[derive(Debug, Eq, PartialEq, Clone, Copy)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))] #[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct Stats<ModType> { pub struct Stats<ModType> {
@ -169,7 +169,7 @@ impl core::fmt::Display for Stats<FskStats> {
#[cfg(test)] #[cfg(test)]
mod test { mod test {
use crate::subghz::{CmdStatus, LoRaStats, Stats, StatusMode}; use super::super::{CmdStatus, LoRaStats, Stats, StatusMode};
#[test] #[test]
fn mixed() { fn mixed() {

View File

@ -115,7 +115,7 @@ impl CmdStatus {
/// ///
/// This is returned by [`status`]. /// This is returned by [`status`].
/// ///
/// [`status`]: crate::subghz::SubGhz::status /// [`status`]: super::SubGhz::status
#[derive(Debug, PartialEq, Eq, Clone, Copy)] #[derive(Debug, PartialEq, Eq, Clone, Copy)]
pub struct Status(u8); pub struct Status(u8);

View File

@ -1,4 +1,4 @@
use crate::subghz::timeout::Timeout; use super::Timeout;
/// TCXO trim. /// TCXO trim.
/// ///
@ -78,7 +78,7 @@ impl TcxoTrim {
/// ///
/// Argument of [`set_tcxo_mode`]. /// Argument of [`set_tcxo_mode`].
/// ///
/// [`set_tcxo_mode`]: crate::subghz::SubGhz::set_tcxo_mode /// [`set_tcxo_mode`]: super::SubGhz::set_tcxo_mode
#[derive(Debug, PartialEq, Eq, Clone, Copy)] #[derive(Debug, PartialEq, Eq, Clone, Copy)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))] #[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct TcxoMode { pub struct TcxoMode {

View File

@ -1,6 +1,6 @@
/// Power amplifier ramp time for FSK, MSK, and LoRa modulation. /// Power amplifier ramp time for FSK, MSK, and LoRa modulation.
/// ///
/// Argument of [`set_ramp_time`][`crate::subghz::TxParams::set_ramp_time`]. /// Argument of [`set_ramp_time`][`super::TxParams::set_ramp_time`].
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)] #[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))] #[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[repr(u8)] #[repr(u8)]
@ -60,7 +60,7 @@ impl From<RampTime> for embassy::time::Duration {
} }
/// Transmit parameters, output power and power amplifier ramp up time. /// Transmit parameters, output power and power amplifier ramp up time.
/// ///
/// Argument of [`set_tx_params`][`crate::subghz::SubGhz::set_tx_params`]. /// Argument of [`set_tx_params`][`super::SubGhz::set_tx_params`].
#[derive(Debug, PartialEq, Eq, Clone, Copy)] #[derive(Debug, PartialEq, Eq, Clone, Copy)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))] #[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct TxParams { pub struct TxParams {
@ -68,6 +68,31 @@ pub struct TxParams {
} }
impl TxParams { impl TxParams {
/// Optimal power setting for +15dBm output power with the low-power PA.
///
/// This must be used with [`PaConfig::LP_15`](super::PaConfig::LP_15).
pub const LP_15: TxParams = TxParams::new().set_power(0x0E);
/// Optimal power setting for +14dBm output power with the low-power PA.
///
/// This must be used with [`PaConfig::LP_14`](super::PaConfig::LP_14).
pub const LP_14: TxParams = TxParams::new().set_power(0x0E);
/// Optimal power setting for +10dBm output power with the low-power PA.
///
/// This must be used with [`PaConfig::LP_10`](super::PaConfig::LP_10).
pub const LP_10: TxParams = TxParams::new().set_power(0x0D);
/// Optimal power setting for the high-power PA.
///
/// This must be used with one of:
///
/// * [`PaConfig::HP_22`](super::PaConfig::HP_22)
/// * [`PaConfig::HP_20`](super::PaConfig::HP_20)
/// * [`PaConfig::HP_17`](super::PaConfig::HP_17)
/// * [`PaConfig::HP_14`](super::PaConfig::HP_14)
pub const HP: TxParams = TxParams::new().set_power(0x16);
/// Create a new `TxParams` struct. /// Create a new `TxParams` struct.
/// ///
/// This is the same as `default`, but in a `const` function. /// This is the same as `default`, but in a `const` function.
@ -117,7 +142,7 @@ impl TxParams {
/// # assert_eq!(TX_PARAMS.as_slice()[1], 0x00); /// # assert_eq!(TX_PARAMS.as_slice()[1], 0x00);
/// ``` /// ```
/// ///
/// [`set_pa_config`]: crate::subghz::SubGhz::set_pa_config /// [`set_pa_config`]: super::SubGhz::set_pa_config
#[must_use = "set_power returns a modified TxParams"] #[must_use = "set_power returns a modified TxParams"]
pub const fn set_power(mut self, power: u8) -> TxParams { pub const fn set_power(mut self, power: u8) -> TxParams {
self.buf[1] = power; self.buf[1] = power;

View File

@ -2,7 +2,7 @@
/// ///
/// Used by [`Timeout::from_duration`]. /// Used by [`Timeout::from_duration`].
/// ///
/// [`Timeout::from_duration`]: crate::subghz::Timeout::from_duration /// [`Timeout::from_duration`]: super::Timeout::from_duration
#[derive(Debug, PartialEq, Eq, Clone, Copy)] #[derive(Debug, PartialEq, Eq, Clone, Copy)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))] #[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct ValueError<T> { pub struct ValueError<T> {