From 6c157f65f66ac590d33e7743f88c327daef5c8a0 Mon Sep 17 00:00:00 2001 From: Luke Else Date: Mon, 13 Nov 2023 13:59:22 +0000 Subject: [PATCH] Created generic display module --- Cargo.toml | 1 + src/display/mod.rs | 32 ++++++++++++++++++++++++++++++++ src/main.rs | 5 ----- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 4afb7c1..ac0c17b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,6 +37,7 @@ nmea-parser = "0.10.0" embedded-graphics = "0.8.0" ssd1306 = "0.8.0" display-interface = "0.4.1" +display-interface-i2c = "0.4.0" [build-dependencies] embuild = "0.31.2" diff --git a/src/display/mod.rs b/src/display/mod.rs index 2a5de70..6593ad2 100644 --- a/src/display/mod.rs +++ b/src/display/mod.rs @@ -1,3 +1,5 @@ +use crate::error::Error; + use embedded_graphics::{ prelude::*, mono_font::{ascii::FONT_7X13, ascii::FONT_10X20, MonoTextStyle}, @@ -5,6 +7,17 @@ use embedded_graphics::{ text::{Text, Alignment}, }; +use esp_idf_hal::{ + self, + prelude::Peripherals, + units::Hertz, + i2c::{I2cConfig, I2cDriver, I2c} +}; + +use ssd1306::{prelude::*, I2CDisplayInterface, Ssd1306}; + +use display_interface_i2c; + /// Enum to make clear the stage of failure of the display #[derive(Debug)] @@ -12,4 +25,23 @@ pub enum DisplayError { SetupError(display_interface::DisplayError), DrawingError, FlushError, +} + +pub struct Display<'a, SIZE: DisplaySize> { + display: Ssd1306>, SIZE, ssd1306::mode::BufferedGraphicsMode> +} + +impl<'a, SIZE: DisplaySize> Display<'a, SIZE> +{ + pub fn new(i2c: I2cDriver<'a>, size: SIZE) -> Result, Error> { + // Construct the I2C driver into a display interface + let interface = I2CDisplayInterface::new(i2c); + + // Construct display with new anew driver + let mut display = Ssd1306::new(interface, size, DisplayRotation::Rotate0) + .into_buffered_graphics_mode(); + display.init().map_err(|err| Error::DisplayError(DisplayError::SetupError(err)))?; + + Ok(Display{display}) + } } \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 8b3d179..1d6cb6e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -49,11 +49,6 @@ fn main() -> Result<(), Error> { &config ).map_err(|err| Error::EspError(err))?; - let interface = I2CDisplayInterface::new(i2c); - let mut display = Ssd1306::new(interface, DisplaySize128x64, DisplayRotation::Rotate0) - .into_buffered_graphics_mode(); - display.init().map_err(|err| Error::DisplayError(DisplayError::SetupError(err)))?; - let mut app_state = appstate::AppState::default(); let mut latest_data = gpsdata::GpsData::default();