136 auto obs = std::static_pointer_cast<const VectorNavBinaryOutput>(queue.
extract_front());
140 std::array<const char, 8> zeroData{};
143 _filestream.write(obs->timeOutputs ?
reinterpret_cast<const char*
>(&obs->timeOutputs->timeField) : zeroData.data(),
sizeof(vn::protocol::uart::TimeGroup));
144 _filestream.write(obs->imuOutputs ?
reinterpret_cast<const char*
>(&obs->imuOutputs->imuField) : zeroData.data(),
sizeof(vn::protocol::uart::ImuGroup));
145 _filestream.write(obs->gnss1Outputs ?
reinterpret_cast<const char*
>(&obs->gnss1Outputs->gnssField) : zeroData.data(),
sizeof(vn::protocol::uart::GpsGroup));
146 _filestream.write(obs->attitudeOutputs ?
reinterpret_cast<const char*
>(&obs->attitudeOutputs->attitudeField) : zeroData.data(),
sizeof(vn::protocol::uart::AttitudeGroup));
147 _filestream.write(obs->insOutputs ?
reinterpret_cast<const char*
>(&obs->insOutputs->insField) : zeroData.data(),
sizeof(vn::protocol::uart::InsGroup));
148 _filestream.write(obs->gnss2Outputs ?
reinterpret_cast<const char*
>(&obs->gnss2Outputs->gnssField) : zeroData.data(),
sizeof(vn::protocol::uart::GpsGroup));
152 if (!obs->insTime.empty())
154 auto insTimeGPS = obs->insTime.toGPSweekTow();
155 auto tow =
static_cast<double>(insTimeGPS.tow);
156 _filestream.write(
reinterpret_cast<const char*
>(&insTimeGPS.gpsCycle),
sizeof(insTimeGPS.gpsCycle));
157 _filestream.write(
reinterpret_cast<const char*
>(&insTimeGPS.gpsWeek),
sizeof(insTimeGPS.gpsWeek));
158 _filestream.write(
reinterpret_cast<const char*
>(&tow),
sizeof(tow));
162 _filestream.write(zeroData.data(),
sizeof(int32_t));
163 _filestream.write(zeroData.data(),
sizeof(int32_t));
164 _filestream.write(zeroData.data(),
sizeof(
double));
168 if (obs->timeOutputs)
170 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESTARTUP)
172 _filestream.write(
reinterpret_cast<const char*
>(&obs->timeOutputs->timeStartup),
sizeof(obs->timeOutputs->timeStartup));
174 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEGPS)
176 _filestream.write(
reinterpret_cast<const char*
>(&obs->timeOutputs->timeGps),
sizeof(obs->timeOutputs->timeGps));
178 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_GPSTOW)
180 _filestream.write(
reinterpret_cast<const char*
>(&obs->timeOutputs->gpsTow),
sizeof(obs->timeOutputs->gpsTow));
182 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_GPSWEEK)
184 _filestream.write(
reinterpret_cast<const char*
>(&obs->timeOutputs->gpsWeek),
sizeof(obs->timeOutputs->gpsWeek));
186 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESYNCIN)
188 _filestream.write(
reinterpret_cast<const char*
>(&obs->timeOutputs->timeSyncIn),
sizeof(obs->timeOutputs->timeSyncIn));
190 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEGPSPPS)
192 _filestream.write(
reinterpret_cast<const char*
>(&obs->timeOutputs->timePPS),
sizeof(obs->timeOutputs->timePPS));
194 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEUTC)
196 _filestream.write(
reinterpret_cast<const char*
>(&obs->timeOutputs->timeUtc.year),
sizeof(obs->timeOutputs->timeUtc.year));
197 _filestream.write(
reinterpret_cast<const char*
>(&obs->timeOutputs->timeUtc.month),
sizeof(obs->timeOutputs->timeUtc.month));
198 _filestream.write(
reinterpret_cast<const char*
>(&obs->timeOutputs->timeUtc.day),
sizeof(obs->timeOutputs->timeUtc.day));
199 _filestream.write(
reinterpret_cast<const char*
>(&obs->timeOutputs->timeUtc.hour),
sizeof(obs->timeOutputs->timeUtc.hour));
200 _filestream.write(
reinterpret_cast<const char*
>(&obs->timeOutputs->timeUtc.min),
sizeof(obs->timeOutputs->timeUtc.min));
201 _filestream.write(
reinterpret_cast<const char*
>(&obs->timeOutputs->timeUtc.sec),
sizeof(obs->timeOutputs->timeUtc.sec));
202 _filestream.write(
reinterpret_cast<const char*
>(&obs->timeOutputs->timeUtc.ms),
sizeof(obs->timeOutputs->timeUtc.ms));
204 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_SYNCINCNT)
206 _filestream.write(
reinterpret_cast<const char*
>(&obs->timeOutputs->syncInCnt),
sizeof(obs->timeOutputs->syncInCnt));
208 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_SYNCOUTCNT)
210 _filestream.write(
reinterpret_cast<const char*
>(&obs->timeOutputs->syncOutCnt),
sizeof(obs->timeOutputs->syncOutCnt));
212 if (obs->timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESTATUS)
214 _filestream.write(
reinterpret_cast<const char*
>(&obs->timeOutputs->timeStatus.status()),
sizeof(obs->timeOutputs->timeStatus.status()));
220 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_IMUSTATUS)
222 _filestream.write(
reinterpret_cast<const char*
>(&obs->imuOutputs->imuStatus),
sizeof(obs->imuOutputs->imuStatus));
224 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPMAG)
226 _filestream.write(
reinterpret_cast<const char*
>(obs->imuOutputs->uncompMag.data()),
sizeof(obs->imuOutputs->uncompMag));
228 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPACCEL)
230 _filestream.write(
reinterpret_cast<const char*
>(obs->imuOutputs->uncompAccel.data()),
sizeof(obs->imuOutputs->uncompAccel));
232 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPGYRO)
234 _filestream.write(
reinterpret_cast<const char*
>(obs->imuOutputs->uncompGyro.data()),
sizeof(obs->imuOutputs->uncompGyro));
236 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_TEMP)
238 _filestream.write(
reinterpret_cast<const char*
>(&obs->imuOutputs->temp),
sizeof(obs->imuOutputs->temp));
240 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_PRES)
242 _filestream.write(
reinterpret_cast<const char*
>(&obs->imuOutputs->pres),
sizeof(obs->imuOutputs->pres));
244 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTATHETA)
246 _filestream.write(
reinterpret_cast<const char*
>(&obs->imuOutputs->deltaTime),
sizeof(obs->imuOutputs->deltaTime));
247 _filestream.write(
reinterpret_cast<const char*
>(obs->imuOutputs->deltaTheta.data()),
sizeof(obs->imuOutputs->deltaTheta));
249 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTAVEL)
251 _filestream.write(
reinterpret_cast<const char*
>(obs->imuOutputs->deltaV.data()),
sizeof(obs->imuOutputs->deltaV));
253 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_MAG)
255 _filestream.write(
reinterpret_cast<const char*
>(obs->imuOutputs->mag.data()),
sizeof(obs->imuOutputs->mag));
257 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_ACCEL)
259 _filestream.write(
reinterpret_cast<const char*
>(obs->imuOutputs->accel.data()),
sizeof(obs->imuOutputs->accel));
261 if (obs->imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_ANGULARRATE)
263 _filestream.write(
reinterpret_cast<const char*
>(obs->imuOutputs->angularRate.data()),
sizeof(obs->imuOutputs->angularRate));
267 if (obs->gnss1Outputs)
269 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_UTC)
271 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->timeUtc.year),
sizeof(obs->gnss1Outputs->timeUtc.year));
272 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->timeUtc.month),
sizeof(obs->gnss1Outputs->timeUtc.month));
273 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->timeUtc.day),
sizeof(obs->gnss1Outputs->timeUtc.day));
274 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->timeUtc.hour),
sizeof(obs->gnss1Outputs->timeUtc.hour));
275 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->timeUtc.min),
sizeof(obs->gnss1Outputs->timeUtc.min));
276 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->timeUtc.sec),
sizeof(obs->gnss1Outputs->timeUtc.sec));
277 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->timeUtc.ms),
sizeof(obs->gnss1Outputs->timeUtc.ms));
279 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TOW)
281 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->tow),
sizeof(obs->gnss1Outputs->tow));
283 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_WEEK)
285 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->week),
sizeof(obs->gnss1Outputs->week));
287 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_NUMSATS)
289 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->numSats),
sizeof(obs->gnss1Outputs->numSats));
291 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_FIX)
293 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->fix),
sizeof(obs->gnss1Outputs->fix));
295 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSLLA)
297 _filestream.write(
reinterpret_cast<const char*
>(obs->gnss1Outputs->posLla.data()),
sizeof(obs->gnss1Outputs->posLla));
299 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSECEF)
301 _filestream.write(
reinterpret_cast<const char*
>(obs->gnss1Outputs->posEcef.data()),
sizeof(obs->gnss1Outputs->posEcef));
303 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELNED)
305 _filestream.write(
reinterpret_cast<const char*
>(obs->gnss1Outputs->velNed.data()),
sizeof(obs->gnss1Outputs->velNed));
307 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELECEF)
309 _filestream.write(
reinterpret_cast<const char*
>(obs->gnss1Outputs->velEcef.data()),
sizeof(obs->gnss1Outputs->velEcef));
311 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSU)
313 _filestream.write(
reinterpret_cast<const char*
>(obs->gnss1Outputs->posU.data()),
sizeof(obs->gnss1Outputs->posU));
315 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELU)
317 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->velU),
sizeof(obs->gnss1Outputs->velU));
319 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEU)
321 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->timeU),
sizeof(obs->gnss1Outputs->timeU));
323 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEINFO)
325 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->timeInfo.status.status()),
sizeof(obs->gnss1Outputs->timeInfo.status.status()));
326 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->timeInfo.leapSeconds),
sizeof(obs->gnss1Outputs->timeInfo.leapSeconds));
328 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_DOP)
330 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->dop.gDop),
sizeof(obs->gnss1Outputs->dop.gDop));
331 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->dop.pDop),
sizeof(obs->gnss1Outputs->dop.pDop));
332 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->dop.tDop),
sizeof(obs->gnss1Outputs->dop.tDop));
333 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->dop.vDop),
sizeof(obs->gnss1Outputs->dop.vDop));
334 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->dop.hDop),
sizeof(obs->gnss1Outputs->dop.hDop));
335 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->dop.nDop),
sizeof(obs->gnss1Outputs->dop.nDop));
336 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->dop.eDop),
sizeof(obs->gnss1Outputs->dop.eDop));
338 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_SATINFO)
340 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->satInfo.numSats),
sizeof(obs->gnss1Outputs->satInfo.numSats));
342 for (
auto& satellite : obs->gnss1Outputs->satInfo.satellites)
344 _filestream.write(
reinterpret_cast<const char*
>(&satellite.sys),
sizeof(satellite.sys));
345 _filestream.write(
reinterpret_cast<const char*
>(&satellite.svId),
sizeof(satellite.svId));
346 _filestream.write(
reinterpret_cast<const char*
>(&satellite.flags),
sizeof(satellite.flags));
347 _filestream.write(
reinterpret_cast<const char*
>(&satellite.cno),
sizeof(satellite.cno));
348 _filestream.write(
reinterpret_cast<const char*
>(&satellite.qi),
sizeof(satellite.qi));
349 _filestream.write(
reinterpret_cast<const char*
>(&satellite.el),
sizeof(satellite.el));
350 _filestream.write(
reinterpret_cast<const char*
>(&satellite.az),
sizeof(satellite.az));
353 if (obs->gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_RAWMEAS)
355 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->raw.tow),
sizeof(obs->gnss1Outputs->raw.tow));
356 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->raw.week),
sizeof(obs->gnss1Outputs->raw.week));
357 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss1Outputs->raw.numSats),
sizeof(obs->gnss1Outputs->raw.numSats));
359 for (
auto& satellite : obs->gnss1Outputs->raw.satellites)
361 _filestream.write(
reinterpret_cast<const char*
>(&satellite.sys),
sizeof(satellite.sys));
362 _filestream.write(
reinterpret_cast<const char*
>(&satellite.svId),
sizeof(satellite.svId));
363 _filestream.write(
reinterpret_cast<const char*
>(&satellite.freq),
sizeof(satellite.freq));
364 _filestream.write(
reinterpret_cast<const char*
>(&satellite.chan),
sizeof(satellite.chan));
365 _filestream.write(
reinterpret_cast<const char*
>(&satellite.slot),
sizeof(satellite.slot));
366 _filestream.write(
reinterpret_cast<const char*
>(&satellite.cno),
sizeof(satellite.cno));
367 _filestream.write(
reinterpret_cast<const char*
>(&satellite.flags),
sizeof(satellite.flags));
368 _filestream.write(
reinterpret_cast<const char*
>(&satellite.pr),
sizeof(satellite.pr));
369 _filestream.write(
reinterpret_cast<const char*
>(&satellite.cp),
sizeof(satellite.cp));
370 _filestream.write(
reinterpret_cast<const char*
>(&satellite.dp),
sizeof(satellite.dp));
375 if (obs->attitudeOutputs)
377 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_VPESTATUS)
379 _filestream.write(
reinterpret_cast<const char*
>(&obs->attitudeOutputs->vpeStatus.status()),
sizeof(obs->attitudeOutputs->vpeStatus.status()));
381 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_YAWPITCHROLL)
383 _filestream.write(
reinterpret_cast<const char*
>(obs->attitudeOutputs->ypr.data()),
sizeof(obs->attitudeOutputs->ypr));
385 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_QUATERNION)
387 _filestream.write(
reinterpret_cast<const char*
>(obs->attitudeOutputs->qtn.coeffs().data()),
sizeof(obs->attitudeOutputs->qtn));
389 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_DCM)
391 _filestream.write(
reinterpret_cast<const char*
>(obs->attitudeOutputs->dcm.data()),
sizeof(obs->attitudeOutputs->dcm));
393 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_MAGNED)
395 _filestream.write(
reinterpret_cast<const char*
>(obs->attitudeOutputs->magNed.data()),
sizeof(obs->attitudeOutputs->magNed));
397 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_ACCELNED)
399 _filestream.write(
reinterpret_cast<const char*
>(obs->attitudeOutputs->accelNed.data()),
sizeof(obs->attitudeOutputs->accelNed));
401 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_LINEARACCELBODY)
403 _filestream.write(
reinterpret_cast<const char*
>(obs->attitudeOutputs->linearAccelBody.data()),
sizeof(obs->attitudeOutputs->linearAccelBody));
405 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_LINEARACCELNED)
407 _filestream.write(
reinterpret_cast<const char*
>(obs->attitudeOutputs->linearAccelNed.data()),
sizeof(obs->attitudeOutputs->linearAccelNed));
409 if (obs->attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_YPRU)
411 _filestream.write(
reinterpret_cast<const char*
>(obs->attitudeOutputs->yprU.data()),
sizeof(obs->attitudeOutputs->yprU));
417 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_INSSTATUS)
419 _filestream.write(
reinterpret_cast<const char*
>(&obs->insOutputs->insStatus.status()),
sizeof(obs->insOutputs->insStatus.status()));
421 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSLLA)
423 _filestream.write(
reinterpret_cast<const char*
>(obs->insOutputs->posLla.data()),
sizeof(obs->insOutputs->posLla));
425 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSECEF)
427 _filestream.write(
reinterpret_cast<const char*
>(obs->insOutputs->posEcef.data()),
sizeof(obs->insOutputs->posEcef));
429 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELBODY)
431 _filestream.write(
reinterpret_cast<const char*
>(obs->insOutputs->velBody.data()),
sizeof(obs->insOutputs->velBody));
433 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELNED)
435 _filestream.write(
reinterpret_cast<const char*
>(obs->insOutputs->velNed.data()),
sizeof(obs->insOutputs->velNed));
437 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELECEF)
439 _filestream.write(
reinterpret_cast<const char*
>(obs->insOutputs->velEcef.data()),
sizeof(obs->insOutputs->velEcef));
441 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_MAGECEF)
443 _filestream.write(
reinterpret_cast<const char*
>(obs->insOutputs->magEcef.data()),
sizeof(obs->insOutputs->magEcef));
445 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_ACCELECEF)
447 _filestream.write(
reinterpret_cast<const char*
>(obs->insOutputs->accelEcef.data()),
sizeof(obs->insOutputs->accelEcef));
449 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_LINEARACCELECEF)
451 _filestream.write(
reinterpret_cast<const char*
>(obs->insOutputs->linearAccelEcef.data()),
sizeof(obs->insOutputs->linearAccelEcef));
453 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSU)
455 _filestream.write(
reinterpret_cast<const char*
>(&obs->insOutputs->posU),
sizeof(obs->insOutputs->posU));
457 if (obs->insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELU)
459 _filestream.write(
reinterpret_cast<const char*
>(&obs->insOutputs->velU),
sizeof(obs->insOutputs->velU));
463 if (obs->gnss2Outputs)
465 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_UTC)
467 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->timeUtc.year),
sizeof(obs->gnss2Outputs->timeUtc.year));
468 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->timeUtc.month),
sizeof(obs->gnss2Outputs->timeUtc.month));
469 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->timeUtc.day),
sizeof(obs->gnss2Outputs->timeUtc.day));
470 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->timeUtc.hour),
sizeof(obs->gnss2Outputs->timeUtc.hour));
471 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->timeUtc.min),
sizeof(obs->gnss2Outputs->timeUtc.min));
472 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->timeUtc.sec),
sizeof(obs->gnss2Outputs->timeUtc.sec));
473 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->timeUtc.ms),
sizeof(obs->gnss2Outputs->timeUtc.ms));
475 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TOW)
477 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->tow),
sizeof(obs->gnss2Outputs->tow));
479 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_WEEK)
481 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->week),
sizeof(obs->gnss2Outputs->week));
483 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_NUMSATS)
485 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->numSats),
sizeof(obs->gnss2Outputs->numSats));
487 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_FIX)
489 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->fix),
sizeof(obs->gnss2Outputs->fix));
491 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSLLA)
493 _filestream.write(
reinterpret_cast<const char*
>(obs->gnss2Outputs->posLla.data()),
sizeof(obs->gnss2Outputs->posLla));
495 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSECEF)
497 _filestream.write(
reinterpret_cast<const char*
>(obs->gnss2Outputs->posEcef.data()),
sizeof(obs->gnss2Outputs->posEcef));
499 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELNED)
501 _filestream.write(
reinterpret_cast<const char*
>(obs->gnss2Outputs->velNed.data()),
sizeof(obs->gnss2Outputs->velNed));
503 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELECEF)
505 _filestream.write(
reinterpret_cast<const char*
>(obs->gnss2Outputs->velEcef.data()),
sizeof(obs->gnss2Outputs->velEcef));
507 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSU)
509 _filestream.write(
reinterpret_cast<const char*
>(obs->gnss2Outputs->posU.data()),
sizeof(obs->gnss2Outputs->posU));
511 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELU)
513 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->velU),
sizeof(obs->gnss2Outputs->velU));
515 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEU)
517 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->timeU),
sizeof(obs->gnss2Outputs->timeU));
519 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEINFO)
521 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->timeInfo.status.status()),
sizeof(obs->gnss2Outputs->timeInfo.status.status()));
522 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->timeInfo.leapSeconds),
sizeof(obs->gnss2Outputs->timeInfo.leapSeconds));
524 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_DOP)
526 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->dop.gDop),
sizeof(obs->gnss2Outputs->dop.gDop));
527 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->dop.pDop),
sizeof(obs->gnss2Outputs->dop.pDop));
528 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->dop.tDop),
sizeof(obs->gnss2Outputs->dop.tDop));
529 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->dop.vDop),
sizeof(obs->gnss2Outputs->dop.vDop));
530 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->dop.hDop),
sizeof(obs->gnss2Outputs->dop.hDop));
531 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->dop.nDop),
sizeof(obs->gnss2Outputs->dop.nDop));
532 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->dop.eDop),
sizeof(obs->gnss2Outputs->dop.eDop));
534 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_SATINFO)
536 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->satInfo.numSats),
sizeof(obs->gnss2Outputs->satInfo.numSats));
538 for (
auto& satellite : obs->gnss2Outputs->satInfo.satellites)
540 _filestream.write(
reinterpret_cast<const char*
>(&satellite.sys),
sizeof(satellite.sys));
541 _filestream.write(
reinterpret_cast<const char*
>(&satellite.svId),
sizeof(satellite.svId));
542 _filestream.write(
reinterpret_cast<const char*
>(&satellite.flags),
sizeof(satellite.flags));
543 _filestream.write(
reinterpret_cast<const char*
>(&satellite.cno),
sizeof(satellite.cno));
544 _filestream.write(
reinterpret_cast<const char*
>(&satellite.qi),
sizeof(satellite.qi));
545 _filestream.write(
reinterpret_cast<const char*
>(&satellite.el),
sizeof(satellite.el));
546 _filestream.write(
reinterpret_cast<const char*
>(&satellite.az),
sizeof(satellite.az));
549 if (obs->gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_RAWMEAS)
551 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->raw.tow),
sizeof(obs->gnss2Outputs->raw.tow));
552 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->raw.week),
sizeof(obs->gnss2Outputs->raw.week));
553 _filestream.write(
reinterpret_cast<const char*
>(&obs->gnss2Outputs->raw.numSats),
sizeof(obs->gnss2Outputs->raw.numSats));
555 for (
auto& satellite : obs->gnss2Outputs->raw.satellites)
557 _filestream.write(
reinterpret_cast<const char*
>(&satellite.sys),
sizeof(satellite.sys));
558 _filestream.write(
reinterpret_cast<const char*
>(&satellite.svId),
sizeof(satellite.svId));
559 _filestream.write(
reinterpret_cast<const char*
>(&satellite.freq),
sizeof(satellite.freq));
560 _filestream.write(
reinterpret_cast<const char*
>(&satellite.chan),
sizeof(satellite.chan));
561 _filestream.write(
reinterpret_cast<const char*
>(&satellite.slot),
sizeof(satellite.slot));
562 _filestream.write(
reinterpret_cast<const char*
>(&satellite.cno),
sizeof(satellite.cno));
563 _filestream.write(
reinterpret_cast<const char*
>(&satellite.flags),
sizeof(satellite.flags));
564 _filestream.write(
reinterpret_cast<const char*
>(&satellite.pr),
sizeof(satellite.pr));
565 _filestream.write(
reinterpret_cast<const char*
>(&satellite.cp),
sizeof(satellite.cp));
566 _filestream.write(
reinterpret_cast<const char*
>(&satellite.dp),
sizeof(satellite.dp));
573 LOG_INFO(
"{}: If you want to log csv instead of binary, use the 'CsvLogger' instead.",
nameId());