20 if (packet.type() == uart::protocol::Packet::Type::TYPE_BINARY)
22 uint8_t msgClassByte = packet.extractUint8();
23 obs->msgClass =
static_cast<UbxClass>(msgClassByte);
24 obs->msgId = packet.extractUint8();
25 obs->payloadLength = packet.extractUint16();
34 std::get<UbxAckAck>(obs->data).clsID = packet.extractUint8();
35 std::get<UbxAckAck>(obs->data).msgID = packet.extractUint8();
37 LOG_DATA(
"{}: UBX: ACK-ACK, clsID {}, msgID {}", nameId, std::get<UbxAckAck>(obs->data).clsID, std::get<UbxAckAck>(obs->data).msgID);
42 std::get<UbxAckNak>(obs->data).clsID = packet.extractUint8();
43 std::get<UbxAckNak>(obs->data).msgID = packet.extractUint8();
45 LOG_DATA(
"{}: UBX: ACK-NAK, Size {}", nameId, packet.getRawDataLength());
49 LOG_DATA(
"{}: UBX: ACK-{:x}, Size {}, not implemented yet!", nameId, obs->msgId, packet.getRawDataLength());
56 [[maybe_unused]]
auto msgId =
static_cast<UbxCfgMessages>(obs->msgId);
57 LOG_DATA(
"{}: UBX: CFG-{:x}, Size {}, not implemented yet!", nameId, obs->msgId, packet.getRawDataLength());
66 LOG_DATA(
"{}: UBX: ESF-INS, Size {}, not implemented yet!", nameId, packet.getRawDataLength());
71 LOG_DATA(
"{}: UBX: ESF-MEAS, Size {}, not implemented yet!", nameId, packet.getRawDataLength());
77 for (
auto& reserved1 : std::get<UbxEsfRaw>(obs->data).reserved1)
79 reserved1 = packet.extractUint8();
81 for (
int i = 0; i < (obs->payloadLength - 4) / 8; i++)
84 ubxEsfRawData.
data = packet.extractUint32();
85 ubxEsfRawData.
sTtag = packet.extractUint32();
86 std::get<UbxEsfRaw>(obs->data).data.push_back(ubxEsfRawData);
91 LOG_DATA(
"{}: UBX: ESF-RAW, {} measurements", nameId, (obs->payloadLength - 4) / 8);
95 LOG_DATA(
"{}: UBX: ESF-STATUS, Size {}, not implemented yet!", nameId, packet.getRawDataLength());
100 LOG_DATA(
"{}: UBX: ESF-{:x}, Size {}, not implemented yet!", nameId, obs->msgId, packet.getRawDataLength());
107 [[maybe_unused]]
auto msgId =
static_cast<UbxHnrMessages>(obs->msgId);
108 LOG_DATA(
"{}: UBX: HNR-{:x}, Size {}, not implemented yet!", nameId, obs->msgId, packet.getRawDataLength());
114 [[maybe_unused]]
auto msgId =
static_cast<UbxInfMessages>(obs->msgId);
115 LOG_DATA(
"{}: UBX: INF-{:x}, Size {}, not implemented yet!", nameId, obs->msgId, packet.getRawDataLength());
121 [[maybe_unused]]
auto msgId =
static_cast<UbxLogMessages>(obs->msgId);
122 LOG_DATA(
"{}: UBX: LOG-{:x}, Size {}, not implemented yet!", nameId, obs->msgId, packet.getRawDataLength());
128 [[maybe_unused]]
auto msgId =
static_cast<UbxMgaMessages>(obs->msgId);
129 LOG_DATA(
"{}: UBX: MGA-{:x}, Size {}, not implemented yet!", nameId, obs->msgId, packet.getRawDataLength());
135 [[maybe_unused]]
auto msgId =
static_cast<UbxMonMessages>(obs->msgId);
136 LOG_DATA(
"{}: UBX: MON-{:x}, Size {}, not implemented yet!", nameId, obs->msgId, packet.getRawDataLength());
147 std::get<UbxNavAtt>(obs->data).iTOW = packet.extractUint32();
148 std::get<UbxNavAtt>(obs->data).version = packet.extractUint8();
149 for (
auto& reserved1 : std::get<UbxNavAtt>(obs->data).reserved1)
151 reserved1 = packet.extractUint8();
153 std::get<UbxNavAtt>(obs->data).roll = packet.extractInt32();
154 std::get<UbxNavAtt>(obs->data).pitch = packet.extractInt32();
155 std::get<UbxNavAtt>(obs->data).heading = packet.extractInt32();
156 std::get<UbxNavAtt>(obs->data).accRoll = packet.extractUint32();
157 std::get<UbxNavAtt>(obs->data).accPitch = packet.extractUint32();
158 std::get<UbxNavAtt>(obs->data).accHeading = packet.extractUint32();
171 LOG_DATA(
"{}: UBX: NAV-ATT, iTOW {}, roll {}, pitch {}, heading {}", nameId, std::get<UbxNavAtt>(obs->data).iTOW, std::get<UbxNavAtt>(obs->data).roll, std::get<UbxNavAtt>(obs->data).pitch, std::get<UbxNavAtt>(obs->data).heading);
177 std::get<UbxNavPosecef>(obs->data).iTOW = packet.extractUint32();
178 std::get<UbxNavPosecef>(obs->data).ecefX = packet.extractInt32();
179 std::get<UbxNavPosecef>(obs->data).ecefY = packet.extractInt32();
180 std::get<UbxNavPosecef>(obs->data).ecefZ = packet.extractInt32();
181 std::get<UbxNavPosecef>(obs->data).pAcc = packet.extractUint32();
194 LOG_DATA(
"{}: UBX: NAV-POSECEF, iTOW {}, x {}, y {}, z {}", nameId, std::get<UbxNavPosecef>(obs->data).iTOW, std::get<UbxNavPosecef>(obs->data).ecefX, std::get<UbxNavPosecef>(obs->data).ecefY, std::get<UbxNavPosecef>(obs->data).ecefZ);
200 std::get<UbxNavPosllh>(obs->data).iTOW = packet.extractUint32();
201 std::get<UbxNavPosllh>(obs->data).lon = packet.extractInt32();
202 std::get<UbxNavPosllh>(obs->data).lat = packet.extractInt32();
203 std::get<UbxNavPosllh>(obs->data).height = packet.extractInt32();
204 std::get<UbxNavPosllh>(obs->data).hMSL = packet.extractInt32();
205 std::get<UbxNavPosllh>(obs->data).hAcc = packet.extractUint32();
206 std::get<UbxNavPosllh>(obs->data).vAcc = packet.extractUint32();
219 LOG_DATA(
"{}: UBX: NAV-POSLLH, iTOW {}, lon {}, lat {}, height {}", nameId, std::get<UbxNavPosllh>(obs->data).iTOW, std::get<UbxNavPosllh>(obs->data).lon, std::get<UbxNavPosllh>(obs->data).lat, std::get<UbxNavPosllh>(obs->data).height);
225 std::get<UbxNavVelned>(obs->data).iTOW = packet.extractUint32();
226 std::get<UbxNavVelned>(obs->data).velN = packet.extractInt32();
227 std::get<UbxNavVelned>(obs->data).velE = packet.extractInt32();
228 std::get<UbxNavVelned>(obs->data).velD = packet.extractInt32();
229 std::get<UbxNavVelned>(obs->data).speed = packet.extractUint32();
230 std::get<UbxNavVelned>(obs->data).gSpeed = packet.extractUint32();
231 std::get<UbxNavVelned>(obs->data).heading = packet.extractInt32();
232 std::get<UbxNavVelned>(obs->data).sAcc = packet.extractUint32();
233 std::get<UbxNavVelned>(obs->data).cAcc = packet.extractUint32();
246 LOG_DATA(
"{}: UBX: NAV-VELNED, iTOW {}, gSpeed {} [cm/s], heading {} [deg*1e-5], velD {} [cm/s]", nameId, std::get<UbxNavVelned>(obs->data).iTOW, std::get<UbxNavVelned>(obs->data).gSpeed, std::get<UbxNavVelned>(obs->data).heading, std::get<UbxNavVelned>(obs->data).velD);
250 LOG_DATA(
"{}: UBX: NAV-{:x}, Size {}, not implemented yet!", nameId, obs->msgId, packet.getRawDataLength());
262 std::get<UbxRxmRawx>(obs->data).rcvTow = packet.extractDouble();
263 std::get<UbxRxmRawx>(obs->data).week = packet.extractUint16();
264 std::get<UbxRxmRawx>(obs->data).leapS = packet.extractInt8();
265 std::get<UbxRxmRawx>(obs->data).numMeas = packet.extractUint8();
266 std::get<UbxRxmRawx>(obs->data).recStat = packet.extractUint8();
267 std::get<UbxRxmRawx>(obs->data).version = packet.extractUint8();
268 for (
auto& reserved1 : std::get<UbxRxmRawx>(obs->data).reserved1)
270 reserved1 = packet.extractUint8();
272 for (
size_t i = 0; i < std::get<UbxRxmRawx>(obs->data).numMeas; i++)
275 ubxRxmRawxData.
prMes = packet.extractDouble();
276 ubxRxmRawxData.
cpMes = packet.extractDouble();
277 ubxRxmRawxData.
doMes = packet.extractFloat();
278 ubxRxmRawxData.
gnssId = packet.extractUint8();
279 ubxRxmRawxData.
svId = packet.extractUint8();
280 ubxRxmRawxData.
sigId = packet.extractUint8();
281 ubxRxmRawxData.
freqId = packet.extractUint8();
282 ubxRxmRawxData.
locktime = packet.extractUint16();
283 ubxRxmRawxData.
cno = packet.extractUint8();
284 ubxRxmRawxData.
prStdev = packet.extractUint8();
285 ubxRxmRawxData.
cpStdev = packet.extractUint8();
286 ubxRxmRawxData.
doStdev = packet.extractUint8();
287 ubxRxmRawxData.
trkStat = packet.extractUint8();
288 ubxRxmRawxData.
reserved2 = packet.extractUint8();
289 std::get<UbxRxmRawx>(obs->data).data.push_back(ubxRxmRawxData);
293 std::get<UbxRxmRawx>(obs->data).week,
294 static_cast<long double>(std::get<UbxRxmRawx>(obs->data).rcvTow));
297 for (
const auto& sat : std::get<UbxRxmRawx>(obs->data).data)
299 satInfo +=
"[" + std::to_string(sat.gnssId);
300 satInfo +=
", " + std::to_string(sat.svId);
301 satInfo +=
", " + std::to_string(sat.sigId) +
"], ";
304 LOG_DATA(
"{}: UBX: RXM-RAWX, Size {}, rcvWeek {}, rcvTow {}, numMeas {}, satInfo {}.{}", nameId,
305 packet.getRawDataLength(), std::get<UbxRxmRawx>(obs->data).week, std::get<UbxRxmRawx>(obs->data).rcvTow,
306 std::get<UbxRxmRawx>(obs->data).numMeas, satInfo, std::get<UbxRxmRawx>(obs->data).week == 0 ?
" Skipped because no valid time." :
"");
307 if (std::get<UbxRxmRawx>(obs->data).week == 0)
316 std::get<UbxRxmSfrbx>(obs->data).gnssId = packet.extractUint8();
317 std::get<UbxRxmSfrbx>(obs->data).svId = packet.extractUint8();
318 std::get<UbxRxmSfrbx>(obs->data).sigId = packet.extractUint8();
319 std::get<UbxRxmSfrbx>(obs->data).freqId = packet.extractUint8();
320 std::get<UbxRxmSfrbx>(obs->data).numWords = packet.extractUint8();
321 std::get<UbxRxmSfrbx>(obs->data).chn = packet.extractUint8();
322 std::get<UbxRxmSfrbx>(obs->data).version = packet.extractUint8();
323 std::get<UbxRxmSfrbx>(obs->data).reserved0 = packet.extractUint8();
325 for (
size_t i = 0; i < std::get<UbxRxmSfrbx>(obs->data).numWords; i++)
327 std::get<UbxRxmSfrbx>(obs->data).dwrd.emplace_back(packet.extractUint32());
330 LOG_DATA(
"{}: UBX: RXM-SFRBX, gnssId {}, svId {}, freqId {}, numWords {}, chn {}, version {}", nameId,
331 std::get<UbxRxmSfrbx>(obs->data).gnssId,
332 std::get<UbxRxmSfrbx>(obs->data).svId,
333 std::get<UbxRxmSfrbx>(obs->data).freqId,
334 std::get<UbxRxmSfrbx>(obs->data).numWords,
335 std::get<UbxRxmSfrbx>(obs->data).chn,
336 std::get<UbxRxmSfrbx>(obs->data).version);
340 LOG_DATA(
"{}: UBX: RXM-{:x}, Size {}, not implemented yet!", nameId, obs->msgId, packet.getRawDataLength());
347 [[maybe_unused]]
auto msgId =
static_cast<UbxSecMessages>(obs->msgId);
348 LOG_DATA(
"{}: UBX: SEC-{:x}, Size {}, not implemented yet!", nameId, obs->msgId, packet.getRawDataLength());
354 [[maybe_unused]]
auto msgId =
static_cast<UbxTimMessages>(obs->msgId);
355 LOG_DATA(
"{}: UBX: TIM-{:x}, Size {}, not implemented yet!", nameId, obs->msgId, packet.getRawDataLength());
361 [[maybe_unused]]
auto msgId =
static_cast<UbxUpdMessages>(obs->msgId);
362 LOG_DATA(
"{}: UBX: UPD-{:x}, Size {}, not implemented yet!", nameId, obs->msgId, packet.getRawDataLength());
367 LOG_DATA(
"{}: UBX: {:x}-{:x}, Size {}, not implemented yet!", nameId,
static_cast<int>(obs->msgClass),
static_cast<int>(obs->msgId), packet.getRawDataLength());
371 else if (packet.type() == uart::protocol::Packet::Type::TYPE_ASCII)
373 LOG_DATA(
"{}: NMEA: {}", nameId, packet.datastr().substr(0, packet.datastr().size() - 2));