diff --git a/src/lib.rs b/src/lib.rs index 3b79878bf01ac22ffe7b409dd74cb7605c69f429..61b8e567155656424c22b07c2611bc4bea448e26 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -71,6 +71,10 @@ where self.radio.get_rssi() } + pub fn sleep(&mut self) -> Result<(), RfError<Spi::Error>> { + self.radio.sleep() + } + pub fn set_channel(&mut self, channel: u8) { self.channel = channel; } @@ -160,6 +164,12 @@ where let len = tx_buf.len(); assert!(len < 8192, "Packet length cannot be above 8191 bytes"); + if matches!(self.state, InternalState::Rx { .. }) { + // if we're in the middle of rxing, we need to cancel that first + // otherwise it gets confused + self.radio.set_state(State::Sleep).txe()?; + } + self.radio.clear_fifo().txe()?; self.radio.clear_ph_and_modem_interrupts().txe()?;