use hal;
use hal::digital::OutputPin;
use super::DisplayInterface;
pub struct SpiInterface<SPI, DC> {
spi: SPI,
dc: DC,
}
impl<SPI, DC> SpiInterface<SPI, DC>
where
SPI: hal::blocking::spi::Write<u8>,
DC: OutputPin,
{
pub fn new(spi: SPI, dc: DC) -> Self {
Self { spi, dc }
}
}
impl<SPI, DC> DisplayInterface for SpiInterface<SPI, DC>
where
SPI: hal::blocking::spi::Write<u8>,
DC: OutputPin,
{
fn send_commands(&mut self, cmds: &[u8]) -> Result<(), ()> {
self.dc.set_low();
self.spi.write(&cmds).map_err(|_| ())?;
self.dc.set_high();
Ok(())
}
fn send_data(&mut self, buf: &[u8]) -> Result<(), ()> {
self.dc.set_high();
self.spi.write(&buf).map_err(|_| ())?;
Ok(())
}
}