From b20087184304d6f29d72cd5606ac20274dacaf8a Mon Sep 17 00:00:00 2001 From: PepMS <jmarti@iri.upc.edu> Date: Mon, 11 May 2020 09:01:09 +0200 Subject: [PATCH] [refactor] added receiver base class --- CMakeLists.txt | 4 +- .../{ublox_raw.h => receiver_raw_base.h} | 33 +++++----- .../gnss_utils/{ => receivers}/novatel_raw.h | 11 ++-- include/gnss_utils/receivers/ublox_raw.h | 22 +++++++ src/novatel_raw.cpp | 0 src/receiver_raw_base.cpp | 34 ++++++++++ src/receivers/novatel_raw.cpp | 66 +++++++++++++++++++ src/{ => receivers}/ublox_raw.cpp | 31 ++------- 8 files changed, 151 insertions(+), 50 deletions(-) rename include/gnss_utils/{ublox_raw.h => receiver_raw_base.h} (56%) rename include/gnss_utils/{ => receivers}/novatel_raw.h (74%) create mode 100644 include/gnss_utils/receivers/ublox_raw.h delete mode 100644 src/novatel_raw.cpp create mode 100644 src/receiver_raw_base.cpp create mode 100644 src/receivers/novatel_raw.cpp rename src/{ => receivers}/ublox_raw.cpp (72%) diff --git a/CMakeLists.txt b/CMakeLists.txt index b3beddc..9ec32ee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -85,7 +85,9 @@ SET(SOURCES src/navigation.cpp src/snapshot.cpp src/tdcp.cpp - src/ublox_raw.cpp) + src/receiver_raw_base.cpp + src/receivers/ublox_raw.cpp + src/receivers/novatel_raw.cpp) SET(RTKLIB_SRC ${RTKLIB_SRC_DIR}/pntpos.c diff --git a/include/gnss_utils/ublox_raw.h b/include/gnss_utils/receiver_raw_base.h similarity index 56% rename from include/gnss_utils/ublox_raw.h rename to include/gnss_utils/receiver_raw_base.h index f03bb73..61db460 100644 --- a/include/gnss_utils/ublox_raw.h +++ b/include/gnss_utils/receiver_raw_base.h @@ -1,11 +1,12 @@ -#ifndef INCLUDE_GNSS_UTILS_UBLOX_RAW_H_ -#define INCLUDE_GNSS_UTILS_UBLOX_RAW_H_ +#ifndef INCLUDE_GNSS_UTILS_RECEIVER_RAW_BASE_H_ +#define INCLUDE_GNSS_UTILS_RECEIVER_RAW_BASE_H_ #include "gnss_utils/observations.h" #include "gnss_utils/navigation.h" namespace GnssUtils { + enum RawDataType : int { NO = 0, @@ -20,45 +21,43 @@ enum RawDataType : int ERROR = -1 }; -class UBloxRaw +class ReceiverRawAbstract { public: - UBloxRaw(); - ~UBloxRaw(); + ReceiverRawAbstract(); + ~ReceiverRawAbstract(); - RawDataType addDataStream(const std::vector<u_int8_t>& data_stream); + virtual RawDataType addDataStream(const std::vector<uint8_t>& data_stream) = 0; const Observations& getObservations(); const Navigation& getNavigation(); RawDataType getRawDataType() const; -private: - raw_t raw_data_; - - Observations obs_; - Navigation nav_; +protected: + void updateObservations(); + raw_t raw_data_; RawDataType raw_data_type_; - void updateObservations(); + Observations obs_; + Navigation nav_; }; -inline const Observations& UBloxRaw::getObservations() +inline const Observations& ReceiverRawAbstract::getObservations() { return obs_; } -inline const Navigation& UBloxRaw::getNavigation() +inline const Navigation& ReceiverRawAbstract::getNavigation() { return nav_; } -inline RawDataType UBloxRaw::getRawDataType() const +inline RawDataType ReceiverRawAbstract::getRawDataType() const { return raw_data_type_; } } // namespace GnssUtils - -#endif // INCLUDE_GNSS_UTILS_UBLOX_RAW_H_ +#endif diff --git a/include/gnss_utils/novatel_raw.h b/include/gnss_utils/receivers/novatel_raw.h similarity index 74% rename from include/gnss_utils/novatel_raw.h rename to include/gnss_utils/receivers/novatel_raw.h index cb907ff..522cf8c 100644 --- a/include/gnss_utils/novatel_raw.h +++ b/include/gnss_utils/receivers/novatel_raw.h @@ -1,8 +1,7 @@ #ifndef INCLUDE_GNSS_UTILS_NOVATEL_RAW_H_ #define INCLUDE_GNSS_UTILS_NOVATEL_RAW_H_ -#include "gnss_utils/observations.h" -#include "gnss_utils/navigation.h" +#include "gnss_utils/receiver_raw_base.h" namespace GnssUtils { @@ -12,7 +11,7 @@ public: NovatelRaw(); ~NovatelRaw(); - + RawDataType addDataStream(const std::vector<uint8_t>& data_stream); private: raw_t raw_data_; @@ -20,10 +19,10 @@ private: Observations obs_; Navigation nav_; - RawDataType raw_data_type_; - void updateObservations(); -} + + RawDataType raw_data_type_; +}; } // namespace GnssUtils #endif \ No newline at end of file diff --git a/include/gnss_utils/receivers/ublox_raw.h b/include/gnss_utils/receivers/ublox_raw.h new file mode 100644 index 0000000..a1ba0c6 --- /dev/null +++ b/include/gnss_utils/receivers/ublox_raw.h @@ -0,0 +1,22 @@ +#ifndef INCLUDE_GNSS_UTILS_UBLOX_RAW_H_ +#define INCLUDE_GNSS_UTILS_UBLOX_RAW_H_ + +#include "gnss_utils/receiver_raw_base.h" + +namespace GnssUtils +{ +class UBloxRaw : public ReceiverRawAbstract +{ +public: + UBloxRaw(); + ~UBloxRaw(); + + RawDataType addDataStream(const std::vector<uint8_t>& data_stream); + +private: + +}; + +} // namespace GnssUtils + +#endif // INCLUDE_GNSS_UTILS_UBLOX_RAW_H_ diff --git a/src/novatel_raw.cpp b/src/novatel_raw.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/src/receiver_raw_base.cpp b/src/receiver_raw_base.cpp new file mode 100644 index 0000000..1e28ca9 --- /dev/null +++ b/src/receiver_raw_base.cpp @@ -0,0 +1,34 @@ +#include "gnss_utils/receiver_raw_base.h" + +namespace GnssUtils +{ +ReceiverRawAbstract::ReceiverRawAbstract() : raw_data_type_(NO) +{ + if (init_raw(&raw_data_, STRFMT_UBX) == 0) + { + assert("Failed when allocating memory for raw_t"); + return; + } +} + +ReceiverRawAbstract::~ReceiverRawAbstract() +{ + free_raw(&raw_data_); +} + +void ReceiverRawAbstract::updateObservations() +{ + // sort and remove duplicated observations + sortobs(&raw_data_.obs); + // std::cout << "---------------------------JUST BEFORE!-------------------" << std::endl; + // obs_.print(); + + obs_.clearObservations(); + for (int ii = 0; ii < raw_data_.obs.n; ++ii) + obs_.addObservation(raw_data_.obs.data[ii]); + + // std::cout << "--------------------------JUST AFTER!---------------------" << std::endl; + // obs_.print(); +} + +} // namespace GnssUtils \ No newline at end of file diff --git a/src/receivers/novatel_raw.cpp b/src/receivers/novatel_raw.cpp new file mode 100644 index 0000000..93cacf4 --- /dev/null +++ b/src/receivers/novatel_raw.cpp @@ -0,0 +1,66 @@ +#include "gnss_utils/receivers/novatel_raw.h" + +using namespace GnssUtils; + +NovatelRaw::NovatelRaw() : raw_data_type_(NO) +{ +} + +NovatelRaw::~NovatelRaw() +{ +} + +RawDataType NovatelRaw::addDataStream(const std::vector<uint8_t>& data_stream) +{ + + for (auto data_byte = data_stream.begin(); data_byte != data_stream.end(); ++data_byte) + { + raw_data_type_ = input_oem4(&raw_data_, (unsigned char)*data_byte); + + switch (raw_data_type_) + { + case NO: // + // std::cout << "0 received!\n"; + break; + + case OBS: // Observations + std::cout << "Observations Novatel received!\n"; + break; + + case NAV_EPH: // Ephemeris + std::cout << "Ephemeris received!\n"; + // std::cout << "Ephemeris copied!\n"; + break; + + case NAV_SBAS: // SBAS + std::cout << "SBAS received!\n"; + // std::cout << "SBAS added!\n"; + break; + + case NAV_ALM: // Almanac and ion/utc parameters + std::cout << "Almanac and ion/utc parameters received!\n"; + // std::cout << "Almanac freed!\n"; + break; + + // Not handled messages + case NAV_ANT: + std::cout << "UBloxRaw: Received antenna postion parameters. Not handled.\n"; + break; + case NAV_DGPS: + std::cout << "UBloxRaw: Received dgps correction. Not handled.\n"; + break; + case NAV_SSR: + std::cout << "UBloxRaw: Received ssr message. Not handled.\n"; + break; + case NAV_LEX: + std::cout << "UBloxRaw: Received lex message. Not handled.\n"; + break; + case ERROR: + std::cout << "UBloxRaw: Received error message. Not handled.\n"; + break; + default: + std::cout << "UBloxRaw: Received unknown message. Not handled.\n"; + break; + } + } +} \ No newline at end of file diff --git a/src/ublox_raw.cpp b/src/receivers/ublox_raw.cpp similarity index 72% rename from src/ublox_raw.cpp rename to src/receivers/ublox_raw.cpp index 7c12df5..e3529ee 100644 --- a/src/ublox_raw.cpp +++ b/src/receivers/ublox_raw.cpp @@ -1,22 +1,16 @@ -#include "gnss_utils/ublox_raw.h" +#include "gnss_utils/receivers/ublox_raw.h" using namespace GnssUtils; -UBloxRaw::UBloxRaw() : raw_data_type_(NO) +UBloxRaw::UBloxRaw() { - if (init_raw(&raw_data_, STRFMT_UBX) == 0) - { - assert("Failed when allocating memory for raw_t"); - return; - } -}; +} UBloxRaw::~UBloxRaw() { - free_raw(&raw_data_); -}; +} -RawDataType UBloxRaw::addDataStream(const std::vector<u_int8_t>& data_stream) +RawDataType UBloxRaw::addDataStream(const std::vector<uint8_t>& data_stream) { // Update type based on RTKLIB for (auto data_byte = data_stream.begin(); data_byte != data_stream.end(); ++data_byte) @@ -81,18 +75,3 @@ RawDataType UBloxRaw::addDataStream(const std::vector<u_int8_t>& data_stream) return raw_data_type_; } - -void UBloxRaw::updateObservations() -{ - // sort and remove duplicated observations - sortobs(&raw_data_.obs); - // std::cout << "---------------------------JUST BEFORE!-------------------" << std::endl; - // obs_.print(); - - obs_.clearObservations(); - for (int ii = 0; ii < raw_data_.obs.n; ++ii) - obs_.addObservation(raw_data_.obs.data[ii]); - - // std::cout << "--------------------------JUST AFTER!---------------------" << std::endl; - // obs_.print(); -} -- GitLab