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