Skip to content

Commit

Permalink
reviewing interrupt example
Browse files Browse the repository at this point in the history
  • Loading branch information
2bndy5 committed Oct 14, 2024
1 parent a8abb14 commit a8fee94
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 26 deletions.
8 changes: 4 additions & 4 deletions examples/python/interrupt_configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ def interrupt_handler() -> None:
print("\tIRQ pin went active LOW.")
radio.update()
flags: StatusFlags = radio.get_status_flags() # update IRQ status flags
print(f"\ttx_ds: {flags.tx_ds}, tx_df: {flags.tx_df}, rx_dr: {flags.rx_dr}")
print(f"\t{repr(flags)}")
if pl_iterator[0] == 0:
print("'data ready' event test", ("passed" if flags.rx_dr else "failed"))
elif pl_iterator[0] == 1:
Expand Down Expand Up @@ -165,6 +165,7 @@ def master() -> None:
print("Slave node should not be listening anymore.")
else:
print("Slave node was unresponsive.")
radio.clear_status_flags()

# on "data fail" test
print("\nConfiguring IRQ pin to go active for all events.")
Expand Down Expand Up @@ -193,10 +194,9 @@ def slave(timeout=6): # will listen for 6 seconds before timing out
radio.write_ack_payload(1, ack_payloads[1])
radio.write_ack_payload(1, ack_payloads[2])
radio.listen = True # start listening & clear irq_dr flag
start_timer = time.monotonic() # start timer now
end_timer = time.monotonic() + timeout # set end time
while (
not radio.get_fifo_state(False) != FifoState.Full
and time.monotonic() - start_timer < timeout
radio.get_fifo_state(False) != FifoState.Full and time.monotonic() < end_timer
):
# if RX FIFO is not full and timeout is not reached, then keep waiting
pass
Expand Down
14 changes: 7 additions & 7 deletions lib/src/radio/rf24/status.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ where
tx_df: true,
});
self.spi_read(1, registers::CONFIG)?;
self._config_reg = self._buf[1] & !(3 << 4);
self._config_reg = self._buf[1] & 0x0F;
if !flags.rx_dr {
self._config_reg |= mnemonics::MASK_RX_DR;
}
Expand All @@ -47,9 +47,9 @@ where
tx_ds: true,
tx_df: true,
});
let new_config = (mnemonics::MASK_RX_DR * flags.rx_dr as u8)
| (mnemonics::MASK_TX_DS * flags.tx_ds as u8)
| (mnemonics::MASK_MAX_RT * flags.tx_df as u8);
let new_config = (mnemonics::MASK_RX_DR * (flags.rx_dr as u8))
| (mnemonics::MASK_TX_DS * (flags.tx_ds as u8))
| (mnemonics::MASK_MAX_RT * (flags.tx_df as u8));
self.spi_write_byte(registers::STATUS, new_config)
}

Expand All @@ -58,9 +58,9 @@ where
}

fn get_status_flags(&self, flags: &mut StatusFlags) {
flags.rx_dr = self._status & mnemonics::MASK_RX_DR > 0;
flags.tx_ds = self._status & mnemonics::MASK_TX_DS > 0;
flags.tx_df = self._status & mnemonics::MASK_MAX_RT > 0;
flags.rx_dr = (self._status & mnemonics::MASK_RX_DR) > 0;
flags.tx_ds = (self._status & mnemonics::MASK_TX_DS) > 0;
flags.tx_df = (self._status & mnemonics::MASK_MAX_RT) > 0;
}
}

Expand Down
7 changes: 7 additions & 0 deletions rf24-py/src/enums.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,13 @@ impl PyStatusFlags {
tx_df,
}
}

pub fn __repr__(&self) -> String {
format!(
"<StatusFlags rx_dr: {}, tx_ds: {}, tx_df: {}>",
self.rx_dr, self.tx_ds, self.tx_df
)
}
}

#[cfg(target_os = "linux")]
Expand Down
20 changes: 5 additions & 15 deletions rf24-py/src/radio.rs
Original file line number Diff line number Diff line change
Expand Up @@ -386,13 +386,11 @@ impl PyRF24 {
.map_err(|e| PyRuntimeError::new_err(format!("{e:?}")))
}


#[setter]
pub fn set_power(&mut self, enable: bool) -> PyResult<()> {
if enable {
self.power_up(None)
}
else {
} else {
self.power_down()
}
}
Expand Down Expand Up @@ -420,25 +418,17 @@ impl PyRF24 {

#[pyo3(signature = (flags = None))]
pub fn set_status_flags(&mut self, flags: Option<PyStatusFlags>) -> PyResult<()> {
let flags = flags.unwrap_or(PyStatusFlags {
rx_dr: true,
tx_ds: true,
tx_df: true,
});
let flags = flags.map(|f| f.into_inner());
self.inner
.set_status_flags(Some(flags.into_inner()))
.set_status_flags(flags)
.map_err(|e| PyRuntimeError::new_err(format!("{e:?}")))
}

#[pyo3(signature = (flags = None))]
pub fn clear_status_flags(&mut self, flags: Option<PyStatusFlags>) -> PyResult<()> {
let flags = flags.unwrap_or(PyStatusFlags {
rx_dr: true,
tx_ds: true,
tx_df: true,
});
let flags = flags.map(|f| f.into_inner());
self.inner
.clear_status_flags(Some(flags.into_inner()))
.clear_status_flags(flags)
.map_err(|e| PyRuntimeError::new_err(format!("{e:?}")))
}

Expand Down

0 comments on commit a8fee94

Please sign in to comment.