Skip to content
Snippets Groups Projects
Commit b2008718 authored by Pep Martí Saumell's avatar Pep Martí Saumell
Browse files

[refactor] added receiver base class

parent 04750da9
No related branches found
No related tags found
3 merge requests!20new tag,!19new tag,!11Resolve "Add Novatel raw data stream"
......@@ -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
......
#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
#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
#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_
#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
#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
#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();
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment