Merge #247
247: Document several factors constraining `libtock_core`'s design. r=hudson-ayers a=jrvanwhy
This Design Considerations document outlines a number of considerations that affect the design of `libtock_core` which do not impact most Rust projects. It is intended to help onboard new contributors and to remind long-term contributors of constraints that other `libtock_core` clients have.
[Rendered document](https://github.com/jrvanwhy/libtock-rs/blob/design-doc/doc/DesignConsiderations.md)
Co-authored-by: Johnathan Van Why <jrvanwhy@google.com>
diff --git a/src/sensors/ninedof.rs b/src/sensors/ninedof.rs
index b5e7191..f5c0197 100644
--- a/src/sensors/ninedof.rs
+++ b/src/sensors/ninedof.rs
@@ -47,6 +47,14 @@
Ok(res.res.get())
}
+ pub fn read_gyroscope(&mut self) -> TockResult<NinedofReading> {
+ let res: CbData = Default::default();
+ subscribe(Self::cb, unsafe { mem::transmute(&res) })?;
+ start_gyroscope_reading()?;
+ unsafe { executor::block_on(futures::wait_until(|| res.ready.get())) };
+ Ok(res.res.get())
+ }
+
extern "C" fn cb(x: usize, y: usize, z: usize, ptr: usize) {
let res: &CbData = unsafe { mem::transmute(ptr) };
res.res.set(NinedofReading {
@@ -72,3 +80,8 @@
syscalls::command(DRIVER_NUM, 100, 0, 0)?;
Ok(())
}
+
+pub fn start_gyroscope_reading() -> TockResult<()> {
+ syscalls::command(DRIVER_NUM, 200, 0, 0)?;
+ Ok(())
+}
diff --git a/tock b/tock
index 9f40864..e8d0a28 160000
--- a/tock
+++ b/tock
@@ -1 +1 @@
-Subproject commit 9f408649ce25f46f0dd49dae7f1a0a9849cae2af
+Subproject commit e8d0a28d86897c91b6747be357abfcfa7e86688f