1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
//! A simple Driver for the [Waveshare](https://github.com/waveshare/e-Paper) E-Ink Displays via SPI //! //! - Built using [`embedded-hal`] traits. //! - Graphics support is added through [`embedded-graphics`] //! //! [`embedded-graphics`]: https://docs.rs/embedded-graphics/ //! [`embedded-hal`]: https://docs.rs/embedded-hal //! //! //! # Example //! //!```rust, no_run //!# use embedded_hal_mock::*; //!# fn main() -> Result<(), MockError> { //!use embedded_graphics::{ //! pixelcolor::BinaryColor::On as Black, prelude::*, primitives::Line, style::PrimitiveStyle, //!}; //!use epd_waveshare::{epd1in54::*, prelude::*}; //!# //!# let expectations = []; //!# let mut spi = spi::Mock::new(&expectations); //!# let expectations = []; //!# let cs_pin = pin::Mock::new(&expectations); //!# let busy_in = pin::Mock::new(&expectations); //!# let dc = pin::Mock::new(&expectations); //!# let rst = pin::Mock::new(&expectations); //!# let mut delay = delay::MockNoop::new(); //! //!// Setup EPD //!let mut epd = EPD1in54::new(&mut spi, cs_pin, busy_in, dc, rst, &mut delay)?; //! //!// Use display graphics from embedded-graphics //!let mut display = Display1in54::default(); //! //!// Use embedded graphics for drawing a line //!let _ = Line::new(Point::new(0, 120), Point::new(0, 295)) //! .into_styled(PrimitiveStyle::with_stroke(Black, 1)) //! .draw(&mut display); //! //! // Display updated frame //!epd.update_frame(&mut spi, &display.buffer())?; //!epd.display_frame(&mut spi)?; //! //!// Set the EPD to sleep //!epd.sleep(&mut spi)?; //!# Ok(()) //!# } //!``` //! //! # Other information and requirements //! //! - Buffersize: Wherever a buffer is used it always needs to be of the size: `width / 8 * length`, //! where width and length being either the full e-ink size or the partial update window size //! //! ### SPI //! //! MISO is not connected/available. SPI_MODE_0 is used (CPHL = 0, CPOL = 0) with 8 bits per word, MSB first. //! //! Maximum speed tested by myself was 8Mhz but more should be possible (Ben Krasnow used 18Mhz with his implemenation) //! #![no_std] #![deny(missing_docs)] #[cfg(feature = "graphics")] pub mod graphics; mod traits; pub mod color; /// Interface for the physical connection between display and the controlling device mod interface; pub mod epd1in54; pub mod epd1in54b; pub mod epd2in9; pub mod epd2in9bc; pub mod epd4in2; pub mod epd7in5; pub mod epd7in5_v2; pub(crate) mod type_a; /// Includes everything important besides the chosen Display pub mod prelude { pub use crate::color::{Color, TriColor}; pub use crate::traits::{RefreshLUT, WaveshareDisplay, WaveshareThreeColorDisplay}; pub use crate::SPI_MODE; #[cfg(feature = "graphics")] pub use crate::graphics::{Display, DisplayRotation}; } use embedded_hal::spi::{Mode, Phase, Polarity}; /// SPI mode - /// For more infos see [Requirements: SPI](index.html#spi) pub const SPI_MODE: Mode = Mode { phase: Phase::CaptureOnFirstTransition, polarity: Polarity::IdleLow, };