10 #include <gtest/gtest.h>
26 const char* test_cmd =
27 "$GPGGA,101830.00,3649.76162994,N,00224.53709052,W,2,08,1.1,9.3,M,"
31 EXPECT_TRUE(parse_ret) <<
"Failed parse of: " << test_cmd << endl;
45 const char* test_cmd =
"$GPGGA,,,,,,0,,,,M,,M,,*6";
48 EXPECT_FALSE(parse_ret);
54 const char* test_cmd =
55 "$GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598, ,*10";
58 EXPECT_TRUE(parse_ret) <<
"Failed parse of: " << test_cmd << endl;
71 const char* test_cmd =
"$GPGLL,3723.2475,N,12158.3416,W,161229.487,A,A*41";
74 EXPECT_TRUE(parse_ret) <<
"Failed parse of: " << test_cmd << endl;
87 const char* test_cmd =
"$GPVTG,054.7,T,034.4,M,005.5,N,010.2,K*48";
90 EXPECT_TRUE(parse_ret) <<
"Failed parse of: " << test_cmd << endl;
105 const char* test_cmd =
"$GPZDA,181813,14,10,2003,00,00*4F";
108 EXPECT_TRUE(parse_ret) <<
"Failed parse of: " << test_cmd << endl;
127 auto buf = std::make_shared<mrpt::io::CMemoryStream>();
129 const std::string s(
"$GPZDA,181813,14,10,2003,00,00*4F\n");
130 buf->Write(s.c_str(), s.size());
164 auto buf = std::make_shared<mrpt::io::CMemoryStream>();
166 const uint8_t sample_novatel6_gps[] = {
167 0xaa, 0x44, 0x12, 0x1c, 0x2a, 0x00, 0x00, 0xa0, 0x48, 0x00, 0x00,
168 0x00, 0x5a, 0xb4, 0x59, 0x07, 0x10, 0x4a, 0xb7, 0x16, 0x00, 0x00,
169 0x00, 0x00, 0xf6, 0xb1, 0x4a, 0x34, 0x00, 0x00, 0x00, 0x00, 0x38,
170 0x00, 0x00, 0x00, 0x97, 0x2b, 0x45, 0xa9, 0xc8, 0x6a, 0x42, 0x40,
171 0xfc, 0x54, 0x43, 0x6f, 0x11, 0x18, 0x03, 0xc0, 0x00, 0x00, 0x20,
172 0x8f, 0xe8, 0x0e, 0x1c, 0x40, 0x66, 0x66, 0x48, 0x42, 0x3d, 0x00,
173 0x00, 0x00, 0x1d, 0x9b, 0x96, 0x3c, 0x2c, 0xd5, 0x9c, 0x3c, 0xd1,
174 0x39, 0xa8, 0x3c, 0x35, 0x35, 0x35, 0x00, 0x00, 0x00, 0x60, 0x41,
175 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0e, 0x0e, 0x0d, 0x00, 0x00, 0x00,
176 0x33, 0x82, 0xba, 0x79, 0xe5, 0xaa, 0x44, 0x13, 0x58, 0xfc, 0x01,
177 0x59, 0x07, 0x10, 0x4a, 0xb7, 0x16, 0x59, 0x07, 0x00, 0x00, 0x33,
178 0x33, 0x33, 0x33, 0xdb, 0x42, 0x17, 0x41, 0xa7, 0xf0, 0xaf, 0xa5,
179 0xc8, 0x6a, 0x42, 0x40, 0xa2, 0xad, 0xac, 0x28, 0x12, 0x18, 0x03,
180 0xc0, 0x00, 0x00, 0x8a, 0x8b, 0x52, 0x8d, 0x4c, 0x40, 0x10, 0xe2,
181 0xdb, 0x3c, 0x4b, 0xbd, 0x82, 0xbf, 0x52, 0x23, 0x1e, 0x50, 0x08,
182 0xf1, 0x9b, 0xbf, 0xd4, 0xa6, 0xd1, 0x7c, 0xcd, 0x16, 0xc8, 0x3f,
183 0x31, 0x27, 0xe1, 0x16, 0xa2, 0x6b, 0x10, 0x40, 0xc7, 0x1c, 0xc7,
184 0x39, 0x6a, 0x9c, 0x00, 0x40, 0xa0, 0x3c, 0x9f, 0x79, 0xca, 0xdd,
185 0x63, 0x40, 0x03, 0x00, 0x00, 0x00, 0x27, 0xbb, 0xff, 0xf8, 0xaa,
186 0x44, 0x12, 0x1c, 0x2a, 0x00, 0x00, 0xa0, 0x48, 0x00, 0x00, 0x00,
187 0x5a, 0xb4, 0x59, 0x07, 0x42, 0x4a, 0xb7, 0x16, 0x00, 0x00, 0x00,
188 0x00, 0xf6, 0xb1, 0x4a, 0x34, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00,
189 0x00, 0x00, 0xf0, 0x23, 0x3c, 0xa9, 0xc8, 0x6a, 0x42, 0x40, 0xdd,
190 0x10, 0x6c, 0x71, 0x11, 0x18, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x03,
191 0xa7, 0x18, 0x1c, 0x40, 0x66, 0x66, 0x48, 0x42, 0x3d, 0x00, 0x00,
192 0x00, 0x32, 0x9b, 0x96, 0x3c, 0x82, 0xd4, 0x9c, 0x3c, 0x5d, 0x3a,
193 0xa8, 0x3c, 0x35, 0x35, 0x35, 0x00, 0x00, 0x00, 0x60, 0x41, 0x00,
194 0x00, 0x00, 0x00, 0x0f, 0x0e, 0x0e, 0x0d, 0x00, 0x00, 0x00, 0x33,
195 0xcb, 0x95, 0xa0, 0x9b, 0xaa, 0x44, 0x13, 0x58, 0xfc, 0x01, 0x59,
196 0x07, 0x42, 0x4a, 0xb7, 0x16, 0x59, 0x07, 0x00, 0x00, 0x67, 0x66,
197 0x66, 0x66, 0xdb, 0x42, 0x17, 0x41, 0xe6, 0xae, 0xa1, 0xa5, 0xc8,
198 0x6a, 0x42, 0x40, 0x26, 0x1e, 0x82, 0x2b, 0x12, 0x18, 0x03, 0xc0,
199 0x00, 0x00, 0x62, 0xb6, 0x8b, 0x8e, 0x4c, 0x40, 0x10, 0x63, 0x42,
200 0x19, 0x38, 0x19, 0x7a, 0xbf, 0x1e, 0xa9, 0x79, 0x02, 0x24, 0x6c,
201 0x9d, 0xbf, 0x52, 0x13, 0x38, 0xa4, 0x35, 0x2c, 0xc8, 0x3f, 0xa9,
202 0x3b, 0x21, 0x59, 0xe0, 0xa0, 0x10, 0x40, 0x51, 0xd1, 0x8c, 0x50,
203 0x0b, 0xa0, 0x00, 0x40, 0x16, 0x40, 0x94, 0xbe, 0xc2, 0xdd, 0x63,
204 0x40, 0x03, 0x00, 0x00, 0x00, 0x20, 0x4d, 0xe7, 0xa2, 0xaa, 0x44,
205 0x12, 0x1c, 0x2a, 0x00, 0x00, 0xa0, 0x48, 0x00, 0x00, 0x00, 0x5a,
206 0xb4, 0x59, 0x07, 0x74, 0x4a, 0xb7, 0x16, 0x00, 0x00, 0x00, 0x00,
207 0xf6, 0xb1, 0x4a, 0x34, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00,
208 0x00, 0xaa, 0x41, 0x32, 0xa9, 0xc8, 0x6a, 0x42, 0x40, 0xff, 0x59,
209 0xa8, 0x73, 0x11, 0x18, 0x03, 0xc0, 0x00, 0x00, 0xa0, 0xd6, 0x6b,
210 0x22, 0x1c, 0x40, 0x66, 0x66, 0x48, 0x42, 0x3d, 0x00, 0x00, 0x00,
211 0x92, 0x9b, 0x96, 0x3c, 0x70, 0xd3, 0x9c, 0x3c, 0x06, 0x3b, 0xa8,
212 0x3c, 0x35, 0x35, 0x35, 0x00};
213 const unsigned int sample_novatel6_gps_len = 500;
214 buf->Write(sample_novatel6_gps, sample_novatel6_gps_len);
228 if (obss.empty())
return;
230 auto itObs = obss.begin();
239 obsGPS1->getMsgByClassPtr<gnss::Message_NV_OEM6_BESTPOS>();
245 obsGPS2->getMsgByClassPtr<gnss::Message_NV_OEM6_INSPVAS>();
253 auto buf = std::make_shared<mrpt::io::CMemoryStream>();
256 const uint8_t sample_nmea_gps[] = {
257 0x31, 0x33, 0x2c, 0x32, 0x34, 0x2c, 0x33, 0x30, 0x2c, 0x32, 0x36,
258 0x34, 0x2c, 0x33, 0x30, 0x2c, 0x32, 0x38, 0x2c, 0x34, 0x35, 0x2c,
259 0x30, 0x36, 0x30, 0x2c, 0x31, 0x37, 0x2c, 0x33, 0x30, 0x2c, 0x31,
260 0x38, 0x2c, 0x30, 0x35, 0x39, 0x2c, 0x33, 0x31, 0x2c, 0x33, 0x36,
261 0x2c, 0x33, 0x34, 0x2c, 0x31, 0x33, 0x32, 0x2c, 0x2a, 0x37, 0x37,
262 0x0a, 0x24, 0x47, 0x50, 0x47, 0x53, 0x56, 0x2c, 0x34, 0x2c, 0x34,
263 0x2c, 0x31, 0x33, 0x2c, 0x34, 0x39, 0x2c, 0x34, 0x37, 0x2c, 0x31,
264 0x36, 0x38, 0x2c, 0x2a, 0x34, 0x41, 0x0a, 0x24, 0x47, 0x4c, 0x47,
265 0x53, 0x56, 0x2c, 0x32, 0x2c, 0x31, 0x2c, 0x30, 0x36, 0x2c, 0x36,
266 0x36, 0x2c, 0x34, 0x32, 0x2c, 0x31, 0x34, 0x30, 0x2c, 0x2c, 0x36,
267 0x37, 0x2c, 0x37, 0x39, 0x2c, 0x33, 0x34, 0x37, 0x2c, 0x31, 0x30,
268 0x2c, 0x36, 0x38, 0x2c, 0x32, 0x35, 0x2c, 0x33, 0x32, 0x38, 0x2c,
269 0x32, 0x36, 0x2c, 0x37, 0x36, 0x2c, 0x32, 0x35, 0x2c, 0x30, 0x33,
270 0x34, 0x2c, 0x31, 0x31, 0x2a, 0x36, 0x38, 0x0a, 0x24, 0x47, 0x4c,
271 0x47, 0x53, 0x56, 0x2c, 0x32, 0x2c, 0x32, 0x2c, 0x30, 0x36, 0x2c,
272 0x37, 0x37, 0x2c, 0x37, 0x36, 0x2c, 0x33, 0x34, 0x33, 0x2c, 0x2c,
273 0x37, 0x38, 0x2c, 0x33, 0x39, 0x2c, 0x32, 0x33, 0x32, 0x2c, 0x31,
274 0x38, 0x2a, 0x36, 0x39, 0x0a, 0x24, 0x47, 0x4e, 0x47, 0x53, 0x54,
275 0x2c, 0x31, 0x30, 0x30, 0x33, 0x35, 0x34, 0x2e, 0x34, 0x30, 0x2c,
276 0x32, 0x35, 0x2c, 0x2c, 0x2c, 0x2c, 0x34, 0x35, 0x2c, 0x32, 0x30,
277 0x2c, 0x36, 0x31, 0x2a, 0x36, 0x33, 0x0a, 0xb5, 0x62, 0x01, 0x01,
278 0x14, 0x00, 0xb8, 0x9b, 0xc2, 0x16, 0xc1, 0x84, 0x70, 0x1e, 0x24,
279 0x55, 0xb8, 0xfe, 0xb0, 0xee, 0xa9, 0x16, 0x8e, 0x19, 0x00, 0x00,
280 0x47, 0xb2, 0xb5, 0x62, 0x01, 0x12, 0x24, 0x00, 0xb8, 0x9b, 0xc2,
281 0x16, 0xee, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xea, 0xff,
282 0xff, 0xff, 0x1d, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x99,
283 0xa6, 0x14, 0x02, 0x08, 0x01, 0x00, 0x00, 0x80, 0xa8, 0x12, 0x01,
284 0xf3, 0xeb, 0x24, 0x47, 0x4e, 0x52, 0x4d, 0x43, 0x2c, 0x31, 0x30,
285 0x30, 0x33, 0x35, 0x34, 0x2e, 0x36, 0x30, 0x2c, 0x41, 0x2c, 0x33,
286 0x36, 0x34, 0x39, 0x2e, 0x37, 0x38, 0x39, 0x32, 0x39, 0x2c, 0x4e,
287 0x2c, 0x30, 0x30, 0x32, 0x32, 0x34, 0x2e, 0x34, 0x36, 0x38, 0x36,
288 0x33, 0x2c, 0x57, 0x2c, 0x30, 0x2e, 0x33, 0x37, 0x38, 0x2c, 0x33,
289 0x34, 0x39, 0x2e, 0x30, 0x38, 0x2c, 0x32, 0x37, 0x30, 0x32, 0x32,
290 0x30, 0x2c, 0x2c, 0x2c, 0x41, 0x2a, 0x36, 0x36, 0x0a, 0x24, 0x47,
291 0x4e, 0x47, 0x4e, 0x53, 0x2c, 0x31, 0x30, 0x30, 0x33, 0x35, 0x34,
292 0x2e, 0x36, 0x30, 0x2c, 0x33, 0x36, 0x34, 0x39, 0x2e, 0x37, 0x38,
293 0x39, 0x32, 0x39, 0x2c, 0x4e, 0x2c, 0x30, 0x30, 0x32, 0x32, 0x34,
294 0x2e, 0x34, 0x36, 0x38, 0x36, 0x33, 0x2c, 0x57, 0x2c, 0x41, 0x4e,
295 0x2c, 0x30, 0x34, 0x2c, 0x32, 0x2e, 0x33, 0x31, 0x2c, 0x35, 0x35,
296 0x2e, 0x34, 0x2c, 0x34, 0x36, 0x2e, 0x32, 0x2c, 0x2c, 0x2a, 0x34,
297 0x45, 0x0a, 0x24, 0x47, 0x4e, 0x47, 0x53, 0x41, 0x2c, 0x4d, 0x2c,
298 0x33, 0x2c, 0x31, 0x35, 0x2c, 0x32, 0x34, 0x2c, 0x33, 0x30, 0x2c,
299 0x31, 0x37, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
300 0x34, 0x2e, 0x32, 0x31, 0x2c, 0x32, 0x2e, 0x33, 0x31, 0x2c, 0x33,
301 0x2e, 0x35, 0x32, 0x2a, 0x31, 0x34, 0x0a, 0x24, 0x47, 0x4e, 0x47,
302 0x53, 0x41, 0x2c, 0x4d, 0x2c, 0x33, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
303 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x34, 0x2e, 0x32,
304 0x31, 0x2c, 0x32, 0x2e, 0x33, 0x31, 0x2c, 0x33, 0x2e, 0x35, 0x32,
305 0x2a, 0x31, 0x33, 0x0a, 0x24, 0x47, 0x50, 0x47, 0x53, 0x56, 0x2c,
306 0x34, 0x2c, 0x31, 0x2c, 0x31, 0x33, 0x2c, 0x30, 0x35, 0x2c, 0x33,
307 0x36, 0x2c, 0x31, 0x38, 0x32, 0x2c, 0x32, 0x30, 0x2c, 0x31, 0x32,
308 0x2c, 0x30, 0x33, 0x2c, 0x32, 0x30, 0x32, 0x2c, 0x2c, 0x31, 0x33,
309 0x2c, 0x36, 0x39, 0x2c, 0x30, 0x34, 0x36, 0x2c, 0x31, 0x32, 0x2c,
310 0x31, 0x35, 0x2c, 0x36, 0x31, 0x2c, 0x33, 0x32, 0x31, 0x2c, 0x32,
311 0x39, 0x2a, 0x37, 0x33, 0x0a, 0x24, 0x47, 0x50, 0x47, 0x53, 0x56,
312 0x2c, 0x34, 0x2c, 0x32, 0x2c, 0x31, 0x33, 0x2c, 0x31, 0x37, 0x2c,
313 0x31, 0x31, 0x2c, 0x31, 0x30, 0x38, 0x2c, 0x32, 0x38, 0x2c, 0x31,
314 0x39, 0x2c, 0x30, 0x34, 0x2c, 0x31, 0x33, 0x31, 0x2c, 0x31, 0x36,
315 0x2c, 0x32, 0x30, 0x2c, 0x31, 0x33, 0x2c, 0x33, 0x31, 0x38, 0x2c,
316 0x31, 0x37, 0x2c, 0x32, 0x31, 0x2c, 0x30, 0x33, 0x2c, 0x32, 0x38,
317 0x38, 0x2c, 0x2a, 0x37, 0x45, 0x0a, 0x24, 0x47, 0x50, 0x47, 0x53,
318 0x56, 0x2c, 0x34, 0x2c, 0x33, 0x2c, 0x31, 0x33, 0x2c, 0x32, 0x34,
319 0x2c, 0x33, 0x30, 0x2c, 0x32, 0x36, 0x34, 0x2c, 0x33, 0x30, 0x2c,
320 0x32, 0x38, 0x2c, 0x34, 0x35, 0x2c, 0x30, 0x36, 0x30, 0x2c, 0x31,
321 0x37, 0x2c, 0x33, 0x30, 0x2c, 0x31, 0x38, 0x2c, 0x30, 0x35, 0x39,
322 0x2c, 0x33, 0x31, 0x2c, 0x33, 0x36, 0x2c, 0x33, 0x34, 0x2c, 0x31,
323 0x33, 0x32, 0x2c, 0x2a, 0x37, 0x37, 0x0a, 0x24, 0x47, 0x50, 0x47,
324 0x53, 0x56, 0x2c, 0x34, 0x2c, 0x34, 0x2c, 0x31, 0x33, 0x2c, 0x34,
325 0x39, 0x2c, 0x34, 0x37, 0x2c, 0x31, 0x36, 0x38, 0x2c, 0x2a, 0x34,
326 0x41, 0x0a, 0x24, 0x47, 0x4c, 0x47, 0x53, 0x56, 0x2c, 0x32, 0x2c,
327 0x31, 0x2c, 0x30, 0x36, 0x2c, 0x36, 0x36, 0x2c, 0x34, 0x32, 0x2c,
328 0x31, 0x34, 0x30, 0x2c, 0x2c, 0x36, 0x37, 0x2c, 0x37, 0x39, 0x2c,
329 0x33, 0x34, 0x37, 0x2c, 0x31, 0x31, 0x2c, 0x36, 0x38, 0x2c, 0x32,
330 0x35, 0x2c, 0x33, 0x32, 0x38, 0x2c, 0x32, 0x36, 0x2c, 0x37, 0x36,
331 0x2c, 0x32, 0x35, 0x2c, 0x30, 0x33, 0x34, 0x2c, 0x31, 0x31, 0x2a,
332 0x36, 0x39, 0x0a, 0x24, 0x47, 0x4c, 0x47, 0x53, 0x56, 0x2c, 0x32,
333 0x2c, 0x32, 0x2c, 0x30, 0x36, 0x2c, 0x37, 0x37, 0x2c, 0x37, 0x36,
334 0x2c, 0x33, 0x34, 0x33, 0x2c, 0x2c, 0x37, 0x38, 0x2c, 0x33, 0x39,
335 0x2c, 0x32, 0x33, 0x32, 0x2c, 0x31, 0x38, 0x2a, 0x36, 0x39, 0x0a,
336 0x24, 0x47, 0x4e, 0x47, 0x53, 0x54, 0x2c, 0x31, 0x30, 0x30, 0x33,
337 0x35, 0x34, 0x2e, 0x36, 0x30, 0x2c, 0x32, 0x35, 0x2c, 0x2c, 0x2c,
338 0x2c, 0x33, 0x36, 0x2c, 0x31, 0x37, 0x2c, 0x35, 0x32, 0x2a, 0x36,
339 0x31, 0x0a, 0xb5, 0x62, 0x01, 0x01, 0x14, 0x00, 0x80, 0x9c, 0xc2,
340 0x16, 0xc6, 0x84, 0x70, 0x1e, 0x22, 0x55, 0xb8, 0xfe, 0xaf, 0xee,
341 0xa9, 0x16, 0x90, 0x19, 0x00, 0x00, 0x14, 0x9d, 0xb5, 0x62, 0x01,
342 0x12, 0x24, 0x00, 0x80, 0x9c, 0xc2, 0x16, 0xee, 0xff, 0xff, 0xff,
343 0xf9, 0xff, 0xff, 0xff, 0xea, 0xff, 0xff, 0xff, 0x1d, 0x00, 0x00,
344 0x00, 0x13, 0x00, 0x00, 0x00, 0x99, 0xa6, 0x14, 0x02, 0x14, 0x02,
345 0x00, 0x00, 0x80, 0xa8, 0x12, 0x01, 0xc9, 0x95, 0x24, 0x47, 0x4e,
346 0x52, 0x4d, 0x43, 0x2c, 0x31, 0x30, 0x30, 0x33, 0x35, 0x34, 0x2e,
347 0x38, 0x30, 0x2c, 0x56, 0x2c, 0x33, 0x36, 0x34, 0x39, 0x2e};
348 const unsigned int sample_nmea_gps_len = 1000;
349 buf->Write(sample_nmea_gps, sample_nmea_gps_len);
363 if (obss.empty())
return;
365 auto itObs = obss.begin();
389 EXPECT_NEAR(msg3->fields.longitude_degrees, -2.407810500, 0.0001);
390 EXPECT_NEAR(msg3->fields.latitude_degrees, 36.829821500, 0.0001);