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