82 [[nodiscard]] std::optional<double>
getValueAt(
size_t idx)
const override
134 if (
timeOutputs && (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESTATUS)) {
return static_cast<double>(
timeOutputs->timeStatus.timeOk()); }
137 if (
timeOutputs && (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESTATUS)) {
return static_cast<double>(
timeOutputs->timeStatus.dateOk()); }
140 if (
timeOutputs && (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESTATUS)) {
return static_cast<double>(
timeOutputs->timeStatus.utcTimeValid()); }
144 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_IMUSTATUS)) {
return static_cast<double>(
imuOutputs->imuStatus); }
147 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPMAG)) {
return static_cast<double>(
imuOutputs->uncompMag(0)); }
150 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPMAG)) {
return static_cast<double>(
imuOutputs->uncompMag(1)); }
153 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPMAG)) {
return static_cast<double>(
imuOutputs->uncompMag(2)); }
156 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPACCEL)) {
return static_cast<double>(
imuOutputs->uncompAccel(0)); }
159 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPACCEL)) {
return static_cast<double>(
imuOutputs->uncompAccel(1)); }
162 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPACCEL)) {
return static_cast<double>(
imuOutputs->uncompAccel(2)); }
165 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPGYRO)) {
return static_cast<double>(
imuOutputs->uncompGyro(0)); }
168 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPGYRO)) {
return static_cast<double>(
imuOutputs->uncompGyro(1)); }
171 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPGYRO)) {
return static_cast<double>(
imuOutputs->uncompGyro(2)); }
180 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTATHETA)) {
return static_cast<double>(
imuOutputs->deltaTime); }
183 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTATHETA)) {
return static_cast<double>(
imuOutputs->deltaTheta(0)); }
186 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTATHETA)) {
return static_cast<double>(
imuOutputs->deltaTheta(1)); }
189 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTATHETA)) {
return static_cast<double>(
imuOutputs->deltaTheta(2)); }
192 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTAVEL)) {
return static_cast<double>(
imuOutputs->deltaV(0)); }
195 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTAVEL)) {
return static_cast<double>(
imuOutputs->deltaV(1)); }
198 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTAVEL)) {
return static_cast<double>(
imuOutputs->deltaV(2)); }
219 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_ANGULARRATE)) {
return static_cast<double>(
imuOutputs->angularRate(0)); }
222 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_ANGULARRATE)) {
return static_cast<double>(
imuOutputs->angularRate(1)); }
225 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_ANGULARRATE)) {
return static_cast<double>(
imuOutputs->angularRate(2)); }
480 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_INSSTATUS)) {
return static_cast<double>(
insOutputs->insStatus.mode()); }
483 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_INSSTATUS)) {
return static_cast<double>(
insOutputs->insStatus.gpsFix()); }
486 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_INSSTATUS)) {
return static_cast<double>(
insOutputs->insStatus.errorIMU()); }
489 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_INSSTATUS)) {
return static_cast<double>(
insOutputs->insStatus.errorMagPres()); }
492 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_INSSTATUS)) {
return static_cast<double>(
insOutputs->insStatus.errorGnss()); }
495 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_INSSTATUS)) {
return static_cast<double>(
insOutputs->insStatus.gpsHeadingIns()); }
498 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_INSSTATUS)) {
return static_cast<double>(
insOutputs->insStatus.gpsCompass()); }
519 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELBODY)) {
return static_cast<double>(
insOutputs->velBody(0)); }
522 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELBODY)) {
return static_cast<double>(
insOutputs->velBody(1)); }
525 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELBODY)) {
return static_cast<double>(
insOutputs->velBody(2)); }
537 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELECEF)) {
return static_cast<double>(
insOutputs->velEcef(0)); }
540 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELECEF)) {
return static_cast<double>(
insOutputs->velEcef(1)); }
543 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELECEF)) {
return static_cast<double>(
insOutputs->velEcef(2)); }
546 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_MAGECEF)) {
return static_cast<double>(
insOutputs->magEcef(0)); }
549 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_MAGECEF)) {
return static_cast<double>(
insOutputs->magEcef(1)); }
552 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_MAGECEF)) {
return static_cast<double>(
insOutputs->magEcef(2)); }
555 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_ACCELECEF)) {
return static_cast<double>(
insOutputs->accelEcef(0)); }
558 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_ACCELECEF)) {
return static_cast<double>(
insOutputs->accelEcef(1)); }
561 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_ACCELECEF)) {
return static_cast<double>(
insOutputs->accelEcef(2)); }
564 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_LINEARACCELECEF)) {
return static_cast<double>(
insOutputs->linearAccelEcef(0)); }
567 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_LINEARACCELECEF)) {
return static_cast<double>(
insOutputs->linearAccelEcef(1)); }
570 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_LINEARACCELECEF)) {
return static_cast<double>(
insOutputs->linearAccelEcef(2)); }
725 std::vector<std::string> descriptors;
730 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESTARTUP)
732 descriptors.emplace_back(
"Time::TimeStartup [ns]");
734 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEGPS)
736 descriptors.emplace_back(
"Time::TimeGps [ns]");
738 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_GPSTOW)
740 descriptors.emplace_back(
"Time::GpsTow [ns]");
742 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_GPSWEEK)
744 descriptors.emplace_back(
"Time::GpsWeek");
746 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESYNCIN)
748 descriptors.emplace_back(
"Time::TimeSyncIn [ns]");
750 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEGPSPPS)
752 descriptors.emplace_back(
"Time::TimeGpsPps [ns]");
754 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEUTC)
756 descriptors.emplace_back(
"Time::TimeUTC::year");
757 descriptors.emplace_back(
"Time::TimeUTC::month");
758 descriptors.emplace_back(
"Time::TimeUTC::day");
759 descriptors.emplace_back(
"Time::TimeUTC::hour");
760 descriptors.emplace_back(
"Time::TimeUTC::min");
761 descriptors.emplace_back(
"Time::TimeUTC::sec");
762 descriptors.emplace_back(
"Time::TimeUTC::ms");
764 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_SYNCINCNT)
766 descriptors.emplace_back(
"Time::SyncInCnt");
768 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_SYNCOUTCNT)
770 descriptors.emplace_back(
"Time::SyncOutCnt");
772 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESTATUS)
774 descriptors.emplace_back(
"Time::TimeStatus::timeOk");
775 descriptors.emplace_back(
"Time::TimeStatus::dateOk");
776 descriptors.emplace_back(
"Time::TimeStatus::utcTimeValid");
782 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_IMUSTATUS)
784 descriptors.emplace_back(
"IMU::ImuStatus");
786 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPMAG)
788 descriptors.emplace_back(
"IMU::UncompMag::X [Gauss]");
789 descriptors.emplace_back(
"IMU::UncompMag::Y [Gauss]");
790 descriptors.emplace_back(
"IMU::UncompMag::Z [Gauss]");
792 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPACCEL)
794 descriptors.emplace_back(
"IMU::UncompAccel::X [m/s^2]");
795 descriptors.emplace_back(
"IMU::UncompAccel::Y [m/s^2]");
796 descriptors.emplace_back(
"IMU::UncompAccel::Z [m/s^2]");
798 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPGYRO)
800 descriptors.emplace_back(
"IMU::UncompGyro::X [rad/s]");
801 descriptors.emplace_back(
"IMU::UncompGyro::Y [rad/s]");
802 descriptors.emplace_back(
"IMU::UncompGyro::Z [rad/s]");
804 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_TEMP)
806 descriptors.emplace_back(
"IMU::Temp [Celsius]");
808 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_PRES)
810 descriptors.emplace_back(
"IMU::Pres [kPa]");
812 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTATHETA)
814 descriptors.emplace_back(
"IMU::DeltaTime [s]");
815 descriptors.emplace_back(
"IMU::DeltaTheta::X [deg]");
816 descriptors.emplace_back(
"IMU::DeltaTheta::Y [deg]");
817 descriptors.emplace_back(
"IMU::DeltaTheta::Z [deg]");
819 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTAVEL)
821 descriptors.emplace_back(
"IMU::DeltaVel::X [m/s]");
822 descriptors.emplace_back(
"IMU::DeltaVel::Y [m/s]");
823 descriptors.emplace_back(
"IMU::DeltaVel::Z [m/s]");
825 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_MAG)
827 descriptors.emplace_back(
"IMU::Mag::X [Gauss]");
828 descriptors.emplace_back(
"IMU::Mag::Y [Gauss]");
829 descriptors.emplace_back(
"IMU::Mag::Z [Gauss]");
831 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_ACCEL)
833 descriptors.emplace_back(
"IMU::Accel::X [m/s^2]");
834 descriptors.emplace_back(
"IMU::Accel::Y [m/s^2]");
835 descriptors.emplace_back(
"IMU::Accel::Z [m/s^2]");
837 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_ANGULARRATE)
839 descriptors.emplace_back(
"IMU::AngularRate::X [rad/s]");
840 descriptors.emplace_back(
"IMU::AngularRate::Y [rad/s]");
841 descriptors.emplace_back(
"IMU::AngularRate::Z [rad/s]");
847 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_UTC)
849 descriptors.emplace_back(
"GNSS1::UTC::year");
850 descriptors.emplace_back(
"GNSS1::UTC::month");
851 descriptors.emplace_back(
"GNSS1::UTC::day");
852 descriptors.emplace_back(
"GNSS1::UTC::hour");
853 descriptors.emplace_back(
"GNSS1::UTC::min");
854 descriptors.emplace_back(
"GNSS1::UTC::sec");
855 descriptors.emplace_back(
"GNSS1::UTC::ms");
857 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TOW)
859 descriptors.emplace_back(
"GNSS1::Tow [ns]");
861 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_WEEK)
863 descriptors.emplace_back(
"GNSS1::Week");
865 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_NUMSATS)
867 descriptors.emplace_back(
"GNSS1::NumSats");
869 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_FIX)
871 descriptors.emplace_back(
"GNSS1::Fix");
873 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSLLA)
875 descriptors.emplace_back(
"GNSS1::PosLla::latitude [deg]");
876 descriptors.emplace_back(
"GNSS1::PosLla::longitude [deg]");
877 descriptors.emplace_back(
"GNSS1::PosLla::altitude [m]");
879 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSECEF)
881 descriptors.emplace_back(
"GNSS1::PosEcef::X [m]");
882 descriptors.emplace_back(
"GNSS1::PosEcef::Y [m]");
883 descriptors.emplace_back(
"GNSS1::PosEcef::Z [m]");
885 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELNED)
887 descriptors.emplace_back(
"GNSS1::VelNed::N [m/s]");
888 descriptors.emplace_back(
"GNSS1::VelNed::E [m/s]");
889 descriptors.emplace_back(
"GNSS1::VelNed::D [m/s]");
891 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELECEF)
893 descriptors.emplace_back(
"GNSS1::VelEcef::X [m/s]");
894 descriptors.emplace_back(
"GNSS1::VelEcef::Y [m/s]");
895 descriptors.emplace_back(
"GNSS1::VelEcef::Z [m/s]");
897 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSU)
899 descriptors.emplace_back(
"GNSS1::PosU::N [m]");
900 descriptors.emplace_back(
"GNSS1::PosU::E [m]");
901 descriptors.emplace_back(
"GNSS1::PosU::D [m]");
903 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELU)
905 descriptors.emplace_back(
"GNSS1::VelU [m/s]");
907 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEU)
909 descriptors.emplace_back(
"GNSS1::TimeU [s]");
911 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEINFO)
913 descriptors.emplace_back(
"GNSS1::TimeInfo::Status::timeOk");
914 descriptors.emplace_back(
"GNSS1::TimeInfo::Status::dateOk");
915 descriptors.emplace_back(
"GNSS1::TimeInfo::Status::utcTimeValid");
916 descriptors.emplace_back(
"GNSS1::TimeInfo::LeapSeconds");
918 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_DOP)
920 descriptors.emplace_back(
"GNSS1::DOP::g");
921 descriptors.emplace_back(
"GNSS1::DOP::p");
922 descriptors.emplace_back(
"GNSS1::DOP::t");
923 descriptors.emplace_back(
"GNSS1::DOP::v");
924 descriptors.emplace_back(
"GNSS1::DOP::h");
925 descriptors.emplace_back(
"GNSS1::DOP::n");
926 descriptors.emplace_back(
"GNSS1::DOP::e");
928 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_SATINFO)
930 descriptors.emplace_back(
"GNSS1::SatInfo::NumSats");
931 for (
auto& satellite :
gnss1Outputs->satInfo.satellites)
933 SatId satId(
getSatSys(satellite.sys),
static_cast<uint16_t
>(satellite.svId));
934 descriptors.push_back(fmt::format(
"GNSS1::SatInfo::{} - flag Healthy", satId));
935 descriptors.push_back(fmt::format(
"GNSS1::SatInfo::{} - flag Almanac", satId));
936 descriptors.push_back(fmt::format(
"GNSS1::SatInfo::{} - flag Ephemeris", satId));
937 descriptors.push_back(fmt::format(
"GNSS1::SatInfo::{} - flag DifferentialCorrection", satId));
938 descriptors.push_back(fmt::format(
"GNSS1::SatInfo::{} - flag UsedForNavigation", satId));
939 descriptors.push_back(fmt::format(
"GNSS1::SatInfo::{} - flag AzimuthElevationValid", satId));
940 descriptors.push_back(fmt::format(
"GNSS1::SatInfo::{} - flag UsedForRTK", satId));
941 descriptors.push_back(fmt::format(
"GNSS1::SatInfo::{} - cno", satId));
942 descriptors.push_back(fmt::format(
"GNSS1::SatInfo::{} - qi", satId));
943 descriptors.push_back(fmt::format(
"GNSS1::SatInfo::{} - el", satId));
944 descriptors.push_back(fmt::format(
"GNSS1::SatInfo::{} - az", satId));
947 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_RAWMEAS)
949 descriptors.emplace_back(
"GNSS1::RawMeas::Tow [s]");
950 descriptors.emplace_back(
"GNSS1::RawMeas::Week");
951 descriptors.emplace_back(
"GNSS1::RawMeas::NumSats");
954 SatSigId satSigId = satellite.toSatSigId();
955 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - freq", satSigId));
956 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - chan", satSigId));
957 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - slot", satSigId));
958 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - cno", satSigId));
959 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - flag Searching", satSigId));
960 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - flag Tracking", satSigId));
961 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - flag TimeValid", satSigId));
962 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - flag CodeLock", satSigId));
963 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - flag PhaseLock", satSigId));
964 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - flag PhaseHalfAmbiguity", satSigId));
965 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - flag PhaseHalfSub", satSigId));
966 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - flag PhaseSlip", satSigId));
967 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - flag PseudorangeSmoothed", satSigId));
968 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - pr", satSigId));
969 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - cp", satSigId));
970 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - dp", satSigId));
977 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_VPESTATUS)
979 descriptors.emplace_back(
"Att::VpeStatus::AttitudeQuality");
980 descriptors.emplace_back(
"Att::VpeStatus::GyroSaturation");
981 descriptors.emplace_back(
"Att::VpeStatus::GyroSaturationRecovery");
982 descriptors.emplace_back(
"Att::VpeStatus::MagDisturbance");
983 descriptors.emplace_back(
"Att::VpeStatus::MagSaturation");
984 descriptors.emplace_back(
"Att::VpeStatus::AccDisturbance");
985 descriptors.emplace_back(
"Att::VpeStatus::AccSaturation");
986 descriptors.emplace_back(
"Att::VpeStatus::KnownMagDisturbance");
987 descriptors.emplace_back(
"Att::VpeStatus::KnownAccelDisturbance");
989 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_YAWPITCHROLL)
991 descriptors.emplace_back(
"Att::YawPitchRoll::Y [deg]");
992 descriptors.emplace_back(
"Att::YawPitchRoll::P [deg]");
993 descriptors.emplace_back(
"Att::YawPitchRoll::R [deg]");
995 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_QUATERNION)
997 descriptors.emplace_back(
"Att::Quaternion::w");
998 descriptors.emplace_back(
"Att::Quaternion::x");
999 descriptors.emplace_back(
"Att::Quaternion::y");
1000 descriptors.emplace_back(
"Att::Quaternion::z");
1002 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_DCM)
1004 descriptors.emplace_back(
"Att::DCM::0-0,");
1005 descriptors.emplace_back(
"Att::DCM::0-1");
1006 descriptors.emplace_back(
"Att::DCM::0-2");
1007 descriptors.emplace_back(
"Att::DCM::1-0");
1008 descriptors.emplace_back(
"Att::DCM::1-1");
1009 descriptors.emplace_back(
"Att::DCM::1-2");
1010 descriptors.emplace_back(
"Att::DCM::2-0");
1011 descriptors.emplace_back(
"Att::DCM::2-1");
1012 descriptors.emplace_back(
"Att::DCM::2-2");
1014 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_MAGNED)
1016 descriptors.emplace_back(
"Att::MagNed::N [Gauss]");
1017 descriptors.emplace_back(
"Att::MagNed::E [Gauss]");
1018 descriptors.emplace_back(
"Att::MagNed::D [Gauss]");
1020 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_ACCELNED)
1022 descriptors.emplace_back(
"Att::AccelNed::N [m/s^2]");
1023 descriptors.emplace_back(
"Att::AccelNed::E [m/s^2]");
1024 descriptors.emplace_back(
"Att::AccelNed::D [m/s^2]");
1026 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_LINEARACCELBODY)
1028 descriptors.emplace_back(
"Att::LinearAccelBody::X [m/s^2]");
1029 descriptors.emplace_back(
"Att::LinearAccelBody::Y [m/s^2]");
1030 descriptors.emplace_back(
"Att::LinearAccelBody::Z [m/s^2]");
1032 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_LINEARACCELNED)
1034 descriptors.emplace_back(
"Att::LinearAccelNed::N [m/s^2]");
1035 descriptors.emplace_back(
"Att::LinearAccelNed::E [m/s^2]");
1036 descriptors.emplace_back(
"Att::LinearAccelNed::D [m/s^2]");
1038 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_YPRU)
1040 descriptors.emplace_back(
"Att::YprU::Y [deg]");
1041 descriptors.emplace_back(
"Att::YprU::P [deg]");
1042 descriptors.emplace_back(
"Att::YprU::R [deg]");
1048 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_INSSTATUS)
1050 descriptors.emplace_back(
"INS::InsStatus::Mode");
1051 descriptors.emplace_back(
"INS::InsStatus::GpsFix");
1052 descriptors.emplace_back(
"INS::InsStatus::Error::IMU");
1053 descriptors.emplace_back(
"INS::InsStatus::Error::MagPres");
1054 descriptors.emplace_back(
"INS::InsStatus::Error::GNSS");
1055 descriptors.emplace_back(
"INS::InsStatus::GpsHeadingIns");
1056 descriptors.emplace_back(
"INS::InsStatus::GpsCompass");
1058 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSLLA)
1060 descriptors.emplace_back(
"INS::PosLla::latitude [deg]");
1061 descriptors.emplace_back(
"INS::PosLla::longitude [deg]");
1062 descriptors.emplace_back(
"INS::PosLla::altitude [m]");
1064 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSECEF)
1066 descriptors.emplace_back(
"INS::PosEcef::X [m]");
1067 descriptors.emplace_back(
"INS::PosEcef::Y [m]");
1068 descriptors.emplace_back(
"INS::PosEcef::Z [m]");
1070 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELBODY)
1072 descriptors.emplace_back(
"INS::VelBody::X [m/s]");
1073 descriptors.emplace_back(
"INS::VelBody::Y [m/s]");
1074 descriptors.emplace_back(
"INS::VelBody::Z [m/s]");
1076 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELNED)
1078 descriptors.emplace_back(
"INS::VelNed::N [m/s]");
1079 descriptors.emplace_back(
"INS::VelNed::E [m/s]");
1080 descriptors.emplace_back(
"INS::VelNed::D [m/s]");
1082 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELECEF)
1084 descriptors.emplace_back(
"INS::VelEcef::X [m/s]");
1085 descriptors.emplace_back(
"INS::VelEcef::Y [m/s]");
1086 descriptors.emplace_back(
"INS::VelEcef::Z [m/s]");
1088 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_MAGECEF)
1090 descriptors.emplace_back(
"INS::MagEcef::X [Gauss]");
1091 descriptors.emplace_back(
"INS::MagEcef::Y [Gauss]");
1092 descriptors.emplace_back(
"INS::MagEcef::Z [Gauss]");
1094 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_ACCELECEF)
1096 descriptors.emplace_back(
"INS::AccelEcef::X [m/s^2]");
1097 descriptors.emplace_back(
"INS::AccelEcef::Y [m/s^2]");
1098 descriptors.emplace_back(
"INS::AccelEcef::Z [m/s^2]");
1100 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_LINEARACCELECEF)
1102 descriptors.emplace_back(
"INS::LinearAccelEcef::X [m/s^2]");
1103 descriptors.emplace_back(
"INS::LinearAccelEcef::Y [m/s^2]");
1104 descriptors.emplace_back(
"INS::LinearAccelEcef::Z [m/s^2]");
1106 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSU)
1108 descriptors.emplace_back(
"INS::PosU [m]");
1110 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELU)
1112 descriptors.emplace_back(
"INS::VelU [m/s]");
1118 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_UTC)
1120 descriptors.emplace_back(
"GNSS2::UTC::year");
1121 descriptors.emplace_back(
"GNSS2::UTC::month");
1122 descriptors.emplace_back(
"GNSS2::UTC::day");
1123 descriptors.emplace_back(
"GNSS2::UTC::hour");
1124 descriptors.emplace_back(
"GNSS2::UTC::min");
1125 descriptors.emplace_back(
"GNSS2::UTC::sec");
1126 descriptors.emplace_back(
"GNSS2::UTC::ms");
1128 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TOW)
1130 descriptors.emplace_back(
"GNSS2::Tow [ns]");
1132 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_WEEK)
1134 descriptors.emplace_back(
"GNSS2::Week");
1136 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_NUMSATS)
1138 descriptors.emplace_back(
"GNSS2::NumSats");
1140 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_FIX)
1142 descriptors.emplace_back(
"GNSS2::Fix");
1144 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSLLA)
1146 descriptors.emplace_back(
"GNSS2::PosLla::latitude [deg]");
1147 descriptors.emplace_back(
"GNSS2::PosLla::longitude [deg]");
1148 descriptors.emplace_back(
"GNSS2::PosLla::altitude [m]");
1150 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSECEF)
1152 descriptors.emplace_back(
"GNSS2::PosEcef::X [m]");
1153 descriptors.emplace_back(
"GNSS2::PosEcef::Y [m]");
1154 descriptors.emplace_back(
"GNSS2::PosEcef::Z [m]");
1156 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELNED)
1158 descriptors.emplace_back(
"GNSS2::VelNed::N [m/s]");
1159 descriptors.emplace_back(
"GNSS2::VelNed::E [m/s]");
1160 descriptors.emplace_back(
"GNSS2::VelNed::D [m/s]");
1162 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELECEF)
1164 descriptors.emplace_back(
"GNSS2::VelEcef::X [m/s]");
1165 descriptors.emplace_back(
"GNSS2::VelEcef::Y [m/s]");
1166 descriptors.emplace_back(
"GNSS2::VelEcef::Z [m/s]");
1168 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSU)
1170 descriptors.emplace_back(
"GNSS2::PosU::N [m]");
1171 descriptors.emplace_back(
"GNSS2::PosU::E [m]");
1172 descriptors.emplace_back(
"GNSS2::PosU::D [m]");
1174 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELU)
1176 descriptors.emplace_back(
"GNSS2::VelU [m/s]");
1178 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEU)
1180 descriptors.emplace_back(
"GNSS2::TimeU [s]");
1182 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEINFO)
1184 descriptors.emplace_back(
"GNSS2::TimeInfo::Status::timeOk");
1185 descriptors.emplace_back(
"GNSS2::TimeInfo::Status::dateOk");
1186 descriptors.emplace_back(
"GNSS2::TimeInfo::Status::utcTimeValid");
1187 descriptors.emplace_back(
"GNSS2::TimeInfo::LeapSeconds");
1189 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_DOP)
1191 descriptors.emplace_back(
"GNSS2::DOP::g");
1192 descriptors.emplace_back(
"GNSS2::DOP::p");
1193 descriptors.emplace_back(
"GNSS2::DOP::t");
1194 descriptors.emplace_back(
"GNSS2::DOP::v");
1195 descriptors.emplace_back(
"GNSS2::DOP::h");
1196 descriptors.emplace_back(
"GNSS2::DOP::n");
1197 descriptors.emplace_back(
"GNSS2::DOP::e");
1199 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_SATINFO)
1201 descriptors.emplace_back(
"GNSS2::SatInfo::NumSats");
1202 for (
auto& satellite :
gnss2Outputs->satInfo.satellites)
1204 SatId satId(
getSatSys(satellite.sys),
static_cast<uint16_t
>(satellite.svId));
1205 descriptors.push_back(fmt::format(
"GNSS2::SatInfo::{} - flag Healthy", satId));
1206 descriptors.push_back(fmt::format(
"GNSS2::SatInfo::{} - flag Almanac", satId));
1207 descriptors.push_back(fmt::format(
"GNSS2::SatInfo::{} - flag Ephemeris", satId));
1208 descriptors.push_back(fmt::format(
"GNSS2::SatInfo::{} - flag DifferentialCorrection", satId));
1209 descriptors.push_back(fmt::format(
"GNSS2::SatInfo::{} - flag UsedForNavigation", satId));
1210 descriptors.push_back(fmt::format(
"GNSS2::SatInfo::{} - flag AzimuthElevationValid", satId));
1211 descriptors.push_back(fmt::format(
"GNSS2::SatInfo::{} - flag UsedForRTK", satId));
1212 descriptors.push_back(fmt::format(
"GNSS2::SatInfo::{} - cno", satId));
1213 descriptors.push_back(fmt::format(
"GNSS2::SatInfo::{} - qi", satId));
1214 descriptors.push_back(fmt::format(
"GNSS2::SatInfo::{} - el", satId));
1215 descriptors.push_back(fmt::format(
"GNSS2::SatInfo::{} - az", satId));
1218 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_RAWMEAS)
1220 descriptors.emplace_back(
"GNSS2::RawMeas::Tow [s]");
1221 descriptors.emplace_back(
"GNSS2::RawMeas::Week");
1222 descriptors.emplace_back(
"GNSS2::RawMeas::NumSats");
1225 SatSigId satSigId = satellite.toSatSigId();
1226 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - freq", satSigId));
1227 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - chan", satSigId));
1228 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - slot", satSigId));
1229 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - cno", satSigId));
1230 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - flag Searching", satSigId));
1231 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - flag Tracking", satSigId));
1232 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - flag TimeValid", satSigId));
1233 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - flag CodeLock", satSigId));
1234 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - flag PhaseLock", satSigId));
1235 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - flag PhaseHalfAmbiguity", satSigId));
1236 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - flag PhaseHalfSub", satSigId));
1237 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - flag PhaseSlip", satSigId));
1238 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - flag PseudorangeSmoothed", satSigId));
1239 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - pr", satSigId));
1240 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - cp", satSigId));
1241 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - dp", satSigId));
1251 [[nodiscard]] std::optional<double>
getDynamicDataAt(
const std::string& descriptor)
const override
1256 if (descriptor ==
"Time::TimeStartup [ns]") {
return static_cast<double>(
timeOutputs->timeStartup); }
1257 if (descriptor ==
"Time::TimeGps [ns]") {
return static_cast<double>(
timeOutputs->timeGps); }
1258 if (descriptor ==
"Time::GpsTow [ns]") {
return static_cast<double>(
timeOutputs->gpsTow); }
1259 if (descriptor ==
"Time::GpsWeek") {
return static_cast<double>(
timeOutputs->gpsWeek); }
1260 if (descriptor ==
"Time::TimeSyncIn [ns]") {
return static_cast<double>(
timeOutputs->timeSyncIn); }
1261 if (descriptor ==
"Time::TimeGpsPps [ns]") {
return static_cast<double>(
timeOutputs->timePPS); }
1262 if (descriptor ==
"Time::TimeUTC::year") {
return static_cast<double>(
timeOutputs->timeUtc.year); }
1263 if (descriptor ==
"Time::TimeUTC::month") {
return static_cast<double>(
timeOutputs->timeUtc.month); }
1264 if (descriptor ==
"Time::TimeUTC::day") {
return static_cast<double>(
timeOutputs->timeUtc.day); }
1265 if (descriptor ==
"Time::TimeUTC::hour") {
return static_cast<double>(
timeOutputs->timeUtc.hour); }
1266 if (descriptor ==
"Time::TimeUTC::min") {
return static_cast<double>(
timeOutputs->timeUtc.min); }
1267 if (descriptor ==
"Time::TimeUTC::sec") {
return static_cast<double>(
timeOutputs->timeUtc.sec); }
1268 if (descriptor ==
"Time::TimeUTC::ms") {
return static_cast<double>(
timeOutputs->timeUtc.ms); }
1269 if (descriptor ==
"Time::SyncInCnt") {
return static_cast<double>(
timeOutputs->syncInCnt); }
1270 if (descriptor ==
"Time::SyncOutCnt") {
return static_cast<double>(
timeOutputs->syncOutCnt); }
1271 if (descriptor ==
"Time::TimeStatus::timeOk") {
return static_cast<double>(
timeOutputs->timeStatus.timeOk()); }
1272 if (descriptor ==
"Time::TimeStatus::dateOk") {
return static_cast<double>(
timeOutputs->timeStatus.dateOk()); }
1273 if (descriptor ==
"Time::TimeStatus::utcTimeValid") {
return static_cast<double>(
timeOutputs->timeStatus.utcTimeValid()); }
1278 if (descriptor ==
"IMU::ImuStatus") {
return static_cast<double>(
imuOutputs->imuStatus); }
1279 if (descriptor ==
"IMU::UncompMag::X [Gauss]") {
return static_cast<double>(
imuOutputs->uncompMag(0)); }
1280 if (descriptor ==
"IMU::UncompMag::Y [Gauss]") {
return static_cast<double>(
imuOutputs->uncompMag(1)); }
1281 if (descriptor ==
"IMU::UncompMag::Z [Gauss]") {
return static_cast<double>(
imuOutputs->uncompMag(2)); }
1282 if (descriptor ==
"IMU::UncompAccel::X [m/s^2]") {
return static_cast<double>(
imuOutputs->uncompAccel(0)); }
1283 if (descriptor ==
"IMU::UncompAccel::Y [m/s^2]") {
return static_cast<double>(
imuOutputs->uncompAccel(1)); }
1284 if (descriptor ==
"IMU::UncompAccel::Z [m/s^2]") {
return static_cast<double>(
imuOutputs->uncompAccel(2)); }
1285 if (descriptor ==
"IMU::UncompGyro::X [rad/s]") {
return static_cast<double>(
imuOutputs->uncompGyro(0)); }
1286 if (descriptor ==
"IMU::UncompGyro::Y [rad/s]") {
return static_cast<double>(
imuOutputs->uncompGyro(1)); }
1287 if (descriptor ==
"IMU::UncompGyro::Z [rad/s]") {
return static_cast<double>(
imuOutputs->uncompGyro(2)); }
1288 if (descriptor ==
"IMU::Temp [Celsius]") {
return static_cast<double>(
imuOutputs->temp); }
1289 if (descriptor ==
"IMU::Pres [kPa]") {
return static_cast<double>(
imuOutputs->pres); }
1290 if (descriptor ==
"IMU::DeltaTime [s]") {
return static_cast<double>(
imuOutputs->deltaTime); }
1291 if (descriptor ==
"IMU::DeltaTheta::X [deg]") {
return static_cast<double>(
imuOutputs->deltaTheta(0)); }
1292 if (descriptor ==
"IMU::DeltaTheta::Y [deg]") {
return static_cast<double>(
imuOutputs->deltaTheta(1)); }
1293 if (descriptor ==
"IMU::DeltaTheta::Z [deg]") {
return static_cast<double>(
imuOutputs->deltaTheta(2)); }
1294 if (descriptor ==
"IMU::DeltaVel::X [m/s]") {
return static_cast<double>(
imuOutputs->deltaV(0)); }
1295 if (descriptor ==
"IMU::DeltaVel::Y [m/s]") {
return static_cast<double>(
imuOutputs->deltaV(1)); }
1296 if (descriptor ==
"IMU::DeltaVel::Z [m/s]") {
return static_cast<double>(
imuOutputs->deltaV(2)); }
1297 if (descriptor ==
"IMU::Mag::X [Gauss]") {
return static_cast<double>(
imuOutputs->mag(0)); }
1298 if (descriptor ==
"IMU::Mag::Y [Gauss]") {
return static_cast<double>(
imuOutputs->mag(1)); }
1299 if (descriptor ==
"IMU::Mag::Z [Gauss]") {
return static_cast<double>(
imuOutputs->mag(2)); }
1300 if (descriptor ==
"IMU::Accel::X [m/s^2]") {
return static_cast<double>(
imuOutputs->accel(0)); }
1301 if (descriptor ==
"IMU::Accel::Y [m/s^2]") {
return static_cast<double>(
imuOutputs->accel(1)); }
1302 if (descriptor ==
"IMU::Accel::Z [m/s^2]") {
return static_cast<double>(
imuOutputs->accel(2)); }
1303 if (descriptor ==
"IMU::AngularRate::X [rad/s]") {
return static_cast<double>(
imuOutputs->angularRate(0)); }
1304 if (descriptor ==
"IMU::AngularRate::Y [rad/s]") {
return static_cast<double>(
imuOutputs->angularRate(1)); }
1305 if (descriptor ==
"IMU::AngularRate::Z [rad/s]") {
return static_cast<double>(
imuOutputs->angularRate(2)); }
1310 if (descriptor ==
"GNSS1::UTC::year") {
return static_cast<double>(
gnss1Outputs->timeUtc.year); }
1311 if (descriptor ==
"GNSS1::UTC::month") {
return static_cast<double>(
gnss1Outputs->timeUtc.month); }
1312 if (descriptor ==
"GNSS1::UTC::day") {
return static_cast<double>(
gnss1Outputs->timeUtc.day); }
1313 if (descriptor ==
"GNSS1::UTC::hour") {
return static_cast<double>(
gnss1Outputs->timeUtc.hour); }
1314 if (descriptor ==
"GNSS1::UTC::min") {
return static_cast<double>(
gnss1Outputs->timeUtc.min); }
1315 if (descriptor ==
"GNSS1::UTC::sec") {
return static_cast<double>(
gnss1Outputs->timeUtc.sec); }
1316 if (descriptor ==
"GNSS1::UTC::ms") {
return static_cast<double>(
gnss1Outputs->timeUtc.ms); }
1317 if (descriptor ==
"GNSS1::Tow [ns]") {
return static_cast<double>(
gnss1Outputs->tow); }
1318 if (descriptor ==
"GNSS1::Week") {
return static_cast<double>(
gnss1Outputs->week); }
1319 if (descriptor ==
"GNSS1::NumSats") {
return static_cast<double>(
gnss1Outputs->numSats); }
1320 if (descriptor ==
"GNSS1::Fix") {
return static_cast<double>(
gnss1Outputs->fix); }
1321 if (descriptor ==
"GNSS1::PosLla::latitude [deg]") {
return static_cast<double>(
gnss1Outputs->posLla(0)); }
1322 if (descriptor ==
"GNSS1::PosLla::longitude [deg]") {
return static_cast<double>(
gnss1Outputs->posLla(1)); }
1323 if (descriptor ==
"GNSS1::PosLla::altitude [m]") {
return static_cast<double>(
gnss1Outputs->posLla(2)); }
1324 if (descriptor ==
"GNSS1::PosEcef::X [m]") {
return static_cast<double>(
gnss1Outputs->posEcef(0)); }
1325 if (descriptor ==
"GNSS1::PosEcef::Y [m]") {
return static_cast<double>(
gnss1Outputs->posEcef(1)); }
1326 if (descriptor ==
"GNSS1::PosEcef::Z [m]") {
return static_cast<double>(
gnss1Outputs->posEcef(2)); }
1327 if (descriptor ==
"GNSS1::VelNed::N [m/s]") {
return static_cast<double>(
gnss1Outputs->velNed(0)); }
1328 if (descriptor ==
"GNSS1::VelNed::E [m/s]") {
return static_cast<double>(
gnss1Outputs->velNed(1)); }
1329 if (descriptor ==
"GNSS1::VelNed::D [m/s]") {
return static_cast<double>(
gnss1Outputs->velNed(2)); }
1330 if (descriptor ==
"GNSS1::VelEcef::X [m/s]") {
return static_cast<double>(
gnss1Outputs->velEcef(0)); }
1331 if (descriptor ==
"GNSS1::VelEcef::Y [m/s]") {
return static_cast<double>(
gnss1Outputs->velEcef(1)); }
1332 if (descriptor ==
"GNSS1::VelEcef::Z [m/s]") {
return static_cast<double>(
gnss1Outputs->velEcef(2)); }
1333 if (descriptor ==
"GNSS1::PosU::N [m]") {
return static_cast<double>(
gnss1Outputs->posU(0)); }
1334 if (descriptor ==
"GNSS1::PosU::E [m]") {
return static_cast<double>(
gnss1Outputs->posU(1)); }
1335 if (descriptor ==
"GNSS1::PosU::D [m]") {
return static_cast<double>(
gnss1Outputs->posU(2)); }
1336 if (descriptor ==
"GNSS1::VelU [m/s]") {
return static_cast<double>(
gnss1Outputs->velU); }
1337 if (descriptor ==
"GNSS1::TimeU [s]") {
return static_cast<double>(
gnss1Outputs->timeU); }
1338 if (descriptor ==
"GNSS1::TimeInfo::Status::timeOk") {
return static_cast<double>(
gnss1Outputs->timeInfo.status.timeOk()); }
1339 if (descriptor ==
"GNSS1::TimeInfo::Status::dateOk") {
return static_cast<double>(
gnss1Outputs->timeInfo.status.dateOk()); }
1340 if (descriptor ==
"GNSS1::TimeInfo::Status::utcTimeValid") {
return static_cast<double>(
gnss1Outputs->timeInfo.status.utcTimeValid()); }
1341 if (descriptor ==
"GNSS1::TimeInfo::LeapSeconds") {
return static_cast<double>(
gnss1Outputs->timeInfo.leapSeconds); }
1342 if (descriptor ==
"GNSS1::DOP::g") {
return static_cast<double>(
gnss1Outputs->dop.gDop); }
1343 if (descriptor ==
"GNSS1::DOP::p") {
return static_cast<double>(
gnss1Outputs->dop.pDop); }
1344 if (descriptor ==
"GNSS1::DOP::t") {
return static_cast<double>(
gnss1Outputs->dop.tDop); }
1345 if (descriptor ==
"GNSS1::DOP::v") {
return static_cast<double>(
gnss1Outputs->dop.vDop); }
1346 if (descriptor ==
"GNSS1::DOP::h") {
return static_cast<double>(
gnss1Outputs->dop.hDop); }
1347 if (descriptor ==
"GNSS1::DOP::n") {
return static_cast<double>(
gnss1Outputs->dop.nDop); }
1348 if (descriptor ==
"GNSS1::DOP::e") {
return static_cast<double>(
gnss1Outputs->dop.eDop); }
1349 if (descriptor ==
"GNSS1::SatInfo::NumSats") {
return static_cast<double>(
gnss1Outputs->satInfo.numSats); }
1350 for (
auto& satellite :
gnss1Outputs->satInfo.satellites)
1352 SatId satId(
getSatSys(satellite.sys),
static_cast<uint16_t
>(satellite.svId));
1360 if (descriptor == fmt::format(
"GNSS1::SatInfo::{} - cno", satId)) {
return static_cast<double>(satellite.cno); }
1361 if (descriptor == fmt::format(
"GNSS1::SatInfo::{} - qi", satId)) {
return static_cast<double>(satellite.qi); }
1362 if (descriptor == fmt::format(
"GNSS1::SatInfo::{} - el", satId)) {
return static_cast<double>(satellite.el); }
1363 if (descriptor == fmt::format(
"GNSS1::SatInfo::{} - az", satId)) {
return static_cast<double>(satellite.az); }
1365 if (descriptor ==
"GNSS1::RawMeas::Tow [s]") {
return gnss1Outputs->raw.tow; }
1366 if (descriptor ==
"GNSS1::RawMeas::Week") {
return static_cast<double>(
gnss1Outputs->raw.week); }
1367 if (descriptor ==
"GNSS1::RawMeas::NumSats") {
return static_cast<double>(
gnss1Outputs->raw.numSats); }
1370 SatId satId(
getSatSys(satellite.sys),
static_cast<uint16_t
>(satellite.svId));
1371 if (descriptor == fmt::format(
"GNSS1::RawMeas::{} - freq", satId)) {
return static_cast<double>(satellite.freq); }
1372 if (descriptor == fmt::format(
"GNSS1::RawMeas::{} - chan", satId)) {
return static_cast<double>(satellite.chan); }
1373 if (descriptor == fmt::format(
"GNSS1::RawMeas::{} - slot", satId)) {
return static_cast<double>(satellite.slot); }
1374 if (descriptor == fmt::format(
"GNSS1::RawMeas::{} - cno", satId)) {
return static_cast<double>(satellite.cno); }
1384 if (descriptor == fmt::format(
"GNSS1::RawMeas::{} - pr", satId)) {
return satellite.pr; }
1385 if (descriptor == fmt::format(
"GNSS1::RawMeas::{} - cp", satId)) {
return satellite.cp; }
1386 if (descriptor == fmt::format(
"GNSS1::RawMeas::{} - dp", satId)) {
return static_cast<double>(satellite.dp); }
1392 if (descriptor ==
"Att::VpeStatus::AttitudeQuality") {
return static_cast<double>(
attitudeOutputs->vpeStatus.attitudeQuality()); }
1393 if (descriptor ==
"Att::VpeStatus::GyroSaturation") {
return static_cast<double>(
attitudeOutputs->vpeStatus.gyroSaturation()); }
1394 if (descriptor ==
"Att::VpeStatus::GyroSaturationRecovery") {
return static_cast<double>(
attitudeOutputs->vpeStatus.gyroSaturationRecovery()); }
1395 if (descriptor ==
"Att::VpeStatus::MagDisturbance") {
return static_cast<double>(
attitudeOutputs->vpeStatus.magDisturbance()); }
1396 if (descriptor ==
"Att::VpeStatus::MagSaturation") {
return static_cast<double>(
attitudeOutputs->vpeStatus.magSaturation()); }
1397 if (descriptor ==
"Att::VpeStatus::AccDisturbance") {
return static_cast<double>(
attitudeOutputs->vpeStatus.accDisturbance()); }
1398 if (descriptor ==
"Att::VpeStatus::AccSaturation") {
return static_cast<double>(
attitudeOutputs->vpeStatus.accSaturation()); }
1399 if (descriptor ==
"Att::VpeStatus::KnownMagDisturbance") {
return static_cast<double>(
attitudeOutputs->vpeStatus.knownMagDisturbance()); }
1400 if (descriptor ==
"Att::VpeStatus::KnownAccelDisturbance") {
return static_cast<double>(
attitudeOutputs->vpeStatus.knownAccelDisturbance()); }
1401 if (descriptor ==
"Att::YawPitchRoll::Y [deg]") {
return static_cast<double>(
attitudeOutputs->ypr(0)); }
1402 if (descriptor ==
"Att::YawPitchRoll::P [deg]") {
return static_cast<double>(
attitudeOutputs->ypr(1)); }
1403 if (descriptor ==
"Att::YawPitchRoll::R [deg]") {
return static_cast<double>(
attitudeOutputs->ypr(2)); }
1404 if (descriptor ==
"Att::Quaternion::w") {
return static_cast<double>(
attitudeOutputs->qtn.w()); }
1405 if (descriptor ==
"Att::Quaternion::x") {
return static_cast<double>(
attitudeOutputs->qtn.x()); }
1406 if (descriptor ==
"Att::Quaternion::y") {
return static_cast<double>(
attitudeOutputs->qtn.y()); }
1407 if (descriptor ==
"Att::Quaternion::z") {
return static_cast<double>(
attitudeOutputs->qtn.z()); }
1408 if (descriptor ==
"Att::DCM::0-0") {
return static_cast<double>(
attitudeOutputs->dcm(0, 0)); }
1409 if (descriptor ==
"Att::DCM::0-1") {
return static_cast<double>(
attitudeOutputs->dcm(0, 1)); }
1410 if (descriptor ==
"Att::DCM::0-2") {
return static_cast<double>(
attitudeOutputs->dcm(0, 2)); }
1411 if (descriptor ==
"Att::DCM::1-0") {
return static_cast<double>(
attitudeOutputs->dcm(1, 0)); }
1412 if (descriptor ==
"Att::DCM::1-1") {
return static_cast<double>(
attitudeOutputs->dcm(1, 1)); }
1413 if (descriptor ==
"Att::DCM::1-2") {
return static_cast<double>(
attitudeOutputs->dcm(1, 2)); }
1414 if (descriptor ==
"Att::DCM::2-0") {
return static_cast<double>(
attitudeOutputs->dcm(2, 0)); }
1415 if (descriptor ==
"Att::DCM::2-1") {
return static_cast<double>(
attitudeOutputs->dcm(2, 1)); }
1416 if (descriptor ==
"Att::DCM::2-2") {
return static_cast<double>(
attitudeOutputs->dcm(2, 2)); }
1417 if (descriptor ==
"Att::MagNed::N [Gauss]") {
return static_cast<double>(
attitudeOutputs->magNed(0)); }
1418 if (descriptor ==
"Att::MagNed::E [Gauss]") {
return static_cast<double>(
attitudeOutputs->magNed(1)); }
1419 if (descriptor ==
"Att::MagNed::D [Gauss]") {
return static_cast<double>(
attitudeOutputs->magNed(2)); }
1420 if (descriptor ==
"Att::AccelNed::N [m/s^2]") {
return static_cast<double>(
attitudeOutputs->accelNed(0)); }
1421 if (descriptor ==
"Att::AccelNed::E [m/s^2]") {
return static_cast<double>(
attitudeOutputs->accelNed(1)); }
1422 if (descriptor ==
"Att::AccelNed::D [m/s^2]") {
return static_cast<double>(
attitudeOutputs->accelNed(2)); }
1423 if (descriptor ==
"Att::LinearAccelBody::X [m/s^2]") {
return static_cast<double>(
attitudeOutputs->linearAccelBody(0)); }
1424 if (descriptor ==
"Att::LinearAccelBody::Y [m/s^2]") {
return static_cast<double>(
attitudeOutputs->linearAccelBody(1)); }
1425 if (descriptor ==
"Att::LinearAccelBody::Z [m/s^2]") {
return static_cast<double>(
attitudeOutputs->linearAccelBody(2)); }
1426 if (descriptor ==
"Att::LinearAccelNed::N [m/s^2]") {
return static_cast<double>(
attitudeOutputs->linearAccelNed(0)); }
1427 if (descriptor ==
"Att::LinearAccelNed::E [m/s^2]") {
return static_cast<double>(
attitudeOutputs->linearAccelNed(1)); }
1428 if (descriptor ==
"Att::LinearAccelNed::D [m/s^2]") {
return static_cast<double>(
attitudeOutputs->linearAccelNed(2)); }
1429 if (descriptor ==
"Att::YprU::Y [deg]") {
return static_cast<double>(
attitudeOutputs->yprU(0)); }
1430 if (descriptor ==
"Att::YprU::P [deg]") {
return static_cast<double>(
attitudeOutputs->yprU(1)); }
1431 if (descriptor ==
"Att::YprU::R [deg]") {
return static_cast<double>(
attitudeOutputs->yprU(2)); }
1436 if (descriptor ==
"INS::InsStatus::Mode") {
return static_cast<double>(
insOutputs->insStatus.mode()); }
1437 if (descriptor ==
"INS::InsStatus::GpsFix") {
return static_cast<double>(
insOutputs->insStatus.gpsFix()); }
1438 if (descriptor ==
"INS::InsStatus::Error::IMU") {
return static_cast<double>(
insOutputs->insStatus.errorIMU()); }
1439 if (descriptor ==
"INS::InsStatus::Error::MagPres") {
return static_cast<double>(
insOutputs->insStatus.errorMagPres()); }
1440 if (descriptor ==
"INS::InsStatus::Error::GNSS") {
return static_cast<double>(
insOutputs->insStatus.errorGnss()); }
1441 if (descriptor ==
"INS::InsStatus::GpsHeadingIns") {
return static_cast<double>(
insOutputs->insStatus.gpsHeadingIns()); }
1442 if (descriptor ==
"INS::InsStatus::GpsCompass") {
return static_cast<double>(
insOutputs->insStatus.gpsCompass()); }
1443 if (descriptor ==
"INS::PosLla::latitude [deg]") {
return static_cast<double>(
insOutputs->posLla(0)); }
1444 if (descriptor ==
"INS::PosLla::longitude [deg]") {
return static_cast<double>(
insOutputs->posLla(1)); }
1445 if (descriptor ==
"INS::PosLla::altitude [m]") {
return static_cast<double>(
insOutputs->posLla(2)); }
1446 if (descriptor ==
"INS::PosEcef::X [m]") {
return static_cast<double>(
insOutputs->posEcef(0)); }
1447 if (descriptor ==
"INS::PosEcef::Y [m]") {
return static_cast<double>(
insOutputs->posEcef(1)); }
1448 if (descriptor ==
"INS::PosEcef::Z [m]") {
return static_cast<double>(
insOutputs->posEcef(2)); }
1449 if (descriptor ==
"INS::VelBody::X [m/s]") {
return static_cast<double>(
insOutputs->velBody(0)); }
1450 if (descriptor ==
"INS::VelBody::Y [m/s]") {
return static_cast<double>(
insOutputs->velBody(1)); }
1451 if (descriptor ==
"INS::VelBody::Z [m/s]") {
return static_cast<double>(
insOutputs->velBody(2)); }
1452 if (descriptor ==
"INS::VelNed::N [m/s]") {
return static_cast<double>(
insOutputs->velNed(0)); }
1453 if (descriptor ==
"INS::VelNed::E [m/s]") {
return static_cast<double>(
insOutputs->velNed(1)); }
1454 if (descriptor ==
"INS::VelNed::D [m/s]") {
return static_cast<double>(
insOutputs->velNed(2)); }
1455 if (descriptor ==
"INS::VelEcef::X [m/s]") {
return static_cast<double>(
insOutputs->velEcef(0)); }
1456 if (descriptor ==
"INS::VelEcef::Y [m/s]") {
return static_cast<double>(
insOutputs->velEcef(1)); }
1457 if (descriptor ==
"INS::VelEcef::Z [m/s]") {
return static_cast<double>(
insOutputs->velEcef(2)); }
1458 if (descriptor ==
"INS::MagEcef::X [Gauss]") {
return static_cast<double>(
insOutputs->magEcef(0)); }
1459 if (descriptor ==
"INS::MagEcef::Y [Gauss]") {
return static_cast<double>(
insOutputs->magEcef(1)); }
1460 if (descriptor ==
"INS::MagEcef::Z [Gauss]") {
return static_cast<double>(
insOutputs->magEcef(2)); }
1461 if (descriptor ==
"INS::AccelEcef::X [m/s^2]") {
return static_cast<double>(
insOutputs->accelEcef(0)); }
1462 if (descriptor ==
"INS::AccelEcef::Y [m/s^2]") {
return static_cast<double>(
insOutputs->accelEcef(1)); }
1463 if (descriptor ==
"INS::AccelEcef::Z [m/s^2]") {
return static_cast<double>(
insOutputs->accelEcef(2)); }
1464 if (descriptor ==
"INS::LinearAccelEcef::X [m/s^2]") {
return static_cast<double>(
insOutputs->linearAccelEcef(0)); }
1465 if (descriptor ==
"INS::LinearAccelEcef::Y [m/s^2]") {
return static_cast<double>(
insOutputs->linearAccelEcef(1)); }
1466 if (descriptor ==
"INS::LinearAccelEcef::Z [m/s^2]") {
return static_cast<double>(
insOutputs->linearAccelEcef(2)); }
1467 if (descriptor ==
"INS::PosU [m]") {
return static_cast<double>(
insOutputs->posU); }
1468 if (descriptor ==
"INS::VelU [m/s]") {
return static_cast<double>(
insOutputs->velU); }
1473 if (descriptor ==
"GNSS2::UTC::year") {
return static_cast<double>(
gnss2Outputs->timeUtc.year); }
1474 if (descriptor ==
"GNSS2::UTC::month") {
return static_cast<double>(
gnss2Outputs->timeUtc.month); }
1475 if (descriptor ==
"GNSS2::UTC::day") {
return static_cast<double>(
gnss2Outputs->timeUtc.day); }
1476 if (descriptor ==
"GNSS2::UTC::hour") {
return static_cast<double>(
gnss2Outputs->timeUtc.hour); }
1477 if (descriptor ==
"GNSS2::UTC::min") {
return static_cast<double>(
gnss2Outputs->timeUtc.min); }
1478 if (descriptor ==
"GNSS2::UTC::sec") {
return static_cast<double>(
gnss2Outputs->timeUtc.sec); }
1479 if (descriptor ==
"GNSS2::UTC::ms") {
return static_cast<double>(
gnss2Outputs->timeUtc.ms); }
1480 if (descriptor ==
"GNSS2::Tow [ns]") {
return static_cast<double>(
gnss2Outputs->tow); }
1481 if (descriptor ==
"GNSS2::Week") {
return static_cast<double>(
gnss2Outputs->week); }
1482 if (descriptor ==
"GNSS2::NumSats") {
return static_cast<double>(
gnss2Outputs->numSats); }
1483 if (descriptor ==
"GNSS2::Fix") {
return static_cast<double>(
gnss2Outputs->fix); }
1484 if (descriptor ==
"GNSS2::PosLla::latitude [deg]") {
return static_cast<double>(
gnss2Outputs->posLla(0)); }
1485 if (descriptor ==
"GNSS2::PosLla::longitude [deg]") {
return static_cast<double>(
gnss2Outputs->posLla(1)); }
1486 if (descriptor ==
"GNSS2::PosLla::altitude [m]") {
return static_cast<double>(
gnss2Outputs->posLla(2)); }
1487 if (descriptor ==
"GNSS2::PosEcef::X [m]") {
return static_cast<double>(
gnss2Outputs->posEcef(0)); }
1488 if (descriptor ==
"GNSS2::PosEcef::Y [m]") {
return static_cast<double>(
gnss2Outputs->posEcef(1)); }
1489 if (descriptor ==
"GNSS2::PosEcef::Z [m]") {
return static_cast<double>(
gnss2Outputs->posEcef(2)); }
1490 if (descriptor ==
"GNSS2::VelNed::N [m/s]") {
return static_cast<double>(
gnss2Outputs->velNed(0)); }
1491 if (descriptor ==
"GNSS2::VelNed::E [m/s]") {
return static_cast<double>(
gnss2Outputs->velNed(1)); }
1492 if (descriptor ==
"GNSS2::VelNed::D [m/s]") {
return static_cast<double>(
gnss2Outputs->velNed(2)); }
1493 if (descriptor ==
"GNSS2::VelEcef::X [m/s]") {
return static_cast<double>(
gnss2Outputs->velEcef(0)); }
1494 if (descriptor ==
"GNSS2::VelEcef::Y [m/s]") {
return static_cast<double>(
gnss2Outputs->velEcef(1)); }
1495 if (descriptor ==
"GNSS2::VelEcef::Z [m/s]") {
return static_cast<double>(
gnss2Outputs->velEcef(2)); }
1496 if (descriptor ==
"GNSS2::PosU::N [m]") {
return static_cast<double>(
gnss2Outputs->posU(0)); }
1497 if (descriptor ==
"GNSS2::PosU::E [m]") {
return static_cast<double>(
gnss2Outputs->posU(1)); }
1498 if (descriptor ==
"GNSS2::PosU::D [m]") {
return static_cast<double>(
gnss2Outputs->posU(2)); }
1499 if (descriptor ==
"GNSS2::VelU [m/s]") {
return static_cast<double>(
gnss2Outputs->velU); }
1500 if (descriptor ==
"GNSS2::TimeU [s]") {
return static_cast<double>(
gnss2Outputs->timeU); }
1501 if (descriptor ==
"GNSS2::TimeInfo::Status::timeOk") {
return static_cast<double>(
gnss2Outputs->timeInfo.status.timeOk()); }
1502 if (descriptor ==
"GNSS2::TimeInfo::Status::dateOk") {
return static_cast<double>(
gnss2Outputs->timeInfo.status.dateOk()); }
1503 if (descriptor ==
"GNSS2::TimeInfo::Status::utcTimeValid") {
return static_cast<double>(
gnss2Outputs->timeInfo.status.utcTimeValid()); }
1504 if (descriptor ==
"GNSS2::TimeInfo::LeapSeconds") {
return static_cast<double>(
gnss2Outputs->timeInfo.leapSeconds); }
1505 if (descriptor ==
"GNSS2::DOP::g") {
return static_cast<double>(
gnss2Outputs->dop.gDop); }
1506 if (descriptor ==
"GNSS2::DOP::p") {
return static_cast<double>(
gnss2Outputs->dop.pDop); }
1507 if (descriptor ==
"GNSS2::DOP::t") {
return static_cast<double>(
gnss2Outputs->dop.tDop); }
1508 if (descriptor ==
"GNSS2::DOP::v") {
return static_cast<double>(
gnss2Outputs->dop.vDop); }
1509 if (descriptor ==
"GNSS2::DOP::h") {
return static_cast<double>(
gnss2Outputs->dop.hDop); }
1510 if (descriptor ==
"GNSS2::DOP::n") {
return static_cast<double>(
gnss2Outputs->dop.nDop); }
1511 if (descriptor ==
"GNSS2::DOP::e") {
return static_cast<double>(
gnss2Outputs->dop.eDop); }
1512 if (descriptor ==
"GNSS2::SatInfo::NumSats") {
return static_cast<double>(
gnss2Outputs->satInfo.numSats); }
1513 for (
auto& satellite :
gnss2Outputs->satInfo.satellites)
1515 SatId satId(
getSatSys(satellite.sys),
static_cast<uint16_t
>(satellite.svId));
1523 if (descriptor == fmt::format(
"GNSS2::SatInfo::{} - cno", satId)) {
return static_cast<double>(satellite.cno); }
1524 if (descriptor == fmt::format(
"GNSS2::SatInfo::{} - qi", satId)) {
return static_cast<double>(satellite.qi); }
1525 if (descriptor == fmt::format(
"GNSS2::SatInfo::{} - el", satId)) {
return static_cast<double>(satellite.el); }
1526 if (descriptor == fmt::format(
"GNSS2::SatInfo::{} - az", satId)) {
return static_cast<double>(satellite.az); }
1528 if (descriptor ==
"GNSS2::RawMeas::Tow [s]") {
return gnss2Outputs->raw.tow; }
1529 if (descriptor ==
"GNSS2::RawMeas::Week") {
return static_cast<double>(
gnss2Outputs->raw.week); }
1530 if (descriptor ==
"GNSS2::RawMeas::NumSats") {
return static_cast<double>(
gnss2Outputs->raw.numSats); }
1533 SatId satId(
getSatSys(satellite.sys),
static_cast<uint16_t
>(satellite.svId));
1534 if (descriptor == fmt::format(
"GNSS2::RawMeas::{} - freq", satId)) {
return static_cast<double>(satellite.freq); }
1535 if (descriptor == fmt::format(
"GNSS2::RawMeas::{} - chan", satId)) {
return static_cast<double>(satellite.chan); }
1536 if (descriptor == fmt::format(
"GNSS2::RawMeas::{} - slot", satId)) {
return static_cast<double>(satellite.slot); }
1537 if (descriptor == fmt::format(
"GNSS2::RawMeas::{} - cno", satId)) {
return static_cast<double>(satellite.cno); }
1547 if (descriptor == fmt::format(
"GNSS2::RawMeas::{} - pr", satId)) {
return satellite.pr; }
1548 if (descriptor == fmt::format(
"GNSS2::RawMeas::{} - cp", satId)) {
return satellite.cp; }
1549 if (descriptor == fmt::format(
"GNSS2::RawMeas::{} - dp", satId)) {
return static_cast<double>(satellite.dp); }
1553 return std::nullopt;
1557 [[nodiscard]] std::vector<std::pair<std::string, double>>
getDynamicData()
const override
1559 std::vector<std::pair<std::string, double>> dynData;
1564 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESTARTUP)
1566 dynData.emplace_back(
"Time::TimeStartup [ns]",
static_cast<double>(
timeOutputs->timeStartup));
1568 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEGPS)
1570 dynData.emplace_back(
"Time::TimeGps [ns]",
static_cast<double>(
timeOutputs->timeGps));
1572 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_GPSTOW)
1574 dynData.emplace_back(
"Time::GpsTow [ns]",
static_cast<double>(
timeOutputs->gpsTow));
1576 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_GPSWEEK)
1578 dynData.emplace_back(
"Time::GpsWeek",
static_cast<double>(
timeOutputs->gpsWeek));
1580 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESYNCIN)
1582 dynData.emplace_back(
"Time::TimeSyncIn [ns]",
static_cast<double>(
timeOutputs->timeSyncIn));
1584 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEGPSPPS)
1586 dynData.emplace_back(
"Time::TimeGpsPps [ns]",
static_cast<double>(
timeOutputs->timePPS));
1588 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEUTC)
1590 dynData.emplace_back(
"Time::TimeUTC::year",
static_cast<double>(
timeOutputs->timeUtc.year));
1591 dynData.emplace_back(
"Time::TimeUTC::month",
static_cast<double>(
timeOutputs->timeUtc.month));
1592 dynData.emplace_back(
"Time::TimeUTC::day",
static_cast<double>(
timeOutputs->timeUtc.day));
1593 dynData.emplace_back(
"Time::TimeUTC::hour",
static_cast<double>(
timeOutputs->timeUtc.hour));
1594 dynData.emplace_back(
"Time::TimeUTC::min",
static_cast<double>(
timeOutputs->timeUtc.min));
1595 dynData.emplace_back(
"Time::TimeUTC::sec",
static_cast<double>(
timeOutputs->timeUtc.sec));
1596 dynData.emplace_back(
"Time::TimeUTC::ms",
static_cast<double>(
timeOutputs->timeUtc.ms));
1598 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_SYNCINCNT)
1600 dynData.emplace_back(
"Time::SyncInCnt",
static_cast<double>(
timeOutputs->syncInCnt));
1602 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_SYNCOUTCNT)
1604 dynData.emplace_back(
"Time::SyncOutCnt",
static_cast<double>(
timeOutputs->syncOutCnt));
1606 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESTATUS)
1608 dynData.emplace_back(
"Time::TimeStatus::timeOk",
static_cast<double>(
timeOutputs->timeStatus.timeOk()));
1609 dynData.emplace_back(
"Time::TimeStatus::dateOk",
static_cast<double>(
timeOutputs->timeStatus.dateOk()));
1610 dynData.emplace_back(
"Time::TimeStatus::utcTimeValid",
static_cast<double>(
timeOutputs->timeStatus.utcTimeValid()));
1616 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_IMUSTATUS)
1618 dynData.emplace_back(
"IMU::ImuStatus",
static_cast<double>(
imuOutputs->imuStatus));
1620 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPMAG)
1622 dynData.emplace_back(
"IMU::UncompMag::X [Gauss]",
static_cast<double>(
imuOutputs->uncompMag(0)));
1623 dynData.emplace_back(
"IMU::UncompMag::Y [Gauss]",
static_cast<double>(
imuOutputs->uncompMag(1)));
1624 dynData.emplace_back(
"IMU::UncompMag::Z [Gauss]",
static_cast<double>(
imuOutputs->uncompMag(2)));
1626 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPACCEL)
1628 dynData.emplace_back(
"IMU::UncompAccel::X [m/s^2]",
static_cast<double>(
imuOutputs->uncompAccel(0)));
1629 dynData.emplace_back(
"IMU::UncompAccel::Y [m/s^2]",
static_cast<double>(
imuOutputs->uncompAccel(1)));
1630 dynData.emplace_back(
"IMU::UncompAccel::Z [m/s^2]",
static_cast<double>(
imuOutputs->uncompAccel(2)));
1632 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPGYRO)
1634 dynData.emplace_back(
"IMU::UncompGyro::X [rad/s]",
static_cast<double>(
imuOutputs->uncompGyro(0)));
1635 dynData.emplace_back(
"IMU::UncompGyro::Y [rad/s]",
static_cast<double>(
imuOutputs->uncompGyro(1)));
1636 dynData.emplace_back(
"IMU::UncompGyro::Z [rad/s]",
static_cast<double>(
imuOutputs->uncompGyro(2)));
1638 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_TEMP)
1640 dynData.emplace_back(
"IMU::Temp [Celsius]",
static_cast<double>(
imuOutputs->temp));
1642 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_PRES)
1644 dynData.emplace_back(
"IMU::Pres [kPa]",
static_cast<double>(
imuOutputs->pres));
1646 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTATHETA)
1648 dynData.emplace_back(
"IMU::DeltaTime [s]",
static_cast<double>(
imuOutputs->deltaTime));
1649 dynData.emplace_back(
"IMU::DeltaTheta::X [deg]",
static_cast<double>(
imuOutputs->deltaTheta(0)));
1650 dynData.emplace_back(
"IMU::DeltaTheta::Y [deg]",
static_cast<double>(
imuOutputs->deltaTheta(1)));
1651 dynData.emplace_back(
"IMU::DeltaTheta::Z [deg]",
static_cast<double>(
imuOutputs->deltaTheta(2)));
1653 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTAVEL)
1655 dynData.emplace_back(
"IMU::DeltaVel::X [m/s]",
static_cast<double>(
imuOutputs->deltaV(0)));
1656 dynData.emplace_back(
"IMU::DeltaVel::Y [m/s]",
static_cast<double>(
imuOutputs->deltaV(1)));
1657 dynData.emplace_back(
"IMU::DeltaVel::Z [m/s]",
static_cast<double>(
imuOutputs->deltaV(2)));
1659 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_MAG)
1661 dynData.emplace_back(
"IMU::Mag::X [Gauss]",
static_cast<double>(
imuOutputs->mag(0)));
1662 dynData.emplace_back(
"IMU::Mag::Y [Gauss]",
static_cast<double>(
imuOutputs->mag(1)));
1663 dynData.emplace_back(
"IMU::Mag::Z [Gauss]",
static_cast<double>(
imuOutputs->mag(2)));
1665 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_ACCEL)
1667 dynData.emplace_back(
"IMU::Accel::X [m/s^2]",
static_cast<double>(
imuOutputs->accel(0)));
1668 dynData.emplace_back(
"IMU::Accel::Y [m/s^2]",
static_cast<double>(
imuOutputs->accel(1)));
1669 dynData.emplace_back(
"IMU::Accel::Z [m/s^2]",
static_cast<double>(
imuOutputs->accel(2)));
1671 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_ANGULARRATE)
1673 dynData.emplace_back(
"IMU::AngularRate::X [rad/s]",
static_cast<double>(
imuOutputs->angularRate(0)));
1674 dynData.emplace_back(
"IMU::AngularRate::Y [rad/s]",
static_cast<double>(
imuOutputs->angularRate(1)));
1675 dynData.emplace_back(
"IMU::AngularRate::Z [rad/s]",
static_cast<double>(
imuOutputs->angularRate(2)));
1682 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_UTC)
1684 dynData.emplace_back(
"GNSS1::UTC::year",
static_cast<double>(
gnss1Outputs->timeUtc.year));
1685 dynData.emplace_back(
"GNSS1::UTC::month",
static_cast<double>(
gnss1Outputs->timeUtc.month));
1686 dynData.emplace_back(
"GNSS1::UTC::day",
static_cast<double>(
gnss1Outputs->timeUtc.day));
1687 dynData.emplace_back(
"GNSS1::UTC::hour",
static_cast<double>(
gnss1Outputs->timeUtc.hour));
1688 dynData.emplace_back(
"GNSS1::UTC::min",
static_cast<double>(
gnss1Outputs->timeUtc.min));
1689 dynData.emplace_back(
"GNSS1::UTC::sec",
static_cast<double>(
gnss1Outputs->timeUtc.sec));
1690 dynData.emplace_back(
"GNSS1::UTC::ms",
static_cast<double>(
gnss1Outputs->timeUtc.ms));
1692 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TOW)
1694 dynData.emplace_back(
"GNSS1::Tow [ns]",
static_cast<double>(
gnss1Outputs->tow));
1696 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_WEEK)
1698 dynData.emplace_back(
"GNSS1::Week",
static_cast<double>(
gnss1Outputs->week));
1700 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_NUMSATS)
1702 dynData.emplace_back(
"GNSS1::NumSats",
static_cast<double>(
gnss1Outputs->numSats));
1704 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_FIX)
1706 dynData.emplace_back(
"GNSS1::Fix",
static_cast<double>(
gnss1Outputs->fix));
1708 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSLLA)
1710 dynData.emplace_back(
"GNSS1::PosLla::latitude [deg]",
static_cast<double>(
gnss1Outputs->posLla(0)));
1711 dynData.emplace_back(
"GNSS1::PosLla::longitude [deg]",
static_cast<double>(
gnss1Outputs->posLla(1)));
1712 dynData.emplace_back(
"GNSS1::PosLla::altitude [m]",
static_cast<double>(
gnss1Outputs->posLla(2)));
1714 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSECEF)
1716 dynData.emplace_back(
"GNSS1::PosEcef::X [m]",
static_cast<double>(
gnss1Outputs->posEcef(0)));
1717 dynData.emplace_back(
"GNSS1::PosEcef::Y [m]",
static_cast<double>(
gnss1Outputs->posEcef(1)));
1718 dynData.emplace_back(
"GNSS1::PosEcef::Z [m]",
static_cast<double>(
gnss1Outputs->posEcef(2)));
1720 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELNED)
1722 dynData.emplace_back(
"GNSS1::VelNed::N [m/s]",
static_cast<double>(
gnss1Outputs->velNed(0)));
1723 dynData.emplace_back(
"GNSS1::VelNed::E [m/s]",
static_cast<double>(
gnss1Outputs->velNed(1)));
1724 dynData.emplace_back(
"GNSS1::VelNed::D [m/s]",
static_cast<double>(
gnss1Outputs->velNed(2)));
1726 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELECEF)
1728 dynData.emplace_back(
"GNSS1::VelEcef::X [m/s]",
static_cast<double>(
gnss1Outputs->velEcef(0)));
1729 dynData.emplace_back(
"GNSS1::VelEcef::Y [m/s]",
static_cast<double>(
gnss1Outputs->velEcef(1)));
1730 dynData.emplace_back(
"GNSS1::VelEcef::Z [m/s]",
static_cast<double>(
gnss1Outputs->velEcef(2)));
1732 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSU)
1734 dynData.emplace_back(
"GNSS1::PosU::N [m]",
static_cast<double>(
gnss1Outputs->posU(0)));
1735 dynData.emplace_back(
"GNSS1::PosU::E [m]",
static_cast<double>(
gnss1Outputs->posU(1)));
1736 dynData.emplace_back(
"GNSS1::PosU::D [m]",
static_cast<double>(
gnss1Outputs->posU(2)));
1738 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELU)
1740 dynData.emplace_back(
"GNSS1::VelU [m/s]",
static_cast<double>(
gnss1Outputs->velU));
1742 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEU)
1744 dynData.emplace_back(
"GNSS1::TimeU [s]",
static_cast<double>(
gnss1Outputs->timeU));
1746 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEINFO)
1748 dynData.emplace_back(
"GNSS1::TimeInfo::Status::timeOk",
static_cast<double>(
gnss1Outputs->timeInfo.status.timeOk()));
1749 dynData.emplace_back(
"GNSS1::TimeInfo::Status::dateOk",
static_cast<double>(
gnss1Outputs->timeInfo.status.dateOk()));
1750 dynData.emplace_back(
"GNSS1::TimeInfo::Status::utcTimeValid",
static_cast<double>(
gnss1Outputs->timeInfo.status.utcTimeValid()));
1751 dynData.emplace_back(
"GNSS1::TimeInfo::LeapSeconds",
static_cast<double>(
gnss1Outputs->timeInfo.leapSeconds));
1753 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_DOP)
1755 dynData.emplace_back(
"GNSS1::DOP::g",
static_cast<double>(
gnss1Outputs->dop.gDop));
1756 dynData.emplace_back(
"GNSS1::DOP::p",
static_cast<double>(
gnss1Outputs->dop.pDop));
1757 dynData.emplace_back(
"GNSS1::DOP::t",
static_cast<double>(
gnss1Outputs->dop.tDop));
1758 dynData.emplace_back(
"GNSS1::DOP::v",
static_cast<double>(
gnss1Outputs->dop.vDop));
1759 dynData.emplace_back(
"GNSS1::DOP::h",
static_cast<double>(
gnss1Outputs->dop.hDop));
1760 dynData.emplace_back(
"GNSS1::DOP::n",
static_cast<double>(
gnss1Outputs->dop.nDop));
1761 dynData.emplace_back(
"GNSS1::DOP::e",
static_cast<double>(
gnss1Outputs->dop.eDop));
1763 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_SATINFO)
1765 dynData.emplace_back(
"GNSS1::SatInfo::NumSats",
static_cast<double>(
gnss1Outputs->satInfo.numSats));
1766 for (
auto& satellite :
gnss1Outputs->satInfo.satellites)
1768 SatId satId(
getSatSys(satellite.sys),
static_cast<uint16_t
>(satellite.svId));
1776 dynData.emplace_back(fmt::format(
"GNSS1::SatInfo::{} - cno", satId),
static_cast<double>(satellite.cno));
1777 dynData.emplace_back(fmt::format(
"GNSS1::SatInfo::{} - qi", satId),
static_cast<double>(satellite.qi));
1778 dynData.emplace_back(fmt::format(
"GNSS1::SatInfo::{} - el", satId),
static_cast<double>(satellite.el));
1779 dynData.emplace_back(fmt::format(
"GNSS1::SatInfo::{} - az", satId),
static_cast<double>(satellite.az));
1782 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_RAWMEAS)
1784 dynData.emplace_back(
"GNSS1::RawMeas::Tow [s]",
gnss1Outputs->raw.tow);
1785 dynData.emplace_back(
"GNSS1::RawMeas::Week",
static_cast<double>(
gnss1Outputs->raw.week));
1786 dynData.emplace_back(
"GNSS1::RawMeas::NumSats",
static_cast<double>(
gnss1Outputs->raw.numSats));
1789 SatId satId(
getSatSys(satellite.sys),
static_cast<uint16_t
>(satellite.svId));
1790 dynData.emplace_back(fmt::format(
"GNSS1::RawMeas::{} - freq", satId),
static_cast<double>(satellite.freq));
1791 dynData.emplace_back(fmt::format(
"GNSS1::RawMeas::{} - chan", satId),
static_cast<double>(satellite.chan));
1792 dynData.emplace_back(fmt::format(
"GNSS1::RawMeas::{} - slot", satId),
static_cast<double>(satellite.slot));
1793 dynData.emplace_back(fmt::format(
"GNSS1::RawMeas::{} - cno", satId),
static_cast<double>(satellite.cno));
1803 dynData.emplace_back(fmt::format(
"GNSS1::RawMeas::{} - pr", satId), satellite.pr);
1804 dynData.emplace_back(fmt::format(
"GNSS1::RawMeas::{} - cp", satId), satellite.cp);
1805 dynData.emplace_back(fmt::format(
"GNSS1::RawMeas::{} - dp", satId),
static_cast<double>(satellite.dp));
1813 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_VPESTATUS)
1815 dynData.emplace_back(
"Att::VpeStatus::AttitudeQuality",
static_cast<double>(
attitudeOutputs->vpeStatus.attitudeQuality()));
1816 dynData.emplace_back(
"Att::VpeStatus::GyroSaturation",
static_cast<double>(
attitudeOutputs->vpeStatus.gyroSaturation()));
1817 dynData.emplace_back(
"Att::VpeStatus::GyroSaturationRecovery",
static_cast<double>(
attitudeOutputs->vpeStatus.gyroSaturationRecovery()));
1818 dynData.emplace_back(
"Att::VpeStatus::MagDisturbance",
static_cast<double>(
attitudeOutputs->vpeStatus.magDisturbance()));
1819 dynData.emplace_back(
"Att::VpeStatus::MagSaturation",
static_cast<double>(
attitudeOutputs->vpeStatus.magSaturation()));
1820 dynData.emplace_back(
"Att::VpeStatus::AccDisturbance",
static_cast<double>(
attitudeOutputs->vpeStatus.accDisturbance()));
1821 dynData.emplace_back(
"Att::VpeStatus::AccSaturation",
static_cast<double>(
attitudeOutputs->vpeStatus.accSaturation()));
1822 dynData.emplace_back(
"Att::VpeStatus::KnownMagDisturbance",
static_cast<double>(
attitudeOutputs->vpeStatus.knownMagDisturbance()));
1823 dynData.emplace_back(
"Att::VpeStatus::KnownAccelDisturbance",
static_cast<double>(
attitudeOutputs->vpeStatus.knownAccelDisturbance()));
1825 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_YAWPITCHROLL)
1827 dynData.emplace_back(
"Att::YawPitchRoll::Y [deg]",
static_cast<double>(
attitudeOutputs->ypr(0)));
1828 dynData.emplace_back(
"Att::YawPitchRoll::P [deg]",
static_cast<double>(
attitudeOutputs->ypr(1)));
1829 dynData.emplace_back(
"Att::YawPitchRoll::R [deg]",
static_cast<double>(
attitudeOutputs->ypr(2)));
1831 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_QUATERNION)
1833 dynData.emplace_back(
"Att::Quaternion::w",
static_cast<double>(
attitudeOutputs->qtn.w()));
1834 dynData.emplace_back(
"Att::Quaternion::x",
static_cast<double>(
attitudeOutputs->qtn.x()));
1835 dynData.emplace_back(
"Att::Quaternion::y",
static_cast<double>(
attitudeOutputs->qtn.y()));
1836 dynData.emplace_back(
"Att::Quaternion::z",
static_cast<double>(
attitudeOutputs->qtn.z()));
1838 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_DCM)
1840 dynData.emplace_back(
"Att::DCM::0-0",
static_cast<double>(
attitudeOutputs->dcm(0, 0)));
1841 dynData.emplace_back(
"Att::DCM::0-1",
static_cast<double>(
attitudeOutputs->dcm(0, 1)));
1842 dynData.emplace_back(
"Att::DCM::0-2",
static_cast<double>(
attitudeOutputs->dcm(0, 2)));
1843 dynData.emplace_back(
"Att::DCM::1-0",
static_cast<double>(
attitudeOutputs->dcm(1, 0)));
1844 dynData.emplace_back(
"Att::DCM::1-1",
static_cast<double>(
attitudeOutputs->dcm(1, 1)));
1845 dynData.emplace_back(
"Att::DCM::1-2",
static_cast<double>(
attitudeOutputs->dcm(1, 2)));
1846 dynData.emplace_back(
"Att::DCM::2-0",
static_cast<double>(
attitudeOutputs->dcm(2, 0)));
1847 dynData.emplace_back(
"Att::DCM::2-1",
static_cast<double>(
attitudeOutputs->dcm(2, 1)));
1848 dynData.emplace_back(
"Att::DCM::2-2",
static_cast<double>(
attitudeOutputs->dcm(2, 2)));
1850 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_MAGNED)
1852 dynData.emplace_back(
"Att::MagNed::N [Gauss]",
static_cast<double>(
attitudeOutputs->magNed(0)));
1853 dynData.emplace_back(
"Att::MagNed::E [Gauss]",
static_cast<double>(
attitudeOutputs->magNed(1)));
1854 dynData.emplace_back(
"Att::MagNed::D [Gauss]",
static_cast<double>(
attitudeOutputs->magNed(2)));
1856 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_ACCELNED)
1858 dynData.emplace_back(
"Att::AccelNed::N [m/s^2]",
static_cast<double>(
attitudeOutputs->accelNed(0)));
1859 dynData.emplace_back(
"Att::AccelNed::E [m/s^2]",
static_cast<double>(
attitudeOutputs->accelNed(1)));
1860 dynData.emplace_back(
"Att::AccelNed::D [m/s^2]",
static_cast<double>(
attitudeOutputs->accelNed(2)));
1862 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_LINEARACCELBODY)
1864 dynData.emplace_back(
"Att::LinearAccelBody::X [m/s^2]",
static_cast<double>(
attitudeOutputs->linearAccelBody(0)));
1865 dynData.emplace_back(
"Att::LinearAccelBody::Y [m/s^2]",
static_cast<double>(
attitudeOutputs->linearAccelBody(1)));
1866 dynData.emplace_back(
"Att::LinearAccelBody::Z [m/s^2]",
static_cast<double>(
attitudeOutputs->linearAccelBody(2)));
1868 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_LINEARACCELNED)
1870 dynData.emplace_back(
"Att::LinearAccelNed::N [m/s^2]",
static_cast<double>(
attitudeOutputs->linearAccelNed(0)));
1871 dynData.emplace_back(
"Att::LinearAccelNed::E [m/s^2]",
static_cast<double>(
attitudeOutputs->linearAccelNed(1)));
1872 dynData.emplace_back(
"Att::LinearAccelNed::D [m/s^2]",
static_cast<double>(
attitudeOutputs->linearAccelNed(2)));
1874 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_YPRU)
1876 dynData.emplace_back(
"Att::YprU::Y [deg]",
static_cast<double>(
attitudeOutputs->yprU(0)));
1877 dynData.emplace_back(
"Att::YprU::P [deg]",
static_cast<double>(
attitudeOutputs->yprU(1)));
1878 dynData.emplace_back(
"Att::YprU::R [deg]",
static_cast<double>(
attitudeOutputs->yprU(2)));
1885 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_INSSTATUS)
1887 dynData.emplace_back(
"INS::InsStatus::Mode",
static_cast<double>(
insOutputs->insStatus.mode()));
1888 dynData.emplace_back(
"INS::InsStatus::GpsFix",
static_cast<double>(
insOutputs->insStatus.gpsFix()));
1889 dynData.emplace_back(
"INS::InsStatus::Error::IMU",
static_cast<double>(
insOutputs->insStatus.errorIMU()));
1890 dynData.emplace_back(
"INS::InsStatus::Error::MagPres",
static_cast<double>(
insOutputs->insStatus.errorMagPres()));
1891 dynData.emplace_back(
"INS::InsStatus::Error::GNSS",
static_cast<double>(
insOutputs->insStatus.errorGnss()));
1892 dynData.emplace_back(
"INS::InsStatus::GpsHeadingIns",
static_cast<double>(
insOutputs->insStatus.gpsHeadingIns()));
1893 dynData.emplace_back(
"INS::InsStatus::GpsCompass",
static_cast<double>(
insOutputs->insStatus.gpsCompass()));
1895 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSLLA)
1897 dynData.emplace_back(
"INS::PosLla::latitude [deg]",
static_cast<double>(
insOutputs->posLla(0)));
1898 dynData.emplace_back(
"INS::PosLla::longitude [deg]",
static_cast<double>(
insOutputs->posLla(1)));
1899 dynData.emplace_back(
"INS::PosLla::altitude [m]",
static_cast<double>(
insOutputs->posLla(2)));
1901 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSECEF)
1903 dynData.emplace_back(
"INS::PosEcef::X [m]",
static_cast<double>(
insOutputs->posEcef(0)));
1904 dynData.emplace_back(
"INS::PosEcef::Y [m]",
static_cast<double>(
insOutputs->posEcef(1)));
1905 dynData.emplace_back(
"INS::PosEcef::Z [m]",
static_cast<double>(
insOutputs->posEcef(2)));
1907 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELBODY)
1909 dynData.emplace_back(
"INS::VelBody::X [m/s]",
static_cast<double>(
insOutputs->velBody(0)));
1910 dynData.emplace_back(
"INS::VelBody::Y [m/s]",
static_cast<double>(
insOutputs->velBody(1)));
1911 dynData.emplace_back(
"INS::VelBody::Z [m/s]",
static_cast<double>(
insOutputs->velBody(2)));
1913 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELNED)
1915 dynData.emplace_back(
"INS::VelNed::N [m/s]",
static_cast<double>(
insOutputs->velNed(0)));
1916 dynData.emplace_back(
"INS::VelNed::E [m/s]",
static_cast<double>(
insOutputs->velNed(1)));
1917 dynData.emplace_back(
"INS::VelNed::D [m/s]",
static_cast<double>(
insOutputs->velNed(2)));
1919 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELECEF)
1921 dynData.emplace_back(
"INS::VelEcef::X [m/s]",
static_cast<double>(
insOutputs->velEcef(0)));
1922 dynData.emplace_back(
"INS::VelEcef::Y [m/s]",
static_cast<double>(
insOutputs->velEcef(1)));
1923 dynData.emplace_back(
"INS::VelEcef::Z [m/s]",
static_cast<double>(
insOutputs->velEcef(2)));
1925 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_MAGECEF)
1927 dynData.emplace_back(
"INS::MagEcef::X [Gauss]",
static_cast<double>(
insOutputs->magEcef(0)));
1928 dynData.emplace_back(
"INS::MagEcef::Y [Gauss]",
static_cast<double>(
insOutputs->magEcef(1)));
1929 dynData.emplace_back(
"INS::MagEcef::Z [Gauss]",
static_cast<double>(
insOutputs->magEcef(2)));
1931 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_ACCELECEF)
1933 dynData.emplace_back(
"INS::AccelEcef::X [m/s^2]",
static_cast<double>(
insOutputs->accelEcef(0)));
1934 dynData.emplace_back(
"INS::AccelEcef::Y [m/s^2]",
static_cast<double>(
insOutputs->accelEcef(1)));
1935 dynData.emplace_back(
"INS::AccelEcef::Z [m/s^2]",
static_cast<double>(
insOutputs->accelEcef(2)));
1937 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_LINEARACCELECEF)
1939 dynData.emplace_back(
"INS::LinearAccelEcef::X [m/s^2]",
static_cast<double>(
insOutputs->linearAccelEcef(0)));
1940 dynData.emplace_back(
"INS::LinearAccelEcef::Y [m/s^2]",
static_cast<double>(
insOutputs->linearAccelEcef(1)));
1941 dynData.emplace_back(
"INS::LinearAccelEcef::Z [m/s^2]",
static_cast<double>(
insOutputs->linearAccelEcef(2)));
1943 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSU)
1945 dynData.emplace_back(
"INS::PosU [m]",
static_cast<double>(
insOutputs->posU));
1947 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELU)
1949 dynData.emplace_back(
"INS::VelU [m/s]",
static_cast<double>(
insOutputs->velU));
1956 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_UTC)
1958 dynData.emplace_back(
"GNSS2::UTC::year",
static_cast<double>(
gnss2Outputs->timeUtc.year));
1959 dynData.emplace_back(
"GNSS2::UTC::month",
static_cast<double>(
gnss2Outputs->timeUtc.month));
1960 dynData.emplace_back(
"GNSS2::UTC::day",
static_cast<double>(
gnss2Outputs->timeUtc.day));
1961 dynData.emplace_back(
"GNSS2::UTC::hour",
static_cast<double>(
gnss2Outputs->timeUtc.hour));
1962 dynData.emplace_back(
"GNSS2::UTC::min",
static_cast<double>(
gnss2Outputs->timeUtc.min));
1963 dynData.emplace_back(
"GNSS2::UTC::sec",
static_cast<double>(
gnss2Outputs->timeUtc.sec));
1964 dynData.emplace_back(
"GNSS2::UTC::ms",
static_cast<double>(
gnss2Outputs->timeUtc.ms));
1966 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TOW)
1968 dynData.emplace_back(
"GNSS2::Tow [ns]",
static_cast<double>(
gnss2Outputs->tow));
1970 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_WEEK)
1972 dynData.emplace_back(
"GNSS2::Week",
static_cast<double>(
gnss2Outputs->week));
1974 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_NUMSATS)
1976 dynData.emplace_back(
"GNSS2::NumSats",
static_cast<double>(
gnss2Outputs->numSats));
1978 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_FIX)
1980 dynData.emplace_back(
"GNSS2::Fix",
static_cast<double>(
gnss2Outputs->fix));
1982 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSLLA)
1984 dynData.emplace_back(
"GNSS2::PosLla::latitude [deg]",
static_cast<double>(
gnss2Outputs->posLla(0)));
1985 dynData.emplace_back(
"GNSS2::PosLla::longitude [deg]",
static_cast<double>(
gnss2Outputs->posLla(1)));
1986 dynData.emplace_back(
"GNSS2::PosLla::altitude [m]",
static_cast<double>(
gnss2Outputs->posLla(2)));
1988 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSECEF)
1990 dynData.emplace_back(
"GNSS2::PosEcef::X [m]",
static_cast<double>(
gnss2Outputs->posEcef(0)));
1991 dynData.emplace_back(
"GNSS2::PosEcef::Y [m]",
static_cast<double>(
gnss2Outputs->posEcef(1)));
1992 dynData.emplace_back(
"GNSS2::PosEcef::Z [m]",
static_cast<double>(
gnss2Outputs->posEcef(2)));
1994 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELNED)
1996 dynData.emplace_back(
"GNSS2::VelNed::N [m/s]",
static_cast<double>(
gnss2Outputs->velNed(0)));
1997 dynData.emplace_back(
"GNSS2::VelNed::E [m/s]",
static_cast<double>(
gnss2Outputs->velNed(1)));
1998 dynData.emplace_back(
"GNSS2::VelNed::D [m/s]",
static_cast<double>(
gnss2Outputs->velNed(2)));
2000 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELECEF)
2002 dynData.emplace_back(
"GNSS2::VelEcef::X [m/s]",
static_cast<double>(
gnss2Outputs->velEcef(0)));
2003 dynData.emplace_back(
"GNSS2::VelEcef::Y [m/s]",
static_cast<double>(
gnss2Outputs->velEcef(1)));
2004 dynData.emplace_back(
"GNSS2::VelEcef::Z [m/s]",
static_cast<double>(
gnss2Outputs->velEcef(2)));
2006 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSU)
2008 dynData.emplace_back(
"GNSS2::PosU::N [m]",
static_cast<double>(
gnss2Outputs->posU(0)));
2009 dynData.emplace_back(
"GNSS2::PosU::E [m]",
static_cast<double>(
gnss2Outputs->posU(1)));
2010 dynData.emplace_back(
"GNSS2::PosU::D [m]",
static_cast<double>(
gnss2Outputs->posU(2)));
2012 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELU)
2014 dynData.emplace_back(
"GNSS2::VelU [m/s]",
static_cast<double>(
gnss2Outputs->velU));
2016 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEU)
2018 dynData.emplace_back(
"GNSS2::TimeU [s]",
static_cast<double>(
gnss2Outputs->timeU));
2020 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEINFO)
2022 dynData.emplace_back(
"GNSS2::TimeInfo::Status::timeOk",
static_cast<double>(
gnss2Outputs->timeInfo.status.timeOk()));
2023 dynData.emplace_back(
"GNSS2::TimeInfo::Status::dateOk",
static_cast<double>(
gnss2Outputs->timeInfo.status.dateOk()));
2024 dynData.emplace_back(
"GNSS2::TimeInfo::Status::utcTimeValid",
static_cast<double>(
gnss2Outputs->timeInfo.status.utcTimeValid()));
2025 dynData.emplace_back(
"GNSS2::TimeInfo::LeapSeconds",
static_cast<double>(
gnss2Outputs->timeInfo.leapSeconds));
2027 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_DOP)
2029 dynData.emplace_back(
"GNSS2::DOP::g",
static_cast<double>(
gnss2Outputs->dop.gDop));
2030 dynData.emplace_back(
"GNSS2::DOP::p",
static_cast<double>(
gnss2Outputs->dop.pDop));
2031 dynData.emplace_back(
"GNSS2::DOP::t",
static_cast<double>(
gnss2Outputs->dop.tDop));
2032 dynData.emplace_back(
"GNSS2::DOP::v",
static_cast<double>(
gnss2Outputs->dop.vDop));
2033 dynData.emplace_back(
"GNSS2::DOP::h",
static_cast<double>(
gnss2Outputs->dop.hDop));
2034 dynData.emplace_back(
"GNSS2::DOP::n",
static_cast<double>(
gnss2Outputs->dop.nDop));
2035 dynData.emplace_back(
"GNSS2::DOP::e",
static_cast<double>(
gnss2Outputs->dop.eDop));
2037 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_SATINFO)
2039 dynData.emplace_back(
"GNSS2::SatInfo::NumSats",
static_cast<double>(
gnss2Outputs->satInfo.numSats));
2040 for (
auto& satellite :
gnss2Outputs->satInfo.satellites)
2042 SatId satId(
getSatSys(satellite.sys),
static_cast<uint16_t
>(satellite.svId));
2050 dynData.emplace_back(fmt::format(
"GNSS2::SatInfo::{} - cno", satId),
static_cast<double>(satellite.cno));
2051 dynData.emplace_back(fmt::format(
"GNSS2::SatInfo::{} - qi", satId),
static_cast<double>(satellite.qi));
2052 dynData.emplace_back(fmt::format(
"GNSS2::SatInfo::{} - el", satId),
static_cast<double>(satellite.el));
2053 dynData.emplace_back(fmt::format(
"GNSS2::SatInfo::{} - az", satId),
static_cast<double>(satellite.az));
2056 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_RAWMEAS)
2058 dynData.emplace_back(
"GNSS2::RawMeas::Tow [s]",
gnss2Outputs->raw.tow);
2059 dynData.emplace_back(
"GNSS2::RawMeas::Week",
static_cast<double>(
gnss2Outputs->raw.week));
2060 dynData.emplace_back(
"GNSS2::RawMeas::NumSats",
static_cast<double>(
gnss2Outputs->raw.numSats));
2063 SatId satId(
getSatSys(satellite.sys),
static_cast<uint16_t
>(satellite.svId));
2064 dynData.emplace_back(fmt::format(
"GNSS2::RawMeas::{} - freq", satId),
static_cast<double>(satellite.freq));
2065 dynData.emplace_back(fmt::format(
"GNSS2::RawMeas::{} - chan", satId),
static_cast<double>(satellite.chan));
2066 dynData.emplace_back(fmt::format(
"GNSS2::RawMeas::{} - slot", satId),
static_cast<double>(satellite.slot));
2067 dynData.emplace_back(fmt::format(
"GNSS2::RawMeas::{} - cno", satId),
static_cast<double>(satellite.cno));
2077 dynData.emplace_back(fmt::format(
"GNSS2::RawMeas::{} - pr", satId), satellite.pr);
2078 dynData.emplace_back(fmt::format(
"GNSS2::RawMeas::{} - cp", satId), satellite.cp);
2079 dynData.emplace_back(fmt::format(
"GNSS2::RawMeas::{} - dp", satId),
static_cast<double>(satellite.dp));