|
|
@@ -68,16 +68,16 @@ impl Packet {
|
|
68
|
68
|
true
|
|
69
|
69
|
}
|
|
70
|
70
|
Self::Report(report) => {
|
|
71
|
|
- // TODO
|
|
72
|
|
- false
|
|
|
71
|
+ data[0] = (report.count << 5) | 2;
|
|
|
72
|
+ report.encode(&mut data[1..])
|
|
73
|
73
|
}
|
|
74
|
74
|
Self::GetValues(get_values) => {
|
|
75
|
|
- // TODO
|
|
76
|
|
- false
|
|
|
75
|
+ data[0] = (get_values.count << 5) | 2;
|
|
|
76
|
+ get_values.encode(&mut data[1..])
|
|
77
|
77
|
}
|
|
78
|
78
|
Self::Values(values) => {
|
|
79
|
|
- // TODO
|
|
80
|
|
- false
|
|
|
79
|
+ data[0] = (values.count << 5) | 2;
|
|
|
80
|
+ values.encode(&mut data[1..])
|
|
81
|
81
|
}
|
|
82
|
82
|
}
|
|
83
|
83
|
}
|
|
|
@@ -100,6 +100,20 @@ impl Report {
|
|
100
|
100
|
}
|
|
101
|
101
|
Some(report)
|
|
102
|
102
|
}
|
|
|
103
|
+
|
|
|
104
|
+ fn encode(&self, mut data: &mut [u8]) -> bool {
|
|
|
105
|
+ for i in 0..self.count {
|
|
|
106
|
+ let value_len = self.values[i as usize].encoded_length();
|
|
|
107
|
+ if data.len() < value_len {
|
|
|
108
|
+ return false;
|
|
|
109
|
+ }
|
|
|
110
|
+ if !self.values[i as usize].encode(data) {
|
|
|
111
|
+ return false;
|
|
|
112
|
+ }
|
|
|
113
|
+ data = &mut data[value_len..];
|
|
|
114
|
+ }
|
|
|
115
|
+ false
|
|
|
116
|
+ }
|
|
103
|
117
|
}
|
|
104
|
118
|
|
|
105
|
119
|
#[derive(Debug, Clone)]
|
|
|
@@ -114,6 +128,11 @@ impl GetValues {
|
|
114
|
128
|
// TODO
|
|
115
|
129
|
None
|
|
116
|
130
|
}
|
|
|
131
|
+
|
|
|
132
|
+ fn encode(&self, mut _data: &[u8]) -> bool {
|
|
|
133
|
+ // TODO
|
|
|
134
|
+ false
|
|
|
135
|
+ }
|
|
117
|
136
|
}
|
|
118
|
137
|
|
|
119
|
138
|
#[derive(Debug, Clone)]
|
|
|
@@ -128,6 +147,11 @@ impl Values {
|
|
128
|
147
|
// TODO
|
|
129
|
148
|
None
|
|
130
|
149
|
}
|
|
|
150
|
+
|
|
|
151
|
+ fn encode(&self, mut _data: &[u8]) -> bool {
|
|
|
152
|
+ // TODO
|
|
|
153
|
+ false
|
|
|
154
|
+ }
|
|
131
|
155
|
}
|
|
132
|
156
|
|
|
133
|
157
|
#[derive(Debug, Clone, Copy)]
|
|
|
@@ -171,6 +195,39 @@ impl Value {
|
|
171
|
195
|
*data = &data[length..];
|
|
172
|
196
|
Some(result)
|
|
173
|
197
|
}
|
|
|
198
|
+
|
|
|
199
|
+ fn encode(&self, data: &mut [u8]) -> bool {
|
|
|
200
|
+ match self {
|
|
|
201
|
+ Self::Invalid => {}
|
|
|
202
|
+ Self::Time(time) => {
|
|
|
203
|
+ data[0] = 0;
|
|
|
204
|
+ data[1..9].copy_from_slice(&time.to_le_bytes());
|
|
|
205
|
+ }
|
|
|
206
|
+ Self::Temperature(temperature) => {
|
|
|
207
|
+ data[0] = 1;
|
|
|
208
|
+ data[1..3].copy_from_slice(&temperature.to_le_bytes());
|
|
|
209
|
+ }
|
|
|
210
|
+ Self::Pressure(pressure) => {
|
|
|
211
|
+ data[0] = 2;
|
|
|
212
|
+ data[1..5].copy_from_slice(&pressure.to_le_bytes());
|
|
|
213
|
+ }
|
|
|
214
|
+ Self::Humidity(humidity) => {
|
|
|
215
|
+ data[0] = 3;
|
|
|
216
|
+ data[1..3].copy_from_slice(&humidity.to_le_bytes());
|
|
|
217
|
+ }
|
|
|
218
|
+ };
|
|
|
219
|
+ true
|
|
|
220
|
+ }
|
|
|
221
|
+
|
|
|
222
|
+ fn encoded_length(&self) -> usize {
|
|
|
223
|
+ match self {
|
|
|
224
|
+ Self::Invalid => 0,
|
|
|
225
|
+ Self::Time(_) => 9,
|
|
|
226
|
+ Self::Temperature(_) => 3,
|
|
|
227
|
+ Self::Pressure(_) => 5,
|
|
|
228
|
+ Self::Humidity(_) => 3,
|
|
|
229
|
+ }
|
|
|
230
|
+ }
|
|
174
|
231
|
}
|
|
175
|
232
|
|
|
176
|
233
|
#[derive(Debug, Clone, Copy)]
|