Skip to main content

gondola_core/packets/
tracker_event_echo.rs

1// This file is part of gaps-online-software and published 
2// under the GPLv3 license
3
4use crate::prelude::*;
5
6
7
8#[cfg_attr(feature="pybindings", pyclass)]
9pub struct TrackerEventIDEchoPacket {
10  pub telemetry_header : TelemetryPacketHeader,
11  pub tracker_header   : TrackerHeader,
12  pub temp             : [u16;12],
13  pub event_id         : u32,
14  pub event_id_errors  : u16,
15}
16
17impl TrackerEventIDEchoPacket {
18  pub fn new() -> Self {
19    Self {
20      telemetry_header : TelemetryPacketHeader::new(),
21      tracker_header   : TrackerHeader::new(),
22      temp             : [0;12],
23      event_id         : 0,
24      event_id_errors  : 0,
25    }
26  }
27}
28
29impl fmt::Display for TrackerEventIDEchoPacket {
30  fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
31    let mut repr = String::from("<TrackerEventIDEchoPacket");
32    repr    += &(format!("\n {}", self.telemetry_header));
33    repr    += &(format!("\n {}", self.tracker_header));
34    repr    += "\n*** TEMP ***";
35    repr    += &(format!("\n {:?}>", self.temp));
36    write!(f, "{}", repr)
37  }
38}
39
40impl Serialization for TrackerEventIDEchoPacket {
41
42  fn from_bytestream(stream: &Vec<u8>,
43                         pos: &mut usize)
44    -> Result<Self, SerializationError> {
45    let mut tp          = TrackerEventIDEchoPacket::new();
46    tp.tracker_header   = TrackerHeader::from_bytestream(stream, pos)?;
47    if tp.tracker_header.packet_id != 0x03 {
48      error!("This is not a TrackerEventIDEchoPacket, but has packet_id {} instead!", tp.tracker_header.packet_id);
49      return Err(SerializationError::IncorrectPacketType);
50    }
51    if stream.len() == *pos as usize {
52      error!("Packet contains only header!");
53      return Ok(tp);
54    }
55    //if stream.len() - *pos < (36*3 + 1) {
56    //  return Err(SerializationError::StreamTooShort);
57    //}
58    tp.event_id        = parse_u32(stream, pos);
59    tp.event_id_errors = parse_u16(stream, pos);
60    Ok(tp)
61  }
62}
63
64#[cfg(feature="pybindings")]
65#[pymethods]
66impl TrackerEventIDEchoPacket {
67
68
69  #[getter]
70  fn get_temp(&self) -> [u16;12] {
71    self.temp
72  }
73}
74
75#[cfg(feature="pybindings")]
76pythonize_telemetry!(TrackerEventIDEchoPacket);
77