Skip to main content

gondola_core/packets/
tracker_daqhk.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 TrackerDAQHSKPacket {
10  pub telemetry_header : TelemetryPacketHeader,
11  pub tracker_header   : TrackerHeader,
12  pub temp             : [u16;12],
13}
14
15impl fmt::Display for TrackerDAQHSKPacket {
16  fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17    let mut repr = String::from("<TrackerDAQHSKPacket");
18    repr    += &(format!("\n {}", self.telemetry_header));
19    repr    += &(format!("\n {}", self.tracker_header));
20    repr    += "\n*** TEMP ***";
21    repr    += &(format!("\n {:?}>", self.temp));
22    write!(f, "{}", repr)
23  }
24}
25
26impl TrackerDAQHSKPacket {
27  pub fn new() -> Self {
28    Self {
29      telemetry_header : TelemetryPacketHeader::new(),
30      tracker_header   : TrackerHeader::new(),
31      temp             : [0;12]
32    }
33  }
34}
35
36impl Serialization for TrackerDAQHSKPacket {
37  fn from_bytestream(stream: &Vec<u8>,
38                     pos: &mut usize)
39    -> Result<Self, SerializationError> {
40    let mut tp          = TrackerDAQHSKPacket::new();
41    tp.tracker_header   = TrackerHeader::from_bytestream(stream, pos)?;
42    if tp.tracker_header.packet_id != 0xff {
43      error!("This is not a TrackerDAQHSKPacket, but has packet_id {} instead!", tp.tracker_header.packet_id);
44      return Err(SerializationError::IncorrectPacketType);
45    }
46    if stream.len() == *pos as usize {
47      error!("Packet contains only header!");
48      return Ok(tp);
49    }
50    //if stream.len() - *pos < (36*3 + 1) {
51    //  return Err(SerializationError::StreamTooShort);
52    //}
53    // this is hack, since the TreckerHeader in this packet does not have a 
54    // version (-> Alex) 
55    *pos += 193; // skip a bunch of other stuff right now (Alex)
56    for k in 0..12usize {
57      tp.temp[k]   = parse_u16(stream, pos);
58    }
59    Ok(tp)
60  }
61}
62
63//---------------------------------------------------
64
65#[cfg(feature="pybindings")]
66#[pymethods]
67impl TrackerDAQHSKPacket {
68  
69  #[getter]
70  fn get_temp(&self) -> [u16;12] {
71    self.temp
72  }
73}
74
75#[cfg(feature="pybindings")]
76pythonize_telemetry!(TrackerDAQHSKPacket);
77