Skip to main content

lcd_async/dcs/
set_tearing_effect.rs

1use crate::options::TearingEffect;
2
3use super::DcsCommand;
4
5/// Set Tearing Effect
6#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7#[cfg_attr(feature = "defmt", derive(defmt::Format))]
8pub struct SetTearingEffect(TearingEffect);
9
10impl SetTearingEffect {
11    /// Construct a new SetTearingEffect DCS with the given value
12    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}