pub fn read_poll_timeout_atomic<Op, Cond, T>(
op: Op,
cond: Cond,
delay_delta: Delta,
retry: usize,
) -> Result<T>Expand description
Polls periodically until a condition is met, an error occurs, or the attempt limit is reached.
The function repeatedly executes the given operation op closure and
checks its result using the condition closure cond.
If cond returns true, the function returns successfully with the result of op.
Otherwise, it performs a busy wait for a duration specified by delay_delta
before executing op again.
This process continues until either op returns an error, cond
returns true, or the attempt limit specified by retry is reached.
§Errors
If op returns an error, then that error is returned directly.
If the attempt limit specified by retry is reached, then
Err(ETIMEDOUT) is returned.
§Examples
use kernel::io::{poll::read_poll_timeout_atomic, Io};
use kernel::time::Delta;
const HW_READY: u16 = 0x01;
fn wait_for_hardware<const SIZE: usize>(io: &Io<SIZE>) -> Result {
read_poll_timeout_atomic(
// The `op` closure reads the value of a specific status register.
|| io.try_read16(0x1000),
// The `cond` closure takes a reference to the value returned by `op`
// and checks whether the hardware is ready.
|val: &u16| *val == HW_READY,
Delta::from_micros(50),
1000,
)?;
Ok(())
}