INSTINCT Code Coverage Report


Directory: src/
File: Nodes/DataLogger/IMU/VectorNavDataLogger.cpp
Date: 2025-02-07 16:54:41
Exec Total Coverage
Lines: 648 881 73.6%
Functions: 10 13 76.9%
Branches: 1148 2972 38.6%

Line Branch Exec Source
1 // This file is part of INSTINCT, the INS Toolkit for Integrated
2 // Navigation Concepts and Training by the Institute of Navigation of
3 // the University of Stuttgart, Germany.
4 //
5 // This Source Code Form is subject to the terms of the Mozilla Public
6 // License, v. 2.0. If a copy of the MPL was not distributed with this
7 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
8
9 #include "VectorNavDataLogger.hpp"
10
11 #include "NodeData/IMU/VectorNavBinaryOutput.hpp"
12
13 #include "util/Logger.hpp"
14 #include "util/StringUtil.hpp"
15
16 #include <iomanip> // std::setprecision
17 #include <limits>
18
19 #include "internal/NodeManager.hpp"
20 namespace nm = NAV::NodeManager;
21 #include "internal/FlowManager.hpp"
22
23 #include <imgui_internal.h>
24
25 116 NAV::VectorNavDataLogger::VectorNavDataLogger()
26
4/8
✓ Branch 1 taken 116 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 116 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 116 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 116 times.
✗ Branch 12 not taken.
116 : Node(typeStatic())
27 {
28 LOG_TRACE("{}: called", name);
29
30 116 _fileType = FileType::BINARY;
31
32 116 _hasConfig = true;
33 116 _guiConfigDefaultWindowSize = { 444, 92 };
34
35
4/8
✓ Branch 1 taken 116 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 116 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 116 times.
✓ Branch 9 taken 116 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
348 nm::CreateInputPin(this, "BinaryOutput", Pin::Type::Flow, { NAV::VectorNavBinaryOutput::type() }, &VectorNavDataLogger::writeObservation);
36 232 }
37
38 240 NAV::VectorNavDataLogger::~VectorNavDataLogger()
39 {
40 LOG_TRACE("{}: called", nameId());
41 240 }
42
43 228 std::string NAV::VectorNavDataLogger::typeStatic()
44 {
45
1/2
✓ Branch 1 taken 228 times.
✗ Branch 2 not taken.
456 return "VectorNavDataLogger";
46 }
47
48 std::string NAV::VectorNavDataLogger::type() const
49 {
50 return typeStatic();
51 }
52
53 112 std::string NAV::VectorNavDataLogger::category()
54 {
55
1/2
✓ Branch 1 taken 112 times.
✗ Branch 2 not taken.
224 return "Data Logger";
56 }
57
58 void NAV::VectorNavDataLogger::guiConfig()
59 {
60 if (FileWriter::guiConfig(_fileType == FileType::ASCII ? ".csv" : ".vnb", { _fileType == FileType::ASCII ? ".csv" : ".vnb" }, size_t(id), nameId()))
61 {
62 flow::ApplyChanges();
63 doDeinitialize();
64 }
65
66 if (CommonLog::ShowOriginInput(nameId().c_str()))
67 {
68 flow::ApplyChanges();
69 }
70
71 static constexpr std::array<FileType, 2> fileTypes = {
72 { FileType::ASCII,
73 FileType::BINARY }
74 };
75 if (ImGui::BeginCombo(fmt::format("Mode##{}", size_t(id)).c_str(), FileWriter::to_string(_fileType)))
76 {
77 for (const auto& type : fileTypes)
78 {
79 const bool isSelected = (_fileType == type);
80 if (ImGui::Selectable(to_string(type), isSelected))
81 {
82 _fileType = type;
83 LOG_DEBUG("{}: _fileType changed to {}", nameId(), FileWriter::to_string(_fileType));
84 str::replace(_path, _fileType == FileType::ASCII ? ".vnb" : ".csv", _fileType == FileType::ASCII ? ".csv" : ".vnb");
85 flow::ApplyChanges();
86 if (isInitialized())
87 {
88 deinitialize();
89 initialize();
90 }
91 }
92
93 if (isSelected) // Set the initial focus when opening the combo (scrolling + keyboard navigation focus)
94 {
95 ImGui::SetItemDefaultFocus();
96 }
97 }
98 ImGui::EndCombo();
99 }
100 }
101
102 [[nodiscard]] json NAV::VectorNavDataLogger::save() const
103 {
104 LOG_TRACE("{}: called", nameId());
105
106 json j;
107
108 j["FileWriter"] = FileWriter::save();
109
110 return j;
111 }
112
113 4 void NAV::VectorNavDataLogger::restore(json const& j)
114 {
115 LOG_TRACE("{}: called", nameId());
116
117
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
4 if (j.contains("FileWriter"))
118 {
119 4 FileWriter::restore(j.at("FileWriter"));
120 }
121 4 }
122
123 4 bool NAV::VectorNavDataLogger::onCreateLink([[maybe_unused]] OutputPin& startPin, [[maybe_unused]] InputPin& endPin)
124 {
125 LOG_TRACE("{}: called for {} ==> {}", nameId(), size_t(startPin.id), size_t(endPin.id));
126
127
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
4 if (isInitialized())
128 {
129 deinitialize();
130 initialize();
131 }
132
133 4 return true;
134 }
135
136 4 void NAV::VectorNavDataLogger::flush()
137 {
138 4 _filestream.flush();
139 4 }
140
141 12 bool NAV::VectorNavDataLogger::initialize()
142 {
143 LOG_TRACE("{}: called", nameId());
144
145
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
12 if (!FileWriter::initialize())
146 {
147 return false;
148 }
149
150 12 CommonLog::initialize();
151
152 12 _headerWritten = false;
153
154 12 return true;
155 }
156
157 4 void NAV::VectorNavDataLogger::deinitialize()
158 {
159 LOG_TRACE("{}: called", nameId());
160
161 4 FileWriter::deinitialize();
162 4 }
163
164 59 void NAV::VectorNavDataLogger::writeObservation(NAV::InputPin::NodeDataQueue& queue, size_t /* pinIdx */)
165 {
166
1/2
✓ Branch 1 taken 59 times.
✗ Branch 2 not taken.
59 auto obs = std::static_pointer_cast<const VectorNavBinaryOutput>(queue.extract_front());
167
168
2/2
✓ Branch 0 taken 30 times.
✓ Branch 1 taken 30 times.
60 if (_fileType == FileType::ASCII)
169 {
170
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 28 times.
30 if (!_headerWritten)
171 {
172
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 _filestream << "Time [s],GpsCycle,GpsWeek,GpsTow [s]";
173
174 // Group 2 (Time)
175
1/2
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
2 if (obs->timeOutputs)
176 {
177
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
2 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESTARTUP)
178 {
179
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 _filestream << ",Time::TimeStartup [ns]";
180 }
181
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
2 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEGPS)
182 {
183 _filestream << ",Time::TimeGps [ns]";
184 }
185
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
2 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_GPSTOW)
186 {
187
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 _filestream << ",Time::GpsTow [ns]";
188 }
189
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
2 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_GPSWEEK)
190 {
191
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 _filestream << ",Time::GpsWeek";
192 }
193
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
2 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESYNCIN)
194 {
195 _filestream << ",Time::TimeSyncIn [ns]";
196 }
197
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
2 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEGPSPPS)
198 {
199 _filestream << ",Time::TimeGpsPps [ns]";
200 }
201
3/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 1 times.
2 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEUTC)
202 {
203
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",Time::TimeUTC::year,Time::TimeUTC::month,Time::TimeUTC::day,Time::TimeUTC::hour,Time::TimeUTC::min,Time::TimeUTC::sec,Time::TimeUTC::ms";
204 }
205
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
2 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_SYNCINCNT)
206 {
207 _filestream << ",Time::SyncInCnt";
208 }
209
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
2 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_SYNCOUTCNT)
210 {
211 _filestream << ",Time::SyncOutCnt";
212 }
213
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
2 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESTATUS)
214 {
215
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 _filestream << ",Time::TimeStatus::timeOk,Time::TimeStatus::dateOk,Time::TimeStatus::utcTimeValid";
216 }
217 }
218 // Group 3 (IMU)
219
2/2
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 1 times.
2 if (obs->imuOutputs)
220 {
221
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
1 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_IMUSTATUS)
222 {
223 _filestream << ",IMU::ImuStatus";
224 }
225
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPMAG)
226 {
227
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",IMU::UncompMag::X [Gauss],IMU::UncompMag::Y [Gauss],IMU::UncompMag::Z [Gauss]";
228 }
229
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPACCEL)
230 {
231
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",IMU::UncompAccel::X [m/s^2],IMU::UncompAccel::Y [m/s^2],IMU::UncompAccel::Z [m/s^2]";
232 }
233
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPGYRO)
234 {
235
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",IMU::UncompGyro::X [rad/s],IMU::UncompGyro::Y [rad/s],IMU::UncompGyro::Z [rad/s]";
236 }
237
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_TEMP)
238 {
239
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",IMU::Temp [Celsius]";
240 }
241
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_PRES)
242 {
243
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",IMU::Pres [kPa]";
244 }
245
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTATHETA)
246 {
247
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",IMU::DeltaTime [s],IMU::DeltaTheta::X [deg],IMU::DeltaTheta::Y [deg],IMU::DeltaTheta::Z [deg]";
248 }
249
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTAVEL)
250 {
251
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",IMU::DeltaVel::X [m/s],IMU::DeltaVel::Y [m/s],IMU::DeltaVel::Z [m/s]";
252 }
253
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_MAG)
254 {
255
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",IMU::Mag::X [Gauss],IMU::Mag::Y [Gauss],IMU::Mag::Z [Gauss]";
256 }
257
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_ACCEL)
258 {
259
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",IMU::Accel::X [m/s^2],IMU::Accel::Y [m/s^2],IMU::Accel::Z [m/s^2]";
260 }
261
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_ANGULARRATE)
262 {
263
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",IMU::AngularRate::X,IMU::AngularRate::Y [rad/s],IMU::AngularRate::Z [rad/s]";
264 }
265 }
266 // Group 4 (GNSS1)
267
1/2
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
2 if (obs->gnss1Outputs)
268 {
269
3/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 1 times.
2 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_UTC)
270 {
271
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS1::UTC::year,GNSS1::UTC::month,GNSS1::UTC::day,GNSS1::UTC::hour,GNSS1::UTC::min,GNSS1::UTC::sec,GNSS1::UTC::ms";
272 }
273
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
2 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TOW)
274 {
275
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 _filestream << ",GNSS1::Tow [ns]";
276 }
277
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
2 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_WEEK)
278 {
279
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 _filestream << ",GNSS1::Week";
280 }
281
3/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 1 times.
2 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_NUMSATS)
282 {
283
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS1::NumSats";
284 }
285
3/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 1 times.
2 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_FIX)
286 {
287
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS1::Fix";
288 }
289
3/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 1 times.
2 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSLLA)
290 {
291
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS1::PosLla::latitude [deg],GNSS1::PosLla::longitude [deg],GNSS1::PosLla::altitude [m]";
292 }
293
3/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 1 times.
2 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSECEF)
294 {
295
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS1::PosEcef::X [m],GNSS1::PosEcef::Y [m],GNSS1::PosEcef::Z [m]";
296 }
297
3/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 1 times.
2 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELNED)
298 {
299
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS1::VelNed::N [m/s],GNSS1::VelNed::E [m/s],GNSS1::VelNed::D [m/s]";
300 }
301
3/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 1 times.
2 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELECEF)
302 {
303
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS1::VelEcef::X [m/s],GNSS1::VelEcef::Y [m/s],GNSS1::VelEcef::Z [m/s]";
304 }
305
3/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 1 times.
2 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSU)
306 {
307
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS1::PosU::N [m],GNSS1::PosU::E [m],GNSS1::PosU::D [m]";
308 }
309
3/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 1 times.
2 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELU)
310 {
311
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS1::VelU [m/s]";
312 }
313
3/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 1 times.
2 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEU)
314 {
315
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS1::TimeU [s]";
316 }
317
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
2 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEINFO)
318 {
319
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 _filestream << ",GNSS1::TimeInfo::Status::timeOk,GNSS1::TimeInfo::Status::dateOk,GNSS1::TimeInfo::Status::utcTimeValid,GNSS1::TimeInfo::LeapSeconds";
320 }
321
3/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 1 times.
2 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_DOP)
322 {
323
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS1::DOP::g,GNSS1::DOP::p,GNSS1::DOP::t,GNSS1::DOP::v,GNSS1::DOP::h,GNSS1::DOP::n,GNSS1::DOP::e";
324 }
325
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
2 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_SATINFO)
326 {
327 _filestream << ",GNSS1::SatInfo::NumSats,GNSS1::SatInfo::Satellites";
328 }
329
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
2 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_RAWMEAS)
330 {
331 _filestream << ",GNSS1::RawMeas::Tow [s],GNSS1::RawMeas::Week,GNSS1::RawMeas::NumSats,GNSS1::RawMeas::Satellites";
332 }
333 }
334 // Group 5 (Attitude)
335
1/2
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
2 if (obs->attitudeOutputs)
336 {
337
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
2 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_VPESTATUS)
338 {
339 _filestream << ",Att::VpeStatus::AttitudeQuality"
340 ",Att::VpeStatus::GyroSaturation"
341 ",Att::VpeStatus::GyroSaturationRecovery"
342 ",Att::VpeStatus::MagDisturbance"
343 ",Att::VpeStatus::MagSaturation"
344 ",Att::VpeStatus::AccDisturbance"
345 ",Att::VpeStatus::AccSaturation"
346 ",Att::VpeStatus::KnownMagDisturbance"
347 ",Att::VpeStatus::KnownAccelDisturbance";
348 }
349
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
2 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_YAWPITCHROLL)
350 {
351
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 _filestream << ",Att::YawPitchRoll::Y [deg],Att::YawPitchRoll::P [deg],Att::YawPitchRoll::R [deg]";
352 }
353
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
2 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_QUATERNION)
354 {
355
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 _filestream << ",Att::Quaternion::w,Att::Quaternion::x,Att::Quaternion::y,Att::Quaternion::z";
356 }
357
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
2 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_DCM)
358 {
359 _filestream << ",Att::DCM::0-0,Att::DCM::0-1,Att::DCM::0-2"
360 ",Att::DCM::1-0,Att::DCM::1-1,Att::DCM::1-2"
361 ",Att::DCM::2-0,Att::DCM::2-1,Att::DCM::2-2";
362 }
363
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
2 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_MAGNED)
364 {
365 _filestream << ",Att::MagNed::N [Gauss],Att::MagNed::E [Gauss],Att::MagNed::D [Gauss]";
366 }
367
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
2 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_ACCELNED)
368 {
369 _filestream << ",Att::AccelNed::N [m/s^2],Att::AccelNed::E [m/s^2],Att::AccelNed::D [m/s^2]";
370 }
371
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
2 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_LINEARACCELBODY)
372 {
373 _filestream << ",Att::LinearAccelBody::X [m/s^2],Att::LinearAccelBody::Y [m/s^2],Att::LinearAccelBody::Z [m/s^2]";
374 }
375
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
2 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_LINEARACCELNED)
376 {
377 _filestream << ",Att::LinearAccelNed::N [m/s^2],Att::LinearAccelNed::E [m/s^2],Att::LinearAccelNed::D [m/s^2]";
378 }
379
2/4
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
2 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_YPRU)
380 {
381
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 _filestream << ",Att::YprU::Y [deg],Att::YprU::P [deg],Att::YprU::R [deg]";
382 }
383 }
384 // Group 6 (INS)
385
2/2
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 1 times.
2 if (obs->insOutputs)
386 {
387
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_INSSTATUS)
388 {
389 _filestream << ",INS::InsStatus::Mode"
390 ",INS::InsStatus::GpsFix"
391 ",INS::InsStatus::Error::IMU"
392 ",INS::InsStatus::Error::MagPres"
393 ",INS::InsStatus::Error::GNSS"
394 ",INS::InsStatus::GpsHeadingIns"
395
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 ",INS::InsStatus::GpsCompass";
396 }
397
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSLLA)
398 {
399
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",INS::PosLla::latitude [deg],INS::PosLla::longitude [deg],INS::PosLla::altitude [m]";
400 }
401
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSECEF)
402 {
403
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",INS::PosEcef::X [m],INS::PosEcef::Y [m],INS::PosEcef::Z [m]";
404 }
405
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELBODY)
406 {
407
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",INS::VelBody::X [m/s],INS::VelBody::Y [m/s],INS::VelBody::Z [m/s]";
408 }
409
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELNED)
410 {
411
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",INS::VelNed::N [m/s],INS::VelNed::E [m/s],INS::VelNed::D [m/s]";
412 }
413
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELECEF)
414 {
415
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",INS::VelEcef::X [m/s],INS::VelEcef::Y [m/s],INS::VelEcef::Z [m/s]";
416 }
417
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_MAGECEF)
418 {
419
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",INS::MagEcef::X [Gauss],INS::MagEcef::Y [Gauss],INS::MagEcef::Z [Gauss]";
420 }
421
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_ACCELECEF)
422 {
423
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",INS::AccelEcef::X [m/s^2],INS::AccelEcef::Y [m/s^2],INS::AccelEcef::Z [m/s^2]";
424 }
425
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_LINEARACCELECEF)
426 {
427
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",INS::LinearAccelEcef::X [m/s^2],INS::LinearAccelEcef::Y [m/s^2],INS::LinearAccelEcef::Z [m/s^2]";
428 }
429
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSU)
430 {
431
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",INS::PosU [m]";
432 }
433
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELU)
434 {
435
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",INS::VelU [m/s]";
436 }
437 }
438 // Group 7 (GNSS2)
439
2/2
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 1 times.
2 if (obs->gnss2Outputs)
440 {
441
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_UTC)
442 {
443
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS2::UTC::year,GNSS2::UTC::month,GNSS2::UTC::day,GNSS2::UTC::hour,GNSS2::UTC::min,GNSS2::UTC::sec,GNSS2::UTC::ms";
444 }
445
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TOW)
446 {
447
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS2::Tow [ns]";
448 }
449
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_WEEK)
450 {
451
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS2::Week";
452 }
453
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_NUMSATS)
454 {
455
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS2::NumSats";
456 }
457
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_FIX)
458 {
459
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS2::Fix";
460 }
461
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSLLA)
462 {
463
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS2::PosLla::latitude [deg],GNSS2::PosLla::longitude [deg],GNSS2::PosLla::altitude [m]";
464 }
465
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSECEF)
466 {
467
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS2::PosEcef::X [m],GNSS2::PosEcef::Y [m],GNSS2::PosEcef::Z [m]";
468 }
469
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELNED)
470 {
471
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS2::VelNed::N [m/s],GNSS2::VelNed::E [m/s],GNSS2::VelNed::D [m/s]";
472 }
473
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELECEF)
474 {
475
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS2::VelEcef::X [m/s],GNSS2::VelEcef::Y [m/s],GNSS2::VelEcef::Z [m/s]";
476 }
477
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSU)
478 {
479
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS2::PosU::N [m],GNSS2::PosU::E [m],GNSS2::PosU::D [m]";
480 }
481
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELU)
482 {
483
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS2::VelU [m/s]";
484 }
485
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEU)
486 {
487
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS2::TimeU [s]";
488 }
489
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEINFO)
490 {
491
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS2::TimeInfo::Status::timeOk,GNSS2::TimeInfo::Status::dateOk,GNSS2::TimeInfo::Status::utcTimeValid,GNSS2::TimeInfo::LeapSeconds";
492 }
493
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_DOP)
494 {
495
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 _filestream << ",GNSS2::DOP::g,GNSS2::DOP::p,GNSS2::DOP::t,GNSS2::DOP::v,GNSS2::DOP::h,GNSS2::DOP::n,GNSS2::DOP::e";
496 }
497
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
1 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_SATINFO)
498 {
499 _filestream << ",GNSS2::SatInfo::NumSats,GNSS2::SatInfo::Satellites";
500 }
501
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
1 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_RAWMEAS)
502 {
503 _filestream << ",GNSS2::RawMeas::Tow [s],GNSS2::RawMeas::Week,GNSS2::RawMeas::NumSats,GNSS2::RawMeas::Satellites";
504 }
505 }
506
507
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 _filestream << std::endl; // NOLINT(performance-avoid-endl)
508 2 _headerWritten = true;
509 }
510
511 30 constexpr int gpsCyclePrecision = 3;
512 30 constexpr int gpsTimePrecision = 12;
513 30 constexpr int floatPrecision = std::numeric_limits<float>::digits10 + 2;
514 30 constexpr int doublePrecision = std::numeric_limits<double>::digits10 + 2;
515
516
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 if (!obs->insTime.empty())
517 {
518
2/4
✓ Branch 4 taken 30 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 30 times.
✗ Branch 8 not taken.
30 _filestream << std::setprecision(15) << std::round(calcTimeIntoRun(obs->insTime) * 1e9) / 1e9;
519 }
520
1/2
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
30 _filestream << ",";
521
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 if (!obs->insTime.empty())
522 {
523
3/6
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 8 taken 30 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
30 _filestream << std::fixed << std::setprecision(gpsCyclePrecision) << obs->insTime.toGPSweekTow().gpsCycle;
524 }
525
1/2
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
30 _filestream << ',';
526
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 if (!obs->insTime.empty())
527 {
528
3/6
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 8 taken 30 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
30 _filestream << std::defaultfloat << std::setprecision(gpsTimePrecision) << obs->insTime.toGPSweekTow().gpsWeek;
529 }
530
1/2
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
30 _filestream << ',';
531
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 if (!obs->insTime.empty())
532 {
533
3/6
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 8 taken 30 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
30 _filestream << std::defaultfloat << std::setprecision(gpsTimePrecision) << obs->insTime.toGPSweekTow().tow;
534 }
535 // Group 2 (Time)
536
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 if (obs->timeOutputs)
537 {
538
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESTARTUP)
539 {
540
2/4
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 30 times.
✗ Branch 7 not taken.
30 _filestream << "," << obs->timeOutputs->timeStartup;
541 }
542
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEGPS)
543 {
544 _filestream << "," << obs->timeOutputs->timeGps;
545 }
546
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_GPSTOW)
547 {
548
2/4
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 30 times.
✗ Branch 7 not taken.
30 _filestream << "," << obs->timeOutputs->gpsTow;
549 }
550
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_GPSWEEK)
551 {
552
2/4
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 30 times.
✗ Branch 7 not taken.
30 _filestream << "," << obs->timeOutputs->gpsWeek;
553 }
554
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESYNCIN)
555 {
556 _filestream << "," << obs->timeOutputs->timeSyncIn;
557 }
558
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEGPSPPS)
559 {
560 _filestream << "," << obs->timeOutputs->timePPS;
561 }
562
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEUTC)
563 {
564
1/2
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
12 _filestream << "," << static_cast<int>(obs->timeOutputs->timeUtc.year)
565
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << static_cast<unsigned int>(obs->timeOutputs->timeUtc.month)
566
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << static_cast<unsigned int>(obs->timeOutputs->timeUtc.day)
567
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << static_cast<unsigned int>(obs->timeOutputs->timeUtc.hour)
568
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << static_cast<unsigned int>(obs->timeOutputs->timeUtc.min)
569
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << static_cast<unsigned int>(obs->timeOutputs->timeUtc.sec)
570
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << obs->timeOutputs->timeUtc.ms;
571 }
572
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_SYNCINCNT)
573 {
574 _filestream << "," << obs->timeOutputs->syncInCnt;
575 }
576
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_SYNCOUTCNT)
577 {
578 _filestream << "," << obs->timeOutputs->syncOutCnt;
579 }
580
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESTATUS)
581 {
582
2/4
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 30 times.
✗ Branch 8 not taken.
30 _filestream << "," << static_cast<unsigned int>(obs->timeOutputs->timeStatus.timeOk())
583
2/4
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 30 times.
✗ Branch 8 not taken.
30 << "," << static_cast<unsigned int>(obs->timeOutputs->timeStatus.dateOk())
584
2/4
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 30 times.
✗ Branch 8 not taken.
30 << "," << static_cast<unsigned int>(obs->timeOutputs->timeStatus.utcTimeValid());
585 }
586 }
587 // Group 3 (IMU)
588
2/2
✓ Branch 2 taken 18 times.
✓ Branch 3 taken 12 times.
30 if (obs->imuOutputs)
589 {
590
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 18 times.
18 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_IMUSTATUS)
591 {
592 _filestream << "," << obs->imuOutputs->imuStatus;
593 }
594
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
18 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPMAG)
595 {
596 18 _filestream << std::setprecision(floatPrecision);
597
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 _filestream << "," << obs->imuOutputs->uncompMag(0)
598
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 << "," << obs->imuOutputs->uncompMag(1)
599
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 << "," << obs->imuOutputs->uncompMag(2);
600 }
601
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
18 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPACCEL)
602 {
603 18 _filestream << std::setprecision(floatPrecision);
604
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 _filestream << "," << obs->imuOutputs->uncompAccel(0)
605
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 << "," << obs->imuOutputs->uncompAccel(1)
606
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 << "," << obs->imuOutputs->uncompAccel(2);
607 }
608
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
18 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPGYRO)
609 {
610 18 _filestream << std::setprecision(floatPrecision);
611
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 _filestream << "," << obs->imuOutputs->uncompGyro(0)
612
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 << "," << obs->imuOutputs->uncompGyro(1)
613
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 << "," << obs->imuOutputs->uncompGyro(2);
614 }
615
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
18 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_TEMP)
616 {
617
2/4
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 8 taken 18 times.
✗ Branch 9 not taken.
18 _filestream << "," << std::setprecision(floatPrecision) << obs->imuOutputs->temp;
618 }
619
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
18 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_PRES)
620 {
621
2/4
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 8 taken 18 times.
✗ Branch 9 not taken.
18 _filestream << "," << std::setprecision(floatPrecision) << obs->imuOutputs->pres;
622 }
623
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
18 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTATHETA)
624 {
625 18 _filestream << std::setprecision(floatPrecision);
626
2/4
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
18 _filestream << "," << obs->imuOutputs->deltaTime
627
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 << "," << obs->imuOutputs->deltaTheta(0)
628
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 << "," << obs->imuOutputs->deltaTheta(1)
629
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 << "," << obs->imuOutputs->deltaTheta(2);
630 }
631
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
18 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTAVEL)
632 {
633 18 _filestream << std::setprecision(floatPrecision);
634
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 _filestream << "," << obs->imuOutputs->deltaV(0)
635
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 << "," << obs->imuOutputs->deltaV(1)
636
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 << "," << obs->imuOutputs->deltaV(2);
637 }
638
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
18 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_MAG)
639 {
640 18 _filestream << std::setprecision(floatPrecision);
641
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 _filestream << "," << obs->imuOutputs->mag(0)
642
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 << "," << obs->imuOutputs->mag(1)
643
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 << "," << obs->imuOutputs->mag(2);
644 }
645
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
18 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_ACCEL)
646 {
647 18 _filestream << std::setprecision(floatPrecision);
648
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 _filestream << "," << obs->imuOutputs->accel(0)
649
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 << "," << obs->imuOutputs->accel(1)
650
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 << "," << obs->imuOutputs->accel(2);
651 }
652
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
18 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_ANGULARRATE)
653 {
654 18 _filestream << std::setprecision(floatPrecision);
655
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 _filestream << "," << obs->imuOutputs->angularRate(0)
656
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 << "," << obs->imuOutputs->angularRate(1)
657
3/6
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 18 times.
✗ Branch 10 not taken.
18 << "," << obs->imuOutputs->angularRate(2);
658 }
659 }
660 // Group 4 (GNSS1)
661
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 if (obs->gnss1Outputs)
662 {
663
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_UTC)
664 {
665
1/2
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
12 _filestream << "," << static_cast<int>(obs->gnss1Outputs->timeUtc.year)
666
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << static_cast<unsigned int>(obs->gnss1Outputs->timeUtc.month)
667
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << static_cast<unsigned int>(obs->gnss1Outputs->timeUtc.day)
668
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << static_cast<unsigned int>(obs->gnss1Outputs->timeUtc.hour)
669
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << static_cast<unsigned int>(obs->gnss1Outputs->timeUtc.min)
670
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << static_cast<unsigned int>(obs->gnss1Outputs->timeUtc.sec)
671
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << obs->gnss1Outputs->timeUtc.ms;
672 }
673
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TOW)
674 {
675
2/4
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 30 times.
✗ Branch 7 not taken.
30 _filestream << "," << obs->gnss1Outputs->tow;
676 }
677
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_WEEK)
678 {
679
2/4
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 30 times.
✗ Branch 7 not taken.
30 _filestream << "," << obs->gnss1Outputs->week;
680 }
681
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_NUMSATS)
682 {
683
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream << "," << static_cast<unsigned int>(obs->gnss1Outputs->numSats);
684 }
685
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_FIX)
686 {
687
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream << "," << static_cast<unsigned int>(obs->gnss1Outputs->fix);
688 }
689
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSLLA)
690 {
691 12 _filestream << std::setprecision(doublePrecision);
692
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 _filestream << "," << obs->gnss1Outputs->posLla(0)
693
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->gnss1Outputs->posLla(1)
694
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->gnss1Outputs->posLla(2);
695 }
696
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSECEF)
697 {
698 12 _filestream << std::setprecision(doublePrecision);
699
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 _filestream << "," << obs->gnss1Outputs->posEcef(0)
700
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->gnss1Outputs->posEcef(1)
701
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->gnss1Outputs->posEcef(2);
702 }
703
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELNED)
704 {
705 12 _filestream << std::setprecision(floatPrecision);
706
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 _filestream << "," << obs->gnss1Outputs->velNed(0)
707
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->gnss1Outputs->velNed(1)
708
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->gnss1Outputs->velNed(2);
709 }
710
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELECEF)
711 {
712 12 _filestream << std::setprecision(floatPrecision);
713
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 _filestream << "," << obs->gnss1Outputs->velEcef(0)
714
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->gnss1Outputs->velEcef(1)
715
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->gnss1Outputs->velEcef(2);
716 }
717
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSU)
718 {
719 12 _filestream << std::setprecision(floatPrecision);
720
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 _filestream << "," << obs->gnss1Outputs->posU(0)
721
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->gnss1Outputs->posU(1)
722
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->gnss1Outputs->posU(2);
723 }
724
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELU)
725 {
726
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 8 taken 12 times.
✗ Branch 9 not taken.
12 _filestream << "," << std::setprecision(floatPrecision) << obs->gnss1Outputs->velU;
727 }
728
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEU)
729 {
730
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 8 taken 12 times.
✗ Branch 9 not taken.
12 _filestream << "," << std::setprecision(floatPrecision) << obs->gnss1Outputs->timeU;
731 }
732
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEINFO)
733 {
734
2/4
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 30 times.
✗ Branch 8 not taken.
30 _filestream << "," << static_cast<unsigned int>(obs->gnss1Outputs->timeInfo.status.timeOk())
735
2/4
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 30 times.
✗ Branch 8 not taken.
30 << "," << static_cast<unsigned int>(obs->gnss1Outputs->timeInfo.status.dateOk())
736
2/4
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 30 times.
✗ Branch 8 not taken.
30 << "," << static_cast<unsigned int>(obs->gnss1Outputs->timeInfo.status.utcTimeValid())
737
2/4
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 30 times.
✗ Branch 7 not taken.
30 << "," << static_cast<int>(obs->gnss1Outputs->timeInfo.leapSeconds);
738 }
739
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_DOP)
740 {
741 12 _filestream << std::setprecision(floatPrecision);
742
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream << "," << obs->gnss1Outputs->dop.gDop
743
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << obs->gnss1Outputs->dop.pDop
744
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << obs->gnss1Outputs->dop.tDop
745
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << obs->gnss1Outputs->dop.vDop
746
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << obs->gnss1Outputs->dop.hDop
747
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << obs->gnss1Outputs->dop.nDop
748
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << obs->gnss1Outputs->dop.eDop;
749 }
750
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_SATINFO)
751 {
752 _filestream << "," << static_cast<unsigned int>(obs->gnss1Outputs->satInfo.numSats)
753 << ",";
754 for (auto& satellite : obs->gnss1Outputs->satInfo.satellites)
755 {
756 _filestream << "["
757 << static_cast<int>(satellite.sys) << "|"
758 << static_cast<unsigned int>(satellite.svId) << "|"
759 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::SatInfo::SatInfoElement::Flags::Healthy) ? 1 : 0) << "|"
760 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::SatInfo::SatInfoElement::Flags::Almanac) ? 1 : 0) << "|"
761 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::SatInfo::SatInfoElement::Flags::Ephemeris) ? 1 : 0) << "|"
762 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::SatInfo::SatInfoElement::Flags::DifferentialCorrection) ? 1 : 0) << "|"
763 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::SatInfo::SatInfoElement::Flags::UsedForNavigation) ? 1 : 0) << "|"
764 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::SatInfo::SatInfoElement::Flags::AzimuthElevationValid) ? 1 : 0) << "|"
765 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::SatInfo::SatInfoElement::Flags::UsedForRTK) ? 1 : 0) << "|"
766 << static_cast<unsigned int>(satellite.cno) << "|"
767 << static_cast<unsigned int>(satellite.qi) << "|"
768 << static_cast<int>(satellite.el) << "|"
769 << satellite.az << "]";
770 }
771 }
772
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_RAWMEAS)
773 {
774 _filestream << std::setprecision(gpsTimePrecision);
775 _filestream << "," << obs->gnss1Outputs->raw.tow
776 << "," << obs->gnss1Outputs->raw.week
777 << "," << static_cast<unsigned int>(obs->gnss1Outputs->raw.numSats)
778 << ",";
779 for (auto& satellite : obs->gnss1Outputs->raw.satellites)
780 {
781 _filestream << "["
782 << static_cast<int>(satellite.sys) << "|"
783 << static_cast<unsigned int>(satellite.svId) << "|"
784 << static_cast<unsigned int>(satellite.freq) << "|"
785 << static_cast<unsigned int>(satellite.chan) << "|"
786 << static_cast<int>(satellite.slot) << "|"
787 << static_cast<unsigned int>(satellite.cno) << "|"
788 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::RawMeas::SatRawElement::Flags::Searching) ? 1 : 0) << "|"
789 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::RawMeas::SatRawElement::Flags::Tracking) ? 1 : 0) << "|"
790 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::RawMeas::SatRawElement::Flags::TimeValid) ? 1 : 0) << "|"
791 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::RawMeas::SatRawElement::Flags::CodeLock) ? 1 : 0) << "|"
792 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::RawMeas::SatRawElement::Flags::PhaseLock) ? 1 : 0) << "|"
793 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::RawMeas::SatRawElement::Flags::PhaseHalfAmbiguity) ? 1 : 0) << "|"
794 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::RawMeas::SatRawElement::Flags::PhaseHalfSub) ? 1 : 0) << "|"
795 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::RawMeas::SatRawElement::Flags::PhaseSlip) ? 1 : 0) << "|"
796 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::RawMeas::SatRawElement::Flags::PseudorangeSmoothed) ? 1 : 0) << "|"
797 << std::setprecision(doublePrecision) << satellite.pr << "|"
798 << std::setprecision(doublePrecision) << satellite.cp << "|"
799 << std::setprecision(floatPrecision) << satellite.dp << "]";
800 }
801 }
802 }
803 // Group 5 (Attitude)
804
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 if (obs->attitudeOutputs)
805 {
806
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_VPESTATUS)
807 {
808 _filestream << "," << static_cast<unsigned int>(obs->attitudeOutputs->vpeStatus.attitudeQuality())
809 << "," << static_cast<unsigned int>(obs->attitudeOutputs->vpeStatus.gyroSaturation())
810 << "," << static_cast<unsigned int>(obs->attitudeOutputs->vpeStatus.gyroSaturationRecovery())
811 << "," << static_cast<unsigned int>(obs->attitudeOutputs->vpeStatus.magDisturbance())
812 << "," << static_cast<unsigned int>(obs->attitudeOutputs->vpeStatus.magSaturation())
813 << "," << static_cast<unsigned int>(obs->attitudeOutputs->vpeStatus.accDisturbance())
814 << "," << static_cast<unsigned int>(obs->attitudeOutputs->vpeStatus.accSaturation())
815 << "," << static_cast<unsigned int>(obs->attitudeOutputs->vpeStatus.knownMagDisturbance())
816 << "," << static_cast<unsigned int>(obs->attitudeOutputs->vpeStatus.knownAccelDisturbance());
817 }
818
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_YAWPITCHROLL)
819 {
820 30 _filestream << std::setprecision(floatPrecision);
821
3/6
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 8 taken 30 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 30 times.
✗ Branch 12 not taken.
30 _filestream << "," << std::setprecision(floatPrecision) << obs->attitudeOutputs->ypr(0)
822
3/6
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 30 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 30 times.
✗ Branch 10 not taken.
30 << "," << obs->attitudeOutputs->ypr(1)
823
3/6
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 30 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 30 times.
✗ Branch 10 not taken.
30 << "," << obs->attitudeOutputs->ypr(2);
824 }
825
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_QUATERNION)
826 {
827 30 _filestream << std::setprecision(floatPrecision);
828
3/6
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 30 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 30 times.
✗ Branch 10 not taken.
30 _filestream << "," << obs->attitudeOutputs->qtn.w()
829
3/6
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 30 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 30 times.
✗ Branch 10 not taken.
30 << "," << obs->attitudeOutputs->qtn.x()
830
3/6
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 30 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 30 times.
✗ Branch 10 not taken.
30 << "," << obs->attitudeOutputs->qtn.y()
831
3/6
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 30 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 30 times.
✗ Branch 10 not taken.
30 << "," << obs->attitudeOutputs->qtn.z();
832 }
833
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_DCM)
834 {
835 _filestream << std::setprecision(floatPrecision);
836 _filestream << "," << obs->attitudeOutputs->dcm(0, 0)
837 << "," << obs->attitudeOutputs->dcm(0, 1)
838 << "," << obs->attitudeOutputs->dcm(0, 2)
839 << "," << obs->attitudeOutputs->dcm(1, 0)
840 << "," << obs->attitudeOutputs->dcm(1, 1)
841 << "," << obs->attitudeOutputs->dcm(1, 2)
842 << "," << obs->attitudeOutputs->dcm(2, 0)
843 << "," << obs->attitudeOutputs->dcm(2, 1)
844 << "," << obs->attitudeOutputs->dcm(2, 2);
845 }
846
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_MAGNED)
847 {
848 _filestream << std::setprecision(floatPrecision);
849 _filestream << "," << obs->attitudeOutputs->magNed(0)
850 << "," << obs->attitudeOutputs->magNed(1)
851 << "," << obs->attitudeOutputs->magNed(2);
852 }
853
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_ACCELNED)
854 {
855 _filestream << std::setprecision(floatPrecision);
856 _filestream << "," << obs->attitudeOutputs->accelNed(0)
857 << "," << obs->attitudeOutputs->accelNed(1)
858 << "," << obs->attitudeOutputs->accelNed(2);
859 }
860
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_LINEARACCELBODY)
861 {
862 _filestream << std::setprecision(floatPrecision);
863 _filestream << "," << obs->attitudeOutputs->linearAccelBody(0)
864 << "," << obs->attitudeOutputs->linearAccelBody(1)
865 << "," << obs->attitudeOutputs->linearAccelBody(2);
866 }
867
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_LINEARACCELNED)
868 {
869 _filestream << std::setprecision(floatPrecision);
870 _filestream << "," << obs->attitudeOutputs->linearAccelNed(0)
871 << "," << obs->attitudeOutputs->linearAccelNed(1)
872 << "," << obs->attitudeOutputs->linearAccelNed(2);
873 }
874
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_YPRU)
875 {
876 30 _filestream << std::setprecision(floatPrecision);
877
3/6
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 30 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 30 times.
✗ Branch 10 not taken.
30 _filestream << "," << obs->attitudeOutputs->yprU(0)
878
3/6
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 30 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 30 times.
✗ Branch 10 not taken.
30 << "," << obs->attitudeOutputs->yprU(1)
879
3/6
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 30 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 30 times.
✗ Branch 10 not taken.
30 << "," << obs->attitudeOutputs->yprU(2);
880 }
881 }
882 // Group 6 (INS)
883
2/2
✓ Branch 2 taken 12 times.
✓ Branch 3 taken 18 times.
30 if (obs->insOutputs)
884 {
885
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_INSSTATUS)
886 {
887
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
12 _filestream << "," << static_cast<unsigned int>(obs->insOutputs->insStatus.mode())
888
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
12 << "," << static_cast<unsigned int>(obs->insOutputs->insStatus.gpsFix())
889
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
12 << "," << static_cast<unsigned int>(obs->insOutputs->insStatus.errorIMU())
890
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
12 << "," << static_cast<unsigned int>(obs->insOutputs->insStatus.errorMagPres())
891
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
12 << "," << static_cast<unsigned int>(obs->insOutputs->insStatus.errorGnss())
892
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
12 << "," << static_cast<unsigned int>(obs->insOutputs->insStatus.gpsHeadingIns())
893
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
12 << "," << static_cast<unsigned int>(obs->insOutputs->insStatus.gpsCompass());
894 }
895
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSLLA)
896 {
897 12 _filestream << std::setprecision(doublePrecision);
898
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 _filestream << "," << obs->insOutputs->posLla(0)
899
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->insOutputs->posLla(1)
900
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->insOutputs->posLla(2);
901 }
902
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSECEF)
903 {
904 12 _filestream << std::setprecision(doublePrecision);
905
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 _filestream << "," << obs->insOutputs->posEcef(0)
906
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->insOutputs->posEcef(1)
907
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->insOutputs->posEcef(2);
908 }
909
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELBODY)
910 {
911 12 _filestream << std::setprecision(floatPrecision);
912
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 _filestream << "," << obs->insOutputs->velBody(0)
913
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->insOutputs->velBody(1)
914
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->insOutputs->velBody(2);
915 }
916
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELNED)
917 {
918 12 _filestream << std::setprecision(floatPrecision);
919
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 _filestream << "," << obs->insOutputs->velNed(0)
920
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->insOutputs->velNed(1)
921
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->insOutputs->velNed(2);
922 }
923
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELECEF)
924 {
925 12 _filestream << std::setprecision(floatPrecision);
926
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 _filestream << "," << obs->insOutputs->velEcef(0)
927
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->insOutputs->velEcef(1)
928
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->insOutputs->velEcef(2);
929 }
930
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_MAGECEF)
931 {
932 12 _filestream << std::setprecision(floatPrecision);
933
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 _filestream << "," << obs->insOutputs->magEcef(0)
934
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->insOutputs->magEcef(1)
935
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->insOutputs->magEcef(2);
936 }
937
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_ACCELECEF)
938 {
939 12 _filestream << std::setprecision(floatPrecision);
940
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 _filestream << "," << obs->insOutputs->accelEcef(0)
941
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->insOutputs->accelEcef(1)
942
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->insOutputs->accelEcef(2);
943 }
944
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_LINEARACCELECEF)
945 {
946 12 _filestream << std::setprecision(floatPrecision);
947
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 _filestream << "," << obs->insOutputs->linearAccelEcef(0)
948
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->insOutputs->linearAccelEcef(1)
949
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->insOutputs->linearAccelEcef(2);
950 }
951
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSU)
952 {
953 12 _filestream << std::setprecision(floatPrecision);
954
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream << "," << obs->insOutputs->posU;
955 }
956
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELU)
957 {
958 12 _filestream << std::setprecision(floatPrecision);
959
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream << "," << obs->insOutputs->velU;
960 }
961 }
962 // Group 7 (GNSS2)
963
2/2
✓ Branch 2 taken 12 times.
✓ Branch 3 taken 18 times.
30 if (obs->gnss2Outputs)
964 {
965
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_UTC)
966 {
967
1/2
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
12 _filestream << "," << static_cast<int>(obs->gnss2Outputs->timeUtc.year)
968
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << static_cast<unsigned int>(obs->gnss2Outputs->timeUtc.month)
969
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << static_cast<unsigned int>(obs->gnss2Outputs->timeUtc.day)
970
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << static_cast<unsigned int>(obs->gnss2Outputs->timeUtc.hour)
971
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << static_cast<unsigned int>(obs->gnss2Outputs->timeUtc.min)
972
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << static_cast<unsigned int>(obs->gnss2Outputs->timeUtc.sec)
973
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << obs->gnss2Outputs->timeUtc.ms;
974 }
975
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TOW)
976 {
977
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream << "," << obs->gnss2Outputs->tow;
978 }
979
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_WEEK)
980 {
981
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream << "," << obs->gnss2Outputs->week;
982 }
983
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_NUMSATS)
984 {
985
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream << "," << static_cast<unsigned int>(obs->gnss2Outputs->numSats);
986 }
987
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_FIX)
988 {
989
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream << "," << static_cast<unsigned int>(obs->gnss2Outputs->fix);
990 }
991
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSLLA)
992 {
993 12 _filestream << std::setprecision(doublePrecision);
994
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 _filestream << "," << obs->gnss2Outputs->posLla(0)
995
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->gnss2Outputs->posLla(1)
996
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->gnss2Outputs->posLla(2);
997 }
998
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSECEF)
999 {
1000 12 _filestream << std::setprecision(doublePrecision);
1001
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 _filestream << "," << obs->gnss2Outputs->posEcef(0)
1002
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->gnss2Outputs->posEcef(1)
1003
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->gnss2Outputs->posEcef(2);
1004 }
1005
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELNED)
1006 {
1007 12 _filestream << std::setprecision(floatPrecision);
1008
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 _filestream << "," << obs->gnss2Outputs->velNed(0)
1009
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->gnss2Outputs->velNed(1)
1010
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->gnss2Outputs->velNed(2);
1011 }
1012
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELECEF)
1013 {
1014 12 _filestream << std::setprecision(floatPrecision);
1015
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 _filestream << "," << obs->gnss2Outputs->velEcef(0)
1016
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->gnss2Outputs->velEcef(1)
1017
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->gnss2Outputs->velEcef(2);
1018 }
1019
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSU)
1020 {
1021 12 _filestream << std::setprecision(floatPrecision);
1022
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 _filestream << "," << obs->gnss2Outputs->posU(0)
1023
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->gnss2Outputs->posU(1)
1024
3/6
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 12 times.
✗ Branch 10 not taken.
12 << "," << obs->gnss2Outputs->posU(2);
1025 }
1026
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELU)
1027 {
1028
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 8 taken 12 times.
✗ Branch 9 not taken.
12 _filestream << "," << std::setprecision(floatPrecision) << obs->gnss2Outputs->velU;
1029 }
1030
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEU)
1031 {
1032
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 8 taken 12 times.
✗ Branch 9 not taken.
12 _filestream << "," << std::setprecision(floatPrecision) << obs->gnss2Outputs->timeU;
1033 }
1034
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEINFO)
1035 {
1036
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
12 _filestream << "," << static_cast<unsigned int>(obs->gnss2Outputs->timeInfo.status.timeOk())
1037
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
12 << "," << static_cast<unsigned int>(obs->gnss2Outputs->timeInfo.status.dateOk())
1038
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
12 << "," << static_cast<unsigned int>(obs->gnss2Outputs->timeInfo.status.utcTimeValid())
1039
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << static_cast<int>(obs->gnss2Outputs->timeInfo.leapSeconds);
1040 }
1041
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_DOP)
1042 {
1043 12 _filestream << std::setprecision(floatPrecision);
1044
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream << "," << obs->gnss2Outputs->dop.gDop
1045
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << obs->gnss2Outputs->dop.pDop
1046
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << obs->gnss2Outputs->dop.tDop
1047
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << obs->gnss2Outputs->dop.vDop
1048
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << obs->gnss2Outputs->dop.hDop
1049
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << obs->gnss2Outputs->dop.nDop
1050
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 << "," << obs->gnss2Outputs->dop.eDop;
1051 }
1052
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 12 times.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_SATINFO)
1053 {
1054 _filestream << "," << static_cast<unsigned int>(obs->gnss2Outputs->satInfo.numSats)
1055 << ",";
1056 for (auto& satellite : obs->gnss2Outputs->satInfo.satellites)
1057 {
1058 _filestream << "["
1059 << static_cast<int>(satellite.sys) << "|"
1060 << static_cast<unsigned int>(satellite.svId) << "|"
1061 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::SatInfo::SatInfoElement::Flags::Healthy) ? 1 : 0) << "|"
1062 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::SatInfo::SatInfoElement::Flags::Almanac) ? 1 : 0) << "|"
1063 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::SatInfo::SatInfoElement::Flags::Ephemeris) ? 1 : 0) << "|"
1064 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::SatInfo::SatInfoElement::Flags::DifferentialCorrection) ? 1 : 0) << "|"
1065 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::SatInfo::SatInfoElement::Flags::UsedForNavigation) ? 1 : 0) << "|"
1066 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::SatInfo::SatInfoElement::Flags::AzimuthElevationValid) ? 1 : 0) << "|"
1067 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::SatInfo::SatInfoElement::Flags::UsedForRTK) ? 1 : 0) << "|"
1068 << static_cast<unsigned int>(satellite.cno) << "|"
1069 << static_cast<unsigned int>(satellite.qi) << "|"
1070 << static_cast<int>(satellite.el) << "|"
1071 << satellite.az << "]";
1072 }
1073 }
1074
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 12 times.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_RAWMEAS)
1075 {
1076 _filestream << std::setprecision(gpsTimePrecision);
1077 _filestream << "," << obs->gnss2Outputs->raw.tow
1078 << "," << obs->gnss2Outputs->raw.week
1079 << "," << static_cast<unsigned int>(obs->gnss2Outputs->raw.numSats)
1080 << ",";
1081 for (auto& satellite : obs->gnss2Outputs->raw.satellites)
1082 {
1083 _filestream << "["
1084 << static_cast<int>(satellite.sys) << "|"
1085 << static_cast<unsigned int>(satellite.svId) << "|"
1086 << static_cast<unsigned int>(satellite.freq) << "|"
1087 << static_cast<unsigned int>(satellite.chan) << "|"
1088 << static_cast<int>(satellite.slot) << "|"
1089 << static_cast<unsigned int>(satellite.cno) << "|"
1090 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::RawMeas::SatRawElement::Flags::Searching) ? 1 : 0) << "|"
1091 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::RawMeas::SatRawElement::Flags::Tracking) ? 1 : 0) << "|"
1092 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::RawMeas::SatRawElement::Flags::TimeValid) ? 1 : 0) << "|"
1093 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::RawMeas::SatRawElement::Flags::CodeLock) ? 1 : 0) << "|"
1094 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::RawMeas::SatRawElement::Flags::PhaseLock) ? 1 : 0) << "|"
1095 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::RawMeas::SatRawElement::Flags::PhaseHalfAmbiguity) ? 1 : 0) << "|"
1096 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::RawMeas::SatRawElement::Flags::PhaseHalfSub) ? 1 : 0) << "|"
1097 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::RawMeas::SatRawElement::Flags::PhaseSlip) ? 1 : 0) << "|"
1098 << (static_cast<unsigned int>(satellite.flags & NAV::vendor::vectornav::RawMeas::SatRawElement::Flags::PseudorangeSmoothed) ? 1 : 0) << "|"
1099 << std::setprecision(doublePrecision) << satellite.pr << "|"
1100 << std::setprecision(doublePrecision) << satellite.cp << "|"
1101 << std::setprecision(floatPrecision) << satellite.dp << "]";
1102 }
1103 }
1104 }
1105
1106
1/2
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
30 _filestream << '\n';
1107 }
1108 else // if (_fileType == FileType::BINARY)
1109 {
1110 30 std::array<const char, 8> zeroData{};
1111
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 28 times.
30 if (!_headerWritten)
1112 {
1113
2/4
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
2 _filestream.write(obs->timeOutputs ? reinterpret_cast<const char*>(&obs->timeOutputs->timeField) : zeroData.data(), sizeof(vn::protocol::uart::TimeGroup));
1114
3/4
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 1 times.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
3 _filestream.write(obs->imuOutputs ? reinterpret_cast<const char*>(&obs->imuOutputs->imuField) : zeroData.data(), sizeof(vn::protocol::uart::ImuGroup));
1115
2/4
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
2 _filestream.write(obs->gnss1Outputs ? reinterpret_cast<const char*>(&obs->gnss1Outputs->gnssField) : zeroData.data(), sizeof(vn::protocol::uart::GpsGroup));
1116
2/4
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
2 _filestream.write(obs->attitudeOutputs ? reinterpret_cast<const char*>(&obs->attitudeOutputs->attitudeField) : zeroData.data(), sizeof(vn::protocol::uart::AttitudeGroup));
1117
3/4
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 1 times.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
3 _filestream.write(obs->insOutputs ? reinterpret_cast<const char*>(&obs->insOutputs->insField) : zeroData.data(), sizeof(vn::protocol::uart::InsGroup));
1118
3/4
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 1 times.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
3 _filestream.write(obs->gnss2Outputs ? reinterpret_cast<const char*>(&obs->gnss2Outputs->gnssField) : zeroData.data(), sizeof(vn::protocol::uart::GpsGroup));
1119 2 _headerWritten = true;
1120 }
1121
1122
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 if (!obs->insTime.empty())
1123 {
1124
1/2
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
30 auto insTimeGPS = obs->insTime.toGPSweekTow();
1125 30 auto tow = static_cast<double>(insTimeGPS.tow);
1126
1/2
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
30 _filestream.write(reinterpret_cast<const char*>(&insTimeGPS.gpsCycle), sizeof(insTimeGPS.gpsCycle));
1127
1/2
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
30 _filestream.write(reinterpret_cast<const char*>(&insTimeGPS.gpsWeek), sizeof(insTimeGPS.gpsWeek));
1128
1/2
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
30 _filestream.write(reinterpret_cast<const char*>(&tow), sizeof(tow));
1129 }
1130 else
1131 {
1132 _filestream.write(zeroData.data(), sizeof(int32_t));
1133 _filestream.write(zeroData.data(), sizeof(int32_t));
1134 _filestream.write(zeroData.data(), sizeof(double));
1135 }
1136
1137 // Group 2 (Time)
1138
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 if (obs->timeOutputs)
1139 {
1140
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESTARTUP)
1141 {
1142
1/2
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
30 _filestream.write(reinterpret_cast<const char*>(&obs->timeOutputs->timeStartup), sizeof(obs->timeOutputs->timeStartup));
1143 }
1144
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEGPS)
1145 {
1146 _filestream.write(reinterpret_cast<const char*>(&obs->timeOutputs->timeGps), sizeof(obs->timeOutputs->timeGps));
1147 }
1148
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_GPSTOW)
1149 {
1150
1/2
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
30 _filestream.write(reinterpret_cast<const char*>(&obs->timeOutputs->gpsTow), sizeof(obs->timeOutputs->gpsTow));
1151 }
1152
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_GPSWEEK)
1153 {
1154
1/2
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
30 _filestream.write(reinterpret_cast<const char*>(&obs->timeOutputs->gpsWeek), sizeof(obs->timeOutputs->gpsWeek));
1155 }
1156
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESYNCIN)
1157 {
1158 _filestream.write(reinterpret_cast<const char*>(&obs->timeOutputs->timeSyncIn), sizeof(obs->timeOutputs->timeSyncIn));
1159 }
1160
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEGPSPPS)
1161 {
1162 _filestream.write(reinterpret_cast<const char*>(&obs->timeOutputs->timePPS), sizeof(obs->timeOutputs->timePPS));
1163 }
1164
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEUTC)
1165 {
1166
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->timeOutputs->timeUtc.year), sizeof(obs->timeOutputs->timeUtc.year));
1167
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->timeOutputs->timeUtc.month), sizeof(obs->timeOutputs->timeUtc.month));
1168
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->timeOutputs->timeUtc.day), sizeof(obs->timeOutputs->timeUtc.day));
1169
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->timeOutputs->timeUtc.hour), sizeof(obs->timeOutputs->timeUtc.hour));
1170
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->timeOutputs->timeUtc.min), sizeof(obs->timeOutputs->timeUtc.min));
1171
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->timeOutputs->timeUtc.sec), sizeof(obs->timeOutputs->timeUtc.sec));
1172
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->timeOutputs->timeUtc.ms), sizeof(obs->timeOutputs->timeUtc.ms));
1173 }
1174
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_SYNCINCNT)
1175 {
1176 _filestream.write(reinterpret_cast<const char*>(&obs->timeOutputs->syncInCnt), sizeof(obs->timeOutputs->syncInCnt));
1177 }
1178
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_SYNCOUTCNT)
1179 {
1180 _filestream.write(reinterpret_cast<const char*>(&obs->timeOutputs->syncOutCnt), sizeof(obs->timeOutputs->syncOutCnt));
1181 }
1182
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESTATUS)
1183 {
1184
1/2
✓ Branch 4 taken 30 times.
✗ Branch 5 not taken.
30 _filestream.write(reinterpret_cast<const char*>(&obs->timeOutputs->timeStatus.status()), sizeof(obs->timeOutputs->timeStatus.status()));
1185 }
1186 }
1187 // Group 3 (IMU)
1188
2/2
✓ Branch 2 taken 18 times.
✓ Branch 3 taken 12 times.
30 if (obs->imuOutputs)
1189 {
1190
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 18 times.
18 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_IMUSTATUS)
1191 {
1192 _filestream.write(reinterpret_cast<const char*>(&obs->imuOutputs->imuStatus), sizeof(obs->imuOutputs->imuStatus));
1193 }
1194
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
18 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPMAG)
1195 {
1196
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
18 _filestream.write(reinterpret_cast<const char*>(obs->imuOutputs->uncompMag.data()), sizeof(obs->imuOutputs->uncompMag));
1197 }
1198
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
18 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPACCEL)
1199 {
1200
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
18 _filestream.write(reinterpret_cast<const char*>(obs->imuOutputs->uncompAccel.data()), sizeof(obs->imuOutputs->uncompAccel));
1201 }
1202
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
18 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPGYRO)
1203 {
1204
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
18 _filestream.write(reinterpret_cast<const char*>(obs->imuOutputs->uncompGyro.data()), sizeof(obs->imuOutputs->uncompGyro));
1205 }
1206
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
18 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_TEMP)
1207 {
1208
1/2
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
18 _filestream.write(reinterpret_cast<const char*>(&obs->imuOutputs->temp), sizeof(obs->imuOutputs->temp));
1209 }
1210
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
18 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_PRES)
1211 {
1212
1/2
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
18 _filestream.write(reinterpret_cast<const char*>(&obs->imuOutputs->pres), sizeof(obs->imuOutputs->pres));
1213 }
1214
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
18 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTATHETA)
1215 {
1216
1/2
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
18 _filestream.write(reinterpret_cast<const char*>(&obs->imuOutputs->deltaTime), sizeof(obs->imuOutputs->deltaTime));
1217
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
18 _filestream.write(reinterpret_cast<const char*>(obs->imuOutputs->deltaTheta.data()), sizeof(obs->imuOutputs->deltaTheta));
1218 }
1219
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
18 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTAVEL)
1220 {
1221
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
18 _filestream.write(reinterpret_cast<const char*>(obs->imuOutputs->deltaV.data()), sizeof(obs->imuOutputs->deltaV));
1222 }
1223
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
18 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_MAG)
1224 {
1225
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
18 _filestream.write(reinterpret_cast<const char*>(obs->imuOutputs->mag.data()), sizeof(obs->imuOutputs->mag));
1226 }
1227
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
18 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_ACCEL)
1228 {
1229
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
18 _filestream.write(reinterpret_cast<const char*>(obs->imuOutputs->accel.data()), sizeof(obs->imuOutputs->accel));
1230 }
1231
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
18 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_ANGULARRATE)
1232 {
1233
2/4
✓ Branch 3 taken 18 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 18 times.
✗ Branch 7 not taken.
18 _filestream.write(reinterpret_cast<const char*>(obs->imuOutputs->angularRate.data()), sizeof(obs->imuOutputs->angularRate));
1234 }
1235 }
1236 // Group 4 (GNSS1)
1237
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 if (obs->gnss1Outputs)
1238 {
1239
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_UTC)
1240 {
1241
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->timeUtc.year), sizeof(obs->gnss1Outputs->timeUtc.year));
1242
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->timeUtc.month), sizeof(obs->gnss1Outputs->timeUtc.month));
1243
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->timeUtc.day), sizeof(obs->gnss1Outputs->timeUtc.day));
1244
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->timeUtc.hour), sizeof(obs->gnss1Outputs->timeUtc.hour));
1245
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->timeUtc.min), sizeof(obs->gnss1Outputs->timeUtc.min));
1246
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->timeUtc.sec), sizeof(obs->gnss1Outputs->timeUtc.sec));
1247
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->timeUtc.ms), sizeof(obs->gnss1Outputs->timeUtc.ms));
1248 }
1249
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TOW)
1250 {
1251
1/2
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
30 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->tow), sizeof(obs->gnss1Outputs->tow));
1252 }
1253
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_WEEK)
1254 {
1255
1/2
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
30 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->week), sizeof(obs->gnss1Outputs->week));
1256 }
1257
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_NUMSATS)
1258 {
1259
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->numSats), sizeof(obs->gnss1Outputs->numSats));
1260 }
1261
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_FIX)
1262 {
1263
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->fix), sizeof(obs->gnss1Outputs->fix));
1264 }
1265
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSLLA)
1266 {
1267
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream.write(reinterpret_cast<const char*>(obs->gnss1Outputs->posLla.data()), sizeof(obs->gnss1Outputs->posLla));
1268 }
1269
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSECEF)
1270 {
1271
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream.write(reinterpret_cast<const char*>(obs->gnss1Outputs->posEcef.data()), sizeof(obs->gnss1Outputs->posEcef));
1272 }
1273
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELNED)
1274 {
1275
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream.write(reinterpret_cast<const char*>(obs->gnss1Outputs->velNed.data()), sizeof(obs->gnss1Outputs->velNed));
1276 }
1277
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELECEF)
1278 {
1279
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream.write(reinterpret_cast<const char*>(obs->gnss1Outputs->velEcef.data()), sizeof(obs->gnss1Outputs->velEcef));
1280 }
1281
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSU)
1282 {
1283
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream.write(reinterpret_cast<const char*>(obs->gnss1Outputs->posU.data()), sizeof(obs->gnss1Outputs->posU));
1284 }
1285
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELU)
1286 {
1287
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->velU), sizeof(obs->gnss1Outputs->velU));
1288 }
1289
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEU)
1290 {
1291
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->timeU), sizeof(obs->gnss1Outputs->timeU));
1292 }
1293
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEINFO)
1294 {
1295
1/2
✓ Branch 4 taken 30 times.
✗ Branch 5 not taken.
30 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->timeInfo.status.status()), sizeof(obs->gnss1Outputs->timeInfo.status.status()));
1296
1/2
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
30 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->timeInfo.leapSeconds), sizeof(obs->gnss1Outputs->timeInfo.leapSeconds));
1297 }
1298
3/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✓ Branch 6 taken 18 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_DOP)
1299 {
1300
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->dop.gDop), sizeof(obs->gnss1Outputs->dop.gDop));
1301
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->dop.pDop), sizeof(obs->gnss1Outputs->dop.pDop));
1302
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->dop.tDop), sizeof(obs->gnss1Outputs->dop.tDop));
1303
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->dop.vDop), sizeof(obs->gnss1Outputs->dop.vDop));
1304
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->dop.hDop), sizeof(obs->gnss1Outputs->dop.hDop));
1305
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->dop.nDop), sizeof(obs->gnss1Outputs->dop.nDop));
1306
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->dop.eDop), sizeof(obs->gnss1Outputs->dop.eDop));
1307 }
1308
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_SATINFO)
1309 {
1310 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->satInfo.numSats), sizeof(obs->gnss1Outputs->satInfo.numSats));
1311
1312 for (auto& satellite : obs->gnss1Outputs->satInfo.satellites)
1313 {
1314 _filestream.write(reinterpret_cast<const char*>(&satellite.sys), sizeof(satellite.sys));
1315 _filestream.write(reinterpret_cast<const char*>(&satellite.svId), sizeof(satellite.svId));
1316 _filestream.write(reinterpret_cast<const char*>(&satellite.flags), sizeof(satellite.flags));
1317 _filestream.write(reinterpret_cast<const char*>(&satellite.cno), sizeof(satellite.cno));
1318 _filestream.write(reinterpret_cast<const char*>(&satellite.qi), sizeof(satellite.qi));
1319 _filestream.write(reinterpret_cast<const char*>(&satellite.el), sizeof(satellite.el));
1320 _filestream.write(reinterpret_cast<const char*>(&satellite.az), sizeof(satellite.az));
1321 }
1322 }
1323
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_RAWMEAS)
1324 {
1325 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->raw.tow), sizeof(obs->gnss1Outputs->raw.tow));
1326 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->raw.week), sizeof(obs->gnss1Outputs->raw.week));
1327 _filestream.write(reinterpret_cast<const char*>(&obs->gnss1Outputs->raw.numSats), sizeof(obs->gnss1Outputs->raw.numSats));
1328
1329 for (auto& satellite : obs->gnss1Outputs->raw.satellites)
1330 {
1331 _filestream.write(reinterpret_cast<const char*>(&satellite.sys), sizeof(satellite.sys));
1332 _filestream.write(reinterpret_cast<const char*>(&satellite.svId), sizeof(satellite.svId));
1333 _filestream.write(reinterpret_cast<const char*>(&satellite.freq), sizeof(satellite.freq));
1334 _filestream.write(reinterpret_cast<const char*>(&satellite.chan), sizeof(satellite.chan));
1335 _filestream.write(reinterpret_cast<const char*>(&satellite.slot), sizeof(satellite.slot));
1336 _filestream.write(reinterpret_cast<const char*>(&satellite.cno), sizeof(satellite.cno));
1337 _filestream.write(reinterpret_cast<const char*>(&satellite.flags), sizeof(satellite.flags));
1338 _filestream.write(reinterpret_cast<const char*>(&satellite.pr), sizeof(satellite.pr));
1339 _filestream.write(reinterpret_cast<const char*>(&satellite.cp), sizeof(satellite.cp));
1340 _filestream.write(reinterpret_cast<const char*>(&satellite.dp), sizeof(satellite.dp));
1341 }
1342 }
1343 }
1344 // Group 5 (Attitude)
1345
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
30 if (obs->attitudeOutputs)
1346 {
1347
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_VPESTATUS)
1348 {
1349 _filestream.write(reinterpret_cast<const char*>(&obs->attitudeOutputs->vpeStatus.status()), sizeof(obs->attitudeOutputs->vpeStatus.status()));
1350 }
1351
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_YAWPITCHROLL)
1352 {
1353
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 30 times.
✗ Branch 7 not taken.
30 _filestream.write(reinterpret_cast<const char*>(obs->attitudeOutputs->ypr.data()), sizeof(obs->attitudeOutputs->ypr));
1354 }
1355
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_QUATERNION)
1356 {
1357
2/4
✓ Branch 4 taken 30 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 30 times.
✗ Branch 8 not taken.
30 _filestream.write(reinterpret_cast<const char*>(obs->attitudeOutputs->qtn.coeffs().data()), sizeof(obs->attitudeOutputs->qtn));
1358 }
1359
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_DCM)
1360 {
1361 _filestream.write(reinterpret_cast<const char*>(obs->attitudeOutputs->dcm.data()), sizeof(obs->attitudeOutputs->dcm));
1362 }
1363
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_MAGNED)
1364 {
1365 _filestream.write(reinterpret_cast<const char*>(obs->attitudeOutputs->magNed.data()), sizeof(obs->attitudeOutputs->magNed));
1366 }
1367
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_ACCELNED)
1368 {
1369 _filestream.write(reinterpret_cast<const char*>(obs->attitudeOutputs->accelNed.data()), sizeof(obs->attitudeOutputs->accelNed));
1370 }
1371
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_LINEARACCELBODY)
1372 {
1373 _filestream.write(reinterpret_cast<const char*>(obs->attitudeOutputs->linearAccelBody.data()), sizeof(obs->attitudeOutputs->linearAccelBody));
1374 }
1375
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 30 times.
30 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_LINEARACCELNED)
1376 {
1377 _filestream.write(reinterpret_cast<const char*>(obs->attitudeOutputs->linearAccelNed.data()), sizeof(obs->attitudeOutputs->linearAccelNed));
1378 }
1379
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 30 times.
✗ Branch 6 not taken.
30 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_YPRU)
1380 {
1381
2/4
✓ Branch 3 taken 30 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 30 times.
✗ Branch 7 not taken.
30 _filestream.write(reinterpret_cast<const char*>(obs->attitudeOutputs->yprU.data()), sizeof(obs->attitudeOutputs->yprU));
1382 }
1383 }
1384 // Group 6 (INS)
1385
2/2
✓ Branch 2 taken 12 times.
✓ Branch 3 taken 18 times.
30 if (obs->insOutputs)
1386 {
1387
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_INSSTATUS)
1388 {
1389
1/2
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->insOutputs->insStatus.status()), sizeof(obs->insOutputs->insStatus.status()));
1390 }
1391
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSLLA)
1392 {
1393
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream.write(reinterpret_cast<const char*>(obs->insOutputs->posLla.data()), sizeof(obs->insOutputs->posLla));
1394 }
1395
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSECEF)
1396 {
1397
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream.write(reinterpret_cast<const char*>(obs->insOutputs->posEcef.data()), sizeof(obs->insOutputs->posEcef));
1398 }
1399
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELBODY)
1400 {
1401
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream.write(reinterpret_cast<const char*>(obs->insOutputs->velBody.data()), sizeof(obs->insOutputs->velBody));
1402 }
1403
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELNED)
1404 {
1405
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream.write(reinterpret_cast<const char*>(obs->insOutputs->velNed.data()), sizeof(obs->insOutputs->velNed));
1406 }
1407
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELECEF)
1408 {
1409
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream.write(reinterpret_cast<const char*>(obs->insOutputs->velEcef.data()), sizeof(obs->insOutputs->velEcef));
1410 }
1411
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_MAGECEF)
1412 {
1413
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream.write(reinterpret_cast<const char*>(obs->insOutputs->magEcef.data()), sizeof(obs->insOutputs->magEcef));
1414 }
1415
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_ACCELECEF)
1416 {
1417
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream.write(reinterpret_cast<const char*>(obs->insOutputs->accelEcef.data()), sizeof(obs->insOutputs->accelEcef));
1418 }
1419
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_LINEARACCELECEF)
1420 {
1421
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream.write(reinterpret_cast<const char*>(obs->insOutputs->linearAccelEcef.data()), sizeof(obs->insOutputs->linearAccelEcef));
1422 }
1423
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSU)
1424 {
1425
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->insOutputs->posU), sizeof(obs->insOutputs->posU));
1426 }
1427
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELU)
1428 {
1429
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->insOutputs->velU), sizeof(obs->insOutputs->velU));
1430 }
1431 }
1432 // Group 7 (GNSS2)
1433
2/2
✓ Branch 2 taken 12 times.
✓ Branch 3 taken 18 times.
30 if (obs->gnss2Outputs)
1434 {
1435
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_UTC)
1436 {
1437
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->timeUtc.year), sizeof(obs->gnss2Outputs->timeUtc.year));
1438
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->timeUtc.month), sizeof(obs->gnss2Outputs->timeUtc.month));
1439
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->timeUtc.day), sizeof(obs->gnss2Outputs->timeUtc.day));
1440
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->timeUtc.hour), sizeof(obs->gnss2Outputs->timeUtc.hour));
1441
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->timeUtc.min), sizeof(obs->gnss2Outputs->timeUtc.min));
1442
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->timeUtc.sec), sizeof(obs->gnss2Outputs->timeUtc.sec));
1443
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->timeUtc.ms), sizeof(obs->gnss2Outputs->timeUtc.ms));
1444 }
1445
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TOW)
1446 {
1447
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->tow), sizeof(obs->gnss2Outputs->tow));
1448 }
1449
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_WEEK)
1450 {
1451
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->week), sizeof(obs->gnss2Outputs->week));
1452 }
1453
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_NUMSATS)
1454 {
1455
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->numSats), sizeof(obs->gnss2Outputs->numSats));
1456 }
1457
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_FIX)
1458 {
1459
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->fix), sizeof(obs->gnss2Outputs->fix));
1460 }
1461
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSLLA)
1462 {
1463
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream.write(reinterpret_cast<const char*>(obs->gnss2Outputs->posLla.data()), sizeof(obs->gnss2Outputs->posLla));
1464 }
1465
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSECEF)
1466 {
1467
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream.write(reinterpret_cast<const char*>(obs->gnss2Outputs->posEcef.data()), sizeof(obs->gnss2Outputs->posEcef));
1468 }
1469
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELNED)
1470 {
1471
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream.write(reinterpret_cast<const char*>(obs->gnss2Outputs->velNed.data()), sizeof(obs->gnss2Outputs->velNed));
1472 }
1473
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELECEF)
1474 {
1475
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream.write(reinterpret_cast<const char*>(obs->gnss2Outputs->velEcef.data()), sizeof(obs->gnss2Outputs->velEcef));
1476 }
1477
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSU)
1478 {
1479
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 _filestream.write(reinterpret_cast<const char*>(obs->gnss2Outputs->posU.data()), sizeof(obs->gnss2Outputs->posU));
1480 }
1481
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELU)
1482 {
1483
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->velU), sizeof(obs->gnss2Outputs->velU));
1484 }
1485
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEU)
1486 {
1487
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->timeU), sizeof(obs->gnss2Outputs->timeU));
1488 }
1489
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEINFO)
1490 {
1491
1/2
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->timeInfo.status.status()), sizeof(obs->gnss2Outputs->timeInfo.status.status()));
1492
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->timeInfo.leapSeconds), sizeof(obs->gnss2Outputs->timeInfo.leapSeconds));
1493 }
1494
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_DOP)
1495 {
1496
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->dop.gDop), sizeof(obs->gnss2Outputs->dop.gDop));
1497
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->dop.pDop), sizeof(obs->gnss2Outputs->dop.pDop));
1498
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->dop.tDop), sizeof(obs->gnss2Outputs->dop.tDop));
1499
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->dop.vDop), sizeof(obs->gnss2Outputs->dop.vDop));
1500
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->dop.hDop), sizeof(obs->gnss2Outputs->dop.hDop));
1501
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->dop.nDop), sizeof(obs->gnss2Outputs->dop.nDop));
1502
1/2
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
12 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->dop.eDop), sizeof(obs->gnss2Outputs->dop.eDop));
1503 }
1504
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 12 times.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_SATINFO)
1505 {
1506 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->satInfo.numSats), sizeof(obs->gnss2Outputs->satInfo.numSats));
1507
1508 for (auto& satellite : obs->gnss2Outputs->satInfo.satellites)
1509 {
1510 _filestream.write(reinterpret_cast<const char*>(&satellite.sys), sizeof(satellite.sys));
1511 _filestream.write(reinterpret_cast<const char*>(&satellite.svId), sizeof(satellite.svId));
1512 _filestream.write(reinterpret_cast<const char*>(&satellite.flags), sizeof(satellite.flags));
1513 _filestream.write(reinterpret_cast<const char*>(&satellite.cno), sizeof(satellite.cno));
1514 _filestream.write(reinterpret_cast<const char*>(&satellite.qi), sizeof(satellite.qi));
1515 _filestream.write(reinterpret_cast<const char*>(&satellite.el), sizeof(satellite.el));
1516 _filestream.write(reinterpret_cast<const char*>(&satellite.az), sizeof(satellite.az));
1517 }
1518 }
1519
2/4
✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 12 times.
12 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_RAWMEAS)
1520 {
1521 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->raw.tow), sizeof(obs->gnss2Outputs->raw.tow));
1522 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->raw.week), sizeof(obs->gnss2Outputs->raw.week));
1523 _filestream.write(reinterpret_cast<const char*>(&obs->gnss2Outputs->raw.numSats), sizeof(obs->gnss2Outputs->raw.numSats));
1524
1525 for (auto& satellite : obs->gnss2Outputs->raw.satellites)
1526 {
1527 _filestream.write(reinterpret_cast<const char*>(&satellite.sys), sizeof(satellite.sys));
1528 _filestream.write(reinterpret_cast<const char*>(&satellite.svId), sizeof(satellite.svId));
1529 _filestream.write(reinterpret_cast<const char*>(&satellite.freq), sizeof(satellite.freq));
1530 _filestream.write(reinterpret_cast<const char*>(&satellite.chan), sizeof(satellite.chan));
1531 _filestream.write(reinterpret_cast<const char*>(&satellite.slot), sizeof(satellite.slot));
1532 _filestream.write(reinterpret_cast<const char*>(&satellite.cno), sizeof(satellite.cno));
1533 _filestream.write(reinterpret_cast<const char*>(&satellite.flags), sizeof(satellite.flags));
1534 _filestream.write(reinterpret_cast<const char*>(&satellite.pr), sizeof(satellite.pr));
1535 _filestream.write(reinterpret_cast<const char*>(&satellite.cp), sizeof(satellite.cp));
1536 _filestream.write(reinterpret_cast<const char*>(&satellite.dp), sizeof(satellite.dp));
1537 }
1538 }
1539 }
1540 }
1541
1542 LOG_DATA("{}: Message logged", nameId());
1543 60 }
1544