From 16d5d0b1a60b6618cc219dcae6f13ccc9fb4515d Mon Sep 17 00:00:00 2001 From: Astro <astro@spaceboyz.net> Date: Thu, 22 Aug 2019 13:16:29 +0200 Subject: [PATCH] light_sensor --- example/src/main.rs | 2 ++ l0dable/src/lib.rs | 3 ++- l0dable/src/light_sensor.rs | 27 +++++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 l0dable/src/light_sensor.rs diff --git a/example/src/main.rs b/example/src/main.rs index 6e71dd8..ed4da93 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 84db08e..05f646f 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 0000000..cfe2dfc --- /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(); } + } +} -- GitLab