gondola_core/packets/
gps_packet.rs

1// This file is part of gaps-online-software and published 
2// under the GPLv3 license
3
4use 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//----------------------------------------------------------------
53
54#[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