lcd_async/dcs/
set_tearing_effect.rs1use crate::options::TearingEffect;
2
3use super::DcsCommand;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7pub struct SetTearingEffect(TearingEffect);
8
9impl SetTearingEffect {
10 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}