Skip to main content

gondola_core/packets/
tracker_daqtemp.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 TrackerDAQTempPacket {
10  pub telemetry_header : TelemetryPacketHeader,
11  pub tracker_header   : TrackerHeader,
12  pub rom_id           : [u64;256],
13  pub temp             : [u16;256]
14}
15
16impl fmt::Display for TrackerDAQTempPacket {
17  fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18    let mut repr = String::from("<TrackerDAQTempPacket");
19    repr    += &(format!("\n {}", self.telemetry_header));
20    repr    += &(format!("\n {}", self.tracker_header));
21    repr    += "\n*** ROM ID ***";
22    repr  += &(format!("\n {:?}", self.rom_id));
23    repr    += "\n*** TEMP ***";
24    repr  += &(format!("\n {:?}>", self.temp));
25    write!(f, "{}", repr)
26  }
27}
28
29impl TrackerDAQTempPacket {
30  pub fn new() -> Self {
31    Self {
32      telemetry_header : TelemetryPacketHeader::new(),
33      tracker_header   : TrackerHeader::new(),
34      rom_id           : [0;256],
35      temp             : [0;256]
36    }
37  }
38}
39
40impl Serialization for TrackerDAQTempPacket {
41  fn from_bytestream(stream: &Vec<u8>,
42                     pos: &mut usize)
43    -> Result<Self, SerializationError> {
44    let mut tp          = TrackerDAQTempPacket::new();
45    tp.tracker_header   = TrackerHeader::from_bytestream(stream, pos)?;
46    if tp.tracker_header.packet_id != 0x09 {
47      error!("This is not a TrackerDAQTempPacket, but has packet_id {} instead!", tp.tracker_header.packet_id);
48      return Err(SerializationError::IncorrectPacketType);
49    }
50    debug!("tracker header {}", tp.tracker_header);
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    // this is hack, since the TreckerHeader in this packet does not have a 
59    // version (-> Alex) 
60    *pos -= 1;
61    let dummy64 = 0u64;
62    let dummy16 = 0u16;
63    error!("{}", tp.tracker_header);
64    error!("Expected of the packet {}", (tp.tracker_header.length as usize)/2);
65    for k in 0..256usize {
66      if k < (tp.tracker_header.length as usize)/2 {
67        tp.rom_id[k] = parse_u64(stream, pos);
68        tp.temp[k]   = parse_u16(stream, pos);
69      } else {
70        tp.rom_id[k] = dummy64;
71        tp.temp[k]   = dummy16;
72      }
73    }
74    Ok(tp)
75  }
76}
77
78//---------------------------------------------------
79
80#[cfg(feature="pybindings")]
81#[pymethods]
82impl TrackerDAQTempPacket {
83  
84  #[getter]
85  fn get_rom_id(&self) -> [u64;256] {
86    self.rom_id
87  }
88  
89  #[getter]
90  fn get_temp(&self) -> [u16;256] {
91    self.temp
92  }
93
94}
95
96#[cfg(feature="pybindings")]
97pythonize_telemetry!(TrackerDAQTempPacket);
98