use embedded_hal::blocking::spi::{Transfer, Write};
use embedded_hal::spi::FullDuplex;
use nb;
use super::{Error, Result, Spi};
impl Transfer<u8> for Spi {
type Error = Error;
fn transfer<'a>(&mut self, buffer: &'a mut [u8]) -> Result<&'a [u8]> {
let write_buffer = buffer.to_vec();
Spi::transfer(self, buffer, &write_buffer)?;
Ok(buffer)
}
}
impl Write<u8> for Spi {
type Error = Error;
fn write(&mut self, buffer: &[u8]) -> Result<()> {
Spi::write(self, buffer)?;
Ok(())
}
}
impl FullDuplex<u8> for Spi {
type Error = Error;
fn read(&mut self) -> nb::Result<u8, Self::Error> {
Ok(self.last_read)
}
fn send(&mut self, byte: u8) -> nb::Result<(), Self::Error> {
let mut read_buffer: [u8; 1] = [0];
Spi::transfer(self, &mut read_buffer, &[byte])?;
self.last_read = read_buffer[0];
Ok(())
}
}