Merge pull request #9 from etrombly/hal_v2

update to hal v2 traits
This commit is contained in:
Wesley Moore 2020-03-10 20:12:54 +11:00 committed by GitHub
commit 9d8b68d78e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 48 additions and 26 deletions

View file

@ -18,23 +18,23 @@ travis-ci = { repository = "wezm/ssd1675" }
codecov = { repository = "wezm/ssd1675" } codecov = { repository = "wezm/ssd1675" }
[dependencies] [dependencies]
libm = "0.1.2" libm = "0.2.1"
[dependencies.embedded-hal] [dependencies.embedded-hal]
features = ["unproven"] features = ["unproven"]
version = "0.2.2" version = "0.2.3"
[dependencies.embedded-graphics] [dependencies.embedded-graphics]
optional = true optional = true
version = "0.4.4" version = "0.5.2"
[dependencies.linux-embedded-hal] [dependencies.linux-embedded-hal]
optional = true optional = true
version = "0.2.1" version = "0.3.0"
[dependencies.profont] [dependencies.profont]
optional = true optional = true
version = "0.1" version = "0.3.0"
[features] [features]
default = ["graphics"] default = ["graphics"]

16
src/error.rs Normal file
View file

@ -0,0 +1,16 @@
use core::fmt::{self, Debug};
use hal::digital::v2::OutputPin;
pub enum Error<GPIO: OutputPin> {
/// A GPIO could not be set.
Gpio(GPIO::Error),
}
impl<GPIO: OutputPin> Debug for Error<GPIO>
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Error::Gpio(_) => write!(f, "GPIO error"),
}
}
}

View file

