gondola_core/monitoring/
tracker_gps.rs1use crate::prelude::*;
5
6#[derive(Debug, Copy, Clone, PartialEq)]
8#[cfg_attr(feature="pybindings", pyclass)]
9pub struct TrackerGpsMoniData {
10 pub daq_header : TrackerHeader,
11 pub utc_time : u32,
12 pub gps_info : u8,
13 pub timestamp : u64,
15 pub board_id : u8,
16}
17
18impl TrackerGpsMoniData {
19
20 fn new() ->Self {
21 Self {
22 daq_header : TrackerHeader::new(),
23 utc_time : 0,
24 gps_info : 0,
25 timestamp : 0,
26 board_id : 0,
27 }
28 }
29}
30
31#[cfg(feature = "random")]
32impl FromRandom for TrackerGpsMoniData {
33 fn from_random() -> Self {
34 let mut moni = Self::new();
35 let mut rng = rand::rng();
36 moni.utc_time = rng.random::<u32>();
37 moni.gps_info = rng.random::<u8>();
38 moni.daq_header = TrackerHeader::from_random();
39 moni.timestamp = rng.random::<u64>();
40 moni.board_id = rng.random::<u8>();
41 moni
42 }
43}
44
45impl Default for TrackerGpsMoniData {
46 fn default() -> Self {
47 Self::new()
48 }
49}
50
51impl Serialization for TrackerGpsMoniData {
52
53 fn from_bytestream(stream : &Vec<u8>,
54 pos : &mut usize)
55 -> Result<Self, SerializationError> {
56 if stream.len() < Self::SIZE {
57 return Err(SerializationError::StreamTooShort);
58 }
59 let mut moni = Self::new();
60 moni.daq_header = TrackerHeader::from_bytestream(stream, pos)?;
61 *pos += 1; moni.utc_time = parse_u32(stream, pos);
63 moni.gps_info = parse_u8(stream, pos);
64 Ok(moni)
65 }
66}
67
68impl MoniData for TrackerGpsMoniData {
69
70 fn get_board_id(&self) -> u8 {
71 return self.board_id;
72 }
73
74 fn get_timestamp(&self) -> u64 {
75 self.timestamp
76 }
77
78 fn set_timestamp(&mut self, ts: u64) {
79 self.timestamp = ts;
80 }
81
82 fn keys() -> Vec<&'static str> {
83 vec!["board_id", "utc_time",
84 "gps_info",
85 "timestamp"]
86 }
87
88 fn get(&self, varname : &str) -> Option<f32> {
89 match varname {
90 "board_id" => Some(self.board_id as f32),
91 "utc_time" => Some(self.utc_time as f32),
92 "gps_info" => Some(self.gps_info as f32),
93 "timestamp" => Some(self.timestamp as f32),
94 _ => None
95 }
96 }
97}
98
99impl TelemetryPackable for TrackerGpsMoniData {
100 const TEL_PACKET_TYPE : TelemetryPacketType = TelemetryPacketType::TrackerGps;
101}
102
103impl fmt::Display for TrackerGpsMoniData {
104 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
105 let mut repr = String::from("<TrackerGpsMoniData: ");
106 repr += &(format!("\n utc_time : {}", self.utc_time));
107 repr += &(format!("\n gps_info : {}>", self.gps_info));
108 write!(f, "{}", repr)
109 }
110}
111
112
113moniseries_telemetry!(TrackerGpsMoniDataSeries, TrackerGpsMoniData);
114
115#[cfg(feature="pybindings")]
116pythonize_monidata!(TrackerGpsMoniData);
117
118#[cfg(feature="pybindings")]
119pythonize_telemetry_only!(TrackerGpsMoniData);