33 using namespace SGCTP;
40 const double CData::UNDEFINED_VALUE = NAN;
41 const double CData::OVERFLOW_VALUE = INFINITY;
43 string CData::stringSourceType(
int _iSourceType )
45 switch( _iSourceType )
47 case SOURCE_GPS:
return "GPS";
48 case SOURCE_AIS:
return "AIS";
49 case SOURCE_ADSB:
return "ADS-B";
50 case SOURCE_FLARM:
return "FLARM";
58 clock_gettime( CLOCK_REALTIME, &__tTimespec ) ;
59 return( (
double)__tTimespec.tv_sec
60 + (
double)__tTimespec.tv_nsec/1000000000.0 );
63 double CData::toEpoch(
double _fdTime,
64 double _fdEpochReference )
66 if( __isnanl( _fdTime ) )
return 0.0;
71 timespec __tTimespecNow;
72 if( _fdEpochReference == 0 )
74 clock_gettime( CLOCK_REALTIME, &__tTimespecNow ) ;
75 gmtime_r( &(__tTimespecNow.tv_sec), &__tTm );
79 time_t __ttTime = (time_t)_fdEpochReference;
80 gmtime_r( &__ttTime, &__tTm );
82 __tTm.tm_hour = 0; __tTm.tm_min = 0; __tTm.tm_sec = 0;
83 __fdEpoch = timegm( &__tTm ) + _fdTime;
86 if( _fdEpochReference == 0
88 && ( __tTimespecNow.tv_sec - (time_t)__fdEpoch ) >= 43000 )
95 void CData::toIso8601(
char *_pcIso8601,
double _fdEpoch )
98 double __fdSubseconds = modf( _fdEpoch, &__fdSeconds );
99 time_t __tTime = (int)__fdSeconds;
101 gmtime_r( &__tTime, &__tTM );
102 if( _fdEpoch >= 86400 )
104 sprintf( _pcIso8601+18,
"%.3fZ", __fdSubseconds );
105 strftime( _pcIso8601, 20,
"%Y-%m-%dT%H:%M:%S", &__tTM );
106 _pcIso8601[19] =
'.';
110 sprintf( _pcIso8601+7,
"%.3fZ", __fdSubseconds );
111 strftime( _pcIso8601, 9,
"%H:%M:%S", &__tTM );
116 double CData::fromIso8601(
const char *_pcIso8601 )
118 double __fdEpoch = 0.0;
123 memset( &__tTM, 0,
sizeof(
struct tm ) );
127 __pcReturn = strptime( _pcIso8601,
"%Y-%m-%dT%H:%M:%S", &__tTM );
128 if( __pcReturn != NULL )
break;
130 __pcReturn = strptime( _pcIso8601,
"%Y-%m-%d %H:%M:%S", &__tTM );
131 if( __pcReturn != NULL )
break;
133 __pcReturn = strptime( _pcIso8601,
"%Y-%m-%d", &__tTM );
134 if( __pcReturn != NULL )
break;
136 char __pcTimeOnly[20];
137 snprintf( __pcTimeOnly, 20,
"1970-01-01T%s", _pcIso8601 );
138 __pcReturn = strptime( __pcTimeOnly,
"%Y-%m-%dT%H:%M:%S", &__tTM );
139 if( __pcReturn != NULL )
break;
142 if( __pcReturn != NULL )
144 __fdEpoch = timegm( &__tTM );
145 if( *__pcReturn ==
'.' ) __fdEpoch += strtod( __pcReturn, NULL );
148 __fdEpoch = strtod( _pcIso8601, NULL );
175 void CData::reset(
bool _bDataFree )
180 ui32tTime = UNDEFINED_UINT32;
181 ui32tLongitude = UNDEFINED_UINT32;
182 ui32tLatitude = UNDEFINED_UINT32;
183 ui32tElevation = UNDEFINED_UINT32;
184 ui32tBearing = UNDEFINED_UINT32;
185 ui32tGndSpeed = UNDEFINED_UINT32;
186 ui32tVrtSpeed = UNDEFINED_UINT32;
187 ui32tBearingDt = UNDEFINED_UINT32;
188 ui32tGndSpeedDt = UNDEFINED_UINT32;
189 ui32tVrtSpeedDt = UNDEFINED_UINT32;
190 ui32tHeading = UNDEFINED_UINT32;
191 ui32tAppSpeed = UNDEFINED_UINT32;
192 ui32tSourceType = UNDEFINED_UINT32;
193 ui32tLatitudeError = UNDEFINED_UINT32;
194 ui32tLongitudeError = UNDEFINED_UINT32;
195 ui32tElevationError = UNDEFINED_UINT32;
196 ui32tBearingError = UNDEFINED_UINT32;
197 ui32tGndSpeedError = UNDEFINED_UINT32;
198 ui32tVrtSpeedError = UNDEFINED_UINT32;
199 ui32tBearingDtError = UNDEFINED_UINT32;
200 ui32tGndSpeedDtError = UNDEFINED_UINT32;
201 ui32tVrtSpeedDtError = UNDEFINED_UINT32;
202 ui32tHeadingError = UNDEFINED_UINT32;
203 ui32tAppSpeedError = UNDEFINED_UINT32;
206 void CData::setID(
const char *_pcID )
208 uint8_t __ui8tIDLength =
209 ( strlen( _pcID ) < 127 )
212 memcpy( pcID, _pcID, __ui8tIDLength );
213 pcID[__ui8tIDLength] =
'\0';
216 uint16_t CData::setData(
const unsigned char *_pucData,
217 uint16_t _ui16tDataSize )
219 allocData( _ui16tDataSize );
220 if( ui16tDataSize > 0 )
221 memcpy( pucData, _pucData, ui16tDataSize );
222 return ui16tDataSize;
225 void CData::setTime(
double _fdEpoch )
228 time_t __ttTime = (time_t)_fdEpoch;
229 gmtime_r( &__ttTime, &__tTm );
230 double __fd, __fdTime =
231 (double)( 3600*__tTm.tm_hour + 60*__tTm.tm_min + __tTm.tm_sec )
232 + modf( _fdEpoch, &__fd );
233 ui32tTime = (uint32_t)( __fdTime * 10.0 + 0.5 );
236 void CData::setLongitude(
double _fdLongitude )
238 if( _fdLongitude < -180.0 )
240 else if( _fdLongitude > 180.0 )
241 ui32tLongitude = OVERFLOW_UINT32;
243 ui32tLongitude = (uint32_t)( _fdLongitude * 3600000.0 + 1073741824.5 );
246 void CData::setElevation(
double _fdElevation )
248 if( _fdElevation < -13107.15 )
250 else if( _fdElevation > 39321.35 )
251 ui32tElevation = OVERFLOW_UINT32;
253 ui32tElevation = (uint32_t)( _fdElevation * 10.0 + 131072.5 );
256 void CData::setLatitude(
double _fdLatitude )
258 if( _fdLatitude < -90.0 )
260 else if( _fdLatitude > 90.0 )
261 ui32tLatitude = OVERFLOW_UINT32;
263 ui32tLatitude = (uint32_t)( _fdLatitude * 3600000.0 + 536870912.5 );
266 void CData::setBearing(
double _fdBearing )
268 if( _fdBearing < 0.0 )
269 ui32tBearing = OVERFLOW_UINT32;
270 else if( _fdBearing >= 360.0 )
271 ui32tBearing = OVERFLOW_UINT32;
273 ui32tBearing = (uint32_t)( _fdBearing * 10.0 + 0.5 );
276 void CData::setGndSpeed(
double _fdGndSpeed )
278 if( _fdGndSpeed < 0.0 )
280 else if( _fdGndSpeed > 6553.35 )
281 ui32tGndSpeed = OVERFLOW_UINT32;
283 ui32tGndSpeed = (uint32_t)( _fdGndSpeed * 10.0 + 1.5 );
286 void CData::setVrtSpeed(
double _fdVrtSpeed )
288 if( _fdVrtSpeed < -409.55 )
290 else if( _fdVrtSpeed > 409.35 )
291 ui32tVrtSpeed = OVERFLOW_UINT32;
293 ui32tVrtSpeed = (uint32_t)( _fdVrtSpeed * 10.0 + 4096.5 );
296 void CData::setBearingDt(
double _fdBearingDt )
298 if( _fdBearingDt < -51.15 )
300 else if( _fdBearingDt > 50.95 )
301 ui32tBearingDt = OVERFLOW_UINT32;
303 ui32tBearingDt = (uint32_t)( _fdBearingDt * 10.0 + 512.5 );
306 void CData::setGndSpeedDt(
double _fdGndSpeedDt )
308 if( _fdGndSpeedDt < -204.75 )
310 else if( _fdGndSpeedDt > 204.55 )
311 ui32tGndSpeedDt = OVERFLOW_UINT32;
313 ui32tGndSpeedDt = (uint32_t)( _fdGndSpeedDt * 10.0 + 2048.5 );
316 void CData::setVrtSpeedDt(
double _fdVrtSpeedDt )
318 if( _fdVrtSpeedDt < -204.75 )
320 else if( _fdVrtSpeedDt > 204.55 )
321 ui32tVrtSpeedDt = OVERFLOW_UINT32;
323 ui32tVrtSpeedDt = (uint32_t)( _fdVrtSpeedDt * 10.0 + 2048.5 );
326 void CData::setHeading(
double _fdHeading )
328 if( _fdHeading < 0.0 )
329 ui32tHeading = OVERFLOW_UINT32;
330 else if( _fdHeading > 360.0 )
331 ui32tHeading = OVERFLOW_UINT32;
333 ui32tHeading = (uint32_t)( _fdHeading * 10.0 + 0.5 );
336 void CData::setAppSpeed(
double _fdAppSpeed )
338 if( _fdAppSpeed < 0.0 )
340 else if( _fdAppSpeed > 6553.35 )
341 ui32tAppSpeed = OVERFLOW_UINT32;
343 ui32tAppSpeed = (uint32_t)( _fdAppSpeed * 10.0 + 1.5 );
346 void CData::setLatitudeError(
double _fdLatitudeError )
348 _fdLatitudeError = fabs( _fdLatitudeError );
349 if( _fdLatitudeError > 409.45 )
350 ui32tLatitudeError = OVERFLOW_UINT32;
352 ui32tLatitudeError = (uint32_t)( _fdLatitudeError * 10.0 + 0.5 );
355 void CData::setLongitudeError(
double _fdLongitudeError )
357 _fdLongitudeError = fabs( _fdLongitudeError );
358 if( _fdLongitudeError > 409.45 )
359 ui32tLongitudeError = OVERFLOW_UINT32;
361 ui32tLongitudeError = (uint32_t)( _fdLongitudeError * 10.0 + 0.5 );
364 void CData::setElevationError(
double _fdElevationError )
366 _fdElevationError = fabs( _fdElevationError );
367 if( _fdElevationError > 409.45 )
368 ui32tElevationError = OVERFLOW_UINT32;
370 ui32tElevationError = (uint32_t)( _fdElevationError * 10.0 + 0.5 );
373 void CData::setBearingError(
double _fdBearingError )
375 _fdBearingError = fabs( _fdBearingError );
376 if( _fdBearingError > 25.45 )
377 ui32tBearingError = OVERFLOW_UINT32;
379 ui32tBearingError = (uint32_t)( _fdBearingError * 10.0 + 0.5 );
382 void CData::setGndSpeedError(
double _fdGndSpeedError )
384 _fdGndSpeedError = fabs( _fdGndSpeedError );
385 if( _fdGndSpeedError > 25.45 )
386 ui32tGndSpeedError = OVERFLOW_UINT32;
388 ui32tGndSpeedError = (uint32_t)( _fdGndSpeedError * 10.0 + 0.5 );
391 void CData::setVrtSpeedError(
double _fdVrtSpeedError )
393 _fdVrtSpeedError = fabs( _fdVrtSpeedError );
394 if( _fdVrtSpeedError > 25.45 )
395 ui32tVrtSpeedError = OVERFLOW_UINT32;
397 ui32tVrtSpeedError = (uint32_t)( _fdVrtSpeedError * 10.0 + 0.5 );
400 void CData::setBearingDtError(
double _fdBearingDtError )
402 _fdBearingDtError = fabs( _fdBearingDtError );
403 if( _fdBearingDtError > 25.45 )
404 ui32tBearingDtError = OVERFLOW_UINT32;
406 ui32tBearingDtError = (uint32_t)( _fdBearingDtError * 10.0 + 0.5 );
409 void CData::setGndSpeedDtError(
double _fdGndSpeedDtError )
411 _fdGndSpeedDtError = fabs( _fdGndSpeedDtError );
412 if( _fdGndSpeedDtError > 25.45 )
413 ui32tGndSpeedDtError = OVERFLOW_UINT32;
415 ui32tGndSpeedDtError = (uint32_t)( _fdGndSpeedDtError * 10.0 + 0.5 );
418 void CData::setVrtSpeedDtError(
double _fdVrtSpeedDtError )
420 _fdVrtSpeedDtError = fabs( _fdVrtSpeedDtError );
421 if( _fdVrtSpeedDtError > 25.45 )
422 ui32tVrtSpeedDtError = OVERFLOW_UINT32;
424 ui32tVrtSpeedDtError = (uint32_t)( _fdVrtSpeedDtError * 10.0 + 0.5 );
427 void CData::setHeadingError(
double _fdHeadingError )
429 _fdHeadingError = fabs( _fdHeadingError );
430 if( _fdHeadingError > 25.45 )
431 ui32tHeadingError = OVERFLOW_UINT32;
433 ui32tHeadingError = (uint32_t)( _fdHeadingError * 10.0 + 0.5 );
436 void CData::setAppSpeedError(
double _fdAppSpeedError )
438 _fdAppSpeedError = fabs( _fdAppSpeedError );
439 if( _fdAppSpeedError > 25.45 )
440 ui32tAppSpeedError = OVERFLOW_UINT32;
442 ui32tAppSpeedError = (uint32_t)( _fdAppSpeedError * 10.0 + 0.5 );
450 void CData::getData(
unsigned char *_pucData,
451 uint16_t *_pui16tDataSize )
const
454 memcpy( _pucData, pucData, ui16tDataSize );
455 if( _pui16tDataSize )
456 *_pui16tDataSize = ui16tDataSize;
459 double CData::getTime()
const
461 if( ui32tTime & UNDEFINED_UINT32 )
462 return UNDEFINED_VALUE;
463 return (
double)ui32tTime * 0.1;
466 double CData::getLatitude()
const
468 if( ui32tLatitude & UNDEFINED_UINT32 )
469 return UNDEFINED_VALUE;
470 if( ui32tLatitude == 0 )
471 return -OVERFLOW_VALUE;
472 if( ui32tLatitude == OVERFLOW_UINT32 )
473 return OVERFLOW_VALUE;
474 return ( (
double)ui32tLatitude - 536870912.0 ) / 36.0 * 0.00001;
477 double CData::getLongitude()
const
479 if( ui32tLongitude & UNDEFINED_UINT32 )
480 return UNDEFINED_VALUE;
481 if( ui32tLongitude == 0 )
482 return -OVERFLOW_VALUE;
483 if( ui32tLongitude == OVERFLOW_UINT32 )
484 return OVERFLOW_VALUE;
485 return ( (
double)ui32tLongitude - 1073741824.0 ) / 36.0 * 0.00001;
488 double CData::getElevation()
const
490 if( ui32tElevation & UNDEFINED_UINT32 )
491 return UNDEFINED_VALUE;
492 if( ui32tElevation == 0 )
493 return -OVERFLOW_VALUE;
494 if( ui32tElevation == OVERFLOW_UINT32 )
495 return OVERFLOW_VALUE;
496 return ( (
double)ui32tElevation - 131072.0 ) * 0.1;
499 double CData::getBearing()
const
501 if( ui32tBearing & UNDEFINED_UINT32 )
502 return UNDEFINED_VALUE;
503 if( ui32tBearing == OVERFLOW_UINT32 )
504 return OVERFLOW_VALUE;
505 return (
double)ui32tBearing * 0.1;
508 double CData::getGndSpeed()
const
510 if( ui32tGndSpeed & UNDEFINED_UINT32 )
511 return UNDEFINED_VALUE;
512 if( ui32tGndSpeed == 0 )
513 return -OVERFLOW_VALUE;
514 if( ui32tGndSpeed == OVERFLOW_UINT32 )
515 return OVERFLOW_VALUE;
516 return ( (
double)ui32tGndSpeed - 1.0 ) * 0.1;
519 double CData::getVrtSpeed()
const
521 if( ui32tVrtSpeed & UNDEFINED_UINT32 )
522 return UNDEFINED_VALUE;
523 if( ui32tVrtSpeed == 0 )
524 return -OVERFLOW_VALUE;
525 if( ui32tVrtSpeed == OVERFLOW_UINT32 )
526 return OVERFLOW_VALUE;
527 return ( (
double)ui32tVrtSpeed - 4096.0 ) * 0.1;
530 double CData::getBearingDt()
const
532 if( ui32tBearingDt & UNDEFINED_UINT32 )
533 return UNDEFINED_VALUE;
534 if( ui32tBearingDt == 0 )
535 return -OVERFLOW_VALUE;
536 if( ui32tBearingDt == OVERFLOW_UINT32 )
537 return OVERFLOW_VALUE;
538 return ( (
double)ui32tBearingDt - 512.0 ) * 0.1;
541 double CData::getGndSpeedDt()
const
543 if( ui32tGndSpeedDt & UNDEFINED_UINT32 )
544 return UNDEFINED_VALUE;
545 if( ui32tGndSpeedDt == 0 )
546 return -OVERFLOW_VALUE;
547 if( ui32tGndSpeedDt == OVERFLOW_UINT32 )
548 return OVERFLOW_VALUE;
549 return ( (
double)ui32tGndSpeedDt - 2048.0 ) * 0.1;
552 double CData::getVrtSpeedDt()
const
554 if( ui32tVrtSpeedDt & UNDEFINED_UINT32 )
555 return UNDEFINED_VALUE;
556 if( ui32tVrtSpeedDt == 0 )
557 return -OVERFLOW_VALUE;
558 if( ui32tVrtSpeedDt == OVERFLOW_UINT32 )
559 return OVERFLOW_VALUE;
560 return ( (
double)ui32tVrtSpeedDt - 2048.0 ) * 0.1;
563 double CData::getHeading()
const
565 if( ui32tHeading & UNDEFINED_UINT32 )
566 return UNDEFINED_VALUE;
567 if( ui32tHeading == OVERFLOW_UINT32 )
568 return OVERFLOW_VALUE;
569 return (
double)ui32tHeading * 0.1;
572 double CData::getAppSpeed()
const
574 if( ui32tAppSpeed & UNDEFINED_UINT32 )
575 return UNDEFINED_VALUE;
576 if( ui32tAppSpeed == 0 )
577 return -OVERFLOW_VALUE;
578 if( ui32tAppSpeed == OVERFLOW_UINT32 )
579 return OVERFLOW_VALUE;
580 return ( (
double)ui32tAppSpeed - 1.0 ) * 0.1;
583 double CData::getLatitudeError()
const
585 if( ui32tLatitudeError & UNDEFINED_UINT32 )
586 return UNDEFINED_VALUE;
587 if( ui32tLatitudeError == OVERFLOW_UINT32 )
588 return OVERFLOW_VALUE;
589 return (
double)ui32tLatitudeError * 0.1;
592 double CData::getLongitudeError()
const
594 if( ui32tLongitudeError & UNDEFINED_UINT32 )
595 return UNDEFINED_VALUE;
596 if( ui32tLongitudeError == OVERFLOW_UINT32 )
597 return OVERFLOW_VALUE;
598 return (
double)ui32tLongitudeError * 0.1;
601 double CData::getElevationError()
const
603 if( ui32tElevationError & UNDEFINED_UINT32 )
604 return UNDEFINED_VALUE;
605 if( ui32tElevationError == OVERFLOW_UINT32 )
606 return OVERFLOW_VALUE;
607 return (
double)ui32tElevationError * 0.1;
610 double CData::getBearingError()
const
612 if( ui32tBearingError & UNDEFINED_UINT32 )
613 return UNDEFINED_VALUE;
614 if( ui32tBearingError == OVERFLOW_UINT32 )
615 return OVERFLOW_VALUE;
616 return (
double)ui32tBearingError * 0.1;
619 double CData::getGndSpeedError()
const
621 if( ui32tGndSpeedError & UNDEFINED_UINT32 )
622 return UNDEFINED_VALUE;
623 if( ui32tGndSpeedError == OVERFLOW_UINT32 )
624 return OVERFLOW_VALUE;
625 return (
double)ui32tGndSpeedError * 0.1;
628 double CData::getVrtSpeedError()
const
630 if( ui32tVrtSpeedError & UNDEFINED_UINT32 )
631 return UNDEFINED_VALUE;
632 if( ui32tVrtSpeedError == OVERFLOW_UINT32 )
633 return OVERFLOW_VALUE;
634 return (
double)ui32tVrtSpeedError * 0.1;
637 double CData::getBearingDtError()
const
639 if( ui32tBearingDtError & UNDEFINED_UINT32 )
640 return UNDEFINED_VALUE;
641 if( ui32tBearingDtError == OVERFLOW_UINT32 )
642 return OVERFLOW_VALUE;
643 return (
double)ui32tBearingDtError * 0.1;
646 double CData::getGndSpeedDtError()
const
648 if( ui32tGndSpeedDtError & UNDEFINED_UINT32 )
649 return UNDEFINED_VALUE;
650 if( ui32tGndSpeedDtError == OVERFLOW_UINT32 )
651 return OVERFLOW_VALUE;
652 return (
double)ui32tGndSpeedDtError * 0.1;
655 double CData::getVrtSpeedDtError()
const
657 if( ui32tVrtSpeedDtError & UNDEFINED_UINT32 )
658 return UNDEFINED_VALUE;
659 if( ui32tVrtSpeedDtError == OVERFLOW_UINT32 )
660 return OVERFLOW_VALUE;
661 return (
double)ui32tVrtSpeedDtError * 0.1;
664 double CData::getHeadingError()
const
666 if( ui32tHeadingError & UNDEFINED_UINT32 )
667 return UNDEFINED_VALUE;
668 if( ui32tHeadingError == OVERFLOW_UINT32 )
669 return OVERFLOW_VALUE;
670 return (
double)ui32tHeadingError * 0.1;
673 double CData::getAppSpeedError()
const
675 if( ui32tAppSpeedError & UNDEFINED_UINT32 )
676 return UNDEFINED_VALUE;
677 if( ui32tAppSpeedError == OVERFLOW_UINT32 )
678 return OVERFLOW_VALUE;
679 return (
double)ui32tAppSpeedError * 0.1;
687 uint16_t CData::allocData( uint16_t _ui16tDataSize )
689 int __ui16tDataSize =
690 ( _ui16tDataSize < 32767 )
693 if( __ui16tDataSize != ui16tDataSize )
696 (
unsigned char*)realloc( pucData,
697 __ui16tDataSize *
sizeof(
unsigned char ) );
703 return ui16tDataSize;
706 void CData::freeData()
714 void CData::copy(
const CData &_roData )
716 if( &_roData ==
this )
720 unsigned char *__pucData = this->pucData;
723 memcpy(
this, &_roData,
sizeof(
CData ) );
726 this->pucData = __pucData;
738 bool CData::sync(
const CData &_roData )
740 bool __bSynced =
false;
741 if( &_roData ==
this )
749 else if( this->ui16tDataSize > 0 )
754 if( !( _roData.
ui32tTime & UNDEFINED_UINT32 ) )
uint32_t ui32tHeadingError
Heading error.
uint32_t ui32tElevationError
Elevation error.
uint32_t ui32tSourceType
Source type.
uint32_t ui32tBearingError
Bearing error.
uint32_t ui32tVrtSpeed
Vertical speed.
uint32_t ui32tGndSpeed
Ground speed.
uint16_t ui16tDataSize
Data size.
uint32_t ui32tElevation
Elevation.
uint32_t ui32tLatitudeError
Latitude error.
uint32_t ui32tGndSpeedError
Ground speed error.
unsigned char * pucData
Data (max. 32767 symbols)
uint32_t ui32tBearingDtError
Bearing variation over time (rate of turn) error.
uint32_t ui32tLatitude
Latitude.
uint32_t ui32tHeading
Heading.
uint32_t ui32tLongitudeError
Longitude error.
uint32_t ui32tVrtSpeedDt
Vertical speed variation over time (acceleration)
uint32_t ui32tAppSpeedError
Apparent speed error.
uint32_t ui32tLongitude
Longitude.
uint32_t ui32tBearingDt
Bearing variation over time (rate of turn)
uint32_t ui32tBearing
Bearing.
uint32_t ui32tGndSpeedDt
Ground speed variation over time (acceleration)
uint32_t ui32tVrtSpeedError
Vertical speed error.
uint32_t ui32tGndSpeedDtError
Ground speed variation over time (acceleration) error.
uint32_t ui32tVrtSpeedDtError
Vertical speed variation over time (acceleration) error.
uint32_t ui32tAppSpeed
Apparent speed.