Skip to main content

eth_igb/
osal.rs

1use core::time::Duration;
2
3use trait_ffi::def_extern_trait;
4
5use crate::DError;
6
7#[def_extern_trait]
8pub trait Kernel {
9    fn sleep(duration: Duration);
10}
11
12pub(crate) fn wait_for<F: FnMut() -> bool>(
13    mut f: F,
14    interval: Duration,
15    try_count: Option<usize>,
16) -> Result<(), DError> {
17    for _ in 0..try_count.unwrap_or(usize::MAX) {
18        if f() {
19            return Ok(());
20        }
21
22        kernel::sleep(interval);
23    }
24    Err(DError::Timeout)
25}