@ -153,7 +153,7 @@ where
{ {
fn draw<T>(&mut self, item_pixels: T) fn draw<T>(&mut self, item_pixels: T)
where where
T: Iterator<Item = Pixel<Color>>, T: IntoIterator<Item = Pixel<Color>>,
{ {
for Pixel(UnsignedCoord(x, y), colour) in item_pixels { for Pixel(UnsignedCoord(x, y), colour) in item_pixels {
if outside_display( if outside_display(
@ -175,7 +175,7 @@ where
mod tests { mod tests {
use self::embedded_graphics::coord::Coord; use self::embedded_graphics::coord::Coord;
use self::embedded_graphics::prelude::*; use self::embedded_graphics::prelude::*;
use self::embedded_graphics::primitives::Rect; use self::embedded_graphics::primitives::Rectangle;
use self::embedded_graphics::Drawing; use self::embedded_graphics::Drawing;
use super::*; use super::*;
use {Builder, Color, Dimensions, Display, DisplayInterface, GraphicDisplay, Rotation}; use {Builder, Color, Dimensions, Display, DisplayInterface, GraphicDisplay, Rotation};
@ -279,8 +279,8 @@ mod tests {
GraphicDisplay::new(build_mock_display(), &mut black_buffer, &mut red_buffer); GraphicDisplay::new(build_mock_display(), &mut black_buffer, &mut red_buffer);
display.draw( display.draw(
Rect::new(Coord::new(0, 0), Coord::new(2, 2)) Rectangle::new(Coord::new(0, 0), Coord::new(2, 2))
.with_stroke(Some(Color::White)) .stroke(Some(Color::White))
.into_iter(), .into_iter(),
); );
} }
@ -306,8 +306,8 @@ mod tests {
GraphicDisplay::new(build_mock_display(), &mut black_buffer, &mut red_buffer); GraphicDisplay::new(build_mock_display(), &mut black_buffer, &mut red_buffer);
display.draw( display.draw(
Rect::new(Coord::new(0, 0), Coord::new(2, 2)) Rectangle::new(Coord::new(0, 0), Coord::new(2, 2))
.with_stroke(Some(Color::Red)) .stroke(Some(Color::Red))
.into_iter(), .into_iter(),
); );
} }

View file

@ -1,3 +1,4 @@
use crate::Error;
use hal; use hal;
// Section 15.2 of the HINK-E0213A07 data sheet says to hold for 10ms // Section 15.2 of the HINK-E0213A07 data sheet says to hold for 10ms
@ -96,10 +97,10 @@ pub struct Interface<SPI, CS, BUSY, DC, RESET> {
impl<SPI, CS, BUSY, DC, RESET> Interface<SPI, CS, BUSY, DC, RESET> impl<SPI, CS, BUSY, DC, RESET> Interface<SPI, CS, BUSY, DC, RESET>
where where
SPI: hal::blocking::spi::Write<u8>, SPI: hal::blocking::spi::Write<u8>,
CS: hal::digital::OutputPin, CS: hal::digital::v2::OutputPin,
BUSY: hal::digital::InputPin, BUSY: hal::digital::v2::InputPin,
DC: hal::digital::OutputPin, DC: hal::digital::v2::OutputPin,
RESET: hal::digital::OutputPin, RESET: hal::digital::v2::OutputPin,
{ {
/// Create a new Interface from embedded hal traits. /// Create a new Interface from embedded hal traits.
pub fn new(spi: SPI, cs: CS, busy: BUSY, dc: DC, reset: RESET) -> Self { pub fn new(spi: SPI, cs: CS, busy: BUSY, dc: DC, reset: RESET) -> Self {
@ -136,34 +137,37 @@ where
impl<SPI, CS, BUSY, DC, RESET> DisplayInterface for Interface<SPI, CS, BUSY, DC, RESET> impl<SPI, CS, BUSY, DC, RESET> DisplayInterface for Interface<SPI, CS, BUSY, DC, RESET>
where where
SPI: hal::blocking::spi::Write<u8>, SPI: hal::blocking::spi::Write<u8>,
CS: hal::digital::OutputPin, CS: hal::digital::v2::OutputPin,
BUSY: hal::digital::InputPin, BUSY: hal::digital::v2::InputPin,
DC: hal::digital::OutputPin, DC: hal::digital::v2::OutputPin,
RESET: hal::digital::OutputPin, RESET: hal::digital::v2::OutputPin,
{ {
type Error = SPI::Error; type Error = SPI::Error;
fn reset<D: hal::blocking::delay::DelayMs<u8>>(&mut self, delay: &mut D) { fn reset<D: hal::blocking::delay::DelayMs<u8>>(&mut self, delay: &mut D){
self.reset.set_low(); self.reset.set_low().map_err::<Error<RESET>, _>(Error::Gpio).unwrap();
delay.delay_ms(RESET_DELAY_MS); delay.delay_ms(RESET_DELAY_MS);
self.reset.set_high(); self.reset.set_high().map_err::<Error<RESET>, _>(Error::Gpio).unwrap();
delay.delay_ms(RESET_DELAY_MS); delay.delay_ms(RESET_DELAY_MS);
} }
fn send_command(&mut self, command: u8) -> Result<(), Self::Error> { fn send_command(&mut self, command: u8) -> Result<(), Self::Error> {
self.dc.set_low(); self.dc.set_low().map_err::<Error<DC>, _>(Error::Gpio).unwrap();
self.write(&[command])?; self.write(&[command])?;
self.dc.set_high(); self.dc.set_high().map_err::<Error<DC>, _>(Error::Gpio).unwrap();
Ok(()) Ok(())
} }
fn send_data(&mut self, data: &[u8]) -> Result<(), Self::Error> { fn send_data(&mut self, data: &[u8]) -> Result<(), Self::Error> {
self.dc.set_high(); self.dc.set_high().map_err::<Error<DC>, _>(Error::Gpio).unwrap();
self.write(data) self.write(data)
} }
fn busy_wait(&self) { fn busy_wait(&self) {
while self.busy.is_high() {} while match self.busy.is_high() {
Ok(x) => x,
_ => false,
} {}
} }
} }

View file

@ -47,12 +47,14 @@ mod color;
pub mod command; pub mod command;
pub mod config; pub mod config;
pub mod display; pub mod display;
pub mod error;
pub mod graphics; pub mod graphics;
pub mod interface; pub mod interface;
pub use color::Color; pub use color::Color;
pub use config::Builder; pub use config::Builder;
pub use display::{Dimensions, Display, Rotation}; pub use display::{Dimensions, Display, Rotation};
pub use error::Error;
pub use graphics::GraphicDisplay; pub use graphics::GraphicDisplay;
pub use interface::DisplayInterface; pub use interface::DisplayInterface;
pub use interface::Interface; pub use interface::Interface;