lcd_async/dcs/
set_tearing_effect.rs1use crate::options::TearingEffect;
2
3use super::DcsCommand;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7#[cfg_attr(feature = "defmt", derive(defmt::Format))]
8pub struct SetTearingEffect(TearingEffect);
9
10impl SetTearingEffect {
11 pub fn new(tearing_effect: TearingEffect) -> Self {
13 SetTearingEffect(tearing_effect)
14 }
15}
16
17impl DcsCommand for SetTearingEffect {
18 fn instruction(&self) -> u8 {
19 match self.0 {
20 TearingEffect::Off => 0x34,
21 TearingEffect::Vertical => 0x35,
22 TearingEffect::HorizontalAndVertical => 0x35,
23 }
24 }
25
26 fn fill_params_buf(&self, buffer: &mut [u8]) -> usize {
27 match self.0 {
28 TearingEffect::Off => 0,
29 TearingEffect::Vertical => {
30 buffer[0] = 0x0;
31 1
32 }
33 TearingEffect::HorizontalAndVertical => {
34 buffer[0] = 0x1;
35 1
36 }
37 }
38 }
39}
40
41#[cfg(test)]
42mod tests {
43 use super::*;
44
45 #[test]
46 fn set_tearing_effect_both_fills_param_properly() {
47 let ste = SetTearingEffect(TearingEffect::HorizontalAndVertical);
48
49 let mut buffer = [0u8; 1];
50 assert_eq!(ste.instruction(), 0x35);
51 assert_eq!(ste.fill_params_buf(&mut buffer), 1);
52 assert_eq!(buffer, [0x1]);
53 }
54
55 #[test]
56 fn set_tearing_effect_off_fills_param_properly() {
57 let ste = SetTearingEffect(TearingEffect::Off);
58
59 let mut buffer = [0u8; 0];
60 assert_eq!(ste.instruction(), 0x34);
61 assert_eq!(ste.fill_params_buf(&mut buffer), 0);
62 }
63}