17 if (packet.type() == uart::protocol::Packet::Type::TYPE_BINARY)
19 obs->msgId = packet.extractUint8();
20 obs->payloadLength = packet.extractUint16();
28 std::get<ErbVer>(obs->data).iTOW = packet.extractUint32();
29 std::get<ErbVer>(obs->data).verH = packet.extractUint8();
30 std::get<ErbVer>(obs->data).verM = packet.extractUint8();
31 std::get<ErbVer>(obs->data).verL = packet.extractUint8();
34 auto currentTime = util::time::GetCurrentInsTime();
35 if (!currentTime.empty())
37 auto gpst = currentTime.toGPSweekTow();
38 currentTime =
InsTime(gpst.gpsCycle,
40 static_cast<long double>(std::get<ErbVer>(obs->data).iTOW) / 1000.0L);
41 obs->insTime = currentTime;
44 LOG_DATA(
"Erb: VER, iTOW {}, verH {}, verH {}, verH {}",
45 std::get<ErbVer>(obs->data).iTOW,
46 std::get<ErbVer>(obs->data).verH,
47 std::get<ErbVer>(obs->data).verM,
48 std::get<ErbVer>(obs->data).verL);
54 std::get<ErbPos>(obs->data).iTOW = packet.extractUint32();
55 std::get<ErbPos>(obs->data).lon = packet.extractDouble();
56 std::get<ErbPos>(obs->data).lat = packet.extractDouble();
57 std::get<ErbPos>(obs->data).height = packet.extractDouble();
58 std::get<ErbPos>(obs->data).hMSL = packet.extractDouble();
59 std::get<ErbPos>(obs->data).hAcc = packet.extractUint32();
60 std::get<ErbPos>(obs->data).vAcc = packet.extractUint32();
63 auto currentTime = util::time::GetCurrentInsTime();
64 if (!currentTime.empty())
66 auto gpst = currentTime.toGPSweekTow();
67 currentTime =
InsTime(gpst.gpsCycle,
69 static_cast<long double>(std::get<ErbPos>(obs->data).iTOW) / 1000.0L);
70 obs->insTime = currentTime;
73 LOG_DATA(
"Erb: POS, iTOW {}, lon {}, lat {}, height {}",
74 std::get<ErbPos>(obs->data).iTOW, std::get<ErbPos>(obs->data).lon,
75 std::get<ErbPos>(obs->data).lat, std::get<ErbPos>(obs->data).height);
81 std::get<ErbStat>(obs->data).iTOW = packet.extractUint32();
82 std::get<ErbStat>(obs->data).weekGPS = packet.extractUint16();
83 std::get<ErbStat>(obs->data).fixType = packet.extractUint8();
84 std::get<ErbStat>(obs->data).fixStatus = packet.extractUint8();
85 std::get<ErbStat>(obs->data).numSV = packet.extractUint8();
88 auto currentTime = util::time::GetCurrentInsTime();
89 if (!currentTime.empty())
91 auto gpst = currentTime.toGPSweekTow();
92 currentTime =
InsTime(gpst.gpsCycle,
94 static_cast<long double>(std::get<ErbStat>(obs->data).iTOW) / 1000.0L);
95 obs->insTime = currentTime;
98 LOG_DATA(
"Erb: STAT, iTOW {}, weekGPS {}, fixType {}, fixStatus {}, numSV {}",
99 std::get<ErbStat>(obs->data).iTOW,
100 std::get<ErbStat>(obs->data).weekGPS, std::get<ErbStat>(obs->data).fixType,
101 std::get<ErbStat>(obs->data).fixStatus, std::get<ErbStat>(obs->data).numSV);
107 std::get<ErbDops>(obs->data).iTOW = packet.extractUint32();
108 std::get<ErbDops>(obs->data).dopGeo = packet.extractUint16();
109 std::get<ErbDops>(obs->data).dopPos = packet.extractUint16();
110 std::get<ErbDops>(obs->data).dopVer = packet.extractUint16();
111 std::get<ErbDops>(obs->data).dopHor = packet.extractUint16();
114 auto currentTime = util::time::GetCurrentInsTime();
115 if (!currentTime.empty())
117 auto gpst = currentTime.toGPSweekTow();
118 currentTime =
InsTime(gpst.gpsCycle,
120 static_cast<long double>(std::get<ErbDops>(obs->data).iTOW) / 1000.0L);
121 obs->insTime = currentTime;
124 LOG_DATA(
"Erb: DOPS, iTOW {}, dopGeo {}, dopPos {}, dopVer {}, dopHor {}",
125 std::get<ErbDops>(obs->data).iTOW,
126 std::get<ErbDops>(obs->data).dopGeo, std::get<ErbDops>(obs->data).dopPos,
127 std::get<ErbDops>(obs->data).dopVer, std::get<ErbDops>(obs->data).dopHor);
133 std::get<ErbVel>(obs->data).iTOW = packet.extractUint32();
134 std::get<ErbVel>(obs->data).velN = packet.extractInt32();
135 std::get<ErbVel>(obs->data).velE = packet.extractInt32();
136 std::get<ErbVel>(obs->data).velD = packet.extractInt32();
137 std::get<ErbVel>(obs->data).speed = packet.extractUint32();
138 std::get<ErbVel>(obs->data).gSpeed = packet.extractUint32();
139 std::get<ErbVel>(obs->data).heading = packet.extractInt32();
140 std::get<ErbVel>(obs->data).sAcc = packet.extractUint32();
143 auto currentTime = util::time::GetCurrentInsTime();
144 if (!currentTime.empty())
146 auto gpst = currentTime.toGPSweekTow();
147 currentTime =
InsTime(gpst.gpsCycle,
149 static_cast<long double>(std::get<ErbVel>(obs->data).iTOW) / 1000.0L);
150 obs->insTime = currentTime;
153 LOG_DATA(
"Erb: VEL, iTOW {}, gSpeed {} [cm/s], heading {} [deg*1e-5], velD {} [cm/s]",
154 std::get<ErbVel>(obs->data).iTOW, std::get<ErbVel>(obs->data).gSpeed,
155 std::get<ErbVel>(obs->data).heading, std::get<ErbVel>(obs->data).velD);
161 std::get<ErbSvi>(obs->data).iTOW = packet.extractUint32();
162 std::get<ErbSvi>(obs->data).nSV = packet.extractUint8();
163 std::get<ErbSvi>(obs->data).idSV = packet.extractUint8();
164 std::get<ErbSvi>(obs->data).typeSV = packet.extractUint8();
165 std::get<ErbSvi>(obs->data).carPh = packet.extractInt32();
166 std::get<ErbSvi>(obs->data).psRan = packet.extractInt32();
167 std::get<ErbSvi>(obs->data).freqD = packet.extractInt32();
168 std::get<ErbSvi>(obs->data).snr = packet.extractUint16();
169 std::get<ErbSvi>(obs->data).azim = packet.extractUint16();
170 std::get<ErbSvi>(obs->data).elev = packet.extractUint16();
173 auto currentTime = util::time::GetCurrentInsTime();
174 if (!currentTime.empty())
176 auto gpst = currentTime.toGPSweekTow();
177 currentTime =
InsTime(gpst.gpsCycle,
179 static_cast<long double>(std::get<ErbSvi>(obs->data).iTOW) / 1000.0L);
180 obs->insTime = currentTime;
183 LOG_DATA(
"Erb: SVI, iTOW {}, nSV {} , idSV {} , typeSV {} , carPh {}, psRan {} , freqD {} , snr {}, , azim {} , elev {}",
184 std::get<ErbSvi>(obs->data).iTOW, std::get<ErbSvi>(obs->data).nSV, std::get<ErbSvi>(obs->data).idSV,
185 std::get<ErbSvi>(obs->data).typeSV, std::get<ErbSvi>(obs->data).carPh,
186 std::get<ErbSvi>(obs->data).psRan, std::get<ErbSvi>(obs->data).freqD,
187 std::get<ErbSvi>(obs->data).snr, std::get<ErbSvi>(obs->data).azim,
188 std::get<ErbSvi>(obs->data).elev);
194 std::get<ErbRtk>(obs->data).numSV = packet.extractUint8();
195 std::get<ErbRtk>(obs->data).age = packet.extractUint16();
196 std::get<ErbRtk>(obs->data).baselineN = packet.extractInt32();
197 std::get<ErbRtk>(obs->data).baselineE = packet.extractInt32();
198 std::get<ErbRtk>(obs->data).baselineD = packet.extractInt32();
199 std::get<ErbRtk>(obs->data).arRatio = packet.extractUint16();
200 std::get<ErbRtk>(obs->data).weekGPS = packet.extractUint16();
201 std::get<ErbRtk>(obs->data).timeGPS = packet.extractUint32();
203 LOG_DATA(
"Erb: RTK, numSV {}, age {} [s * 1e-2] , baselineN {} , baselineE {} , baselineD {}, arRatio {} [*1e-1] , weekGPS {} , timeGPS {}",
204 std::get<ErbRtk>(obs->data).numSV, std::get<ErbRtk>(obs->data).age, std::get<ErbRtk>(obs->data).baselineN,
205 std::get<ErbRtk>(obs->data).baselineE, std::get<ErbRtk>(obs->data).baselineD,
206 std::get<ErbRtk>(obs->data).arRatio, std::get<ErbRtk>(obs->data).weekGPS,
207 std::get<ErbRtk>(obs->data).timeGPS);
211 LOG_DATA(
"Erb: {:x}, Size {}, not implemented yet!", obs->msgId, packet.getRawDataLength());