Program Listing for File ubx_nav.hpp
↰ Return to documentation for file (include/ublox_dgnss_node/ubx/ubx_nav.hpp
)
// Copyright 2021 Australian Robotics Supplies & Technology
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef UBLOX_DGNSS_NODE__UBX__UBX_NAV_HPP_
#define UBLOX_DGNSS_NODE__UBX__UBX_NAV_HPP_
#include <unistd.h>
#include <memory>
#include <tuple>
#include "ublox_dgnss_node/ubx/ubx.hpp"
#include "ublox_dgnss_node/ubx/utils.hpp"
#include "ublox_dgnss_node/ubx/nav/ubx_nav_clock.hpp"
#include "ublox_dgnss_node/ubx/nav/ubx_nav_cov.hpp"
#include "ublox_dgnss_node/ubx/nav/ubx_nav_dop.hpp"
#include "ublox_dgnss_node/ubx/nav/ubx_nav_eoe.hpp"
#include "ublox_dgnss_node/ubx/nav/ubx_nav_posecef.hpp"
#include "ublox_dgnss_node/ubx/nav/ubx_nav_posllh.hpp"
#include "ublox_dgnss_node/ubx/nav/ubx_nav_hpposecef.hpp"
#include "ublox_dgnss_node/ubx/nav/ubx_nav_hpposllh.hpp"
#include "ublox_dgnss_node/ubx/nav/ubx_nav_odo.hpp"
#include "ublox_dgnss_node/ubx/nav/ubx_nav_orb.hpp"
#include "ublox_dgnss_node/ubx/nav/ubx_nav_sat.hpp"
#include "ublox_dgnss_node/ubx/nav/ubx_nav_sig.hpp"
#include "ublox_dgnss_node/ubx/nav/ubx_nav_resetodo.hpp"
#include "ublox_dgnss_node/ubx/nav/ubx_nav_pvt.hpp"
#include "ublox_dgnss_node/ubx/nav/ubx_nav_status.hpp"
#include "ublox_dgnss_node/ubx/nav/ubx_nav_relposned.hpp"
#include "ublox_dgnss_node/ubx/nav/ubx_nav_timeutc.hpp"
#include "ublox_dgnss_node/ubx/nav/ubx_nav_velecef.hpp"
#include "ublox_dgnss_node/ubx/nav/ubx_nav_velned.hpp"
namespace ubx::nav
{
typedef UBXFrameComms<nav::clock::NavClockPayload, usb::Connection> UbxNavClockFrameComms;
typedef UBXFrameComms<nav::cov::NavCovPayload, usb::Connection> UbxNavCovFrameComms;
typedef UBXFrameComms<nav::dop::NavDOPPayload, usb::Connection> UbxNavDOPFrameComms;
typedef UBXFrameComms<nav::eoe::NavEOEPayload, usb::Connection> UbxNavEOEFrameComms;
typedef UBXFrameComms<nav::posecef::NavPosECEFPayload, usb::Connection> UbxNavPosECEFFrameComms;
typedef UBXFrameComms<nav::hpposecef::NavHPPosECEFPayload,
usb::Connection> UbxNavHPPosECEFFrameComms;
typedef UBXFrameComms<nav::posllh::NavPosLLHPayload, usb::Connection> UbxNavPosLLHFrameComms;
typedef UBXFrameComms<nav::hpposllh::NavHPPosLLHPayload, usb::Connection> UbxNavHPPosLLHFrameComms;
typedef UBXFrameComms<nav::odo::NavOdoPayload, usb::Connection> UbxNavOdoFrameComms;
typedef UBXFrameComms<nav::orb::NavOrbPayload, usb::Connection> UbxNavOrbFrameComms;
typedef UBXFrameComms<nav::sat::NavSatPayload, usb::Connection> UbxNavSatFrameComms;
typedef UBXFrameComms<nav::sig::NavSigPayload, usb::Connection> UbxNavSigFrameComms;
typedef UBXFrameComms<nav::resetodo::NavResetOdoPayload, usb::Connection> UbxNavResetOdoFrameComms;
typedef UBXFrameComms<nav::pvt::NavPvtPayload, usb::Connection> UbxNavPvtFrameComms;
typedef UBXFrameComms<nav::status::NavStatusPayload, usb::Connection> UbxNavStatusFrameComms;
typedef UBXFrameComms<nav::relposned::NavRelPosNedPayload,
usb::Connection> UbxNavRelPosNedFrameComms;
typedef UBXFrameComms<nav::timeutc::NavTimeUTCPayload, usb::Connection> UbxNavTimeUTCFrameComms;
typedef UBXFrameComms<nav::velecef::NavVelECEFPayload, usb::Connection> UbxNavVelECEFFrameComms;
typedef UBXFrameComms<nav::velned::NavVelNEDPayload, usb::Connection> UbxNavVelNEDFrameComms;
class UbxNav
{
private:
std::shared_ptr<usb::Connection> usbc_;
std::shared_ptr<UbxNavClockFrameComms> clock_;
std::shared_ptr<UbxNavCovFrameComms> cov_;
std::shared_ptr<UbxNavDOPFrameComms> dop_;
std::shared_ptr<UbxNavEOEFrameComms> eoe_;
std::shared_ptr<UbxNavPosECEFFrameComms> posecef_;
std::shared_ptr<UbxNavHPPosECEFFrameComms> hpposecef_;
std::shared_ptr<UbxNavPosLLHFrameComms> posllh_;
std::shared_ptr<UbxNavHPPosLLHFrameComms> hpposllh_;
std::shared_ptr<UbxNavOdoFrameComms> odo_;
std::shared_ptr<UbxNavOrbFrameComms> orb_;
std::shared_ptr<UbxNavSatFrameComms> sat_;
std::shared_ptr<UbxNavSigFrameComms> sig_;
std::shared_ptr<UbxNavResetOdoFrameComms> resetodo_;
std::shared_ptr<UbxNavPvtFrameComms> pvt_;
std::shared_ptr<UbxNavStatusFrameComms> status_;
std::shared_ptr<UbxNavRelPosNedFrameComms> relposned_;
std::shared_ptr<UbxNavTimeUTCFrameComms> timeutc_;
std::shared_ptr<UbxNavVelECEFFrameComms> velecef_;
std::shared_ptr<UbxNavVelNEDFrameComms> velned_;
public:
explicit UbxNav(std::shared_ptr<usb::Connection> usbc)
{
usbc_ = usbc;
clock_ = std::make_shared<UbxNavClockFrameComms>(usbc_);
cov_ = std::make_shared<UbxNavCovFrameComms>(usbc_);
dop_ = std::make_shared<UbxNavDOPFrameComms>(usbc_);
eoe_ = std::make_shared<UbxNavEOEFrameComms>(usbc_);
posecef_ = std::make_shared<UbxNavPosECEFFrameComms>(usbc_);
hpposecef_ = std::make_shared<UbxNavHPPosECEFFrameComms>(usbc_);
posllh_ = std::make_shared<UbxNavPosLLHFrameComms>(usbc_);
hpposllh_ = std::make_shared<UbxNavHPPosLLHFrameComms>(usbc_);
odo_ = std::make_shared<UbxNavOdoFrameComms>(usbc_);
orb_ = std::make_shared<UbxNavOrbFrameComms>(usbc_);
sat_ = std::make_shared<UbxNavSatFrameComms>(usbc_);
sig_ = std::make_shared<UbxNavSigFrameComms>(usbc_);
resetodo_ = std::make_shared<UbxNavResetOdoFrameComms>(usbc_);
pvt_ = std::make_shared<UbxNavPvtFrameComms>(usbc_);
status_ = std::make_shared<UbxNavStatusFrameComms>(usbc_);
relposned_ = std::make_shared<UbxNavRelPosNedFrameComms>(usbc_);
timeutc_ = std::make_shared<UbxNavTimeUTCFrameComms>(usbc_);
velecef_ = std::make_shared<UbxNavVelECEFFrameComms>(usbc_);
velned_ = std::make_shared<UbxNavVelNEDFrameComms>(usbc_);
}
std::shared_ptr<UbxNavClockFrameComms> clock()
{
return clock_;
}
std::shared_ptr<UbxNavCovFrameComms> cov()
{
return cov_;
}
std::shared_ptr<UbxNavDOPFrameComms> dop()
{
return dop_;
}
std::shared_ptr<UbxNavEOEFrameComms> eoe()
{
return eoe_;
}
std::shared_ptr<UbxNavPosECEFFrameComms> posecef()
{
return posecef_;
}
std::shared_ptr<UbxNavHPPosECEFFrameComms> hpposecef()
{
return hpposecef_;
}
std::shared_ptr<UbxNavPosLLHFrameComms> posllh()
{
return posllh_;
}
std::shared_ptr<UbxNavHPPosLLHFrameComms> hpposllh()
{
return hpposllh_;
}
std::shared_ptr<UbxNavOdoFrameComms> odo()
{
return odo_;
}
std::shared_ptr<UbxNavOrbFrameComms> orb()
{
return orb_;
}
std::shared_ptr<UbxNavSatFrameComms> sat()
{
return sat_;
}
std::shared_ptr<UbxNavSigFrameComms> sig()
{
return sig_;
}
std::shared_ptr<UbxNavResetOdoFrameComms> resetodo()
{
return resetodo_;
}
std::shared_ptr<UbxNavPvtFrameComms> pvt()
{
return pvt_;
}
std::shared_ptr<UbxNavStatusFrameComms> status()
{
return status_;
}
std::shared_ptr<UbxNavRelPosNedFrameComms> relposned()
{
return relposned_;
}
std::shared_ptr<UbxNavTimeUTCFrameComms> timeutc()
{
return timeutc_;
}
std::shared_ptr<UbxNavVelECEFFrameComms> velecef()
{
return velecef_;
}
std::shared_ptr<UbxNavVelNEDFrameComms> velned()
{
return velned_;
}
void frame(std::shared_ptr<ubx::Frame> frame)
{
switch (frame->msg_id) {
case ubx::UBX_NAV_CLOCK:
clock_->frame(frame);
break;
case ubx::UBX_NAV_COV:
cov_->frame(frame);
break;
case ubx::UBX_NAV_DOP:
dop_->frame(frame);
break;
case ubx::UBX_NAV_EOE:
eoe_->frame(frame);
break;
case ubx::UBX_NAV_POSLLH:
posllh_->frame(frame);
break;
case ubx::UBX_NAV_HPPOSLLH:
hpposllh_->frame(frame);
break;
case ubx::UBX_NAV_POSECEF:
posecef_->frame(frame);
break;
case ubx::UBX_NAV_HPPOSECEF:
hpposecef_->frame(frame);
break;
case ubx::UBX_NAV_ODO:
odo_->frame(frame);
break;
case ubx::UBX_NAV_ORB:
orb_->frame(frame);
break;
case ubx::UBX_NAV_SAT:
sat_->frame(frame);
break;
case ubx::UBX_NAV_SIG:
sig_->frame(frame);
break;
case ubx::UBX_NAV_RESETODO:
resetodo_->frame(frame);
break;
case ubx::UBX_NAV_PVT:
pvt_->frame(frame);
break;
case ubx::UBX_NAV_STATUS:
status_->frame(frame);
break;
case ubx::UBX_NAV_RELPOSNED:
relposned_->frame(frame);
break;
case ubx::UBX_NAV_TIMEUTC:
timeutc_->frame(frame);
break;
case ubx::UBX_NAV_VELECEF:
velecef_->frame(frame);
break;
case ubx::UBX_NAV_VELNED:
velned_->frame(frame);
break;
default:
// break;
throw UbxValueException("unknown UBX_NAV msg_id: " + ubx::to_hex(frame->msg_id));
}
}
};
} // namespace ubx::nav
#endif // UBLOX_DGNSS_NODE__UBX__UBX_NAV_HPP_