From d47c61830a3c975982b1c62048c304985e1cfefc Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Mon, 27 Nov 2017 04:30:39 +0100 Subject: [PATCH] blocking SPI API --- src/blocking/mod.rs | 3 +++ src/blocking/spi.rs | 16 ++++++++++++++++ src/lib.rs | 2 ++ 3 files changed, 21 insertions(+) create mode 100644 src/blocking/mod.rs create mode 100644 src/blocking/spi.rs diff --git a/src/blocking/mod.rs b/src/blocking/mod.rs new file mode 100644 index 000000000..16d090086 --- /dev/null +++ b/src/blocking/mod.rs @@ -0,0 +1,3 @@ +//! Blocking API + +pub mod spi; diff --git a/src/blocking/spi.rs b/src/blocking/spi.rs new file mode 100644 index 000000000..326b6f78c --- /dev/null +++ b/src/blocking/spi.rs @@ -0,0 +1,16 @@ +//! Blocking SPI API + +use Spi; + +/// Transfers bytes to the slave, returns the bytes received from the slave +pub fn transfer<'a, S>(spi: &mut S, bytes: &'a mut [u8]) -> Result<&'a [u8], S::Error> +where + S: Spi, +{ + for byte in bytes.iter_mut() { + block!(spi.send(*byte))?; + *byte = block!(spi.read())?; + } + + Ok(bytes) +} diff --git a/src/lib.rs b/src/lib.rs index 4e8644671..2ffd701c1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -609,8 +609,10 @@ #![feature(never_type)] #![no_std] +#[macro_use] extern crate nb; +pub mod blocking; pub mod prelude; pub mod serial;