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)]
7pub struct SetTearingEffect(TearingEffect);
8
9impl SetTearingEffect {
10    /// Construct a new SetTearingEffect DCS with the given value
11    pub fn new(tearing_effect: TearingEffect) -> Self {
12        SetTearingEffect(tearing_effect)
13    }
14}
15
16impl DcsCommand for SetTearingEffect {
17    fn instruction(&self) -> u8 {
18        match self.0 {
19            TearingEffect::Off => 0x34,
20            TearingEffect::Vertical => 0x35,
21            TearingEffect::HorizontalAndVertical => 0x35,
22        }
23    }
24
25    fn fill_params_buf(&self, buffer: &mut [u8]) -> usize {
26        match self.0 {
27            TearingEffect::Off => 0,
28            TearingEffect::Vertical => {
29                buffer[0] = 0x0;
30                1
31            }
32            TearingEffect::HorizontalAndVertical => {
33                buffer[0] = 0x1;
34                1
35            }
36        }
37    }
38}
39
40#[cfg(test)]
41mod tests {
42    use super::*;
43
44    #[test]
45    fn set_tearing_effect_both_fills_param_properly() {
46        let ste = SetTearingEffect(TearingEffect::HorizontalAndVertical);
47
48        let mut buffer = [0u8; 1];
49        assert_eq!(ste.instruction(), 0x35);
50        assert_eq!(ste.fill_params_buf(&mut buffer), 1);
51        assert_eq!(buffer, [0x1]);
52    }
53
54    #[test]
55    fn set_tearing_effect_off_fills_param_properly() {
56        let ste = SetTearingEffect(TearingEffect::Off);
57
58        let mut buffer = [0u8; 0];
59        assert_eq!(ste.instruction(), 0x34);
60        assert_eq!(ste.fill_params_buf(&mut buffer), 0);
61    }
62}