From 6b1a461e11fc409de7d14449e102deed7b5da116 Mon Sep 17 00:00:00 2001 From: Luke Else Date: Tue, 14 Nov 2023 09:14:06 +0000 Subject: [PATCH] Chore: Cleaned up code --- src/display/mod.rs | 67 ++++++++++++++++++++++------------------------ src/main.rs | 12 ++++----- 2 files changed, 38 insertions(+), 41 deletions(-) diff --git a/src/display/mod.rs b/src/display/mod.rs index aac968e..f9c2817 100644 --- a/src/display/mod.rs +++ b/src/display/mod.rs @@ -1,25 +1,21 @@ use crate::error::Error; +use display_interface_i2c::I2CInterface; + use embedded_graphics::{ - prelude::*, - mono_font::{ascii::FONT_7X13, ascii::FONT_10X20, MonoTextStyle}, + mono_font::{ascii::FONT_10X20, MonoTextStyle}, pixelcolor::BinaryColor, - text::{Text, Alignment}, + prelude::*, + text::{Alignment, Text}, }; -use esp_idf_hal::{ - self, - prelude::Peripherals, - units::Hertz, - i2c::{I2cConfig, I2cDriver, I2c} +use esp_idf_hal::i2c::I2cDriver; + +use ssd1306::{ + prelude::*, rotation::DisplayRotation, size::DisplaySize, I2CDisplayInterface, Ssd1306, }; -use ssd1306::{prelude::*, I2CDisplayInterface, Ssd1306}; - -use display_interface_i2c; - - -/// Enum to make clear the stage of failure of the display +// clear the stage of failure of the display #[derive(Debug)] pub enum DisplayError { SetupError(display_interface::DisplayError), @@ -28,45 +24,46 @@ pub enum DisplayError { } pub struct Display<'a, SIZE: DisplaySize> { - display: Ssd1306>, SIZE, ssd1306::mode::BufferedGraphicsMode> + display: Ssd1306>, SIZE, ssd1306::mode::BufferedGraphicsMode>, } -impl<'a, SIZE: DisplaySize> Display<'a, SIZE> -{ +impl<'a, SIZE: DisplaySize> Display<'a, SIZE> { /// Function to create a new display interface abstraction - pub fn new(i2c: I2cDriver<'a>, size: SIZE, rotation: DisplayRotation) -> Result, Error> { + pub fn new( + i2c: I2cDriver<'a>, + size: SIZE, + rotation: DisplayRotation, + ) -> 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, rotation) - .into_buffered_graphics_mode(); - display.init().map_err(|err| Error::DisplayError(DisplayError::SetupError(err)))?; + let mut display = Ssd1306::new(interface, size, rotation).into_buffered_graphics_mode(); + display + .init() + .map_err(|err| Error::DisplayError(DisplayError::SetupError(err)))?; - Ok(Display{display}) + Ok(Display { display }) } /// Function to draw a given set of text to a display pub fn draw(&mut self, text: &str) -> Result<(), Error> { // Clear display ready for next write let style = MonoTextStyle::new(&FONT_10X20, BinaryColor::On); - self.display.clear(BinaryColor::Off) - .map_err(|_| Error::DisplayError(DisplayError::DrawingError))?; + self.display + .clear(BinaryColor::Off) + .map_err(|_| Error::DisplayError(DisplayError::DrawingError))?; // Draw text to Display - Text::with_alignment( - text, - Point::new(64, 20), - style, - Alignment::Center, - ) - .draw(&mut self.display) - .map_err(|_| Error::DisplayError(DisplayError::DrawingError))?; + Text::with_alignment(text, Point::new(64, 20), style, Alignment::Center) + .draw(&mut self.display) + .map_err(|_| Error::DisplayError(DisplayError::DrawingError))?; //Flush data to the display - self.display.flush() - .map_err(|_| Error::DisplayError(DisplayError::FlushError))?; + self.display + .flush() + .map_err(|_| Error::DisplayError(DisplayError::FlushError))?; Ok(()) } -} \ No newline at end of file +} diff --git a/src/main.rs b/src/main.rs index e22ff1c..d356f7a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,10 +14,10 @@ use error::Error; mod appstate; mod gps; -use gps::{gpsdata, GPS}; +use gps::GPS; mod display; -use display::{Display, DisplayError}; +use display::Display; use ssd1306::prelude::*; fn main() -> Result<(), Error> { @@ -42,19 +42,19 @@ fn main() -> Result<(), Error> { let i2c = I2cDriver::new(peripherals.i2c0, sda, scl, &config).map_err(|err| Error::EspError(err))?; + // Prepare components for processing let mut gps: GPS = GPS::new(peripherals.uart0, gps_rx)?; let mut display: Display = Display::new(i2c, DisplaySize128x64, DisplayRotation::Rotate0)?; - let mut app_state = appstate::AppState::default(); + let mut _app_state = appstate::AppState::default(); loop { - let text: &str; - // Get the latest data from GPS module and flush to Display match gps.poll() { Ok(res) => display.draw(&res.get_speed().as_str())?, Err(e) => { - display.draw("NO\nGPS\nDATA"); + display.draw("NO\nGPS\nDATA")?; + eprintln!("{:?}", e); } } }