e_drone/protocol/
battle.rs1use crate::protocol::Serializable;
2use crate::communication::extractor::Extractor;
3use crate::protocol::light::{*};
4use crate::protocol::command::{*};
5
6
7#[derive(Debug, Copy, Clone)]
9pub struct IrMessage {
10 pub ir_message: u8,
11}
12
13
14impl IrMessage {
15 pub fn new() -> IrMessage{
16 IrMessage {
17 ir_message: 0,
18 }
19 }
20
21
22 pub const fn size() -> usize { 1 }
23
24
25 pub fn parse(slice_data: &[u8]) -> Result<IrMessage, &'static str> {
26 if slice_data.len() == IrMessage::size() {
27 let mut ext: Extractor = Extractor::from_slice(slice_data);
28 Ok(IrMessage{
29 ir_message: ext.get_u8(),
30 })
31 }
32 else { Err("Wrong length") }
33 }
34}
35
36
37impl Serializable for IrMessage {
38 fn to_vec(&self) -> Vec<u8> {
39 let mut vec_data : Vec<u8> = Vec::new();
40
41 vec_data.extend_from_slice(&self.ir_message.to_le_bytes());
42
43 vec_data
44 }
45}
46
47
48#[derive(Debug, Copy, Clone)]
50pub struct LightEventCommand {
51 pub event: Event,
52 pub color: Color,
53 pub command: Command,
54}
55
56
57impl LightEventCommand {
58 pub fn new() -> LightEventCommand{
59 LightEventCommand {
60 event: Event::new(),
61 color: Color::new(),
62 command: Command::new(),
63 }
64 }
65
66
67 pub const fn size() -> usize { 9 }
68
69
70 pub fn parse(slice_data: &[u8]) -> Result<LightEventCommand, &'static str> {
71 if slice_data.len() == LightEventCommand::size() {
72 let mut ext: Extractor = Extractor::from_slice(slice_data);
73 Ok( LightEventCommand{
74 event: Event {
75 event: ext.get_u8(),
76 interval: ext.get_u16(),
77 repeat: ext.get_u8(),
78 },
79 color: Color {
80 r: ext.get_u8(),
81 g: ext.get_u8(),
82 b: ext.get_u8(),
83 },
84 command: Command {
85 command_type: CommandType::None,
86 option: 0,
87 }
88 })
89 }
90 else { Err("Wrong length") }
91 }
92}
93
94
95impl Serializable for LightEventCommand {
96 fn to_vec(&self) -> Vec<u8> {
97 let mut vec_data : Vec<u8> = Vec::new();
98
99 vec_data.extend_from_slice(&self.event.event.to_le_bytes());
100 vec_data.extend_from_slice(&self.event.interval.to_le_bytes());
101 vec_data.extend_from_slice(&self.event.repeat.to_le_bytes());
102 vec_data.extend_from_slice(&self.color.r.to_le_bytes());
103 vec_data.extend_from_slice(&self.color.g.to_le_bytes());
104 vec_data.extend_from_slice(&self.color.b.to_le_bytes());
105 vec_data.push(self.command.command_type.into());
106 vec_data.extend_from_slice(&self.command.option.to_le_bytes());
107
108 vec_data
109 }
110}
111
112
113#[derive(Debug, Copy, Clone)]
115pub struct IrMessageLightEventCommand {
116 pub ir_message: u8,
117 pub event: Event,
118 pub color: Color,
119 pub command: Command,
120}
121
122
123impl IrMessageLightEventCommand {
124 pub fn new() -> IrMessageLightEventCommand{
125 IrMessageLightEventCommand {
126 ir_message: 0,
127 event: Event::new(),
128 color: Color::new(),
129 command: Command::new(),
130 }
131 }
132
133
134 pub const fn size() -> usize { 10 }
135
136
137 pub fn parse(slice_data: &[u8]) -> Result<IrMessageLightEventCommand, &'static str> {
138 if slice_data.len() == IrMessageLightEventCommand::size() {
139 let mut ext: Extractor = Extractor::from_slice(slice_data);
140 Ok( IrMessageLightEventCommand{
141 ir_message: ext.get_u8(),
142 event: Event {
143 event: ext.get_u8(),
144 interval: ext.get_u16(),
145 repeat: ext.get_u8(),
146 },
147 color: Color {
148 r: ext.get_u8(),
149 g: ext.get_u8(),
150 b: ext.get_u8(),
151 },
152 command: Command {
153 command_type: CommandType::None,
154 option: 0,
155 }
156 })
157 }
158 else { Err("Wrong length") }
159 }
160}
161
162
163impl Serializable for IrMessageLightEventCommand {
164 fn to_vec(&self) -> Vec<u8> {
165 let mut vec_data : Vec<u8> = Vec::new();
166
167 vec_data.extend_from_slice(&self.ir_message.to_le_bytes());
168 vec_data.extend_from_slice(&self.event.event.to_le_bytes());
169 vec_data.extend_from_slice(&self.event.interval.to_le_bytes());
170 vec_data.extend_from_slice(&self.event.repeat.to_le_bytes());
171 vec_data.extend_from_slice(&self.color.r.to_le_bytes());
172 vec_data.extend_from_slice(&self.color.g.to_le_bytes());
173 vec_data.extend_from_slice(&self.color.b.to_le_bytes());
174 vec_data.push(self.command.command_type.into());
175 vec_data.extend_from_slice(&self.command.option.to_le_bytes());
176
177 vec_data
178 }
179}
180
181