Files
aligned
app
arrayvec
as_slice
bare_metal
byteorder
cfg_if
cortex_m
cortex_m_rt
cstr_core
cty
druid
druid_shell
embedded_graphics
embedded_hal
generic_array
hash32
heapless
introsort
kurbo
libchip8
libm
log
memchr
mynewt
nb
num_traits
piet
piet_common
piet_embedded_graphics
r0
st7735_lcd
stable_deref_trait
typenum
unicode_segmentation
vcell
void
volatile_register
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
//! Contains the Mynewt Sensor Manager API for Rust, including the safe version of the API.

use crate::{
    hw::sensor::{
        mgr_find_next_bydevname,
        sensor_ptr,
    },
    Strn,
};

/// Returns an iterator of sensors that match the device name `devname`
pub fn find_bydevname(devname: &Strn) -> SensorsByDevname {
    SensorsByDevname { 
        devname: *devname,
        previous: core::ptr::null_mut()
    }
    // MynewtResult<*mut sensor>
}

/// Implement the iterator for finding a sensor by device name
impl Iterator for SensorsByDevname {
    /// Iterator returns a pointer to a sensor
    type Item = sensor_ptr;

    /// Return the next sensor that matches the device name    
    fn next(&mut self) -> Option<sensor_ptr> {
        //  Based on last iteration, find the next sensor with matching device name.
        let sensor = mgr_find_next_bydevname(&self.devname, self.previous)
            .expect("find sensor");
        if sensor.is_null() { None }  //  If sensor not found, return None
        else {
            //  If sensor found, remember this sensor for next iteration.
            self.previous = sensor;
            Some(sensor)  //  Return the sensor
        }
    }
}

/// State for iterating sensors by device name
pub struct SensorsByDevname {
    /// Device name of the sensor
    devname: Strn,
    /// Last sensor that was returned
    previous: sensor_ptr,
}