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