memory_blocs_parser_navigation.test.cc
Go to the documentation of this file.
1 #include <gtest/gtest.h>
2 
34 
35 using namespace ixblue_stdbin_decoder;
36 
37 TEST(MemoryBocksParser, ParseAttitudeAndHeading)
38 {
39  // Heading : 1.25f( 0x3fa00000 ), Roll : 12.55f (0x4148cccd), Pitch : -1.5f
40  // (0xbfc00000)
41  // clang-format off
42  const std::vector<uint8_t> memory{
43  0x3f, 0xa0, 0x00, 0x00,
44  0x41, 0x48, 0xcc, 0xcd,
45  0xbf, 0xc0, 0x00, 0x00
46  };
47  // clang-format on
48  auto buffer = boost::asio::buffer(memory.data(), memory.size());
49 
51  Data::BinaryNav binaryNav;
52  parser.parse(buffer, binaryNav);
53 
54  ASSERT_TRUE(binaryNav.attitudeHeading.is_initialized());
55  ASSERT_FLOAT_EQ(1.25, binaryNav.attitudeHeading.get().heading_deg);
56  ASSERT_FLOAT_EQ(12.55, binaryNav.attitudeHeading.get().roll_deg);
57  ASSERT_FLOAT_EQ(-1.5, binaryNav.attitudeHeading.get().pitch_deg);
58 
59  // We also check that buffer was completly consumed by parser.
60  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
61 }
62 
63 TEST(MemoryBocksParser, ParseAttitudeAndHeadingDeviation)
64 {
65  // HeadingSD : 1.25f( 0x3fa00000 ), RollSD : 12.55f (0x4148cccd), PitchSD : -1.5f
66  // (0xbfc00000)
67  // clang-format off
68  const std::vector<uint8_t> memory{
69  0x3f, 0xa0, 0x00, 0x00,
70  0x41, 0x48, 0xcc, 0xcd,
71  0xbf,0xc0, 0x00, 0x00
72  };
73  // clang-format on
74  auto buffer = boost::asio::buffer(memory.data(), memory.size());
75 
77  Data::BinaryNav binaryNav;
78  parser.parse(buffer, binaryNav);
79 
80  ASSERT_TRUE(binaryNav.attitudeHeadingDeviation.is_initialized());
81  ASSERT_FLOAT_EQ(1.25, binaryNav.attitudeHeadingDeviation.get().heading_stdDev_deg);
82  ASSERT_FLOAT_EQ(12.55, binaryNav.attitudeHeadingDeviation.get().roll_stdDev_deg);
83  ASSERT_FLOAT_EQ(-1.5, binaryNav.attitudeHeadingDeviation.get().pitch_stdDev_deg);
84 
85  // We also check that buffer was completly consumed by parser.
86  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
87 }
88 
89 TEST(MemoryBocksParser, ParseRealTimeHeaveSurgeSway)
90 {
91  // Heave without BdL : 1.25f( 0x3fa00000 ), Heave : 12.55f (0x4148cccd), Surge : -1.5f
92  // (0xbfc00000), Sway : -0.005f(0xbba3d70a)
93  // clang-format off
94  const std::vector<uint8_t> memory{
95  0x3f, 0xa0, 0x00, 0x00,
96  0x41, 0x48, 0xcc, 0xcd,
97  0xbf, 0xc0, 0x00, 0x00,
98  0xbb, 0xa3, 0xd7, 0x0a
99  };
100  // clang-format on
101  auto buffer = boost::asio::buffer(memory.data(), memory.size());
102 
104  Data::BinaryNav binaryNav;
105  parser.parse(buffer, binaryNav);
106 
107  ASSERT_TRUE(binaryNav.rtHeaveSurgeSway.is_initialized());
108  ASSERT_FLOAT_EQ(1.25, binaryNav.rtHeaveSurgeSway.get().rt_heave_withoutBdL);
109  ASSERT_FLOAT_EQ(12.55, binaryNav.rtHeaveSurgeSway.get().rt_heave_atBdL);
110  ASSERT_FLOAT_EQ(-1.5, binaryNav.rtHeaveSurgeSway.get().rt_surge_atBdL);
111  ASSERT_FLOAT_EQ(-0.005, binaryNav.rtHeaveSurgeSway.get().rt_sway_atBdL);
112 
113  // We also check that buffer was completly consumed by parser.
114  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
115 }
116 
117 TEST(MemoryBlockParser, ParseSmartHeave)
118 {
119  // Time : 125 = 0x0000007D (in big endian)
120  // Heave : 1.25f( 0x3fa00000 )
121  // clang-format off
122  const std::vector<uint8_t> memory{
123  0x00, 0x00, 0x00, 0x7D,
124  0x3f, 0xa0, 0x00, 0x00,
125  };
126  // clang-format on
127  auto buffer = boost::asio::buffer(memory.data(), memory.size());
128 
129  Parser::SmartHeave parser;
130  Data::BinaryNav binaryNav;
131  parser.parse(buffer, binaryNav);
132 
133  ASSERT_TRUE(binaryNav.smartHeave.is_initialized());
134  ASSERT_FLOAT_EQ(1.25, binaryNav.smartHeave.get().smartHeave_m);
135  ASSERT_EQ(125, binaryNav.smartHeave.get().validityTime_100us);
136 }
137 
138 TEST(MemoryBocksParser, ParseHeadingRollPitchRate)
139 {
140  // Heading rate : -1.5f (0xbfc00000), Roll rate : 1.25f( 0x3fa00000 ),
141  // Pitch rate : 12.55f (0x4148cccd)
142  // clang-format off
143  const std::vector<uint8_t> memory{
144  0xbf, 0xc0, 0x00, 0x00,
145  0x3f, 0xa0, 0x00, 0x00,
146  0x41, 0x48, 0xcc, 0xcd
147  };
148  // clang-format on
149  auto buffer = boost::asio::buffer(memory.data(), memory.size());
150 
152  Data::BinaryNav binaryNav;
153  parser.parse(buffer, binaryNav);
154 
155  ASSERT_TRUE(binaryNav.headingRollPitchRate.is_initialized());
156  ASSERT_FLOAT_EQ(-1.5, binaryNav.headingRollPitchRate.get().heading_rate);
157  ASSERT_FLOAT_EQ(1.25, binaryNav.headingRollPitchRate.get().roll_rate);
158  ASSERT_FLOAT_EQ(12.55, binaryNav.headingRollPitchRate.get().pitch_rate);
159 
160  // We also check that buffer was completly consumed by parser.
161  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
162 }
163 
164 TEST(MemoryBocksParser, ParseRotationRateVesselFrame)
165 {
166  // XV1 : -1.5f (0xbfc00000), XV2 : 1.25f( 0x3fa00000 ),
167  // XV3 : 12.55f (0x4148cccd)
168  // clang-format off
169  const std::vector<uint8_t> memory{
170  0xbf, 0xc0, 0x00, 0x00,
171  0x3f, 0xa0, 0x00, 0x00,
172  0x41, 0x48, 0xcc, 0xcd
173  };
174  // clang-format on
175  auto buffer = boost::asio::buffer(memory.data(), memory.size());
176 
178  Data::BinaryNav binaryNav;
179  parser.parse(buffer, binaryNav);
180 
181  ASSERT_TRUE(binaryNav.rotationRateVesselFrame.is_initialized());
182  ASSERT_FLOAT_EQ(-1.5, binaryNav.rotationRateVesselFrame.get().xv1_degsec);
183  ASSERT_FLOAT_EQ(1.25, binaryNav.rotationRateVesselFrame.get().xv2_degsec);
184  ASSERT_FLOAT_EQ(12.55, binaryNav.rotationRateVesselFrame.get().xv3_degsec);
185 
186  // We also check that buffer was completly consumed by parser.
187  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
188 }
189 
190 TEST(MemoryBocksParser, ParseAccelerationVesselFrame)
191 {
192  // XV1 : -1.5f (0xbfc00000), XV2 : 1.25f( 0x3fa00000 ),
193  // XV3 : 12.55 (0x4148cccd)
194  // clang-format off
195  const std::vector<uint8_t> memory{
196  0xbf, 0xc0, 0x00, 0x00,
197  0x3f, 0xa0, 0x00, 0x00,
198  0x41, 0x48, 0xcc, 0xcd
199  };
200  // clang-format on
201  auto buffer = boost::asio::buffer(memory.data(), memory.size());
202 
204  Data::BinaryNav binaryNav;
205  parser.parse(buffer, binaryNav);
206 
207  ASSERT_TRUE(binaryNav.accelerationVesselFrame.is_initialized());
208  ASSERT_FLOAT_EQ(-1.5, binaryNav.accelerationVesselFrame.get().xv1_msec2);
209  ASSERT_FLOAT_EQ(1.25, binaryNav.accelerationVesselFrame.get().xv2_msec2);
210  ASSERT_FLOAT_EQ(12.55, binaryNav.accelerationVesselFrame.get().xv3_msec2);
211 
212  // We also check that buffer was completly consumed by parser.
213  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
214 }
215 
216 TEST(MemoryBocksParser, ParsePosition)
217 {
218  // latitude : 25.68d (0x4039ae147ae147ae), longitude : -4.75d (0xc013000000000000),
219  // altitude ref : 1 (0x01), altitude : 154.21f (0x431a35c3)
220  // clang-format off
221  const std::vector<uint8_t> memory{
222  0x40, 0x39, 0xae, 0x14,
223  0x7a, 0xe1, 0x47, 0xae,
224  0xc0, 0x13, 0x00, 0x00,
225  0x00, 0x00, 0x00, 0x00,
226  0x01,
227  0x43, 0x1a, 0x35, 0xc3
228  };
229  // clang-format on
230  auto buffer = boost::asio::buffer(memory.data(), memory.size());
231 
232  Parser::Position parser;
233  Data::BinaryNav binaryNav;
234  parser.parse(buffer, binaryNav);
235 
236  ASSERT_TRUE(binaryNav.position.is_initialized());
237  ASSERT_DOUBLE_EQ(25.68, binaryNav.position.get().latitude_deg);
238  ASSERT_DOUBLE_EQ(-4.75, binaryNav.position.get().longitude_deg);
239  ASSERT_EQ(1, binaryNav.position.get().altitude_ref);
240  ASSERT_FLOAT_EQ(154.21, binaryNav.position.get().altitude_m);
241 
242  // We also check that buffer was completly consumed by parser.
243  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
244 }
245 
246 TEST(MemoryBocksParser, ParsePositionDeviation)
247 {
248  // NorthSD : 1.25f( 0x3fa00000 ), EastSD : 12.55f (0x4148cccd), NEcorr : -1.5f
249  // (0xbfc00000), altSD : -0.005f(0xbba3d70a)
250  // clang-format off
251  const std::vector<uint8_t> memory{
252  0x3f, 0xa0, 0x00, 0x00,
253  0x41, 0x48, 0xcc, 0xcd,
254  0xbf, 0xc0, 0x00, 0x00,
255  0xbb, 0xa3, 0xd7, 0x0a
256  };
257  // clang-format on
258  auto buffer = boost::asio::buffer(memory.data(), memory.size());
259 
261  Data::BinaryNav binaryNav;
262  parser.parse(buffer, binaryNav);
263 
264  ASSERT_TRUE(binaryNav.positionDeviation.is_initialized());
265  ASSERT_FLOAT_EQ(1.25, binaryNav.positionDeviation.get().north_stddev_m);
266  ASSERT_FLOAT_EQ(12.55, binaryNav.positionDeviation.get().east_stddev_m);
267  ASSERT_FLOAT_EQ(-1.5, binaryNav.positionDeviation.get().north_east_corr);
268  ASSERT_FLOAT_EQ(-0.005, binaryNav.positionDeviation.get().altitude_stddev_m);
269 
270  // We also check that buffer was completly consumed by parser.
271  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
272 }
273 
274 TEST(MemoryBocksParser, ParseSpeedGeographicFrame)
275 {
276  // North : -1.5f (0xbfc00000), East : 1.25f( 0x3fa00000 ),
277  // Up : 12.55f (0x4148cccd)
278  // clang-format off
279  const std::vector<uint8_t> memory{
280  0xbf, 0xc0, 0x00, 0x00,
281  0x3f, 0xa0, 0x00, 0x00,
282  0x41, 0x48, 0xcc, 0xcd
283  };
284  // clang-format on
285  auto buffer = boost::asio::buffer(memory.data(), memory.size());
286 
288  Data::BinaryNav binaryNav;
289  parser.parse(buffer, binaryNav);
290 
291  ASSERT_TRUE(binaryNav.speedGeographicFrame.is_initialized());
292  ASSERT_FLOAT_EQ(-1.5, binaryNav.speedGeographicFrame.get().north_msec);
293  ASSERT_FLOAT_EQ(1.25, binaryNav.speedGeographicFrame.get().east_msec);
294  ASSERT_FLOAT_EQ(12.55, binaryNav.speedGeographicFrame.get().up_msec);
295 
296  // We also check that buffer was completly consumed by parser.
297  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
298 }
299 
300 TEST(MemoryBocksParser, ParseSpeedGeographicFrameDeviation)
301 {
302  // NorthSD : -1.5f (0xbfc00000), EastSD : 1.25f( 0x3fa00000 ),
303  // UpSD : 12.55f (0x4148cccd)
304  // clang-format off
305  const std::vector<uint8_t> memory{
306  0xbf, 0xc0, 0x00, 0x00,
307  0x3f, 0xa0, 0x00, 0x00,
308  0x41, 0x48, 0xcc, 0xcd
309  };
310  // clang-format on
311  auto buffer = boost::asio::buffer(memory.data(), memory.size());
312 
314  Data::BinaryNav binaryNav;
315  parser.parse(buffer, binaryNav);
316 
317  ASSERT_TRUE(binaryNav.speedGeographicFrameDeviation.is_initialized());
318  ASSERT_FLOAT_EQ(-1.5,
319  binaryNav.speedGeographicFrameDeviation.get().north_stddev_msec);
320  ASSERT_FLOAT_EQ(1.25, binaryNav.speedGeographicFrameDeviation.get().east_stddev_msec);
321  ASSERT_FLOAT_EQ(12.55, binaryNav.speedGeographicFrameDeviation.get().up_stddev_msec);
322 
323  // We also check that buffer was completly consumed by parser.
324  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
325 }
326 
327 TEST(MemoryBocksParser, ParseCurrentGeographicFrameDeviation)
328 {
329  // NorthSD : -1.5f (0xbfc00000), EastSD : 1.25f( 0x3fa00000 )
330  // clang-format off
331  const std::vector<uint8_t> memory{
332  0xbf, 0xc0, 0x00, 0x00,
333  0x3f, 0xa0, 0x00, 0x00
334  };
335  // clang-format on
336  auto buffer = boost::asio::buffer(memory.data(), memory.size());
337 
339  Data::BinaryNav binaryNav;
340  parser.parse(buffer, binaryNav);
341 
342  ASSERT_TRUE(binaryNav.currentGeographicFrameDeviation.is_initialized());
343  ASSERT_FLOAT_EQ(-1.5,
344  binaryNav.currentGeographicFrameDeviation.get().north_stddev_msec);
345  ASSERT_FLOAT_EQ(1.25,
346  binaryNav.currentGeographicFrameDeviation.get().east_stddev_msec);
347 
348  // We also check that buffer was completly consumed by parser.
349  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
350 }
351 
352 TEST(MemoryBocksParser, ParseSystemDate)
353 {
354  // Day : 28 (0x1c), Month : 8 (0x08), Year : 2020 (0x07e4)
355  // clang-format off
356  const std::vector<uint8_t> memory{
357  0x1c,
358  0x08,
359  0x07, 0xe4
360  };
361  // clang-format on
362  auto buffer = boost::asio::buffer(memory.data(), memory.size());
363 
364  Parser::SystemDate parser;
365  Data::BinaryNav binaryNav;
366  parser.parse(buffer, binaryNav);
367 
368  ASSERT_TRUE(binaryNav.systemDate.is_initialized());
369  ASSERT_EQ(28, binaryNav.systemDate.get().day);
370  ASSERT_EQ(8, binaryNav.systemDate.get().month);
371  ASSERT_EQ(2020, binaryNav.systemDate.get().year);
372 
373  // We also check that buffer was completly consumed by parser.
374  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
375 }
376 
377 TEST(MemoryBocksParser, ParseSensorStatus)
378 {
379  // Status 1 : 532 (0x00000214), Status 2 : 17 (0x00000011)
380  // clang-format off
381  const std::vector<uint8_t> memory{
382  0x00, 0x00, 0x02, 0x14,
383  0x00, 0x00, 0x00, 0x11
384  };
385  // clang-format on
386  auto buffer = boost::asio::buffer(memory.data(), memory.size());
387 
388  Parser::SensorStatus parser;
389  Data::BinaryNav binaryNav;
390  parser.parse(buffer, binaryNav);
391 
392  ASSERT_TRUE(binaryNav.sensorStatus.is_initialized());
393  ASSERT_EQ(532, binaryNav.sensorStatus.get().status1);
394  ASSERT_EQ(17, binaryNav.sensorStatus.get().status2);
395 
396  // We also check that buffer was completly consumed by parser.
397  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
398 }
399 
400 TEST(MemoryBocksParser, ParseINSAlgorithmStatus)
401 {
402  // Status 1 : 532 (0x00000214), Status 2 : 42 (0x0000002a)
403  // Status 3 : 47826 (0x0000bad2), Status 4 : 17 (0x00000011)
404  // clang-format off
405  const std::vector<uint8_t> memory{
406  0x00, 0x00, 0x02, 0x14,
407  0x00, 0x00, 0x00, 0x2a,
408  0x00, 0x00, 0xba, 0xd2,
409  0x00, 0x00, 0x00, 0x11
410  };
411  // clang-format on
412  auto buffer = boost::asio::buffer(memory.data(), memory.size());
413 
415  Data::BinaryNav binaryNav;
416  parser.parse(buffer, binaryNav);
417 
418  ASSERT_TRUE(binaryNav.insAlgorithmStatus.is_initialized());
419  ASSERT_EQ(532, binaryNav.insAlgorithmStatus.get().status1);
420  ASSERT_EQ(42, binaryNav.insAlgorithmStatus.get().status2);
421  ASSERT_EQ(47826, binaryNav.insAlgorithmStatus.get().status3);
422  ASSERT_EQ(17, binaryNav.insAlgorithmStatus.get().status4);
423 
424  // We also check that buffer was completly consumed by parser.
425  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
426 }
427 
428 TEST(MemoryBocksParser, ParseINSSystemStatus)
429 {
430  // Status 1 : 532 (0x00000214), Status 2 : 42 (0x0000002a)
431  // Status 3 : 47826 (0x0000bad2)
432  // clang-format off
433  const std::vector<uint8_t> memory{
434  0x00, 0x00, 0x02, 0x14,
435  0x00, 0x00, 0x00, 0x2a,
436  0x00, 0x00, 0xba, 0xd2
437  };
438  // clang-format on
439  auto buffer = boost::asio::buffer(memory.data(), memory.size());
440 
442  Data::BinaryNav binaryNav;
443  parser.parse(buffer, binaryNav);
444 
445  ASSERT_TRUE(binaryNav.insSystemStatus.is_initialized());
446  ASSERT_EQ(532, binaryNav.insSystemStatus.get().status1);
447  ASSERT_EQ(42, binaryNav.insSystemStatus.get().status2);
448  ASSERT_EQ(47826, binaryNav.insSystemStatus.get().status3);
449 
450  // We also check that buffer was completly consumed by parser.
451  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
452 }
453 
454 TEST(MemoryBocksParser, ParseINSUserStatus)
455 {
456  // Status : 532 (0x00000214)
457  // clang-format off
458  const std::vector<uint8_t> memory{
459  0x00, 0x00, 0x02, 0x14,
460  };
461  // clang-format on
462  auto buffer = boost::asio::buffer(memory.data(), memory.size());
463 
464  Parser::INSUserStatus parser;
465  Data::BinaryNav binaryNav;
466  parser.parse(buffer, binaryNav);
467 
468  ASSERT_TRUE(binaryNav.insUserStatus.is_initialized());
469  ASSERT_EQ(532, binaryNav.insUserStatus.get().status);
470 
471  // We also check that buffer was completly consumed by parser.
472  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
473 }
474 
475 TEST(MemoryBocksParser, ParseAHRSAlgorithmStatus)
476 {
477  // Status : 532 (0x00000214)
478  // clang-format off
479  const std::vector<uint8_t> memory{
480  0x00, 0x00, 0x02, 0x14
481  };
482  // clang-format on
483  auto buffer = boost::asio::buffer(memory.data(), memory.size());
484 
486  Data::BinaryNav binaryNav;
487  parser.parse(buffer, binaryNav);
488 
489  ASSERT_TRUE(binaryNav.ahrsAlgorithmStatus.is_initialized());
490  ASSERT_EQ(532, binaryNav.ahrsAlgorithmStatus.get().status);
491 
492  // We also check that buffer was completly consumed by parser.
493  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
494 }
495 
496 TEST(MemoryBocksParser, ParseAHRSSystemStatus)
497 {
498  // Status 1 : 532 (0x00000214), Status 2 : 42 (0x0000002a)
499  // Status 3 : 47826 (0x0000bad2)
500  // clang-format off
501  const std::vector<uint8_t> memory{
502  0x00, 0x00, 0x02, 0x14,
503  0x00, 0x00, 0x00, 0x2a,
504  0x00, 0x00, 0xba, 0xd2
505  };
506  // clang-format on
507  auto buffer = boost::asio::buffer(memory.data(), memory.size());
508 
510  Data::BinaryNav binaryNav;
511  parser.parse(buffer, binaryNav);
512 
513  ASSERT_TRUE(binaryNav.ahrsSystemStatus.is_initialized());
514  ASSERT_EQ(532, binaryNav.ahrsSystemStatus.get().status1);
515  ASSERT_EQ(42, binaryNav.ahrsSystemStatus.get().status2);
516  ASSERT_EQ(47826, binaryNav.ahrsSystemStatus.get().status3);
517 
518  // We also check that buffer was completly consumed by parser.
519  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
520 }
521 
522 TEST(MemoryBocksParser, ParseAHRSUserStatus)
523 {
524  // Status : 532 (0x00000214)
525  // clang-format off
526  const std::vector<uint8_t> memory{
527  0x00, 0x00, 0x02, 0x14
528  };
529  // clang-format on
530  auto buffer = boost::asio::buffer(memory.data(), memory.size());
531 
532  Parser::AHRSUserStatus parser;
533  Data::BinaryNav binaryNav;
534  parser.parse(buffer, binaryNav);
535 
536  ASSERT_TRUE(binaryNav.ahrsUserStatus.is_initialized());
537  ASSERT_EQ(532, binaryNav.ahrsUserStatus.get().status);
538 
539  // We also check that buffer was completly consumed by parser.
540  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
541 }
542 
543 TEST(MemoryBocksParser, ParseHeaveSurgeSwaySpeed)
544 {
545  // rtHeaveSpeed : -1.5f (0xbfc00000), SurgeSpeed : 1.25f( 0x3fa00000 ),
546  // SwaySpeed : 12.55f (0x4148cccd)
547  // clang-format off
548  const std::vector<uint8_t> memory{
549  0xbf, 0xc0, 0x00, 0x00,
550  0x3f, 0xa0, 0x00, 0x00,
551  0x41, 0x48, 0xcc, 0xcd
552  };
553  // clang-format on
554  auto buffer = boost::asio::buffer(memory.data(), memory.size());
555 
557  Data::BinaryNav binaryNav;
558  parser.parse(buffer, binaryNav);
559 
560  ASSERT_TRUE(binaryNav.heaveSurgeSwaySpeed.is_initialized());
561  ASSERT_FLOAT_EQ(-1.5, binaryNav.heaveSurgeSwaySpeed.get().realtime_heave_speed);
562  ASSERT_FLOAT_EQ(1.25, binaryNav.heaveSurgeSwaySpeed.get().surge_speed);
563  ASSERT_FLOAT_EQ(12.55, binaryNav.heaveSurgeSwaySpeed.get().sway_speed);
564 
565  // We also check that buffer was completly consumed by parser.
566  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
567 }
568 
569 TEST(MemoryBocksParser, ParseSpeedVesselFrame)
570 {
571  // xv1 : -1.5f (0xbfc00000), xv2 : 1.25f( 0x3fa00000 ), xv3 : 12.55f (0x4148cccd)
572  // clang-format off
573  const std::vector<uint8_t> memory{
574  0xbf, 0xc0, 0x00, 0x00,
575  0x3f, 0xa0, 0x00, 0x00,
576  0x41, 0x48, 0xcc, 0xcd
577  };
578  // clang-format on
579  auto buffer = boost::asio::buffer(memory.data(), memory.size());
580 
582  Data::BinaryNav binaryNav;
583  parser.parse(buffer, binaryNav);
584 
585  ASSERT_TRUE(binaryNav.speedVesselFrame.is_initialized());
586  ASSERT_FLOAT_EQ(-1.5, binaryNav.speedVesselFrame.get().xv1_msec);
587  ASSERT_FLOAT_EQ(1.25, binaryNav.speedVesselFrame.get().xv2_msec);
588  ASSERT_FLOAT_EQ(12.55, binaryNav.speedVesselFrame.get().xv3_msec);
589 
590  // We also check that buffer was completly consumed by parser.
591  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
592 }
593 
594 TEST(MemoryBocksParser, ParseAccelerationGeographicFrame)
595 {
596  // north : -1.5f (0xbfc00000), east : 1.25f( 0x3fa00000 ), up : 12.55f (0x4148cccd)
597  // clang-format off
598  const std::vector<uint8_t> memory{
599  0xbf, 0xc0, 0x00, 0x00,
600  0x3f, 0xa0, 0x00, 0x00,
601  0x41, 0x48, 0xcc, 0xcd
602  };
603  // clang-format on
604  auto buffer = boost::asio::buffer(memory.data(), memory.size());
605 
607  Data::BinaryNav binaryNav;
608  parser.parse(buffer, binaryNav);
609 
610  ASSERT_TRUE(binaryNav.accelerationGeographicFrame.is_initialized());
611  ASSERT_FLOAT_EQ(-1.5, binaryNav.accelerationGeographicFrame.get().north_msec2);
612  ASSERT_FLOAT_EQ(1.25, binaryNav.accelerationGeographicFrame.get().east_msec2);
613  ASSERT_FLOAT_EQ(12.55, binaryNav.accelerationGeographicFrame.get().up_msec2);
614 
615  // We also check that buffer was completly consumed by parser.
616  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
617 }
618 
619 TEST(MemoryBocksParser, ParseourseSpeedoverGrounde)
620 {
621  // course : -1.5f (0xbfc00000), speed : 1.25f( 0x3fa00000 )
622  // clang-format off
623  const std::vector<uint8_t> memory{
624  0xbf, 0xc0, 0x00, 0x00,
625  0x3f, 0xa0, 0x00, 0x00
626  };
627  // clang-format on
628  auto buffer = boost::asio::buffer(memory.data(), memory.size());
629 
631  Data::BinaryNav binaryNav;
632  parser.parse(buffer, binaryNav);
633 
634  ASSERT_TRUE(binaryNav.courseSpeedoverGround.is_initialized());
635  ASSERT_FLOAT_EQ(-1.5, binaryNav.courseSpeedoverGround.get().course_over_ground);
636  ASSERT_FLOAT_EQ(1.25, binaryNav.courseSpeedoverGround.get().speed_over_ground);
637 
638  // We also check that buffer was completly consumed by parser.
639  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
640 }
641 
642 TEST(MemoryBocksParser, ParseTemperatures)
643 {
644  // FOG : -1.5f (0xbfc00000), Acc : 1.25f( 0x3fa00000 ), Board : 12.55f (0x4148cccd)
645  // clang-format off
646  const std::vector<uint8_t> memory{
647  0xbf, 0xc0, 0x00, 0x00,
648  0x3f, 0xa0, 0x00, 0x00,
649  0x41, 0x48, 0xcc, 0xcd
650  };
651  // clang-format on
652  auto buffer = boost::asio::buffer(memory.data(), memory.size());
653 
654  Parser::Temperatures parser;
655  Data::BinaryNav binaryNav;
656  parser.parse(buffer, binaryNav);
657 
658  ASSERT_TRUE(binaryNav.temperatures.is_initialized());
659  ASSERT_FLOAT_EQ(-1.5, binaryNav.temperatures.get().mean_temp_fog);
660  ASSERT_FLOAT_EQ(1.25, binaryNav.temperatures.get().mean_temp_acc);
661  ASSERT_FLOAT_EQ(12.55, binaryNav.temperatures.get().board_temperature);
662 
663  // We also check that buffer was completly consumed by parser.
664  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
665 }
666 
667 TEST(MemoryBocksParser, ParseAttitudeQuaternion)
668 {
669  // Q0 : 1.25f ( 0x3fa00000 ), Q1 : 12.55f (0x4148cccd), Q2 : -1.5f (0xbfc00000), Q3 :
670  // -0.005f (0xbba3d70a)
671  // clang-format off
672  const std::vector<uint8_t> memory{
673  0x3f, 0xa0, 0x00, 0x00,
674  0x41, 0x48, 0xcc, 0xcd,
675  0xbf, 0xc0, 0x00, 0x00,
676  0xbb, 0xa3, 0xd7, 0x0a
677  };
678  // clang-format on
679  auto buffer = boost::asio::buffer(memory.data(), memory.size());
680 
682  Data::BinaryNav binaryNav;
683  parser.parse(buffer, binaryNav);
684 
685  ASSERT_TRUE(binaryNav.attitudeQuaternion.is_initialized());
686  ASSERT_FLOAT_EQ(1.25, binaryNav.attitudeQuaternion.get().q0);
687  ASSERT_FLOAT_EQ(12.55, binaryNav.attitudeQuaternion.get().q1);
688  ASSERT_FLOAT_EQ(-1.5, binaryNav.attitudeQuaternion.get().q2);
689  ASSERT_FLOAT_EQ(-0.005, binaryNav.attitudeQuaternion.get().q3);
690 
691  // We also check that buffer was completly consumed by parser.
692  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
693 }
694 
695 TEST(MemoryBocksParser, ParseAttitudeQuaternionDeviation)
696 {
697  // xi1 : -1.5f (0xbfc00000), xi2 : 1.25f( 0x3fa00000 ), xi3 : 12.55f (0x4148cccd)
698  // clang-format off
699  const std::vector<uint8_t> memory{
700  0xbf, 0xc0, 0x00, 0x00,
701  0x3f, 0xa0, 0x00, 0x00,
702  0x41, 0x48, 0xcc, 0xcd
703  };
704  // clang-format on
705  auto buffer = boost::asio::buffer(memory.data(), memory.size());
706 
708  Data::BinaryNav binaryNav;
709  parser.parse(buffer, binaryNav);
710 
711  ASSERT_TRUE(binaryNav.attitudeQuaternionDeviation.is_initialized());
712  ASSERT_FLOAT_EQ(-1.5, binaryNav.attitudeQuaternionDeviation.get().quat_stddev_xi1);
713  ASSERT_FLOAT_EQ(1.25, binaryNav.attitudeQuaternionDeviation.get().quat_stddev_xi2);
714  ASSERT_FLOAT_EQ(12.55, binaryNav.attitudeQuaternionDeviation.get().quat_stddev_xi3);
715 
716  // We also check that buffer was completly consumed by parser.
717  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
718 }
719 
720 TEST(MemoryBocksParser, ParseRawAccelerationVesselFrame)
721 {
722  // xv1 : -1.5f (0xbfc00000), xv2 : 1.25f( 0x3fa00000 ), xv3 : 12.55f (0x4148cccd)
723  // clang-format off
724  const std::vector<uint8_t> memory{
725  0xbf, 0xc0, 0x00, 0x00,
726  0x3f, 0xa0, 0x00, 0x00,
727  0x41, 0x48, 0xcc, 0xcd
728  };
729  // clang-format on
730  auto buffer = boost::asio::buffer(memory.data(), memory.size());
731 
733  Data::BinaryNav binaryNav;
734  parser.parse(buffer, binaryNav);
735 
736  ASSERT_TRUE(binaryNav.rawAccelerationVesselFrame.is_initialized());
737  ASSERT_FLOAT_EQ(-1.5, binaryNav.rawAccelerationVesselFrame.get().xv1_msec2);
738  ASSERT_FLOAT_EQ(1.25, binaryNav.rawAccelerationVesselFrame.get().xv2_msec2);
739  ASSERT_FLOAT_EQ(12.55, binaryNav.rawAccelerationVesselFrame.get().xv3_msec2);
740 
741  // We also check that buffer was completly consumed by parser.
742  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
743 }
744 
745 TEST(MemoryBocksParser, ParseAccelerationVesselFrameDeviation)
746 {
747  // xv1SD : -1.5f (0xbfc00000), xv2SD : 1.25f( 0x3fa00000 ), xv3SD : 12.55f
748  // (0x4148cccd)
749  // clang-format off
750  const std::vector<uint8_t> memory{
751  0xbf, 0xc0, 0x00, 0x00,
752  0x3f, 0xa0, 0x00, 0x00,
753  0x41, 0x48, 0xcc, 0xcd
754  };
755  // clang-format on
756  auto buffer = boost::asio::buffer(memory.data(), memory.size());
757 
759  Data::BinaryNav binaryNav;
760  parser.parse(buffer, binaryNav);
761 
762  ASSERT_TRUE(binaryNav.accelerationVesselFrameDeviation.is_initialized());
763  ASSERT_FLOAT_EQ(-1.5,
764  binaryNav.accelerationVesselFrameDeviation.get().xv1_stddev_msec2);
765  ASSERT_FLOAT_EQ(1.25,
766  binaryNav.accelerationVesselFrameDeviation.get().xv2_stddev_msec2);
767  ASSERT_FLOAT_EQ(12.55,
768  binaryNav.accelerationVesselFrameDeviation.get().xv3_stddev_msec2);
769 
770  // We also check that buffer was completly consumed by parser.
771  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
772 }
773 
774 TEST(MemoryBocksParser, ParseRotationRateVesselFrameDeviation)
775 {
776  // xv1SD : -1.5f (0xbfc00000), xv2SD : 1.25f( 0x3fa00000 ), xv3SD : 12.55f
777  // (0x4148cccd)
778  // clang-format off
779  const std::vector<uint8_t> memory{
780  0xbf, 0xc0, 0x00, 0x00,
781  0x3f, 0xa0, 0x00, 0x00,
782  0x41, 0x48, 0xcc, 0xcd
783  };
784  // clang-format on
785  auto buffer = boost::asio::buffer(memory.data(), memory.size());
786 
788  Data::BinaryNav binaryNav;
789  parser.parse(buffer, binaryNav);
790 
791  ASSERT_TRUE(binaryNav.rotationRateVesselFrameDeviation.is_initialized());
792  ASSERT_FLOAT_EQ(-1.5,
793  binaryNav.rotationRateVesselFrameDeviation.get().xv1_stddev_degsec);
794  ASSERT_FLOAT_EQ(1.25,
795  binaryNav.rotationRateVesselFrameDeviation.get().xv2_stddev_degsec);
796  ASSERT_FLOAT_EQ(12.55,
797  binaryNav.rotationRateVesselFrameDeviation.get().xv3_stddev_degsec);
798 
799  // We also check that buffer was completly consumed by parser.
800  ASSERT_EQ(0, boost::asio::buffer_size(buffer));
801 }
802 
803 int main(int argc, char** argv)
804 {
805  ::testing::InitGoogleTest(&argc, argv);
806  return RUN_ALL_TESTS();
807 }
boost::optional< CurrentGeographicFrameDeviation > currentGeographicFrameDeviation
Definition: stdbin.h:82
boost::optional< SpeedVesselFrame > speedVesselFrame
Definition: stdbin.h:92
boost::optional< AccelerationVesselFrameDeviation > accelerationVesselFrameDeviation
Definition: stdbin.h:99
boost::optional< SystemDate > systemDate
Definition: stdbin.h:83
boost::optional< INSSystemStatus > insSystemStatus
Definition: stdbin.h:86
boost::optional< AccelerationVesselFrame > accelerationVesselFrame
Definition: stdbin.h:76
boost::optional< INSAlgorithmStatus > insAlgorithmStatus
Definition: stdbin.h:85
boost::optional< RotationRateVesselFrame > rotationRateVesselFrame
Definition: stdbin.h:75
boost::optional< RawAccelerationVesselFrame > rawAccelerationVesselFrame
Definition: stdbin.h:98
boost::optional< Position > position
Definition: stdbin.h:77
boost::optional< HeaveSurgeSwaySpeed > heaveSurgeSwaySpeed
Definition: stdbin.h:91
boost::optional< Temperatures > temperatures
Definition: stdbin.h:95
boost::optional< PositionDeviation > positionDeviation
Definition: stdbin.h:78
boost::optional< AttitudeQuaternion > attitudeQuaternion
Definition: stdbin.h:96
boost::optional< SensorStatus > sensorStatus
Definition: stdbin.h:84
boost::optional< INSUserStatus > insUserStatus
Definition: stdbin.h:87
boost::optional< AHRSAlgorithmStatus > ahrsAlgorithmStatus
Definition: stdbin.h:88
boost::optional< AttitudeQuaternionDeviation > attitudeQuaternionDeviation
Definition: stdbin.h:97
boost::optional< CourseSpeedoverGround > courseSpeedoverGround
Definition: stdbin.h:94
boost::optional< SpeedGeographicFrame > speedGeographicFrame
Definition: stdbin.h:79
TEST(MemoryBocksParser, ParseAttitudeAndHeading)
boost::optional< RealTimeHeaveSurgeSway > rtHeaveSurgeSway
Definition: stdbin.h:72
boost::optional< AttitudeHeading > attitudeHeading
Definition: stdbin.h:70
int main(int argc, char **argv)
boost::optional< HeadingRollPitchRate > headingRollPitchRate
Definition: stdbin.h:74
boost::optional< AttitudeHeadingDeviation > attitudeHeadingDeviation
Definition: stdbin.h:71
boost::optional< AHRSUserStatus > ahrsUserStatus
Definition: stdbin.h:90
boost::optional< SpeedGeographicFrameDeviation > speedGeographicFrameDeviation
Definition: stdbin.h:80
boost::optional< RotationRateVesselFrameDeviation > rotationRateVesselFrameDeviation
Definition: stdbin.h:100
boost::optional< AHRSSystemStatus > ahrsSystemStatus
Definition: stdbin.h:89
boost::optional< AccelerationGeographicFrame > accelerationGeographicFrame
Definition: stdbin.h:93
boost::optional< SmartHeave > smartHeave
Definition: stdbin.h:73


ixblue_stdbin_decoder
Author(s): Adrien BARRAL , Laure LEBROTON
autogenerated on Sat Jan 9 2021 03:13:21