Skip to main content

Search

Struct Search 

Source
pub struct Search { /* private fields */ }
Expand description

Enumerates the devices on a bus, one ROM code per call.

This is the binary tree walk the 1-Wire specification defines: after a SEARCH_ROM every device sends each bit of its ROM code and then the complement, the controller writes back the branch it takes, and the devices whose bit differs drop out until one remains. Each call to next returns the next device; the walk remembers where it branched and returns None once every device has been named.

§Examples

use pamoja_hal::onewire::{OneWireBus, RomCode, Search};

fn thermometers<B: OneWireBus>(bus: &mut B) -> Result<Vec<RomCode>, B::Error> {
    let mut found = Vec::new();
    let mut search = Search::new();
    while let Some(rom) = search.next(bus).map_err(|error| match error {
        pamoja_hal::onewire::OneWireError::Pin(error) => error,
        _ => unreachable!("a bus with no devices or a bad CRC ends the search"),
    })? {
        if rom.family() == 0x28 {
            found.push(rom);
        }
    }
    Ok(found)
}

Implementations§

Source

pub fn new() -> Search

Starts a search that visits every device.

§Returns

The search, positioned before the first device.

Source

pub fn alarms() -> Search

Starts a search that visits only the devices with an alarm condition.

§Returns

The search, positioned before the first alarming device.

Source

pub fn next<B: OneWireBus>( &mut self, bus: &mut B, ) -> Result<Option<RomCode>, OneWireError<B::Error>>

Finds the next device on bus.

§Arguments
  • bus - the bus to search.
§Returns

The next device’s ROM code, or None when every device has been returned or no device answered the reset.

§Errors

Returns OneWireError::Crc if a ROM code arrived corrupted, which happens when a device joins or drops mid-search, or the controller’s error.

Trait Implementations§

Source§

fn clone(&self) -> Search

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.