gondola_core/packets/
tracker_templeak.rs1use crate::prelude::*;
5
6#[cfg_attr(feature="pybindings",pyclass)]
9pub struct TrackerTempLeakPacket {
10 pub telemetry_header : TelemetryPacketHeader,
11 pub tracker_header : TrackerHeader,
12 pub row_offset : u8,
13 pub templeak : [[u32;6];6],
14 pub seu : [[u32;6];6]
15}
16
17impl fmt::Display for TrackerTempLeakPacket {
18 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
19 let mut repr = String::from("<TrackerTempLeakPacket");
20 repr += &(format!("\n {}", self.telemetry_header));
21 repr += &(format!("\n {}", self.tracker_header));
22 repr += &(format!("\n ROW OFFSET {}", self.row_offset));
23 repr += "\n*** TEMPLEAK ***";
24 for k in 0..6 {
25 repr += &(format!("\n {:?}", self.templeak[k]));
26 }
27 repr += "\n*** SEU ***";
28 for k in 0..6 {
29 repr += &(format!("\n {:?}", self.seu[k]));
30 }
31 repr += ">";
32 write!(f, "{}", repr)
33 }
34}
35
36impl TrackerTempLeakPacket {
37 pub fn new() -> Self {
38 Self {
39 telemetry_header : TelemetryPacketHeader::new(),
40 tracker_header : TrackerHeader::new(),
41 row_offset : 0,
42 templeak : [[0;6];6],
43 seu : [[0;6];6]
44 }
45 }
46}
47
48impl Serialization for TrackerTempLeakPacket {
49 fn from_bytestream(stream: &Vec<u8>,
50 pos: &mut usize)
51 -> Result<Self, SerializationError> {
52 let mut tp = TrackerTempLeakPacket::new();
53 tp.tracker_header = TrackerHeader::from_bytestream(stream, pos)?;
54 if stream.len() == *pos as usize {
55 error!("Packet contains only header!");
56 return Ok(tp);
57 }
58 if stream.len() - *pos < (36*3 + 1) {
59 return Err(SerializationError::StreamTooShort);
60 }
61 let row_info = parse_u8(stream, pos);
62 tp.row_offset = row_info & 0x7;
63 for row in 0..6 {
64 for module in 0..6 {
65 let b0 = parse_u8(stream, pos) as u32;
66 let b1 = parse_u8(stream, pos) as u32;
67 let b2 = parse_u8(stream, pos) as u32;
68 let seu_ : u32 = b2 >> 1;
69 let mut templeak_ : u32 = (b2 << 10) | (b1 << 2) | (b0 >> 6);
70 templeak_ &= 0x7ff;
71 tp.templeak[row][module] = templeak_;
72 tp.seu[row][module] = seu_;
73 }
74 }
75 Ok(tp)
76 }
77}
78
79#[cfg(feature="pybindings")]
80#[pymethods]
81impl TrackerTempLeakPacket {
82
83 #[getter]
84 fn get_row_offset(&self) -> u8 {
85 self.row_offset
86 }
87
88 #[getter]
89 fn temp_leak(&self) -> [[u32;6];6] {
90 self.templeak
91 }
92
93 #[getter]
94 fn get_seu(&self) -> [[u32;6];6] {
95 self.seu
96 }
97}
98
99#[cfg(feature="pybindings")]
100pythonize_telemetry!(TrackerTempLeakPacket);
101