1use crate::prelude::*;
5
6#[cfg(feature="tofcontrol")]
7use tof_control::helper::rb_type::{
8 RBMag,
9 RBTemp,
10 RBPh,
11 RBVcp
12};
13
14#[derive(Debug, Copy, Clone, PartialEq)]
20#[cfg_attr(feature="pybindings", pyclass)]
21pub struct RBMoniData {
22 pub board_id : u8,
23 pub rate : u16,
24 pub tmp_drs : f32,
25 pub tmp_clk : f32,
26 pub tmp_adc : f32,
27 pub tmp_zynq : f32,
28 pub tmp_lis3mdltr : f32,
29 pub tmp_bm280 : f32,
30 pub pressure : f32,
31 pub humidity : f32,
32 pub mag_x : f32,
33 pub mag_y : f32,
34 pub mag_z : f32,
35 pub lost_event_ids : f32,
36 pub drs_dvdd_voltage : f32,
37 pub drs_dvdd_current : f32,
38 pub drs_dvdd_power : f32,
39 pub p3v3_voltage : f32,
40 pub p3v3_current : f32,
41 pub p3v3_power : f32,
42 pub zynq_voltage : f32,
43 pub zynq_current : f32,
44 pub zynq_power : f32,
45 pub p3v5_voltage : f32,
46 pub p3v5_current : f32,
47 pub p3v5_power : f32,
48 pub adc_dvdd_voltage : f32,
49 pub adc_dvdd_current : f32,
50 pub adc_dvdd_power : f32,
51 pub adc_avdd_voltage : f32,
52 pub adc_avdd_current : f32,
53 pub adc_avdd_power : f32,
54 pub drs_avdd_voltage : f32,
55 pub drs_avdd_current : f32,
56 pub drs_avdd_power : f32,
57 pub n1v5_voltage : f32,
58 pub n1v5_current : f32,
59 pub n1v5_power : f32,
60 pub timestamp : u64
64}
65
66impl RBMoniData {
67
68 pub fn new() -> Self {
69 Self {
70 board_id : 0,
71 rate : 0,
72 tmp_drs : f32::MAX,
73 tmp_clk : f32::MAX,
74 tmp_adc : f32::MAX,
75 tmp_zynq : f32::MAX,
76 tmp_lis3mdltr : f32::MAX,
77 tmp_bm280 : f32::MAX,
78 pressure : f32::MAX,
79 humidity : f32::MAX,
80 mag_x : f32::MAX,
81 mag_y : f32::MAX,
82 mag_z : f32::MAX,
83 lost_event_ids : f32::MAX,
84 drs_dvdd_voltage : f32::MAX,
85 drs_dvdd_current : f32::MAX,
86 drs_dvdd_power : f32::MAX,
87 p3v3_voltage : f32::MAX,
88 p3v3_current : f32::MAX,
89 p3v3_power : f32::MAX,
90 zynq_voltage : f32::MAX,
91 zynq_current : f32::MAX,
92 zynq_power : f32::MAX,
93 p3v5_voltage : f32::MAX,
94 p3v5_current : f32::MAX,
95 p3v5_power : f32::MAX,
96 adc_dvdd_voltage : f32::MAX,
97 adc_dvdd_current : f32::MAX,
98 adc_dvdd_power : f32::MAX,
99 adc_avdd_voltage : f32::MAX,
100 adc_avdd_current : f32::MAX,
101 adc_avdd_power : f32::MAX,
102 drs_avdd_voltage : f32::MAX,
103 drs_avdd_current : f32::MAX,
104 drs_avdd_power : f32::MAX,
105 n1v5_voltage : f32::MAX,
106 n1v5_current : f32::MAX,
107 n1v5_power : f32::MAX,
108 timestamp : 0,
109 }
110 }
111
112 #[cfg(feature = "tofcontrol")]
113 pub fn add_rbvcp(&mut self, rb_vcp : &RBVcp) {
114 self.drs_dvdd_voltage = rb_vcp.drs_dvdd_vcp[0] ;
115 self.drs_dvdd_current = rb_vcp.drs_dvdd_vcp[1] ;
116 self.drs_dvdd_power = rb_vcp.drs_dvdd_vcp[2] ;
117 self.p3v3_voltage = rb_vcp.p3v3_vcp[0] ;
118 self.p3v3_current = rb_vcp.p3v3_vcp[1] ;
119 self.p3v3_power = rb_vcp.p3v3_vcp[2] ;
120 self.zynq_voltage = rb_vcp.zynq_vcp[0] ;
121 self.zynq_current = rb_vcp.zynq_vcp[1] ;
122 self.zynq_power = rb_vcp.zynq_vcp[2] ;
123 self.p3v5_voltage = rb_vcp.p3v5_vcp[0] ;
124 self.p3v5_current = rb_vcp.p3v5_vcp[1] ;
125 self.p3v5_power = rb_vcp.p3v5_vcp[2] ;
126 self.adc_dvdd_voltage = rb_vcp.adc_dvdd_vcp[0] ;
127 self.adc_dvdd_current = rb_vcp.adc_dvdd_vcp[1] ;
128 self.adc_dvdd_power = rb_vcp.adc_dvdd_vcp[2] ;
129 self.adc_avdd_voltage = rb_vcp.adc_avdd_vcp[0] ;
130 self.adc_avdd_current = rb_vcp.adc_avdd_vcp[1] ;
131 self.adc_avdd_power = rb_vcp.adc_avdd_vcp[2] ;
132 self.drs_avdd_voltage = rb_vcp.drs_avdd_vcp[0] ;
133 self.drs_avdd_current = rb_vcp.drs_avdd_vcp[1] ;
134 self.drs_avdd_power = rb_vcp.drs_avdd_vcp[2] ;
135 self.n1v5_voltage = rb_vcp.n1v5_vcp[0] ;
136 self.n1v5_current = rb_vcp.n1v5_vcp[1] ;
137 self.n1v5_power = rb_vcp.n1v5_vcp[2] ;
138 }
139
140 #[cfg(feature = "tofcontrol")]
141 pub fn add_rbph(&mut self, rb_ph : &RBPh) {
142 self.pressure = rb_ph.pressure;
143 self.humidity = rb_ph.humidity;
144 }
145 #[cfg(feature = "tofcontrol")]
146 pub fn add_rbtemp(&mut self, rb_temp : &RBTemp) {
147 self.tmp_drs = rb_temp.drs_temp ;
148 self.tmp_clk = rb_temp.clk_temp ;
149 self.tmp_adc = rb_temp.adc_temp ;
150 self.tmp_zynq = rb_temp.zynq_temp ;
151 self.tmp_lis3mdltr = rb_temp.lis3mdltr_temp;
152 self.tmp_bm280 = rb_temp.bme280_temp ;
153 }
154
155 #[cfg(feature = "tofcontrol")]
156 pub fn add_rbmag(&mut self, rb_mag : &RBMag) {
157 self.mag_x = rb_mag.mag_xyz[0];
158 self.mag_y = rb_mag.mag_xyz[1];
159 self.mag_z = rb_mag.mag_xyz[2];
160 }
161
162 pub fn get_mag_tot(&self) -> f32 {
163 (self.mag_x.powi(2) + self.mag_y.powi(2) + self.mag_z.powi(2)).sqrt()
164 }
165
166 pub fn get_lost_event_ids_over_rate(&self) -> f32 {
169 if self.rate == 0 {
170 return 0.0
171 }
172 100.0*self.lost_event_ids / self.rate as f32
173 }
174}
175
176impl Default for RBMoniData {
177 fn default() -> Self {
178 Self::new()
179 }
180}
181
182impl fmt::Display for RBMoniData {
183 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
184 write!(f, "<RBMoniData:
185 BOARD ID {}
186 RATE {} [Hz]
187 LOST EV IDS {:.3} [%/Rate]
188 ** Temperatures **
189 DRS TMP {:.3} [\u{00B0}C]
190 CLK TMP {:.3} [\u{00B0}C]
191 ADC TMP {:.3} [\u{00B0}C]
192 ZYNQ TMP {:.3} [\u{00B0}C]
193 LIS3MDLTR TMP {:.3} [\u{00B0}C]
194 BM280 TMP {:.3} [\u{00B0}C]
195 ** Ambience **
196 PRESSURE {:.3} [hPa]
197 HUMIDITY {:.3} [%]
198 MAG_X , MAG_Y, MAG_Z, MAG_TOT:
199 |-> {:.3} [G] | {:.3} [G] | {:.3} [G] | {:.3} [G]
200 ** Power **
201 ZYNQ 3.3V Power: {:.3} [V] | {:.3} [A] | {:.3} [W]
202 3.3V Power: {:.3} [V] | {:.3} [A] | {:.3} [W]
203 3.5V Power: {:.3} [V] | {:.3} [A] | {:.3} [W]
204 -1.5V Power: {:.3} [V] | {:.3} [A] | {:.3} [W]
205 DRS4 Digital 2.5V Power: {:.3} [V] | {:.3} [A] | {:.3} [W]
206 DRS4 Analog 2.5V Power: {:.3} [V] | {:.3} [A] | {:.3} [W]
207 ADC Digital 2.5V Power: {:.3} [V] | {:.3} [A] | {:.3} [W]
208 ADC Analog 3.0V Power: {:.3} [V] | {:.3} [A] | {:.3} [W]>",
209 self.board_id ,
210 self.rate ,
211 self.get_lost_event_ids_over_rate(),
212 self.tmp_drs ,
213 self.tmp_clk ,
214 self.tmp_adc ,
215 self.tmp_zynq ,
216 self.tmp_lis3mdltr ,
217 self.tmp_bm280 ,
218 self.pressure ,
219 self.humidity ,
220 self.mag_x ,
221 self.mag_y ,
222 self.mag_z ,
223 self.get_mag_tot() ,
224 self.zynq_voltage ,
225 self.zynq_current ,
226 self.zynq_power ,
227 self.p3v3_voltage ,
228 self.p3v3_current ,
229 self.p3v3_power ,
230 self.p3v5_voltage ,
231 self.p3v5_current ,
232 self.p3v5_power ,
233 self.n1v5_voltage ,
234 self.n1v5_current ,
235 self.n1v5_power ,
236 self.drs_dvdd_voltage,
237 self.drs_dvdd_current,
238 self.drs_dvdd_power ,
239 self.drs_avdd_voltage,
240 self.drs_avdd_current,
241 self.drs_avdd_power ,
242 self.adc_dvdd_voltage,
243 self.adc_dvdd_current,
244 self.adc_dvdd_power ,
245 self.adc_avdd_voltage,
246 self.adc_avdd_current,
247 self.adc_avdd_power )
248 }
249}
250
251impl MoniData for RBMoniData {
252
253 fn get_timestamp(&self) -> u64 {
254 self.timestamp
255 }
256
257 fn set_timestamp(&mut self, ts : u64) {
258 self.timestamp = ts
259 }
260
261 fn get_board_id(&self) -> u8 {
262 self.board_id
263 }
264
265 fn get(&self, varname : &str) -> Option<f32> {
267 match varname {
268 "board_id" => Some(self.board_id as f32),
269 "rate" => Some(self.rate as f32 ),
270 "tmp_drs" => Some(self.tmp_drs ),
271 "tmp_clk" => Some(self.tmp_clk ),
272 "tmp_adc" => Some(self.tmp_adc ),
273 "tmp_zynq" => Some(self.tmp_zynq ),
274 "tmp_lis3mdltr" => Some(self.tmp_lis3mdltr ),
275 "tmp_bm280" => Some(self.tmp_bm280 ),
276 "pressure" => Some(self.pressure ),
277 "humidity" => Some(self.humidity ),
278 "mag_x" => Some(self.mag_x ),
279 "mag_y" => Some(self.mag_y ),
280 "mag_z" => Some(self.mag_z ),
281 "mag_tot" => Some(self.get_mag_tot() ),
282 "drs_dvdd_voltage" => Some(self.drs_dvdd_voltage ),
283 "drs_dvdd_current" => Some(self.drs_dvdd_current ),
284 "drs_dvdd_power" => Some(self.drs_dvdd_power ),
285 "p3v3_voltage" => Some(self.p3v3_voltage ),
286 "p3v3_current" => Some(self.p3v3_current ),
287 "p3v3_power" => Some(self.p3v3_power ),
288 "zynq_voltage" => Some(self.zynq_voltage ),
289 "zynq_current" => Some(self.zynq_current ),
290 "zynq_power" => Some(self.zynq_power ),
291 "p3v5_voltage" => Some(self.p3v5_voltage ),
292 "p3v5_current" => Some(self.p3v5_current ),
293 "p3v5_power" => Some(self.p3v5_power ),
294 "adc_dvdd_voltage" => Some(self.adc_dvdd_voltage ),
295 "adc_dvdd_current" => Some(self.adc_dvdd_current ),
296 "adc_dvdd_power" => Some(self.adc_dvdd_power ),
297 "adc_avdd_voltage" => Some(self.adc_avdd_voltage ),
298 "adc_avdd_current" => Some(self.adc_avdd_current ),
299 "adc_avdd_power" => Some(self.adc_avdd_power ),
300 "drs_avdd_voltage" => Some(self.drs_avdd_voltage ),
301 "drs_avdd_current" => Some(self.drs_avdd_current ),
302 "drs_avdd_power" => Some(self.drs_avdd_power ),
303 "n1v5_voltage" => Some(self.n1v5_voltage ),
304 "n1v5_current" => Some(self.n1v5_current ),
305 "n1v5_power" => Some(self.n1v5_power ),
306 "timestamp" => Some(self.timestamp as f32),
307 _ => None
308 }
309 }
310
311 fn keys() -> Vec<&'static str> {
313 vec![
314 "board_id" ,
315 "rate" ,
316 "tmp_drs" ,
317 "tmp_clk" ,
318 "tmp_adc" ,
319 "tmp_zynq" ,
320 "tmp_lis3mdltr" ,
321 "tmp_bm280" ,
322 "pressure" ,
323 "humidity" ,
324 "mag_x" ,
325 "mag_y" ,
326 "mag_z" ,
327 "drs_dvdd_voltage",
328 "drs_dvdd_current",
329 "drs_dvdd_power" ,
330 "p3v3_voltage" ,
331 "p3v3_current" ,
332 "p3v3_power" ,
333 "zynq_voltage" ,
334 "zynq_current" ,
335 "zynq_power" ,
336 "p3v5_voltage" ,
337 "p3v5_current" ,
338 "p3v5_power" ,
339 "adc_dvdd_voltage",
340 "adc_dvdd_current",
341 "adc_dvdd_power" ,
342 "adc_avdd_voltage",
343 "adc_avdd_current",
344 "adc_avdd_power" ,
345 "drs_avdd_voltage",
346 "drs_avdd_current",
347 "drs_avdd_power" ,
348 "n1v5_voltage" ,
349 "n1v5_current" ,
350 "timestamp" ,
351 "n1v5_power" ]
352 }
353}
354
355impl TofPackable for RBMoniData {
356 const TOF_PACKET_TYPE : TofPacketType = TofPacketType::RBMoniData;
357}
358
359impl Serialization for RBMoniData {
360
361 const HEAD : u16 = 0xAAAA;
362 const TAIL : u16 = 0x5555;
363 const SIZE : usize = 7 + (36*4) ;
368
369 fn to_bytestream(&self) -> Vec<u8> {
370 let mut stream = Vec::<u8>::with_capacity(Self::SIZE);
371 stream.extend_from_slice(&Self::HEAD.to_le_bytes());
372 stream.extend_from_slice(&self.board_id .to_le_bytes());
373 stream.extend_from_slice(&self.rate .to_le_bytes());
374 stream.extend_from_slice(&self.tmp_drs .to_le_bytes());
375 stream.extend_from_slice(&self.tmp_clk .to_le_bytes());
376 stream.extend_from_slice(&self.tmp_adc .to_le_bytes());
377 stream.extend_from_slice(&self.tmp_zynq .to_le_bytes());
378 stream.extend_from_slice(&self.tmp_lis3mdltr .to_le_bytes());
379 stream.extend_from_slice(&self.tmp_bm280 .to_le_bytes());
380 stream.extend_from_slice(&self.pressure .to_le_bytes());
381 stream.extend_from_slice(&self.humidity .to_le_bytes());
382 stream.extend_from_slice(&self.mag_x .to_le_bytes());
383 stream.extend_from_slice(&self.mag_y .to_le_bytes());
384 stream.extend_from_slice(&self.mag_z .to_le_bytes());
385 stream.extend_from_slice(&self.lost_event_ids .to_le_bytes());
388 stream.extend_from_slice(&self.drs_dvdd_voltage .to_le_bytes());
390 stream.extend_from_slice(&self.drs_dvdd_current .to_le_bytes());
391 stream.extend_from_slice(&self.drs_dvdd_power .to_le_bytes());
392 stream.extend_from_slice(&self.p3v3_voltage .to_le_bytes());
393 stream.extend_from_slice(&self.p3v3_current .to_le_bytes());
394 stream.extend_from_slice(&self.p3v3_power .to_le_bytes());
395 stream.extend_from_slice(&self.zynq_voltage .to_le_bytes());
396 stream.extend_from_slice(&self.zynq_current .to_le_bytes());
397 stream.extend_from_slice(&self.zynq_power .to_le_bytes());
398 stream.extend_from_slice(&self.p3v5_voltage .to_le_bytes());
399 stream.extend_from_slice(&self.p3v5_current .to_le_bytes());
400 stream.extend_from_slice(&self.p3v5_power .to_le_bytes());
401 stream.extend_from_slice(&self.adc_dvdd_voltage .to_le_bytes());
402 stream.extend_from_slice(&self.adc_dvdd_current .to_le_bytes());
403 stream.extend_from_slice(&self.adc_dvdd_power .to_le_bytes());
404 stream.extend_from_slice(&self.adc_avdd_voltage .to_le_bytes());
405 stream.extend_from_slice(&self.adc_avdd_current .to_le_bytes());
406 stream.extend_from_slice(&self.adc_avdd_power .to_le_bytes());
407 stream.extend_from_slice(&self.drs_avdd_voltage .to_le_bytes());
408 stream.extend_from_slice(&self.drs_avdd_current .to_le_bytes());
409 stream.extend_from_slice(&self.drs_avdd_power .to_le_bytes());
410 stream.extend_from_slice(&self.n1v5_voltage .to_le_bytes());
411 stream.extend_from_slice(&self.n1v5_current .to_le_bytes());
412 stream.extend_from_slice(&self.n1v5_power .to_le_bytes());
413 stream.extend_from_slice(&Self::TAIL.to_le_bytes());
414 stream
415 }
416
417 fn from_bytestream(stream : &Vec<u8>,
418 pos : &mut usize)
419 -> Result<RBMoniData, SerializationError>{
420 let mut moni_data = Self::new();
421 Self::verify_fixed(stream, pos)?;
422 moni_data.board_id = parse_u8( stream, pos);
423 moni_data.rate = parse_u16(stream, pos);
424 moni_data.tmp_drs = parse_f32(stream, pos);
425 moni_data.tmp_clk = parse_f32(stream, pos);
426 moni_data.tmp_adc = parse_f32(stream, pos);
427 moni_data.tmp_zynq = parse_f32(stream, pos);
428 moni_data.tmp_lis3mdltr = parse_f32(stream, pos);
429 moni_data.tmp_bm280 = parse_f32(stream, pos);
430 moni_data.pressure = parse_f32(stream, pos);
431 moni_data.humidity = parse_f32(stream, pos);
432 moni_data.mag_x = parse_f32(stream, pos);
433 moni_data.mag_y = parse_f32(stream, pos);
434 moni_data.mag_z = parse_f32(stream, pos);
435
436 moni_data.lost_event_ids = parse_f32(stream, pos);
439 moni_data.drs_dvdd_voltage = parse_f32(stream, pos);
441 moni_data.drs_dvdd_current = parse_f32(stream, pos);
442 moni_data.drs_dvdd_power = parse_f32(stream, pos);
443 moni_data.p3v3_voltage = parse_f32(stream, pos);
444 moni_data.p3v3_current = parse_f32(stream, pos);
445 moni_data.p3v3_power = parse_f32(stream, pos);
446 moni_data.zynq_voltage = parse_f32(stream, pos);
447 moni_data.zynq_current = parse_f32(stream, pos);
448 moni_data.zynq_power = parse_f32(stream, pos);
449 moni_data.p3v5_voltage = parse_f32(stream, pos);
450 moni_data.p3v5_current = parse_f32(stream, pos);
451 moni_data.p3v5_power = parse_f32(stream, pos);
452 moni_data.adc_dvdd_voltage = parse_f32(stream, pos);
453 moni_data.adc_dvdd_current = parse_f32(stream, pos);
454 moni_data.adc_dvdd_power = parse_f32(stream, pos);
455 moni_data.adc_avdd_voltage = parse_f32(stream, pos);
456 moni_data.adc_avdd_current = parse_f32(stream, pos);
457 moni_data.adc_avdd_power = parse_f32(stream, pos);
458 moni_data.drs_avdd_voltage = parse_f32(stream, pos);
459 moni_data.drs_avdd_current = parse_f32(stream, pos);
460 moni_data.drs_avdd_power = parse_f32(stream, pos);
461 moni_data.n1v5_voltage = parse_f32(stream, pos);
462 moni_data.n1v5_current = parse_f32(stream, pos);
463 moni_data.n1v5_power = parse_f32(stream, pos);
464 *pos += 2; Ok(moni_data)
466 }
467}
468
469#[cfg(feature = "random")]
470impl FromRandom for RBMoniData {
471
472 fn from_random() -> RBMoniData {
473 let mut moni = RBMoniData::new();
474 let mut rng = rand::rng();
475 moni.board_id = rng.random::<u8>();
476 moni.rate = rng.random::<u16>();
477 moni.tmp_drs = rng.random::<f32>();
478 moni.tmp_clk = rng.random::<f32>();
479 moni.tmp_adc = rng.random::<f32>();
480 moni.tmp_zynq = rng.random::<f32>();
481 moni.tmp_lis3mdltr = rng.random::<f32>();
482 moni.tmp_bm280 = rng.random::<f32>();
483 moni.pressure = rng.random::<f32>();
484 moni.humidity = rng.random::<f32>();
485 moni.mag_x = rng.random::<f32>();
486 moni.mag_y = rng.random::<f32>();
487 moni.mag_z = rng.random::<f32>();
488 moni.lost_event_ids = rng.random::<f32>();
489 moni.drs_dvdd_voltage = rng.random::<f32>();
490 moni.drs_dvdd_current = rng.random::<f32>();
491 moni.drs_dvdd_power = rng.random::<f32>();
492 moni.p3v3_voltage = rng.random::<f32>();
493 moni.p3v3_current = rng.random::<f32>();
494 moni.p3v3_power = rng.random::<f32>();
495 moni.zynq_voltage = rng.random::<f32>();
496 moni.zynq_current = rng.random::<f32>();
497 moni.zynq_power = rng.random::<f32>();
498 moni.p3v5_voltage = rng.random::<f32>();
499 moni.p3v5_current = rng.random::<f32>();
500 moni.p3v5_power = rng.random::<f32>();
501 moni.adc_dvdd_voltage = rng.random::<f32>();
502 moni.adc_dvdd_current = rng.random::<f32>();
503 moni.adc_dvdd_power = rng.random::<f32>();
504 moni.adc_avdd_voltage = rng.random::<f32>();
505 moni.adc_avdd_current = rng.random::<f32>();
506 moni.adc_avdd_power = rng.random::<f32>();
507 moni.drs_avdd_voltage = rng.random::<f32>();
508 moni.drs_avdd_current = rng.random::<f32>();
509 moni.drs_avdd_power = rng.random::<f32>();
510 moni.n1v5_voltage = rng.random::<f32>();
511 moni.n1v5_current = rng.random::<f32>();
512 moni.n1v5_power = rng.random::<f32>();
513 moni.timestamp = 0;
515 moni
516 }
517}
518
519#[cfg(feature="pybindings")]
520#[pymethods]
521impl RBMoniData {
522
523 #[getter]
524 #[pyo3(name="mag_tot")]
525 fn get_mag_tot_py(&self) -> f32 {
526 self.get_mag_tot()
527 }
528
529 #[getter]
530 fn get_rate (&self) -> u16 {
531 self.rate
532 }
533
534 #[getter]
535 fn get_tmp_drs (&self) -> f32 {
536 self.tmp_drs
537 }
538
539 #[getter]
540 fn get_tmp_clk (&self) -> f32 {
541 self.tmp_clk
542 }
543
544
545 #[getter]
546 fn get_tmp_adc (&self) -> f32 {
547 self.tmp_adc
548 }
549
550 #[getter]
551 fn get_tmp_zynq (&self) -> f32 {
552 self.tmp_zynq
553 }
554
555 #[getter]
556 fn get_tmp_lis3mdltr (&self) -> f32 {
557 self.tmp_lis3mdltr
558 }
559
560 #[getter]
561 fn get_tmp_bm280 (&self) -> f32 {
562 self.tmp_bm280
563 }
564
565 #[getter]
566 fn get_pressure (&self) -> f32 {
567 self.pressure
568 }
569
570 #[getter]
571 fn get_humidity (&self) -> f32 {
572 self.humidity
573 }
574
575 #[getter]
576 fn get_mag_x (&self) -> f32 {
577 self.mag_x
578 }
579
580 #[getter]
581 fn get_mag_y (&self) -> f32 {
582 self.mag_y
583 }
584
585 #[getter]
586 fn get_mag_z (&self) -> f32 {
587 self.mag_z
588 }
589
590 #[getter]
591 fn get_drs_dvdd_voltage (&self) -> f32 {
592 self.drs_dvdd_voltage
593 }
594
595 #[getter]
596 fn get_drs_dvdd_current (&self) -> f32 {
597 self.drs_dvdd_current
598 }
599
600 #[getter]
601 fn get_drs_dvdd_power (&self) -> f32 {
602 self.drs_dvdd_power
603 }
604
605 #[getter]
606 fn get_p3v3_voltage (&self) -> f32 {
607 self.p3v3_voltage
608 }
609
610 #[getter]
611 fn get_p3v3_current (&self) -> f32 {
612 self.p3v3_current
613 }
614
615 #[getter]
616 fn get_p3v3_power (&self) -> f32 {
617 self.p3v3_power
618 }
619
620 #[getter]
621 fn get_zynq_voltage (&self) -> f32 {
622 self.zynq_voltage
623 }
624
625 #[getter]
626 fn get_zynq_current (&self) -> f32 {
627 self.zynq_current
628 }
629
630 #[getter]
631 fn get_zynq_power (&self) -> f32 {
632 self.zynq_power
633 }
634
635 #[getter]
636 fn get_p3v5_voltage (&self) -> f32 {
637 self.p3v5_voltage
638 }
639
640 #[getter]
641 fn get_p3v5_current (&self) -> f32 {
642 self.p3v5_current
643 }
644
645 #[getter]
646 fn get_p3v5_power (&self) -> f32 {
647 self.p3v5_power
648 }
649
650 #[getter]
651 fn get_adc_dvdd_voltage (&self) -> f32 {
652 self.adc_dvdd_voltage
653 }
654
655 #[getter]
656 fn get_adc_dvdd_current (&self) -> f32 {
657 self.adc_dvdd_current
658 }
659
660 #[getter]
661 fn get_adc_dvdd_power (&self) -> f32 {
662 self.adc_dvdd_power
663 }
664
665 #[getter]
666 fn get_adc_avdd_voltage (&self) -> f32 {
667 self.adc_avdd_voltage
668 }
669
670 #[getter]
671 fn get_adc_avdd_current (&self) -> f32 {
672 self.adc_avdd_current
673 }
674
675 #[getter]
676 fn get_adc_avdd_power (&self) -> f32 {
677 self.adc_avdd_power
678 }
679
680 #[getter]
681 fn get_drs_avdd_voltage (&self) -> f32 {
682 self.drs_avdd_voltage
683 }
684
685 #[getter]
686 fn get_drs_avdd_current (&self) -> f32 {
687 self.drs_avdd_current
688 }
689
690 #[getter]
691 fn get_drs_avdd_power (&self) -> f32 {
692 self.drs_avdd_power
693 }
694
695 #[getter]
696 fn get_n1v5_voltage (&self) -> f32 {
697 self.n1v5_voltage
698 }
699
700 #[getter]
701 fn get_n1v5_current (&self) -> f32 {
702 self.n1v5_current
703 }
704
705 #[getter]
706 fn get_n1v5_power (&self) -> f32 {
707 self.n1v5_power
708 }
709
710 #[getter]
711 fn get_timestamp (&self) -> u64 {
712 self.timestamp
713 }
714
715 #[getter]
716 #[pyo3(name = "lost_event_ids_over_rate")]
717 pub fn get_lost_event_ids_over_rate_py(&self) -> f32 {
718 self.get_lost_event_ids_over_rate()
719 }
720}
721
722moniseries!(RBMoniDataSeries, RBMoniData);
725
726#[cfg(feature="pybindings")]
727pythonize_packable!(RBMoniData);
728
729#[cfg(feature="pybindings")]
730pythonize_monidata!(RBMoniData);
731
732#[test]
735#[cfg(feature = "random")]
736fn monidata_rbmonidata() {
737 let data = RBMoniData::from_random();
738 for k in RBMoniData::keys() {
739 assert!(data.get(k).is_some());
740 }
741 assert_eq!(data.get_board_id(), data.board_id);
742}
743
744#[test]
745#[cfg(feature="random")]
746fn pack_rbmonidata() {
747 let data = RBMoniData::from_random();
748 for _ in 0..100 {
749 assert_eq!(data, data.pack().unpack().unwrap());
750 }
751}
752