diff --git a/example/src/main.rs b/example/src/main.rs index 6e71dd894baea94ab2557e82e176903fc6e7f66b..ed4da9390de366c50fa1439b5d11a9a1d95efbcb 100644 --- a/example/src/main.rs +++ b/example/src/main.rs @@ -9,6 +9,7 @@ fn main() { writeln!(UART, "Hello from Rust\r").unwrap(); let display = Display::open(); + let light = LightSensor::start(); for t in 0..Display::W { display.clear(Color::yellow()); display.print(160 - t, 10, b"Hello Rust\0", Color::white(), Color::black()); @@ -29,6 +30,7 @@ fn main() { if b.right_top() { display.print(80, 30, b"Reset\0", Color::red(), Color::black()); } + writeln!(UART, "Light: {:?}\r", light.get()); display.update(); } diff --git a/l0dable/src/lib.rs b/l0dable/src/lib.rs index 84db08e6d1bd8e1f4d63975fe172fda69b5bf8c6..05f646fdc3a94ca650c593b6bd155a8961c75723 100644 --- a/l0dable/src/lib.rs +++ b/l0dable/src/lib.rs @@ -67,9 +67,10 @@ mod display; pub use display::{Display, Color, LineStyle}; mod buttons; pub use buttons::Buttons; - pub mod uart; pub const UART: uart::Uart = uart::Uart; +mod light_sensor; +pub use light_sensor::LightSensor; pub fn exit(ret: i32) -> ! { unsafe { diff --git a/l0dable/src/light_sensor.rs b/l0dable/src/light_sensor.rs new file mode 100644 index 0000000000000000000000000000000000000000..cfe2dfc6d21d8d1d8643bb9145af2d1cdb19d0ad --- /dev/null +++ b/l0dable/src/light_sensor.rs @@ -0,0 +1,27 @@ +use super::bindings::*; + +pub struct LightSensor; + +impl LightSensor { + pub fn start() -> Self { + if unsafe { epic_light_sensor_run() } != 0 { + panic!("Cannot start light sensor"); + } + LightSensor + } + + pub fn get(&self) -> Option<u16> { + let mut result = 0; + if unsafe { epic_light_sensor_get(&mut result) } == 0 { + Some(result) + } else { + None + } + } +} + +impl Drop for LightSensor { + fn drop(&mut self) { + unsafe { epic_light_sensor_stop(); } + } +}