From 854efe3d0f93ba7c1c1078e5969d7cd2edc8a15f Mon Sep 17 00:00:00 2001 From: Sofia Date: Wed, 13 May 2026 17:44:32 +0300 Subject: [PATCH] Add TearingMode --- src/display.rs | 23 +++++++++++++++++++++++ src/main.rs | 2 ++ 2 files changed, 25 insertions(+) diff --git a/src/display.rs b/src/display.rs index 9cf4e02..85417d9 100644 --- a/src/display.rs +++ b/src/display.rs @@ -119,6 +119,8 @@ pub enum Command { PTLAR = 0x30, VSCRDEF = 0x33, ColorMode = 0x3A, + TearingOff = 0x34, + TearingOn = 0x35, MADCTL = 0x36, VSCSAD = 0x37, // MadCTLMY = 0x80, @@ -188,6 +190,12 @@ pub struct SetAddressMode { pub refresh_order: RefreshOrder, } +pub enum TearingMode { + Off, + Horizontal, + HorizontalAndVertical, +} + impl SetAddressMode { pub fn into_madctl(&self) -> u8 { let mut result = 0; @@ -296,6 +304,21 @@ impl<'d, DM: DriverMode, T: DelayNs> Display<'d, DM, T> { self.write(Writeable::Data(&[mode & 0x77])); } + pub fn set_tearing(&mut self, tearing: TearingMode) { + let cmd = match tearing { + TearingMode::Off => Command::TearingOff, + TearingMode::Horizontal => Command::TearingOn, + TearingMode::HorizontalAndVertical => Command::TearingOn, + }; + self.write(Writeable::Command(cmd)); + + match tearing { + TearingMode::Off => {} + TearingMode::Horizontal => self.write(Writeable::Data(&[0])), + TearingMode::HorizontalAndVertical => self.write(Writeable::Data(&[1])), + } + } + fn set_columns(&mut self, start: u16, end: u16) { let [start1, start2] = start.to_be_bytes(); let [end1, end2] = end.to_be_bytes(); diff --git a/src/main.rs b/src/main.rs index a7a116c..033e145 100644 --- a/src/main.rs +++ b/src/main.rs @@ -94,6 +94,8 @@ fn main() -> ! { color_order: display::ColorOrder::Bgr, ..Default::default() }); + display.set_tearing(display::TearingMode::Horizontal); + display.draw_rect( Position::new(0, 0), Position::new(32, 32),