gnss-sdr/src/core/libs/serdes_nav_message.h

113 lines
3.2 KiB
C++

/*!
* \file serdes_nav_message.h
* \brief Serialization / Deserialization of Nav_Message_Packet objects using
* Protocol Buffers
* \author Carles Fernandez-Prades, 2021. cfernandez(at)cttc.es
*
* -----------------------------------------------------------------------------
*
* GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
* This file is part of GNSS-SDR.
*
* Copyright (C) 2010-2021 (see AUTHORS file for a list of contributors)
* SPDX-License-Identifier: GPL-3.0-or-later
*
* -----------------------------------------------------------------------------
*/
#ifndef GNSS_SDR_SERDES_NAV_MESSAGE_H
#define GNSS_SDR_SERDES_NAV_MESSAGE_H
#include "nav_message.pb.h" // file created by Protocol Buffers at compile time
#include "nav_message_packet.h"
#include <cstdint>
#include <string>
/** \addtogroup Telemetry_Decoder
* \{ */
/** \addtogroup Telemetry_Decoder_libs
* \{ */
/*!
* \brief This class implements serialization and deserialization of
* Nav_Message_Packet objects using Protocol Buffers.
*/
class Serdes_Nav_Message
{
public:
Serdes_Nav_Message()
{
// Verify that the version of the library that we linked against is
// compatible with the version of the headers we compiled against.
GOOGLE_PROTOBUF_VERIFY_VERSION;
}
~Serdes_Nav_Message()
{
// google::protobuf::ShutdownProtobufLibrary();
}
inline Serdes_Nav_Message(const Serdes_Nav_Message& other) noexcept //!< Copy constructor
{
this->navmsg_ = other.navmsg_;
}
inline Serdes_Nav_Message& operator=(const Serdes_Nav_Message& rhs) noexcept //!< Copy assignment operator
{
this->navmsg_ = rhs.navmsg_;
return *this;
}
inline Serdes_Nav_Message(Serdes_Nav_Message&& other) noexcept //!< Move constructor
{
this->navmsg_ = std::move(other.navmsg_);
}
inline Serdes_Nav_Message& operator=(Serdes_Nav_Message&& other) noexcept //!< Move assignment operator
{
if (this != &other)
{
this->navmsg_ = std::move(other.navmsg_);
}
return *this;
}
inline std::string createProtobuffer(const std::shared_ptr<Nav_Message_Packet> nav_msg_packet) //!< Serialization into a string
{
navmsg_.Clear();
std::string data;
navmsg_.set_system(nav_msg_packet->system);
navmsg_.set_signal(nav_msg_packet->signal);
navmsg_.set_prn(nav_msg_packet->prn);
navmsg_.set_tow_at_current_symbol_ms(nav_msg_packet->tow_at_current_symbol_ms);
navmsg_.set_nav_message(nav_msg_packet->nav_message);
navmsg_.SerializeToString(&data);
return data;
}
inline Nav_Message_Packet readProtobuffer(const gnss_sdr::navMsg& msg) const //!< Deserialization
{
Nav_Message_Packet navmsg;
navmsg.system = msg.system();
navmsg.signal = msg.signal();
navmsg.prn = msg.prn();
navmsg.tow_at_current_symbol_ms = msg.tow_at_current_symbol_ms();
navmsg.nav_message = msg.nav_message();
return navmsg;
}
private:
gnss_sdr::navMsg navmsg_{};
};
/** \} */
/** \} */
#endif // GNSS_SDR_SERDES_NAV_MESSAGE_H