gondola_core/packets/
gps_packet.rs1use crate::prelude::*;
5
6#[cfg_attr(feature="pybindings", pyclass)]
7pub struct GPSPacket {
8 pub telemetry_header : TelemetryPacketHeader,
9 pub tracker_header : TrackerHeader,
10 pub utc_time : u32,
11 pub gps_info : u8
12}
13
14impl GPSPacket {
15 pub fn new() -> Self {
16 Self {
17 telemetry_header : TelemetryPacketHeader::new(),
18 tracker_header : TrackerHeader::new(),
19 utc_time : 0,
20 gps_info : 0,
21 }
22 }
23
24 pub fn from_bytestream(stream: &Vec<u8>,
25 pos: &mut usize)
26 -> Result<Self, SerializationError> {
27 let mut gps_p = GPSPacket::new();
28 gps_p.tracker_header = TrackerHeader::from_bytestream(stream, pos)?;
29 if stream.len() == *pos as usize {
30 error!("Packet contains only header!");
31 return Ok(gps_p);
32 }
33 gps_p.utc_time = parse_u32(stream, pos);
34 gps_p.gps_info = parse_u8(stream, pos);
35 Ok(gps_p)
36 }
37}
38
39impl fmt::Display for GPSPacket {
40 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
41 let mut repr = String::from("<GPSPacket");
42 repr += &(format!("\n {}", self.telemetry_header));
43 repr += &(format!("\n {}", self.tracker_header));
44 repr += "\n*** GPS TIME ***";
45 repr += &(format!("\n UTC TIME (32bit) {}", self.utc_time));
46 repr += &(format!("\n GSP INFO (8bit) {}", self.gps_info));
47 repr += ">";
48 write!(f, "{}", repr)
49 }
50}
51
52#[cfg(feature="pybindings")]
55#[pymethods]
56impl GPSPacket {
57 #[getter]
58 fn get_telemetry_header(&self) -> TelemetryPacketHeader {
59 self.telemetry_header.clone()
60 }
61 #[getter]
62 fn get_tracker_header (&self) -> TrackerHeader {
63 self.tracker_header.clone()
64 }
65 #[getter]
66 fn get_utc_time (&self) -> u32 {
67 self.utc_time
68 }
69 #[getter]
70 fn get_gps_info (&self) -> u8 {
71 self.gps_info
72 }
73}
74
75#[cfg(feature="pybindings")]
76pythonize_telemetry!(GPSPacket);
77