Fix display init

This commit is contained in:
Zac Wilson 2025-12-21 13:41:08 +00:00
parent daed5c2093
commit 9d4d395a08

View file

@ -75,7 +75,7 @@ pub struct DoubleFrame<PartialWindow> {
}
/// The colour of a given pixel.
///
///
/// Since the GDEQ031T10 is pure black-and-white (no greyscale), this is just a two-state enum.S
pub enum PixelColour {
Black = 0,
@ -83,7 +83,7 @@ pub enum PixelColour {
}
/// A trait for partial window strategies for use with [DoubleFrame].
///
///
/// This trait is sealed, so the only strategies available are [NoPartialWindow]
/// and [AutomaticPartialWindow].
pub trait ApplyPartialWindow: private::Sealed {
@ -100,7 +100,7 @@ pub trait ApplyPartialWindow: private::Sealed {
);
/// Add a new bounding box which must be covered by the partial window.
///
///
/// Calls to this method accumulate, meaning all bounding boxes will be covered by the
/// partial window until [ApplyPartialWindow::reset_partial_window] is called.
fn update_partial_window(&mut self, min_x: u16, max_x: u16, min_y: u16, max_y: u16);
@ -172,14 +172,14 @@ impl ApplyPartialWindow for AutomaticPartialWindow {
display.write_data((vred & 0xFF) as u8);
display.write_data(0x00);
}
fn update_partial_window(&mut self, min_x: u16, max_x: u16, min_y: u16, max_y: u16) {
self.min_x = core::cmp::min(self.min_x, min_x);
self.max_x = core::cmp::max(self.max_x, max_x);
self.min_y = core::cmp::min(self.min_y, min_y);
self.max_y = core::cmp::max(self.max_y, max_y);
}
fn reset_partial_window(&mut self) {
*self = AutomaticPartialWindow {
min_x: EPD_WIDTH as u16,
@ -292,12 +292,30 @@ impl<BusyPin: InputPin, ResetPin: OutputPin, DcPin: OutputPin, Spi: SpiDevice, D
self.reset.set_high().map_err(InitError::ResetError)?;
self.delay.delay_ms(10);
self.write_command(0x00).map_err(InitError::WriteError)?;
self.write_data(0x1e).map_err(InitError::WriteError)?;
self.write_data(0x0d).map_err(InitError::WriteError)?;
self.delay.delay_ms(1);
self.write_command(0x00).map_err(InitError::WriteError)?;
self.write_data(0x1f).map_err(InitError::WriteError)?;
self.write_data(0x0d).map_err(InitError::WriteError)?;
self.wait_for_display();
self.write_command(0xE0).map_err(InitError::WriteError)?;
self.write_data(0x02).map_err(InitError::WriteError)?;
self.write_command(0xE5).map_err(InitError::WriteError)?;
self.write_data(0x5A).map_err(InitError::WriteError)?;
self.write_command(0x50).map_err(InitError::WriteError)?;
self.write_data(0x97).map_err(InitError::WriteError)?;
self.write_command(0x04).map_err(InitError::WriteError)?;
self.wait_for_display();
self.write_command(0x12).map_err(InitError::WriteError)?;
self.wait_for_display();
Ok(())
}