GNSS-SDR  0.0.13
An Open Source GNSS Software Defined Receiver
serdes_monitor_pvt.h
Go to the documentation of this file.
1 /*!
2  * \file serdes_monitor_pvt.h
3  * \brief Serialization / Deserialization of Monitor_Pvt objects using
4  * Protocol Buffers
5  * \author Carles Fernandez-Prades, 2019. cfernandez(at)cttc.es
6  *
7  * -----------------------------------------------------------------------------
8  *
9  * Copyright (C) 2010-2020 (see AUTHORS file for a list of contributors)
10  *
11  * GNSS-SDR is a software defined Global Navigation
12  * Satellite Systems receiver
13  *
14  * This file is part of GNSS-SDR.
15  *
16  * SPDX-License-Identifier: GPL-3.0-or-later
17  *
18  * -----------------------------------------------------------------------------
19  */
20 
21 #ifndef GNSS_SDR_SERDES_MONITOR_PVT_H
22 #define GNSS_SDR_SERDES_MONITOR_PVT_H
23 
24 #include "monitor_pvt.h"
25 #include "monitor_pvt.pb.h" // file created by Protocol Buffers at compile time
26 #include <memory>
27 #include <string>
28 #include <utility>
29 
30 /*!
31  * \brief This class implements serialization and deserialization of
32  * Monitor_Pvt objects using Protocol Buffers.
33  */
35 {
36 public:
38  {
39  // Verify that the version of the library that we linked against is
40  // compatible with the version of the headers we compiled against.
41  GOOGLE_PROTOBUF_VERIFY_VERSION;
42  }
43 
45  {
46  // google::protobuf::ShutdownProtobufLibrary();
47  }
48 
49  inline Serdes_Monitor_Pvt(const Serdes_Monitor_Pvt& other) noexcept //!< Copy constructor
50  {
51  this->monitor_ = other.monitor_;
52  }
53 
54  inline Serdes_Monitor_Pvt& operator=(const Serdes_Monitor_Pvt& rhs) noexcept //!< Copy assignment operator
55  {
56  this->monitor_ = rhs.monitor_;
57  return *this;
58  }
59 
60  inline Serdes_Monitor_Pvt(Serdes_Monitor_Pvt&& other) noexcept //!< Move constructor
61  {
62  this->monitor_ = std::move(other.monitor_);
63  }
64 
65  inline Serdes_Monitor_Pvt& operator=(Serdes_Monitor_Pvt&& other) noexcept //!< Move assignment operator
66  {
67  if (this != &other)
68  {
69  this->monitor_ = std::move(other.monitor_);
70  }
71  return *this;
72  }
73 
74  inline std::string createProtobuffer(const Monitor_Pvt* const monitor) //!< Serialization into a string
75  {
76  monitor_.Clear();
77 
78  std::string data;
79 
80  monitor_.set_tow_at_current_symbol_ms(monitor->TOW_at_current_symbol_ms);
81  monitor_.set_week(monitor->week);
82  monitor_.set_rx_time(monitor->RX_time);
83  monitor_.set_user_clk_offset(monitor->user_clk_offset);
84  monitor_.set_pos_x(monitor->pos_x);
85  monitor_.set_pos_y(monitor->pos_y);
86  monitor_.set_pos_z(monitor->pos_z);
87  monitor_.set_vel_x(monitor->vel_x);
88  monitor_.set_vel_y(monitor->vel_y);
89  monitor_.set_vel_z(monitor->vel_z);
90  monitor_.set_cov_xx(monitor->cov_xx);
91  monitor_.set_cov_yy(monitor->cov_yy);
92  monitor_.set_cov_zz(monitor->cov_zz);
93  monitor_.set_cov_xy(monitor->cov_xy);
94  monitor_.set_cov_yz(monitor->cov_yz);
95  monitor_.set_cov_zx(monitor->cov_zx);
96  monitor_.set_latitude(monitor->latitude);
97  monitor_.set_longitude(monitor->longitude);
98  monitor_.set_height(monitor->height);
99  monitor_.set_valid_sats(monitor->valid_sats);
100  monitor_.set_solution_status(monitor->solution_status);
101  monitor_.set_solution_type(monitor->solution_type);
102  monitor_.set_ar_ratio_factor(monitor->AR_ratio_factor);
103  monitor_.set_ar_ratio_threshold(monitor->AR_ratio_threshold);
104  monitor_.set_gdop(monitor->gdop);
105  monitor_.set_pdop(monitor->pdop);
106  monitor_.set_hdop(monitor->hdop);
107  monitor_.set_vdop(monitor->vdop);
108  monitor_.set_user_clk_drift_ppm(monitor->user_clk_drift_ppm);
109 
110  monitor_.SerializeToString(&data);
111  return data;
112  }
113 
114  inline Monitor_Pvt readProtobuffer(const gnss_sdr::MonitorPvt& mon) const //!< Deserialization
115  {
116  Monitor_Pvt monitor;
117 
118  monitor.TOW_at_current_symbol_ms = mon.tow_at_current_symbol_ms();
119  monitor.week = mon.week();
120  monitor.RX_time = mon.rx_time();
121  monitor.user_clk_offset = mon.user_clk_offset();
122  monitor.pos_x = mon.pos_x();
123  monitor.pos_y = mon.pos_y();
124  monitor.pos_z = mon.pos_z();
125  monitor.vel_x = mon.vel_x();
126  monitor.vel_y = mon.vel_y();
127  monitor.vel_z = mon.vel_z();
128  monitor.cov_xx = mon.cov_xx();
129  monitor.cov_yy = mon.cov_yy();
130  monitor.cov_zz = mon.cov_zz();
131  monitor.cov_xy = mon.cov_xy();
132  monitor.cov_yz = mon.cov_yz();
133  monitor.cov_zx = mon.cov_zx();
134  monitor.latitude = mon.latitude();
135  monitor.longitude = mon.longitude();
136  monitor.height = mon.height();
137  monitor.valid_sats = static_cast<uint8_t>(mon.valid_sats());
138  monitor.solution_status = static_cast<uint8_t>(mon.solution_status());
139  monitor.solution_type = static_cast<uint8_t>(mon.solution_type());
140  monitor.AR_ratio_factor = mon.ar_ratio_factor();
141  monitor.AR_ratio_threshold = mon.ar_ratio_threshold();
142  monitor.gdop = mon.gdop();
143  monitor.pdop = mon.pdop();
144  monitor.hdop = mon.hdop();
145  monitor.vdop = mon.vdop();
146  monitor.user_clk_drift_ppm = mon.user_clk_drift_ppm();
147 
148  return monitor;
149  }
150 
151 private:
152  gnss_sdr::MonitorPvt monitor_{};
153 };
154 
155 #endif // GNSS_SDR_SERDES_MONITOR_PVT_H
Serdes_Monitor_Pvt & operator=(const Serdes_Monitor_Pvt &rhs) noexcept
< Copy assignment operator
std::string createProtobuffer(const Monitor_Pvt *const monitor)
Serdes_Monitor_Pvt & operator=(Serdes_Monitor_Pvt &&other) noexcept
< Move assignment operator
This class contains parameters and outputs of the PVT block.
Definition: monitor_pvt.h:29
This class implements serialization and deserialization of Monitor_Pvt objects using Protocol Buffers...
Interface of the Monitor_Pvt class.
Serdes_Monitor_Pvt(const Serdes_Monitor_Pvt &other) noexcept
< Copy constructor
Serdes_Monitor_Pvt(Serdes_Monitor_Pvt &&other) noexcept
< Move constructor
Monitor_Pvt readProtobuffer(const gnss_sdr::MonitorPvt &mon) const
< Deserialization