xsdatapacket.cpp
Go to the documentation of this file.
1 
2 // Copyright (c) 2003-2021 Xsens Technologies B.V. or subsidiaries worldwide.
3 // All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without modification,
6 // are permitted provided that the following conditions are met:
7 //
8 // 1. Redistributions of source code must retain the above copyright notice,
9 // this list of conditions, and the following disclaimer.
10 //
11 // 2. Redistributions in binary form must reproduce the above copyright notice,
12 // this list of conditions, and the following disclaimer in the documentation
13 // and/or other materials provided with the distribution.
14 //
15 // 3. Neither the names of the copyright holders nor the names of their contributors
16 // may be used to endorse or promote products derived from this software without
17 // specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
20 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
22 // THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 // SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
24 // OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR
26 // TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.THE LAWS OF THE NETHERLANDS
28 // SHALL BE EXCLUSIVELY APPLICABLE AND ANY DISPUTES SHALL BE FINALLY SETTLED UNDER THE RULES
29 // OF ARBITRATION OF THE INTERNATIONAL CHAMBER OF COMMERCE IN THE HAGUE BY ONE OR MORE
30 // ARBITRATORS APPOINTED IN ACCORDANCE WITH SAID RULES.
31 //
32 
33 
34 // Copyright (c) 2003-2021 Xsens Technologies B.V. or subsidiaries worldwide.
35 // All rights reserved.
36 //
37 // Redistribution and use in source and binary forms, with or without modification,
38 // are permitted provided that the following conditions are met:
39 //
40 // 1. Redistributions of source code must retain the above copyright notice,
41 // this list of conditions, and the following disclaimer.
42 //
43 // 2. Redistributions in binary form must reproduce the above copyright notice,
44 // this list of conditions, and the following disclaimer in the documentation
45 // and/or other materials provided with the distribution.
46 //
47 // 3. Neither the names of the copyright holders nor the names of their contributors
48 // may be used to endorse or promote products derived from this software without
49 // specific prior written permission.
50 //
51 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
52 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
53 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
54 // THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
55 // SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
56 // OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
57 // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR
58 // TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
59 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.THE LAWS OF THE NETHERLANDS
60 // SHALL BE EXCLUSIVELY APPLICABLE AND ANY DISPUTES SHALL BE FINALLY SETTLED UNDER THE RULES
61 // OF ARBITRATION OF THE INTERNATIONAL CHAMBER OF COMMERCE IN THE HAGUE BY ONE OR MORE
62 // ARBITRATORS APPOINTED IN ACCORDANCE WITH SAID RULES.
63 //
64 
65 #include "xsdatapacket.h"
66 #include "datapacket_p.h"
67 #include "xsmatrix3x3.h"
68 #include "xsvector.h"
69 #include "xsrssi.h"
70 #include "xsmath.h"
71 #include <string.h>
72 
73 #define MAP (*thisPtr->d)
74 
75 static const uint64_t coarseFactor = 10000ULL;
76 
77 using namespace XsDataPacket_Private;
78 
79 static void detach(XsDataPacket* thisPtr)
80 {
81  if (thisPtr->d->m_refCount == 1)
82  return;
83  DataPacketPrivate* old = thisPtr->d;
84  thisPtr->d = new DataPacketPrivate(*old);
85  if (--old->m_refCount == 0) // this can happen in some concurrent situations
86  delete old;
87 }
88 
90 {
91  // It may be faster to create a static map with construct functions instead of this switch, but this is a much simpler implementation
92  switch (id & XDI_FullTypeMask)
93  {
94  //XDI_TemperatureGroup = 0x0800,
95  case XDI_Temperature:
96  return new SimpleVariant<double>(id);
97  //case XDI_TimestampGroup :// 0x1000,
98  case XDI_UtcTime :// 0x1010,
99  return new XsTimeInfoVariant(id);
100  case XDI_PacketCounter :// 0x1020,
101  return new SimpleVariant<uint16_t>(id);
102  case XDI_Itow :// 0x1030,
103  return new SimpleVariant<uint32_t>(id);
104  case XDI_GnssAge :// 0x1040,
105  return new SimpleVariant<uint8_t>(id);
106  case XDI_PressureAge :// 0x1050,
107  return new SimpleVariant<uint8_t>(id);
108  case XDI_SampleTimeFine :// 0x1060,
109  case XDI_SampleTimeCoarse :// 0x1070,
110  return new SimpleVariant<uint32_t>(id);
111  case XDI_FrameRange :// 0x1080, // add for MTw (if needed)
112  return new XsRangeVariant(id);
113  case XDI_PacketCounter8 :// 0x1090,
114  return new SimpleVariant<uint8_t>(id);
115  case XDI_SampleTime64 :// 0x10A0,
116  return new SimpleVariant<uint64_t>(id);
117 
118  //case XDI_OrientationGroup :// 0x2000,
119  case XDI_Quaternion :// 0x2010,
120  return new XsQuaternionVariant(id);
121  case XDI_RotationMatrix :// 0x2020,
122  return new XsMatrixVariant(id);
123  case XDI_EulerAngles :// 0x2030,
124  return new XsEulerVariant(id);
125 
126  //case XDI_PressureGroup :// 0x3000,
127  case XDI_BaroPressure :// 0x3010,
128  return new SimpleVariant<uint32_t>(id);
129 
130  //case XDI_AccelerationGroup :// 0x4000,
131  case XDI_DeltaV :// 0x4010,
132  case XDI_Acceleration :// 0x4020,
133  case XDI_FreeAcceleration :// 0x4030,
134  case XDI_AccelerationHR :// 0x4040,
135  return new XsVector3Variant(id);
136 
137  //case XDI_PositionGroup :// 0x5000,
138  case XDI_AltitudeMsl :// 0x5010,
139  case XDI_AltitudeEllipsoid :// 0x5020,
140  return new SimpleVariant<double>(id);
141  case XDI_PositionEcef :// 0x5030,
142  return new XsVector3Variant(id);
143  case XDI_LatLon :// 0x5040,
144  return new XsVector2Variant(id);
145 
146  //case XDI_SnapshotGroup :// 0xC800,
147  //case XDI_RetransmissionMask :// 0x0001,
148  //case XDI_RetransmissionFlag :// 0x0001,
149  case XDI_AwindaSnapshot :// 0xC810,
150  return new XsAwindaSnapshotVariant(id);
151  case XDI_FullSnapshot :// 0xC820,
152  return new XsFullSnapshotVariant(id);
153 
154  //case XDI_GnssGroup :// 0x7000,
155  case XDI_GnssPvtData :// 0x7010,
156  return new XsRawGnssPvtDataVariant(id);
157  case XDI_GnssSatInfo :// 0x7020,
158  return new XsRawGnssSatInfoVariant(id);
159  case XDI_GnssPvtPulse :// 0x7030
160  return new SimpleVariant<uint32_t>(id);
161 
162  //case XDI_AngularVelocityGroup :// 0x8000,
163  case XDI_RateOfTurn :// 0x8020,
164  case XDI_RateOfTurnHR :// 0x8040,
165  return new XsVector3Variant(id);
166  case XDI_DeltaQ :// 0x8030,
167  return new XsQuaternionVariant(id);
168 
169  //case XDI_RawSensorGroup :// 0xA000,
170  //case XDI_RawUnsigned :// 0x0000, //!< Tracker produces unsigned raw values, usually fixed behavior
171  //case XDI_RawSigned :// 0x0001, //!< Tracker produces signed raw values, usually fixed behavior
172  case XDI_RawAccGyrMagTemp :// 0xA010,
173  return new XsScrDataVariant(id);
174 
175  case XDI_RawGyroTemp :// 0xA020,
176  case XDI_RawAcc :// 0xA030,
177  case XDI_RawGyr :// 0xA040,
178  case XDI_RawMag :// 0xA050,
179  return new XsUShortVectorVariant(id);
180 
181  case XDI_RawDeltaQ :// 0xA060,
182  return new XsQuaternionVariant(id);
183  case XDI_RawDeltaV :// 0xA070,
184  return new XsVector3Variant(id);
185 
186  //case XDI_AnalogInGroup :// 0xB000,
187  case XDI_AnalogIn1 :// 0xB010,
188  case XDI_AnalogIn2 :// 0xB020,
189  return new SimpleVariant<uint16_t>(id);
190 
191  //case XDI_MagneticGroup :// 0xC000,
192  case XDI_MagneticField :// 0xC020,
193  case XDI_MagneticFieldCorrected :// 0xC040,
194 
195  //case XDI_VelocityGroup :// 0xD000,
196  case XDI_VelocityXYZ :// 0xD010,
197  return new XsVector3Variant(id);
198 
199  //case XDI_StatusGroup :// 0xE000,
200  case XDI_StatusByte :// 0xE010,
201  return new SimpleVariant<uint8_t>(id);
202  case XDI_StatusWord :// 0xE020,
203  return new SimpleVariant<uint32_t>(id);
204  case XDI_Rssi :// 0xE040,
205  return new SimpleVariant<uint8_t>(id);
206  case XDI_DeviceId :// 0xE080,
207  return new SimpleVariant<uint32_t>(id);
208  case XDI_LocationId :// 0xE090
209  return new SimpleVariant<uint16_t>(id);
210 
211  //case XDI_IndicationGroup :// 0x4800, // 0100.1000 -> bit reverse = 0001.0010 -> type 18
212  case XDI_TriggerIn1 :// 0x4810,
213  case XDI_TriggerIn2 :// 0x4820,
214  return new XsTriggerIndicationDataVariant(id);
215 
216  case XDI_RawBlob :// 0xA080
217  return new XsByteArrayVariant(id);
218 
219  case XDI_GloveSnapshotLeft: // 0xC830
220  case XDI_GloveSnapshotRight: // 0xC840
221  return new XsGloveSnapshotVariant(id);
222 
223  case XDI_GloveDataLeft: // 0xC930
224  case XDI_GloveDataRight: // 0xC940
225  return new XsGloveDataVariant(id);
226 
227  default:
228  //JLERRORG("Unknown id: " << id);
229  assert(0);
230  return nullptr;
231  }
232 }
233 
235 {
236  assert(returnVal);
237  auto it = MAP.find(XDI_RawAccGyrMagTemp);
238  if (it != MAP.end())
239  *returnVal = it->second->toDerived<XsScrDataVariant>().m_data.*field;
240  else
241  {
242  it = MAP.find(id);
243  if (it != MAP.end())
244  *returnVal = it->second->toDerived<XsUShortVectorVariant>().m_data;
245  }
246  return returnVal;
247 }
248 
250 {
251  detach(thisPtr);
252  auto it = MAP.find(XDI_RawAccGyrMagTemp);
253  if (it != MAP.end())
254  it->second->toDerived<XsScrDataVariant>().m_data.*field = *vec;
255  else
256  {
257  it = MAP.find(id);
258  if (it != MAP.end())
259  it->second->toDerived<XsUShortVectorVariant>().m_data = *vec;
260  else
261  MAP.insert(id, new XsUShortVectorVariant(id, *vec));
262  }
263 }
264 
265 template <typename T, typename V>
266 T* genericGet(const XsDataPacket* thisPtr, T* returnVal, XsDataIdentifier id, T const& failValue = T())
267 {
268  assert(returnVal);
269  auto it = MAP.find(id);
270  if (it != MAP.end())
271  *returnVal = it->second->toDerived<V>().m_data;
272  else
273  *returnVal = failValue;
274  return returnVal;
275 }
276 
277 template <typename T, typename V>
278 void genericSet(XsDataPacket* thisPtr, T const* val, XsDataIdentifier id)
279 {
280  detach(thisPtr);
281  assert(val);
282  auto it = MAP.find(id);
283  if (it != MAP.end())
284  {
285  it->second->toDerived<V>().m_data = *val;
286  it->second->setDataId(id);
287  }
288  else
289  MAP.insert(id, new V(id, *val));
290 }
291 
292 template <typename T, typename V = SimpleVariant<T>>
294 {
295  static T get(const XsDataPacket* thisPtr, XsDataIdentifier id, T const& failValue = T())
296  {
297  auto it = MAP.find(id);
298  if (it != MAP.end())
299  return it->second->toDerived<V>().m_data;
300  return failValue;
301  }
302 
303  static void set(XsDataPacket* thisPtr, T val, XsDataIdentifier id)
304  {
305  detach(thisPtr);
306  auto it = MAP.find(id);
307  if (it != MAP.end())
308  it->second->toDerived<V>().m_data = val;
309  else
310  MAP.insert(id, new V(id, val));
311  }
312 };
313 
314 inline bool genericContains(const XsDataPacket* thisPtr, XsDataIdentifier id)
315 {
316  return MAP.find(id) != MAP.end();
317 }
318 
324 int XsDataPacket_containsOrientationQuaternion(const XsDataPacket* thisPtr)
325 {
326  return genericContains(thisPtr, XDI_Quaternion);
327 }
328 
333 int XsDataPacket_containsOrientationEuler(const XsDataPacket* thisPtr)
334 {
335  return genericContains(thisPtr, XDI_EulerAngles);
336 }
337 
342 int XsDataPacket_containsOrientationMatrix(const XsDataPacket* thisPtr)
343 {
344  return genericContains(thisPtr, XDI_RotationMatrix);
345 }
346 
350 XsQuaternion preRotFromXdi(XsDataIdentifier actual, XsDataIdentifier desired)
351 {
352  static const XsQuaternion q_id(1, 0, 0, 0); // x -> x
353  static const XsQuaternion q_nwu2ned(0, 1, 0, 0); // nwu -> ned = 180 degrees x
354  static const XsQuaternion q_enu2nwu(1.4142135623730950488016887242097 * 0.5, 0, 0, -1.4142135623730950488016887242097 * 0.5); // enu -> nwu = 90 degrees z
355  static const XsQuaternion q_enu2ned(0, -1.4142135623730950488016887242097 * 0.5, -1.4142135623730950488016887242097 * 0.5, 0); // enu -> ned = 90 degrees z followed by 180 degrees x
356 
357  static const XsQuaternion q_ned2nwu(0, -1, 0, 0);
358  static const XsQuaternion q_nwu2enu(1.4142135623730950488016887242097 * 0.5, 0, 0, 1.4142135623730950488016887242097 * 0.5);
359  static const XsQuaternion q_ned2enu(0, 1.4142135623730950488016887242097 * 0.5, 1.4142135623730950488016887242097 * 0.5, 0);
360 
361  switch (desired & XDI_CoordSysMask)
362  {
363  default:
364  case XDI_CoordSysEnu:
365  switch (actual & XDI_CoordSysMask)
366  {
367  default:
368  case XDI_CoordSysEnu:
369  return q_id;
370 
371  case XDI_CoordSysNed:
372  return q_ned2enu;
373 
374  case XDI_CoordSysNwu:
375  return q_nwu2enu;
376  }
377 
378  case XDI_CoordSysNed:
379  switch (actual & XDI_CoordSysMask)
380  {
381  default:
382  case XDI_CoordSysEnu:
383  return q_enu2ned;
384 
385  case XDI_CoordSysNed:
386  return q_id;
387 
388  case XDI_CoordSysNwu:
389  return q_nwu2ned;
390  }
391 
392  case XDI_CoordSysNwu:
393  switch (actual & XDI_CoordSysMask)
394  {
395  default:
396  case XDI_CoordSysEnu:
397  return q_enu2nwu;
398 
399  case XDI_CoordSysNed:
400  return q_ned2nwu;
401 
402  case XDI_CoordSysNwu:
403  return q_id;
404  }
405  }
406 }
407 
421 extern "C" {
422 
426  {
427  thisPtr->d = new DataPacketPrivate;
428  thisPtr->m_deviceId = 0;
429  thisPtr->m_toa = 0;
430  thisPtr->m_packetId = -1;
431  thisPtr->m_etos = 0;
432  }
433 
438  {
439  ++src->d->m_refCount;
440  thisPtr->d = src->d;
441  thisPtr->m_deviceId = src->m_deviceId;
442  thisPtr->m_toa = src->m_toa;
443  thisPtr->m_packetId = src->m_packetId;
444  thisPtr->m_etos = src->m_etos;
445  }
446 
450  {
451  if (thisPtr->d && --thisPtr->d->m_refCount == 0)
452  delete thisPtr->d;
453  thisPtr->d = nullptr;
454  }
455 
460  {
461  detach(thisPtr);
462  if (id == XDI_None)
463  {
464  XsDataPacket_destruct(thisPtr);
465  XsDataPacket_construct(thisPtr);
466  }
467  else
468  MAP.erase(id);
469  }
470 
476  {
477  if (copy->d != src->d)
478  {
479  ++src->d->m_refCount;
480  if (--copy->d->m_refCount == 0)
481  delete copy->d;
482  copy->d = src->d;
483  }
484  copy->m_deviceId = src->m_deviceId;
485  copy->m_toa = src->m_toa;
486  copy->m_packetId = src->m_packetId;
487  copy->m_etos = src->m_etos;
488  }
489 
494  {
495  using std::swap;
496  swap(thisPtr->d, other->d);
497  swap(thisPtr->m_deviceId, other->m_deviceId);
498  swap(thisPtr->m_toa, other->m_toa);
499  swap(thisPtr->m_packetId, other->m_packetId);
500  swap(thisPtr->m_etos, other->m_etos);
501  }
502 
506  int XsDataPacket_empty(const XsDataPacket* thisPtr)
507  {
508  return 0 != MAP.empty();
509  }
510 
515  {
516  assert(thisPtr);
517  return (int) MAP.size();
518  }
519 
529  {
530  auto it = MAP.find(id);
531  if (it == MAP.end())
532  return XDI_None;
533  return it->second->dataId() & XDI_SubFormatMask;
534  }
535 
537  static XsReal signed_cast(uint16_t v)
538  {
539  return (int16_t)v;
540  }
541 
543  static XsReal unsigned_cast(uint16_t v)
544  {
545  return v;
546  }
547 
555  {
556  return rawVector(thisPtr, returnVal, XDI_RawAcc, &XsScrData::m_acc);
557  }
558 
563  {
564  return MAP.find(XDI_RawAccGyrMagTemp) != MAP.end() ||
565  MAP.find(XDI_RawAcc) != MAP.end();
566  }
567 
576  {
577  setRawVector(thisPtr, vec, XDI_RawAcc, &XsScrData::m_acc);
578  }
579 
587  {
588  return rawVector(thisPtr, returnVal, XDI_RawGyr, &XsScrData::m_gyr);
589  }
590 
595  {
596  return genericContains(thisPtr, XDI_RawAccGyrMagTemp) || genericContains(thisPtr, XDI_RawGyr);
597  }
598 
603  {
604  setRawVector(thisPtr, vec, XDI_RawGyr, &XsScrData::m_gyr);
605  }
606 
614  {
615  return rawVector(thisPtr, returnVal, XDI_RawMag, &XsScrData::m_mag);
616  }
617 
622  {
623  return MAP.find(XDI_RawAccGyrMagTemp) != MAP.end() ||
624  MAP.find(XDI_RawMag) != MAP.end();
625  }
626 
631  {
632  setRawVector(thisPtr, vec, XDI_RawMag, &XsScrData::m_mag);
633  }
634 
639  uint16_t XsDataPacket_rawTemperature(const XsDataPacket* thisPtr)
640  {
641  auto it = MAP.find(XDI_RawAccGyrMagTemp);
642  if (it != MAP.end())
643  return it->second->toDerived<XsScrDataVariant>().m_data.m_temp;
644  else
645  return 0;
646  }
647 
652  {
653  return MAP.find(XDI_RawAccGyrMagTemp) != MAP.end();
654  }
655 
659  void XsDataPacket_setRawTemperature(XsDataPacket* thisPtr, uint16_t temp)
660  {
661  detach(thisPtr);
662  auto it = MAP.find(XDI_RawAccGyrMagTemp);
663  if (it != MAP.end())
664  it->second->toDerived<XsScrDataVariant>().m_data.m_temp = temp;
665  else
666  {
667  auto v = new XsScrDataVariant(XDI_RawAccGyrMagTemp);
668  v->m_data.m_temp = temp;
669  MAP.insert(XDI_RawAccGyrMagTemp, v);
670  }
671  }
672 
680  {
681  assert(returnVal);
682  auto it = MAP.find(XDI_RawGyroTemp);
683  if (it != MAP.end())
684  *returnVal = it->second->toDerived<XsUShortVectorVariant>().m_data;
685  return returnVal;
686  }
687 
692  {
693  return MAP.find(XDI_RawGyroTemp) != MAP.end();
694  }
695 
700  {
701  detach(thisPtr);
702  auto it = MAP.find(XDI_RawGyroTemp);
703  if (it != MAP.end())
704  it->second->toDerived<XsUShortVectorVariant>().m_data = *vec;
705  else
706  {
707  auto v = new XsUShortVectorVariant(XDI_RawGyroTemp);
708  v->m_data = *vec;
709  MAP.insert(XDI_RawGyroTemp, v);
710  }
711  }
712 
718  {
719  assert(returnVal);
720  auto it = MAP.find(XDI_RawAccGyrMagTemp);
721  if (it != MAP.end())
722  *returnVal = it->second->toDerived<XsScrDataVariant>().m_data;
723  else
724  {
725  for (XsSize i = 0; i < 3; ++i)
726  {
727  returnVal->m_acc[i] = 0;
728  returnVal->m_gyr[i] = 0;
729  returnVal->m_mag[i] = 0;
730  }
731  returnVal->m_temp = 0;
732  }
733  return returnVal; // not found
734  }
735 
740  {
741  return genericContains(thisPtr, XDI_RawAccGyrMagTemp);
742  }
743 
747  void XsDataPacket_setRawData(XsDataPacket* thisPtr, const XsScrData* data)
748  {
749  detach(thisPtr);
750  auto it = MAP.find(XDI_RawAccGyrMagTemp);
751  if (it != MAP.end())
752  it->second->toDerived<XsScrDataVariant>().m_data = *data;
753  else
754  {
755  auto v = new XsScrDataVariant(XDI_RawAccGyrMagTemp);
756  v->m_data = *data;
757  MAP.insert(XDI_RawAccGyrMagTemp, v);
758  }
759  }
760 
766  {
767  return genericGet<XsVector, XsVector3Variant>(thisPtr, returnVal, XDI_DeltaV);
768  }
769 
774  {
775  return genericContains(thisPtr, XDI_DeltaV);
776  }
777 
782  {
783  genericSet<XsVector, XsVector3Variant>(thisPtr, vec, XDI_DeltaV | XDI_SubFormatDouble);
784  }
785 
793  {
794  return genericGet<XsVector, XsVector3Variant>(thisPtr, returnVal, XDI_Acceleration);
795  }
796 
801  {
802  return genericContains(thisPtr, XDI_Acceleration);
803  }
804 
809  {
810  genericSet<XsVector, XsVector3Variant>(thisPtr, vec, XDI_Acceleration | XDI_SubFormatDouble);
811  }
812 
813 
819  {
820  return genericGet<XsQuaternion, XsQuaternionVariant>(thisPtr, returnVal, XDI_DeltaQ);
821  }
822 
827  {
828  return genericContains(thisPtr, XDI_DeltaQ);
829  }
830 
835  {
836  genericSet<XsQuaternion, XsQuaternionVariant>(thisPtr, quat, XDI_DeltaQ | XDI_SubFormatDouble);
837  }
838 
846  {
847  return genericGet<XsVector, XsVector3Variant>(thisPtr, returnVal, XDI_RateOfTurn);
848  }
849 
854  {
855  return genericContains(thisPtr, XDI_RateOfTurn);
856  }
857 
862  {
863  genericSet<XsVector, XsVector3Variant>(thisPtr, vec, XDI_RateOfTurn | XDI_SubFormatDouble);
864  }
865 
873  {
874  return genericGet<XsVector, XsVector3Variant>(thisPtr, returnVal, XDI_MagneticField);
875  }
876 
881  {
882  return genericContains(thisPtr, XDI_MagneticField);
883  }
884 
889  {
890  genericSet<XsVector, XsVector3Variant>(thisPtr, vec, XDI_MagneticField | XDI_SubFormatDouble);
891  }
892 
898  {
899  assert(returnVal);
900 
901  XsDataPacket_calibratedAcceleration(thisPtr, &returnVal->m_acc);
902  XsDataPacket_calibratedGyroscopeData(thisPtr, &returnVal->m_gyr);
903  XsDataPacket_calibratedMagneticField(thisPtr, &returnVal->m_mag);
904 
905  return returnVal;
906  }
907 
913  {
914  // Note: calibrated data is only present if *all* components are present
915  return genericContains(thisPtr, XDI_Acceleration) &&
916  genericContains(thisPtr, XDI_RateOfTurn) &&
918  }
919 
924  {
928  }
929 
937  {
938  return genericGet<XsVector, XsVector3Variant>(thisPtr, returnVal, XDI_MagneticFieldCorrected);
939  }
940 
945  {
947  }
948 
953  {
954  genericSet<XsVector, XsVector3Variant>(thisPtr, vec, XDI_MagneticFieldCorrected | XDI_SubFormatDouble);
955  }
956 
966  {
967  assert(returnVal);
968  auto it = MAP.find(XDI_Quaternion);
969  if (it != MAP.end())
970  {
971  *returnVal = it->second->toDerived<XsQuaternionVariant>().m_data;
972  XsDataIdentifier foundId = it->second->dataId();
973  if ((coordinateSystem & XDI_CoordSysMask) != (foundId & XDI_CoordSysMask))
974  {
975  XsQuaternion rot;
976  rot = preRotFromXdi(foundId, coordinateSystem);
977  XsQuaternion_multiply(&rot, returnVal, returnVal);
978  }
979  }
980  else if (XsDataPacket_containsOrientationMatrix(thisPtr))
981  {
982  XsMatrix3x3 m;
983  XsDataPacket_orientationMatrix(thisPtr, &m, coordinateSystem);
984  returnVal->fromRotationMatrix(m);
985  }
986  else if (XsDataPacket_containsOrientationEuler(thisPtr))
987  {
988  XsEuler eul;
989  XsDataPacket_orientationEuler(thisPtr, &eul, coordinateSystem);
990  returnVal->fromEulerAngles(eul);
991  }
992  //else
993  // memset(returnVal->m_data, 0, 4*sizeof(XsReal));
994 
995  return returnVal;
996  }
997 
999  static void removeAllOrientations(XsDataPacket* thisPtr)
1000  {
1001  detach(thisPtr);
1002  MAP.erase(XDI_Quaternion);
1003  MAP.erase(XDI_RotationMatrix);
1004  MAP.erase(XDI_EulerAngles);
1005  }
1006 
1012  {
1013  // always create a new one
1014  removeAllOrientations(thisPtr);
1015  MAP.insert(XDI_Quaternion, new XsQuaternionVariant(XDI_Quaternion | XDI_SubFormatDouble | (coordinateSystem & XDI_CoordSysMask), *data));
1016  }
1017 
1026  XsEuler* XsDataPacket_orientationEuler(const XsDataPacket* thisPtr, XsEuler* returnVal, XsDataIdentifier coordinateSystem)
1027  {
1028  assert(returnVal);
1029  auto it = MAP.find(XDI_EulerAngles);
1030  if (it != MAP.end())
1031  {
1032  *returnVal = it->second->toDerived<XsEulerVariant>().m_data;
1033  XsDataIdentifier foundId = it->second->dataId();
1034  if ((coordinateSystem & XDI_CoordSysMask) != (foundId & XDI_CoordSysMask))
1035  {
1036  XsQuaternion rot, q;
1037  rot = preRotFromXdi(foundId, coordinateSystem);
1038  XsQuaternion_fromEulerAngles(&q, returnVal);
1039  XsQuaternion_multiply(&rot, &q, &q);
1040  XsEuler_fromQuaternion(returnVal, &q);
1041  }
1042  }
1043  else if (XsDataPacket_containsOrientationMatrix(thisPtr))
1044  {
1045  XsMatrix3x3 m;
1046  XsDataPacket_orientationMatrix(thisPtr, &m, coordinateSystem);
1047  XsQuaternion q;
1048  q.fromRotationMatrix(m);
1049  returnVal->fromQuaternion(q);
1050  }
1051  else if (XsDataPacket_containsOrientationQuaternion(thisPtr))
1052  {
1053  XsQuaternion q;
1054  XsDataPacket_orientationQuaternion(thisPtr, &q, coordinateSystem);
1055  returnVal->fromQuaternion(q);
1056  }
1057  //else
1058  //{
1059  // returnVal->m_x = XsMath_zero;
1060  // returnVal->m_y = XsMath_zero;
1061  // returnVal->m_z = XsMath_zero;
1062  //}
1063 
1064  return returnVal;
1065  }
1066 
1071  void XsDataPacket_setOrientationEuler(XsDataPacket* thisPtr, const XsEuler* data, XsDataIdentifier coordinateSystem)
1072  {
1073  // always create a new one
1074  removeAllOrientations(thisPtr);
1075  MAP.insert(XDI_EulerAngles, new XsEulerVariant(XDI_EulerAngles | XDI_SubFormatDouble | (coordinateSystem & XDI_CoordSysMask), *data));
1076  }
1077 
1086  XsMatrix* XsDataPacket_orientationMatrix(const XsDataPacket* thisPtr, XsMatrix* returnVal, XsDataIdentifier coordinateSystem)
1087  {
1088  assert(returnVal);
1089  auto it = MAP.find(XDI_RotationMatrix);
1090  if (it != MAP.end())
1091  {
1092  *returnVal = it->second->toDerived<XsMatrixVariant>().m_data;
1093  XsDataIdentifier foundId = it->second->dataId();
1094  if ((coordinateSystem & XDI_CoordSysMask) != (foundId & XDI_CoordSysMask))
1095  {
1096  XsQuaternion rot, q;
1097  rot = preRotFromXdi(foundId, coordinateSystem);
1098  XsQuaternion_fromRotationMatrix(&q, returnVal);
1099  XsQuaternion_multiply(&rot, &q, &q);
1100  XsMatrix_fromQuaternion(returnVal, &q);
1101  }
1102  }
1103  else if (XsDataPacket_containsOrientationQuaternion(thisPtr))
1104  {
1105  XsQuaternion q;
1106  XsDataPacket_orientationQuaternion(thisPtr, &q, coordinateSystem);
1107  returnVal->fromQuaternion(q);
1108  }
1109  else if (XsDataPacket_containsOrientationEuler(thisPtr))
1110  {
1111  XsEuler eul;
1112  XsDataPacket_orientationEuler(thisPtr, &eul, coordinateSystem);
1113  XsQuaternion q;
1114  q.fromEulerAngles(eul);
1115  returnVal->fromQuaternion(q);
1116  }
1117  //else
1118  // memset(returnVal->m_data, 0, 4*sizeof(XsReal));
1119 
1120  return returnVal;
1121  }
1122 
1127  void XsDataPacket_setOrientationMatrix(XsDataPacket* thisPtr, const XsMatrix* data, XsDataIdentifier coordinateSystem)
1128  {
1129  // always create a new one
1130  removeAllOrientations(thisPtr);
1131  MAP.insert(XDI_RotationMatrix, new XsMatrixVariant(XDI_RotationMatrix | XDI_SubFormatDouble | (coordinateSystem & XDI_CoordSysMask), *data));
1132  }
1133 
1138  {
1139  return genericContains(thisPtr, XDI_Quaternion) ||
1140  genericContains(thisPtr, XDI_EulerAngles) ||
1142  }
1143 
1148  {
1149  auto it = MAP.find(XDI_Quaternion);
1150  if (it != MAP.end())
1151  return it->second->dataId();
1152 
1153  it = MAP.find(XDI_EulerAngles);
1154  if (it != MAP.end())
1155  return it->second->dataId();
1156 
1157  it = MAP.find(XDI_RotationMatrix);
1158  if (it != MAP.end())
1159  return it->second->dataId();
1160 
1161  return XDI_None;
1162  }
1163 
1168  {
1170  }
1171 
1176  {
1177  return genericContains(thisPtr, XDI_BaroPressure);
1178  }
1179 
1184  {
1185  return genericContains(thisPtr, XDI_PressureAge);
1186  }
1187 
1195  {
1196  assert(returnVal);
1197  auto it = MAP.find(XDI_BaroPressure);
1198  if (it != MAP.end())
1199  {
1200  returnVal->m_pressure = it->second->toDerived<SimpleVariant<uint32_t>>().m_data;
1201  returnVal->m_pressureAge = 0;
1202  }
1203 
1204  it = MAP.find(XDI_PressureAge);
1205  if (it != MAP.end())
1206  returnVal->m_pressureAge = it->second->toDerived<SimpleVariant<uint8_t>>().m_data;
1207 
1208  return returnVal;
1209  }
1210 
1215  {
1216  GenericSimple<uint32_t>::set(thisPtr, (uint32_t) XsMath::doubleToLong(data->m_pressure), XDI_BaroPressure);
1217  GenericSimple<uint8_t>::set(thisPtr, data->m_pressureAge, XDI_PressureAge);
1218  }
1219 
1225  {
1226  assert(returnVal);
1227  auto it = MAP.find(XDI_DeltaQ);
1228  if (it != MAP.end())
1229  returnVal->setOrientationIncrement(it->second->toDerived<XsQuaternionVariant>().m_data);
1230 
1231  it = MAP.find(XDI_DeltaV);
1232  if (it != MAP.end())
1233  returnVal->setVelocityIncrement(it->second->toDerived<XsVector3Variant>().m_data);
1234 
1235  return returnVal;
1236  }
1237 
1242  {
1243  return genericContains(thisPtr, XDI_DeltaQ) &&
1244  genericContains(thisPtr, XDI_DeltaV);
1245  }
1246 
1250  void XsDataPacket_setSdiData(XsDataPacket* thisPtr, const XsSdiData* data)
1251  {
1252  genericSet<XsQuaternion, XsQuaternionVariant>(thisPtr, &data->orientationIncrement(), XDI_DeltaQ | XDI_SubFormatDouble);
1253  genericSet<XsVector3, XsVector3Variant>(thisPtr, &data->velocityIncrement(), XDI_DeltaV | XDI_SubFormatDouble);
1254  }
1255 
1262  {
1263  switch (hand)
1264  {
1265  case XHI_LeftHand:
1266  return genericGet<XsGloveData, XsGloveDataVariant>(thisPtr, returnVal, XDI_GloveDataLeft);
1267  case XHI_RightHand:
1268  return genericGet<XsGloveData, XsGloveDataVariant>(thisPtr, returnVal, XDI_GloveDataRight);
1269  case XHI_Unknown:
1270  default:
1271  XsGloveData_destruct(returnVal);
1272  return returnVal;
1273  }
1274  }
1275 
1281  {
1282  switch (hand)
1283  {
1284  case XHI_LeftHand:
1285  return genericContains(thisPtr, XDI_GloveDataLeft);
1286  case XHI_RightHand:
1287  return genericContains(thisPtr, XDI_GloveDataRight);
1288  case XHI_Unknown:
1290  default:
1291  return false;
1292  }
1293  }
1294 
1300  {
1301  switch (hand)
1302  {
1303  case XHI_LeftHand:
1304  genericSet<XsGloveData, XsGloveDataVariant>(thisPtr, data, XDI_GloveDataLeft);
1305  break;
1306  case XHI_RightHand:
1307  genericSet<XsGloveData, XsGloveDataVariant>(thisPtr, data, XDI_GloveDataRight);
1308  break;
1309  case XHI_Unknown:
1310  default:
1311  break;
1312  }
1313  }
1314 
1322  {
1323  return genericGet<XsDeviceId, SimpleVariant<uint32_t>>(thisPtr, returnVal, XDI_DeviceId);
1324  }
1325 
1330  {
1331  return genericContains(thisPtr, XDI_DeviceId);
1332  }
1333 
1338  {
1339  GenericSimple<uint32_t>::set(thisPtr, data->legacyDeviceId(), XDI_DeviceId);
1340  }
1341 
1347  {
1349  }
1350 
1355  {
1356  return genericContains(thisPtr, XDI_LocationId);
1357  }
1358 
1362  void XsDataPacket_setStoredLocationId(XsDataPacket* thisPtr, uint16_t data)
1363  {
1365  }
1366 
1371  {
1373  }
1374 
1379  {
1380  return genericContains(thisPtr, XDI_Temperature);
1381  }
1382 
1388  void XsDataPacket_setTemperature(XsDataPacket* thisPtr, double temperature)
1389  {
1391  }
1392 
1398  {
1399  return genericGet<XsAnalogInData, SimpleVariant<uint16_t>>(thisPtr, returnVal, XDI_AnalogIn1);
1400  }
1401 
1406  {
1407  return genericContains(thisPtr, XDI_AnalogIn1);
1408  }
1409 
1415  {
1416  GenericSimple<uint16_t>::set(thisPtr, data->m_data, XDI_AnalogIn1);
1417  }
1418 
1424  {
1425  return genericGet<XsAnalogInData, SimpleVariant<uint16_t>>(thisPtr, returnVal, XDI_AnalogIn2);
1426  }
1427 
1432  {
1433  return genericContains(thisPtr, XDI_AnalogIn2);
1434  }
1435 
1441  {
1442  GenericSimple<uint16_t>::set(thisPtr, data->m_data, XDI_AnalogIn2);
1443  }
1444 
1452  {
1453  assert(returnVal);
1454  returnVal->setSize(3);
1455 
1456  XsVector latlon(2);
1457  genericGet<XsVector, XsVector2Variant>(thisPtr, &latlon, XDI_LatLon);
1458  if (!latlon.empty())
1459  {
1460  (*returnVal)[0] = latlon[0];
1461  (*returnVal)[1] = latlon[1];
1462  }
1463  else
1464  {
1465  (*returnVal)[0] = 0;
1466  (*returnVal)[1] = 0;
1467  }
1468  // This triggers a warning when XsReal is float, which is deliberately not silenced
1469  (*returnVal)[2] = GenericSimple<double>::get(thisPtr, XDI_AltitudeEllipsoid);
1470 
1471  return returnVal;
1472  }
1473 
1478  {
1479  return genericContains(thisPtr, XDI_LatLon) &&
1481  }
1482 
1488  {
1489  XsVector latlon(2);
1490  latlon[0] = (*data)[0];
1491  latlon[1] = (*data)[1];
1492 
1493  genericSet<XsVector, XsVector2Variant>(thisPtr, &latlon, XDI_LatLon | XDI_SubFormatDouble);
1495  }
1496 
1506  {
1507  return genericGet<XsVector, XsVector2Variant>(thisPtr, returnVal, XDI_LatLon);
1508  }
1509 
1515  {
1516  return genericContains(thisPtr, XDI_LatLon);
1517  }
1518 
1525  {
1526  genericSet<XsVector, XsVector2Variant>(thisPtr, data, XDI_LatLon | XDI_SubFormatDouble);
1527  }
1528 
1535  double XsDataPacket_altitude(const XsDataPacket* thisPtr)
1536  {
1538  }
1539 
1545  {
1546  return genericContains(thisPtr, XDI_AltitudeEllipsoid);
1547  }
1548 
1553  void XsDataPacket_setAltitude(XsDataPacket* thisPtr, double data)
1554  {
1556  }
1557 
1564  {
1566  }
1567 
1573  {
1574  return genericContains(thisPtr, XDI_AltitudeMsl);
1575  }
1576 
1581  void XsDataPacket_setAltitudeMsl(XsDataPacket* thisPtr, double data)
1582  {
1584  }
1585 
1593  XsVector* XsDataPacket_velocity(const XsDataPacket* thisPtr, XsVector* returnVal, XsDataIdentifier coordinateSystem)
1594  {
1595  assert(returnVal);
1596  auto it = MAP.find(XDI_VelocityXYZ);
1597  if (it != MAP.end())
1598  {
1599  *returnVal = it->second->toDerived<XsVector3Variant>().m_data;
1600  XsDataIdentifier actualCsys = (it->second->dataId() & XDI_CoordSysMask);
1601  XsDataIdentifier desiredCsys = (coordinateSystem & XDI_CoordSysMask);
1602  if (actualCsys != desiredCsys)
1603  {
1604  XsVector3 vel(*returnVal);
1605  XsVector& rv = *returnVal;
1606 
1607  switch (desiredCsys)
1608  {
1609  case XDI_CoordSysEnu:
1610  {
1611  if (actualCsys == XDI_CoordSysNwu)
1612  {
1613  rv[0] = -vel[1];
1614  rv[1] = vel[0];
1615  rv[2] = vel[2];
1616  }
1617  else if (actualCsys == XDI_CoordSysNed)
1618  {
1619  rv[0] = vel[1];
1620  rv[1] = vel[0];
1621  rv[2] = -vel[2];
1622  }
1623  }
1624  break;
1625 
1626  case XDI_CoordSysNwu:
1627  {
1628  if (actualCsys == XDI_CoordSysEnu)
1629  {
1630  rv[0] = vel[1];
1631  rv[1] = -vel[0];
1632  rv[2] = vel[2];
1633  }
1634  else if (actualCsys == XDI_CoordSysNed)
1635  {
1636  rv[0] = vel[0];
1637  rv[1] = -vel[1];
1638  rv[2] = -vel[2];
1639  }
1640  }
1641  break;
1642 
1643  case XDI_CoordSysNed:
1644  {
1645  if (actualCsys == XDI_CoordSysEnu)
1646  {
1647  rv[0] = vel[1];
1648  rv[1] = vel[0];
1649  rv[2] = -vel[2];
1650  }
1651  else if (actualCsys == XDI_CoordSysNwu)
1652  {
1653  rv[0] = vel[0];
1654  rv[1] = -vel[1];
1655  rv[2] = -vel[2];
1656  }
1657  }
1658  break;
1659 
1660  default:
1661  {
1662  rv[0] = vel[0];
1663  rv[1] = vel[1];
1664  rv[2] = vel[2];
1665  }
1666  break;
1667  }
1668  }
1669  }
1670 
1671  return returnVal;
1672  }
1673 
1678  {
1679  return genericContains(thisPtr, XDI_VelocityXYZ);
1680  }
1681 
1686  void XsDataPacket_setVelocity(XsDataPacket* thisPtr, const XsVector* data, XsDataIdentifier coordinateSystem)
1687  {
1688  detach(thisPtr);
1689  auto it = MAP.find(XDI_VelocityXYZ);
1690  if (it != MAP.end())
1691  MAP.erase(it);
1692 
1693  genericSet<XsVector, XsVector3Variant>(thisPtr, data, XDI_VelocityXYZ | XDI_SubFormatDouble | (coordinateSystem & XDI_CoordSysMask));
1694  }
1695 
1700  {
1701  auto it = MAP.find(XDI_VelocityXYZ);
1702  if (it != MAP.end())
1703  return it->second->dataId();
1704  return XDI_None;
1705  }
1706 
1711  {
1713  }
1714 
1720  {
1721  auto it = MAP.find(XDI_StatusWord);
1722  if (it != MAP.end())
1723  return it->second->toDerived<SimpleVariant<uint32_t>>().m_data;
1724 
1725  it = MAP.find(XDI_StatusByte);
1726  if (it != MAP.end())
1727  return it->second->toDerived<SimpleVariant<uint8_t>>().m_data;
1728 
1729  return 0;
1730  }
1731 
1736  {
1737  return genericContains(thisPtr, XDI_StatusWord);
1738  }
1739 
1744  {
1745  return genericContains(thisPtr, XDI_StatusWord) ||
1746  genericContains(thisPtr, XDI_StatusByte);
1747  }
1748 
1752  void XsDataPacket_setStatusByte(XsDataPacket* thisPtr, uint8_t data)
1753  {
1754  detach(thisPtr);
1755  if (genericContains(thisPtr, XDI_StatusWord))
1756  {
1758  word = ((word & (~0xFF)) | data);
1759  XsDataPacket_setStatus(thisPtr, word);
1760  }
1761  else
1763  }
1764 
1769  {
1770  detach(thisPtr);
1771  auto it = MAP.find(XDI_StatusByte);
1772  if (it != MAP.end())
1773  MAP.erase(it);
1774 
1776  }
1777 
1786  {
1787  return genericGet<XsTriggerIndicationData, XsTriggerIndicationDataVariant>(thisPtr, returnVal, triggerId);
1788  }
1789 
1795  {
1796  return genericContains(thisPtr, triggerId);
1797  }
1798 
1803  void XsDataPacket_setTriggerIndication(XsDataPacket* thisPtr, XsDataIdentifier triggerId, const XsTriggerIndicationData* triggerIndicationData)
1804  {
1805  genericSet<XsTriggerIndicationData, XsTriggerIndicationDataVariant>(thisPtr, triggerIndicationData, triggerId);
1806  }
1807 
1815  {
1817  }
1818 
1823  {
1824  return genericContains(thisPtr, XDI_PacketCounter8);
1825  }
1826 
1830  void XsDataPacket_setPacketCounter8(XsDataPacket* thisPtr, uint8_t counter)
1831  {
1833  }
1834 
1844  uint16_t XsDataPacket_packetCounter(const XsDataPacket* thisPtr)
1845  {
1846  auto it = MAP.find(XDI_PacketCounter);
1847  if (it != MAP.end())
1848  return it->second->toDerived<SimpleVariant<uint16_t>>().m_data;
1849 
1850  it = MAP.find(XDI_FrameRange);
1851  if (it != MAP.end())
1852  return static_cast<uint16_t>(static_cast<unsigned int>(it->second->toDerived<XsRangeVariant>().m_data.last()));
1853 
1854  return 0;
1855  }
1856 
1861  {
1862  return genericContains(thisPtr, XDI_PacketCounter) ||
1863  genericContains(thisPtr, XDI_FrameRange);
1864  }
1865 
1869  void XsDataPacket_setPacketCounter(XsDataPacket* thisPtr, uint16_t counter)
1870  {
1872  MAP.erase(XDI_FrameRange);
1873  }
1874 
1880  {
1882  }
1883 
1888  {
1889  return genericContains(thisPtr, XDI_SampleTimeFine);
1890  }
1891 
1896  {
1898  auto it = MAP.find(XDI_SampleTime64);
1899  if (it != MAP.end())
1900  {
1901  auto& var = it->second->toDerived<SimpleVariant<uint64_t>>();
1902  var.m_data = coarseFactor * (var.m_data / coarseFactor) + (counter % coarseFactor);
1903  }
1904  }
1905 
1909  {
1911  }
1912 
1917  {
1918  return genericContains(thisPtr, XDI_SampleTimeCoarse);
1919  }
1920 
1925  {
1927  auto it = MAP.find(XDI_SampleTime64);
1928  if (it != MAP.end())
1929  {
1930  auto& var = it->second->toDerived<SimpleVariant<uint64_t>>();
1931  var.m_data = (coarseFactor * counter) + (var.m_data % coarseFactor);
1932  }
1933  }
1934 
1938  uint64_t XsDataPacket_sampleTime64(const XsDataPacket* thisPtr)
1939  {
1940  auto it = MAP.find(XDI_SampleTime64);
1941  if (it != MAP.end())
1942  return it->second->toDerived<SimpleVariant<uint64_t>>().m_data;
1943 
1944  uint64_t rv = 0;
1945 
1946  bool hasSampletimeCoarse = false;
1947  it = MAP.find(XDI_SampleTimeCoarse);
1948  if (it != MAP.end())
1949  {
1950  hasSampletimeCoarse = true;
1951  rv += ((uint64_t) it->second->toDerived<SimpleVariant<uint32_t>>().m_data) * coarseFactor;
1952  }
1953 
1954  it = MAP.find(XDI_SampleTimeFine);
1955  if (it != MAP.end())
1956  {
1957  uint32_t sampletimeFine = it->second->toDerived<SimpleVariant<uint32_t>>().m_data;
1958  if (hasSampletimeCoarse)
1959  sampletimeFine = sampletimeFine % coarseFactor;
1960  rv += sampletimeFine;
1961  }
1962 
1963  return rv;
1964  }
1965 
1970  {
1971  return genericContains(thisPtr, XDI_SampleTime64) ||
1973  }
1974 
1978  void XsDataPacket_setSampleTime64(XsDataPacket* thisPtr, uint64_t counter)
1979  {
1983  }
1984 
1990  {
1991  return genericGet<XsTimeInfo, XsTimeInfoVariant>(thisPtr, returnVal, XDI_UtcTime);
1992  }
1993 
1998  {
1999  return genericContains(thisPtr, XDI_UtcTime);
2000  }
2001 
2006  {
2007  genericSet<XsTimeInfo, XsTimeInfoVariant>(thisPtr, data, XDI_UtcTime);
2008  }
2009 
2017  {
2018  return genericGet<XsVector, XsVector3Variant>(thisPtr, returnVal, XDI_FreeAcceleration);
2019  }
2020 
2026  {
2027  return genericContains(thisPtr, XDI_FreeAcceleration);
2028  }
2029 
2035  {
2036  genericSet<XsVector, XsVector3Variant>(thisPtr, g, XDI_FreeAcceleration);
2037  }
2038 
2046  {
2047  return genericGet<XsRange, XsRangeVariant>(thisPtr, returnVal, XDI_FrameRange);
2048  }
2049 
2055  {
2056  return genericContains(thisPtr, XDI_FrameRange);
2057  }
2058 
2064  {
2065  genericSet<XsRange, XsRangeVariant>(thisPtr, r, XDI_FrameRange);
2066  MAP.erase(XDI_PacketCounter);
2067  }
2068 
2073  int XsDataPacket_rssi(const XsDataPacket* thisPtr)
2074  {
2075  return (int)(int8_t) GenericSimple<uint8_t>::get(thisPtr, XDI_Rssi, (uint8_t) XS_RSSI_UNKNOWN);
2076  }
2077 
2083  {
2084  return genericContains(thisPtr, XDI_Rssi);
2085  }
2086 
2091  void XsDataPacket_setRssi(XsDataPacket* thisPtr, int r)
2092  {
2093  GenericSimple<uint8_t>::set(thisPtr, (uint8_t)(int8_t)r, XDI_Rssi);
2094  }
2095 
2101  {
2102  return genericGet<XsRawGnssPvtData, XsRawGnssPvtDataVariant>(thisPtr, returnVal, XDI_GnssPvtData);
2103  }
2104 
2109  {
2110  return genericContains(thisPtr, XDI_GnssPvtData);
2111  }
2112 
2117  {
2118  genericSet<XsRawGnssPvtData, XsRawGnssPvtDataVariant>(thisPtr, r, XDI_GnssPvtData);
2119  }
2120 
2126  {
2128  }
2129 
2134  {
2135  return genericContains(thisPtr, XDI_GnssPvtPulse);
2136  }
2137 
2142  {
2144  }
2145 
2149  uint8_t XsDataPacket_gnssAge(const XsDataPacket* thisPtr)
2150  {
2151  return GenericSimple<uint8_t>::get(thisPtr, XDI_GnssAge, 255);
2152  }
2153 
2158  {
2159  return genericContains(thisPtr, XDI_GnssAge);
2160  }
2161 
2165  void XsDataPacket_setGnssAge(XsDataPacket* thisPtr, uint8_t age)
2166  {
2168  }
2169 
2175  {
2176  return genericGet<XsRawGnssSatInfo, XsRawGnssSatInfoVariant>(thisPtr, returnVal, XDI_GnssSatInfo);
2177  }
2178 
2183  {
2184  return genericContains(thisPtr, XDI_GnssSatInfo);
2185  }
2186 
2191  {
2192  genericSet<XsRawGnssSatInfo, XsRawGnssSatInfoVariant>(thisPtr, data, XDI_GnssSatInfo);
2193  }
2194 
2206  XsDataPacket* XsDataPacket_merge(XsDataPacket* thisPtr, const XsDataPacket* other, int overwrite)
2207  {
2208  detach(thisPtr);
2209  bool over = !!overwrite;
2210  thisPtr->d->merge(*other->d, over);
2211 
2212  // do additional handling for 'unique' items
2213  auto keepOne = [&](XsDataIdentifier id1, XsDataIdentifier id2)
2214  {
2215  if (genericContains(thisPtr, id1) &&
2216  genericContains(thisPtr, id2))
2217  {
2218  bool gc = genericContains(other, id1);
2219  if ((gc && !over) || (!gc && over)) // logical xor does not exist in C++, write it explicitly
2220  MAP.erase(id1);
2221  else
2222  MAP.erase(id2);
2223  }
2224  };
2225 
2227  keepOne(XDI_Quaternion, XDI_EulerAngles);
2232 
2233  if (over)
2234  {
2235  thisPtr->m_deviceId = other->m_deviceId;
2236  thisPtr->m_toa = other->m_toa;
2237  thisPtr->m_packetId = other->m_packetId;
2238  thisPtr->m_etos = other->m_etos;
2239  }
2240 
2241  return thisPtr;
2242  }
2243 
2249  {
2250  XsDataPacket_clear(thisPtr, XDI_None);
2251 
2252  XsSize offset = 0;
2253  XsSize sz = msg->getDataSize();
2254 
2255  while (offset + 3 <= sz) // minimum size of an item is 2(ID) + 1(size) + 0(minimum size)
2256  {
2257  XsDataIdentifier id = static_cast<XsDataIdentifier>(XsMessage_getDataShort(msg, offset));
2258  XsSize itemSize = XsMessage_getDataByte(msg, offset + 2);
2259  if (offset + itemSize + 3 > sz)
2260  break; // the item is corrupt
2261 
2262  Variant* var = createVariant(id);
2263  if (var)
2264  {
2265  itemSize = var->readFromMessage(*msg, offset + 3, itemSize);
2266  MAP.insert(id, var);
2267  }
2268  offset += 3 + itemSize; // never use var->sizeInMsg() here, since it _may_ differ
2269  }
2270  if (offset < sz)
2271  {
2272  // if we get here then we detected some kind of corruption
2273  // so we should not trust anything we read
2274  XsDataPacket_clear(thisPtr, XDI_None);
2275  return;
2276  }
2277  }
2278 
2283  void XsDataPacket_toMessage(const XsDataPacket* thisPtr, XsMessage* msg)
2284  {
2285  msg->resizeData(0); // clear the data part while leaving header intact
2286  msg->setMessageId(XMID_MtData2);
2287 
2288  XsSize offset = 0;
2289  msg->resizeData(2048); // prevent constant message resizing by pre-allocating a large message and later reducing its size
2290  for (auto const& i : MAP)
2291  {
2292  XsSize sz = i.second->sizeInMsg();
2293  if (sz < 255)
2294  {
2295  msg->setDataShort((uint16_t) i.second->dataId(), offset);
2296  msg->setDataByte((uint8_t)sz, offset + 2);
2297  i.second->writeToMessage(*msg, offset + 3);
2298  offset += 3 + sz;
2299  }
2300  else
2301  {
2302  XsSize sz2 = sz;
2303  XsSize offset2 = offset;
2304  while (sz2 >= 255)
2305  {
2306  msg->setDataShort((uint16_t) i.second->dataId(), offset2);
2307  msg->setDataByte((uint8_t)255, offset2 + 2);
2308  offset2 += 258;
2309  sz2 -= 255;
2310  }
2311  msg->setDataShort((uint16_t) i.second->dataId(), offset2);
2312  msg->setDataByte((uint8_t)sz2, offset2 + 2); // note that this size may be 0
2313  i.second->writeToMessage(*msg, offset + 3); // individual write functions should takke extended size into account
2314  offset = offset2 + 3 + sz2;
2315  }
2316  }
2317  msg->resizeData(offset);
2318  }
2319 
2328  {
2329  genericGet<XsSnapshot, XsFullSnapshotVariant>(thisPtr, returnVal, XDI_FullSnapshot);
2330  if (!returnVal->m_deviceId.isValid() && thisPtr->m_deviceId.isValid())
2331  returnVal->m_deviceId = thisPtr->m_deviceId;
2332  return returnVal;
2333  }
2334 
2339  {
2340  return genericContains(thisPtr, XDI_FullSnapshot);
2341  }
2342 
2347  void XsDataPacket_setFullSnapshot(XsDataPacket* thisPtr, XsSnapshot const* data, int retransmission)
2348  {
2349  genericSet<XsSnapshot, XsFullSnapshotVariant>(thisPtr, data, XDI_FullSnapshot | (retransmission ? XDI_RetransmissionFlag : XDI_None));
2350  }
2351 
2360  {
2361  return genericGet<XsSnapshot, XsAwindaSnapshotVariant>(thisPtr, returnVal, XDI_AwindaSnapshot);
2362  }
2363 
2368  {
2369  return genericContains(thisPtr, XDI_AwindaSnapshot);
2370  }
2371 
2376  void XsDataPacket_setAwindaSnapshot(XsDataPacket* thisPtr, XsSnapshot const* data, int retransmission)
2377  {
2378  genericSet<XsSnapshot, XsAwindaSnapshotVariant>(thisPtr, data, XDI_AwindaSnapshot | (retransmission ? XDI_RetransmissionFlag : XDI_None));
2379  }
2380 
2385  {
2386  if (!thisPtr->d)
2387  return false;
2388  auto it = MAP.find(XDI_AwindaSnapshot);
2389  if (it == MAP.end())
2390  return false;
2391  return (it->second->dataId() & XDI_RetransmissionMask) == XDI_RetransmissionFlag;
2392  }
2393 
2403  {
2404  switch (hand)
2405  {
2406  case XHI_LeftHand:
2407  return genericGet<XsGloveSnapshot, XsGloveSnapshotVariant>(thisPtr, returnVal, XDI_GloveSnapshotLeft);
2408  case XHI_RightHand:
2409  return genericGet<XsGloveSnapshot, XsGloveSnapshotVariant>(thisPtr, returnVal, XDI_GloveSnapshotRight);
2410  case XHI_Unknown:
2411  default:
2412  memset(returnVal, 0, sizeof(XsGloveSnapshot));
2413  return returnVal;
2414  }
2415  }
2416 
2422  {
2423  switch (hand)
2424  {
2425  case XHI_LeftHand:
2426  return genericContains(thisPtr, XDI_GloveSnapshotLeft);
2427  case XHI_RightHand:
2428  return genericContains(thisPtr, XDI_GloveSnapshotRight);
2429  case XHI_Unknown:
2431  default:
2432  return false;
2433  }
2434  }
2435 
2441  void XsDataPacket_setGloveSnapshot(XsDataPacket* thisPtr, XsGloveSnapshot const* data, int retransmission, XsHandId hand)
2442  {
2443  switch (hand)
2444  {
2445  case XHI_LeftHand:
2446  genericSet<XsGloveSnapshot, XsGloveSnapshotVariant>(thisPtr, data, XDI_GloveSnapshotLeft | (retransmission ? XDI_RetransmissionFlag : XDI_None));
2447  break;
2448  case XHI_RightHand:
2449  genericSet<XsGloveSnapshot, XsGloveSnapshotVariant>(thisPtr, data, XDI_GloveSnapshotRight | (retransmission ? XDI_RetransmissionFlag : XDI_None));
2450  break;
2451  case XHI_Unknown:
2452  default:
2453  break;
2454  }
2455  }
2456 
2458  static void convertRawVector(XsUShortVector const& input, XsDataIdentifier id, XsVector& returnVal)
2459  {
2460  XsReal(*caster)(uint16_t) = unsigned_cast;
2461  returnVal.setSize(3);
2462  if ((id & XDI_DataFormatMask) == XDI_RawSigned)
2463  caster = signed_cast;
2464  for (XsSize i = 0; i < 3; i++)
2465  returnVal[i] = caster(input[i]);
2466  }
2467 
2473  static XsVector* convertedVector(const XsDataPacket* thisPtr, XsVector* returnVal, XsDataIdentifier id, XsUShortVector XsScrData::* field)
2474  {
2475  assert(returnVal);
2476 
2477  XsUShortVector tmp;
2478 
2479  auto it = MAP.find(XDI_RawAccGyrMagTemp);
2480  if (it != MAP.end())
2481  tmp = it->second->toDerived<XsScrDataVariant>().m_data.*field;
2482  else
2483  {
2484  it = MAP.find(id);
2485  if (it != MAP.end())
2486  tmp = it->second->toDerived<XsUShortVectorVariant>().m_data;
2487  }
2488 
2489  convertRawVector(tmp, it->second->dataId(), *returnVal);
2490  return returnVal;
2491  }
2492 
2500  {
2501  return convertedVector(thisPtr, returnVal, XDI_RawAcc, &XsScrData::m_acc);
2502  }
2503 
2511  {
2512  return convertedVector(thisPtr, returnVal, XDI_RawGyr, &XsScrData::m_gyr);
2513  }
2514 
2522  {
2523  return convertedVector(thisPtr, returnVal, XDI_RawMag, &XsScrData::m_mag);
2524  }
2525 
2533  {
2534  assert(returnVal);
2535  auto it = MAP.find(XDI_RawGyroTemp);
2536  XsUShortVector tmp;
2537  if (it != MAP.end())
2538  tmp = it->second->toDerived<XsUShortVectorVariant>().m_data;
2539  convertRawVector(tmp, it->second->dataId(), *returnVal);
2540  return returnVal;
2541  }
2542 
2548  {
2549  return genericGet<XsByteArray, XsByteArrayVariant>(thisPtr, returnVal, XDI_RawBlob);
2550  }
2551 
2556  {
2557  return genericContains(thisPtr, XDI_RawBlob);
2558  }
2559 
2564  {
2565  genericSet<XsByteArray, XsByteArrayVariant>(thisPtr, data, XDI_RawBlob);
2566  }
2567 
2573  {
2574  return genericGet<XsVector, XsVector3Variant>(thisPtr, returnVal, XDI_AccelerationHR);
2575  }
2576 
2581  {
2582  return genericContains(thisPtr, XDI_AccelerationHR);
2583  }
2584 
2589  {
2590  genericSet<XsVector, XsVector3Variant>(thisPtr, vec, XDI_AccelerationHR | XDI_SubFormatDouble);
2591  }
2592 
2598  {
2599  return genericGet<XsVector, XsVector3Variant>(thisPtr, returnVal, XDI_RateOfTurnHR);
2600  }
2601 
2606  {
2607  return genericContains(thisPtr, XDI_RateOfTurnHR);
2608  }
2609 
2614  {
2615  genericSet<XsVector, XsVector3Variant>(thisPtr, vec, XDI_RateOfTurnHR | XDI_SubFormatDouble);
2616  }
2617 
2623  {
2624  return DataPacketPrivate::creationDiff();
2625  }
2626 
2627 } // extern "C"
2628 
XsDataPacket_coordinateSystemVelocity
XsDataIdentifier XsDataPacket_coordinateSystemVelocity(const XsDataPacket *thisPtr)
Returns the coordinate system of the first velocity data of any kind in the packet.
Definition: xsdatapacket.cpp:1710
XsDataPacket_containsCalibratedData
int XsDataPacket_containsCalibratedData(const XsDataPacket *thisPtr)
Check if data item contains calibrated Data.
Definition: xsdatapacket.cpp:912
XsDataPacket_pressure
XsPressure * XsDataPacket_pressure(const XsDataPacket *thisPtr, XsPressure *returnVal)
The air pressure component of a data item.
Definition: xsdatapacket.cpp:1194
XsQuaternion::XsQuaternion_fromRotationMatrix
void XsQuaternion_fromRotationMatrix(XsQuaternion *thisPtr, const XsMatrix *ori)
Create a quaternion representation of orientation matrix ori.
Definition: xsquaternion.c:176
XsDataPacket_utcTime
XsTimeInfo * XsDataPacket_utcTime(const XsDataPacket *thisPtr, XsTimeInfo *returnVal)
The utc time component of a data item.
Definition: xsdatapacket.cpp:1989
XsDataPacket_sdiData
XsSdiData * XsDataPacket_sdiData(const XsDataPacket *thisPtr, XsSdiData *returnVal)
Return the strapdown integration data component of a data item.
Definition: xsdatapacket.cpp:1224
XsDataPacket_swap
void XsDataPacket_swap(XsDataPacket *thisPtr, XsDataPacket *other)
Swaps the XsDataPackets in thisPtr and other.
Definition: xsdatapacket.cpp:493
XDI_RateOfTurnHR
@ XDI_RateOfTurnHR
Rate of turn HR data.
Definition: xsdataidentifier.h:154
XDI_Itow
@ XDI_Itow
Itow. Time Of Week from the GNSS receiver.
Definition: xsdataidentifier.h:108
XsDataPacket::m_packetId
int64_t m_packetId
64 bit packet id, based on, depending on availability: (1) packet counter (2) sample time (3) arrival...
Definition: xsdatapacket.h:1542
XsDataPacket_rawGnssPvtData
XsRawGnssPvtData * XsDataPacket_rawGnssPvtData(const XsDataPacket *thisPtr, XsRawGnssPvtData *returnVal)
Returns a struct with RawGnssPvtData.
Definition: xsdatapacket.cpp:2100
XsDataPacket_containsCorrectedMagneticField
int XsDataPacket_containsCorrectedMagneticField(const XsDataPacket *thisPtr)
Check if data item contains corrected magnetometer data (ICC result).
Definition: xsdatapacket.cpp:944
XDI_GnssPvtData
@ XDI_GnssPvtData
Gnss position, velocity and time data.
Definition: xsdataidentifier.h:147
XsMatrix
A class that represents a matrix of real numbers.
Definition: xsmatrix.h:107
XDI_RotationMatrix
@ XDI_RotationMatrix
Orientation in rotation matrix format.
Definition: xsdataidentifier.h:123
genericContains
bool genericContains(const XsDataPacket *thisPtr, XsDataIdentifier id)
Definition: xsdatapacket.cpp:314
createVariant
Variant * createVariant(XsDataIdentifier id)
Definition: xsdatapacket.cpp:89
XsDataPacket_toMessage
void XsDataPacket_toMessage(const XsDataPacket *thisPtr, XsMessage *msg)
Write the contents of the XsDataPacket to an XsMessage in MtData2 format.
Definition: xsdatapacket.cpp:2283
XsDataPacket_containsTriggerIndication
int XsDataPacket_containsTriggerIndication(const XsDataPacket *thisPtr, XsDataIdentifier triggerId)
Check if data item contains trigger indication data.
Definition: xsdatapacket.cpp:1794
XDI_PacketCounter8
@ XDI_PacketCounter8
8 bit packet counter, wraps at 256
Definition: xsdataidentifier.h:114
XsDataPacket_setStoredDeviceId
void XsDataPacket_setStoredDeviceId(XsDataPacket *thisPtr, const XsDeviceId *data)
Add or update device id for the item.
Definition: xsdatapacket.cpp:1337
XsDataPacket_setGnssPvtPulse
void XsDataPacket_setGnssPvtPulse(XsDataPacket *thisPtr, uint32_t counter)
Add/update pvt pulse timestamp data for the item.
Definition: xsdatapacket.cpp:2141
XsVector
A class that represents a vector of real numbers.
Definition: xsvector.h:113
XsDataPacket_setOrientationEuler
void XsDataPacket_setOrientationEuler(XsDataPacket *thisPtr, const XsEuler *data, XsDataIdentifier coordinateSystem)
Add/update quaternion orientation Data for the item.
Definition: xsdatapacket.cpp:1071
XDI_TriggerIn1
@ XDI_TriggerIn1
Trigger in 1 indication.
Definition: xsdataidentifier.h:136
XsDataPacket_setSdiData
void XsDataPacket_setSdiData(XsDataPacket *thisPtr, const XsSdiData *data)
Add/update strapdown integration data for the item.
Definition: xsdatapacket.cpp:1250
XsDataPacket_setTriggerIndication
void XsDataPacket_setTriggerIndication(XsDataPacket *thisPtr, XsDataIdentifier triggerId, const XsTriggerIndicationData *triggerIndicationData)
Add/update trigger indication data for the item.
Definition: xsdatapacket.cpp:1803
msg
msg
XsScrData::m_mag
XsUShortVector m_mag
The raw magnetometer data.
Definition: xsscrdata.h:83
XDI_LatLon
@ XDI_LatLon
Position in latitude, longitude.
Definition: xsdataidentifier.h:144
XDI_RawAcc
@ XDI_RawAcc
Raw acceleration data.
Definition: xsdataidentifier.h:161
XsDataPacket_setFullSnapshot
void XsDataPacket_setFullSnapshot(XsDataPacket *thisPtr, XsSnapshot const *data, int retransmission)
Sets the Awinda Snapshot part of the XsDataPacket.
Definition: xsdatapacket.cpp:2347
XDI_RawGyr
@ XDI_RawGyr
Raw gyroscope data.
Definition: xsdataidentifier.h:162
XsByteArray
A list of uint8_t values.
XsDataPacket_orientationIncrement
XsQuaternion * XsDataPacket_orientationIncrement(const XsDataPacket *thisPtr, XsQuaternion *returnVal)
The delta quaternion (deltaQ) component of a data item.
Definition: xsdatapacket.cpp:818
XsDataPacket_containsFrameRange
int XsDataPacket_containsFrameRange(const XsDataPacket *thisPtr)
Returns whether the datapacket contains a framerange.
Definition: xsdatapacket.cpp:2054
XDI_FrameRange
@ XDI_FrameRange
Reserved.
Definition: xsdataidentifier.h:113
XsDataPacket_rssi
int XsDataPacket_rssi(const XsDataPacket *thisPtr)
Returns the rssi value contained in the datapacket.
Definition: xsdatapacket.cpp:2073
XsDataPacket_setRawData
void XsDataPacket_setRawData(XsDataPacket *thisPtr, const XsScrData *data)
Add/update raw data for the item.
Definition: xsdatapacket.cpp:747
XsDataPacket_setCalibratedMagneticField
void XsDataPacket_setCalibratedMagneticField(XsDataPacket *thisPtr, const XsVector *vec)
Add/update calibrated magnetometer data for the item.
Definition: xsdatapacket.cpp:888
XsDataPacket_containsStoredDeviceId
int XsDataPacket_containsStoredDeviceId(const XsDataPacket *thisPtr)
Return non-zero if this data packet stores a device ID.
Definition: xsdatapacket.cpp:1329
XsGloveSnapshot
A container for Glove Snapshot data.
Definition: xsglovesnapshot.h:133
XsDataPacket_rateOfTurnHR
XsVector * XsDataPacket_rateOfTurnHR(const XsDataPacket *thisPtr, XsVector *returnVal)
Returns RateOfTurnHR.
Definition: xsdatapacket.cpp:2597
XsDataPacket_orientationQuaternion
XsQuaternion * XsDataPacket_orientationQuaternion(const XsDataPacket *thisPtr, XsQuaternion *returnVal, XsDataIdentifier coordinateSystem)
Return the orientation component of a data item as a quaternion.
Definition: xsdatapacket.cpp:965
XDI_RateOfTurn
@ XDI_RateOfTurn
Rate of turn data in rad/sec.
Definition: xsdataidentifier.h:152
XsDataPacket_containsAccelerationHR
int XsDataPacket_containsAccelerationHR(const XsDataPacket *thisPtr)
Check if data item contains AccelerationHR.
Definition: xsdatapacket.cpp:2580
XsDataPacket_containsRawAcceleration
int XsDataPacket_containsRawAcceleration(const XsDataPacket *thisPtr)
Check if data item contains Raw Accelerometer data.
Definition: xsdatapacket.cpp:562
XsDataPacket_setGloveData
void XsDataPacket_setGloveData(XsDataPacket *thisPtr, const XsGloveData *data, XsHandId hand)
Add/update strapdown integration data for the item.
Definition: xsdatapacket.cpp:1299
XDI_BaroPressure
@ XDI_BaroPressure
Pressure output recorded from the barometer.
Definition: xsdataidentifier.h:127
XDI_SampleTimeCoarse
@ XDI_SampleTimeCoarse
Sample Time Coarse.
Definition: xsdataidentifier.h:112
GenericSimple
Definition: xsdatapacket.cpp:293
XsScrData::m_temp
uint16_t m_temp
The temperature data.
Definition: xsscrdata.h:84
XsDataPacket_setCalibratedGyroscopeData
void XsDataPacket_setCalibratedGyroscopeData(XsDataPacket *thisPtr, const XsVector *vec)
Add/update calibrated gyroscope data for the item.
Definition: xsdatapacket.cpp:861
XDI_None
@ XDI_None
Empty datatype.
Definition: xsdataidentifier.h:86
XsDataPacket_containsPacketCounter
int XsDataPacket_containsPacketCounter(const XsDataPacket *thisPtr)
Check if data item contains a packet counter.
Definition: xsdatapacket.cpp:1860
XsDataPacket_setRawGyroscopeTemperatureData
void XsDataPacket_setRawGyroscopeTemperatureData(XsDataPacket *thisPtr, const XsUShortVector *vec)
Add/update raw gyroscope temperature data for the item.
Definition: xsdatapacket.cpp:699
XDI_AnalogIn2
@ XDI_AnalogIn2
Data containing adc data from analog in 2 line (if present)
Definition: xsdataidentifier.h:170
XsDataPacket_containsSdiData
int XsDataPacket_containsSdiData(const XsDataPacket *thisPtr)
Check if data item contains strapdown integration data.
Definition: xsdatapacket.cpp:1241
XsDataPacket_clear
void XsDataPacket_clear(XsDataPacket *thisPtr, XsDataIdentifier id)
Clears all data in an XsDataPacket.
Definition: xsdatapacket.cpp:459
XsDataPacket_storedLocationId
uint16_t XsDataPacket_storedLocationId(const XsDataPacket *thisPtr)
The location ID of a data item.
Definition: xsdatapacket.cpp:1346
XsSnapshot::m_deviceId
XsDeviceId m_deviceId
The ID of the device that created the data.
Definition: xssnapshot.h:97
XsDataPacket_containsRawBlob
int XsDataPacket_containsRawBlob(const XsDataPacket *thisPtr)
Returns true if the XsDataPacket contains raw blob data.
Definition: xsdatapacket.cpp:2555
XHI_RightHand
@ XHI_RightHand
The Right Hand.
Definition: xshandid.h:78
XDI_DeviceId
@ XDI_DeviceId
DeviceId output.
Definition: xsdataidentifier.h:196
XsDataPacket_copyConstruct
void XsDataPacket_copyConstruct(XsDataPacket *thisPtr, XsDataPacket const *src)
Initializes a data packet as a (referenced) copy of src.
Definition: xsdatapacket.cpp:437
XsGloveData
A container for glove data.
Definition: xsglovedata.h:214
XDI_GloveDataLeft
@ XDI_GloveDataLeft
Glove Data for Left Hand.
Definition: xsdataidentifier.h:186
XsDataPacket_containsFullSnapshot
int XsDataPacket_containsFullSnapshot(const XsDataPacket *thisPtr)
Returns true if the XsDataPacket contains Full Snapshot data.
Definition: xsdatapacket.cpp:2338
XsDataPacket_setPositionLLA
void XsDataPacket_setPositionLLA(XsDataPacket *thisPtr, const XsVector *data)
Add/update position lat lon alt data for the item.
Definition: xsdatapacket.cpp:1487
XsCalibratedData::m_gyr
XsVector3 m_gyr
Gyroscope data.
Definition: xscalibrateddata.h:90
XsDataPacket_setAltitude
void XsDataPacket_setAltitude(XsDataPacket *thisPtr, double data)
Add/update altitude data for the item.
Definition: xsdatapacket.cpp:1553
XsDataPacket_rawBlob
XsByteArray * XsDataPacket_rawBlob(const XsDataPacket *thisPtr, XsByteArray *returnVal)
Returns the raw blob part of the XsDataPacket.
Definition: xsdatapacket.cpp:2547
XsDataPacket_accelerationHR
XsVector * XsDataPacket_accelerationHR(const XsDataPacket *thisPtr, XsVector *returnVal)
Returns AccelerationHR.
Definition: xsdatapacket.cpp:2572
XsScrData::m_gyr
XsUShortVector m_gyr
The raw gyroscope data.
Definition: xsscrdata.h:82
XsDataPacket_packetCounter8
uint8_t XsDataPacket_packetCounter8(const XsDataPacket *thisPtr)
Return the 8 bit packet counter of a packet.
Definition: xsdatapacket.cpp:1814
XsDataPacket_setRawMagneticField
void XsDataPacket_setRawMagneticField(XsDataPacket *thisPtr, const XsUShortVector *vec)
Add/update raw magnetometer data for the item.
Definition: xsdatapacket.cpp:630
XDI_UtcTime
@ XDI_UtcTime
Utc time from the GNSS receiver.
Definition: xsdataidentifier.h:106
XsDataPacket_freeAcceleration
XsVector * XsDataPacket_freeAcceleration(const XsDataPacket *thisPtr, XsVector *returnVal)
The free acceleration component of a data item.
Definition: xsdatapacket.cpp:2016
XDI_GnssSatInfo
@ XDI_GnssSatInfo
Gnss satellite information.
Definition: xsdataidentifier.h:148
xsvector.h
XsDataPacket_containsAltitudeMsl
int XsDataPacket_containsAltitudeMsl(const XsDataPacket *thisPtr)
Check if data item contains position altitude above MSL data.
Definition: xsdatapacket.cpp:1572
XsDataPacket_dataFormat
XsDataIdentifier XsDataPacket_dataFormat(const XsDataPacket *thisPtr, XsDataIdentifier id)
Returns the dataformat of a specific data identifier in the packet.
Definition: xsdatapacket.cpp:528
MAP
#define MAP
Definition: xsdatapacket.cpp:73
XsDataPacket_containsRawData
int XsDataPacket_containsRawData(const XsDataPacket *thisPtr)
Check if data item contains raw data.
Definition: xsdatapacket.cpp:739
XsDataPacket_containsRawGnssPvtData
int XsDataPacket_containsRawGnssPvtData(const XsDataPacket *thisPtr)
Returns 1 if data item contains RawGnssPvtData, 0 otherwise.
Definition: xsdatapacket.cpp:2108
XsDataPacket_setPressure
void XsDataPacket_setPressure(XsDataPacket *thisPtr, const XsPressure *data)
Add/update pressure data for the item.
Definition: xsdatapacket.cpp:1214
XsDataPacket
Contains an interpreted data message. The class provides easy access to the contained data through it...
Definition: xsdatapacket.h:301
XsHandId
XsHandId
This is an enumerator that contains the left and right hand.
Definition: xshandid.h:75
XDI_CoordSysEnu
@ XDI_CoordSysEnu
East North Up orientation output.
Definition: xsdataidentifier.h:119
XsDataPacket_positionLLA
XsVector * XsDataPacket_positionLLA(const XsDataPacket *thisPtr, XsVector *returnVal)
The position lat lon alt component of a data item.
Definition: xsdatapacket.cpp:1451
XsDataPacket_containsGloveSnapshot
int XsDataPacket_containsGloveSnapshot(const XsDataPacket *thisPtr, XsHandId hand)
Returns true if the XsDataPacket contains Glove Snapshot data.
Definition: xsdatapacket.cpp:2421
XsDataPacket_containsAwindaSnapshot
int XsDataPacket_containsAwindaSnapshot(const XsDataPacket *thisPtr)
Returns true if the XsDataPacket contains Awinda Snapshot data.
Definition: xsdatapacket.cpp:2367
XsDataPacket_analogIn2Data
XsAnalogInData * XsDataPacket_analogIn2Data(const XsDataPacket *thisPtr, XsAnalogInData *returnVal)
The analog in 2 component of a data item.
Definition: xsdatapacket.cpp:1423
XsDataPacket_containsGloveData
int XsDataPacket_containsGloveData(const XsDataPacket *thisPtr, XsHandId hand)
Check if data item contains glove data.
Definition: xsdatapacket.cpp:1280
XsDataPacket_containsFreeAcceleration
int XsDataPacket_containsFreeAcceleration(const XsDataPacket *thisPtr)
Check if data item contains free acceleration.
Definition: xsdatapacket.cpp:2025
XsDataPacket_sampleTimeFine
uint32_t XsDataPacket_sampleTimeFine(const XsDataPacket *thisPtr)
Return the fine sample time of a packet.
Definition: xsdatapacket.cpp:1879
XsDataPacket_storedDeviceId
XsDeviceId * XsDataPacket_storedDeviceId(const XsDataPacket *thisPtr, XsDeviceId *returnVal)
The device id of a data item.
Definition: xsdatapacket.cpp:1321
XsDataPacket_rawMagneticField
XsUShortVector * XsDataPacket_rawMagneticField(const XsDataPacket *thisPtr, XsUShortVector *returnVal)
The raw magnetometer component of a data item.
Definition: xsdatapacket.cpp:613
XsDataPacket_rawGyroscopeDataConverted
XsVector * XsDataPacket_rawGyroscopeDataConverted(const XsDataPacket *thisPtr, XsVector *returnVal)
The raw gyroscope component of a data item, converted to floating point values.
Definition: xsdatapacket.cpp:2510
XsDataPacket_construct
void XsDataPacket_construct(XsDataPacket *thisPtr)
Inits a data packet, the packet will be empty after construction.
Definition: xsdatapacket.cpp:425
XsDataPacket_containsRawTemperature
int XsDataPacket_containsRawTemperature(const XsDataPacket *thisPtr)
Check if data item contains raw temperature data.
Definition: xsdatapacket.cpp:651
XsScrData::m_acc
XsUShortVector m_acc
The raw accelerometer data.
Definition: xsscrdata.h:81
rawVector
XsUShortVector * rawVector(const XsDataPacket *thisPtr, XsUShortVector *returnVal, XsDataIdentifier id, XsUShortVector XsScrData::*field)
Definition: xsdatapacket.cpp:234
detach
static void detach(XsDataPacket *thisPtr)
Definition: xsdatapacket.cpp:79
XsDataPacket_rawGyroscopeTemperatureData
XsUShortVector * XsDataPacket_rawGyroscopeTemperatureData(const XsDataPacket *thisPtr, XsUShortVector *returnVal)
The raw gyroscope temperature component of a data item.
Definition: xsdatapacket.cpp:679
XsQuaternion
A class that implements a quaternion.
Definition: xsquaternion.h:102
XDI_GnssPvtPulse
@ XDI_GnssPvtPulse
Time of the PVT timepulse (4Hz upsampled from the 1PPS)
Definition: xsdataidentifier.h:149
XDI_CoordSysNwu
@ XDI_CoordSysNwu
North West Up orientation output.
Definition: xsdataidentifier.h:121
XsDataPacket_calibratedGyroscopeData
XsVector * XsDataPacket_calibratedGyroscopeData(const XsDataPacket *thisPtr, XsVector *returnVal)
The calibrated gyroscope component of a data item.
Definition: xsdatapacket.cpp:845
XsDataPacket_gloveSnapshot
XsGloveSnapshot * XsDataPacket_gloveSnapshot(const XsDataPacket *thisPtr, XsGloveSnapshot *returnVal, XsHandId hand)
Returns the Glove Snapshot part of the XsDataPacket.
Definition: xsdatapacket.cpp:2402
XMID_MtData2
@ XMID_MtData2
Definition: xsxbusmessageid.h:168
XsDataPacket_destruct
void XsDataPacket_destruct(XsDataPacket *thisPtr)
Clears and frees data in an XsDataPacket.
Definition: xsdatapacket.cpp:449
XDI_AnalogIn1
@ XDI_AnalogIn1
Data containing adc data from analog in 1 line (if present)
Definition: xsdataidentifier.h:169
XDI_SampleTime64
@ XDI_SampleTime64
64 bit sample time
Definition: xsdataidentifier.h:115
data
data
XsDataPacket_setAnalogIn2Data
void XsDataPacket_setAnalogIn2Data(XsDataPacket *thisPtr, const XsAnalogInData *data)
Add/update analog in 2 data for the item.
Definition: xsdatapacket.cpp:1440
XDI_TriggerIn2
@ XDI_TriggerIn2
Trigger in 2 indication.
Definition: xsdataidentifier.h:137
GenericSimple::get
static T get(const XsDataPacket *thisPtr, XsDataIdentifier id, T const &failValue=T())
Definition: xsdatapacket.cpp:295
XsRawGnssPvtData
A container for GNSS Position Velocity and Time data.
Definition: xsrawgnsspvtdata.h:134
XsDataPacket_setVelocity
void XsDataPacket_setVelocity(XsDataPacket *thisPtr, const XsVector *data, XsDataIdentifier coordinateSystem)
Add/update velocity NED data for the item.
Definition: xsdatapacket.cpp:1686
XDI_PacketCounter
@ XDI_PacketCounter
Packet counter, increments every packet.
Definition: xsdataidentifier.h:107
XsMessage_getDataByte
uint8_t XsMessage_getDataByte(XsMessage const *thisPtr, XsSize offset)
Returns the byte value at offset in the data of the message.
Definition: xsmessage.c:481
XsDataPacket_containsAnalogIn2Data
int XsDataPacket_containsAnalogIn2Data(const XsDataPacket *thisPtr)
Check if data item contains analog in 2 data.
Definition: xsdatapacket.cpp:1431
XsDataPacket_setStatusByte
void XsDataPacket_setStatusByte(XsDataPacket *thisPtr, uint8_t data)
Add/update status data for the item.
Definition: xsdatapacket.cpp:1752
XsRange
A class whose objects can be used to store a range. It provides method to check whether a value is in...
Definition: xsrange.h:89
XDI_FullTypeMask
@ XDI_FullTypeMask
Mask to get the type of data, without the data format.
Definition: xsdataidentifier.h:88
XsDataPacket_setCalibratedAcceleration
void XsDataPacket_setCalibratedAcceleration(XsDataPacket *thisPtr, const XsVector *vec)
Add/update calibrated accelerometer data for the item.
Definition: xsdatapacket.cpp:808
XDI_Quaternion
@ XDI_Quaternion
Orientation in quaternion format.
Definition: xsdataidentifier.h:122
XsDataPacket_containsPositionLLA
int XsDataPacket_containsPositionLLA(const XsDataPacket *thisPtr)
Check if data item contains position lat lon alt data.
Definition: xsdatapacket.cpp:1477
XsDataPacket_containsGnssPvtPulse
int XsDataPacket_containsGnssPvtPulse(const XsDataPacket *thisPtr)
Check if data item XsDataPacket_contains a pvt pulse.
Definition: xsdatapacket.cpp:2133
XDI_LocationId
@ XDI_LocationId
LocationId output.
Definition: xsdataidentifier.h:197
XsDataPacket_sampleTimeCoarse
uint32_t XsDataPacket_sampleTimeCoarse(const XsDataPacket *thisPtr)
Definition: xsdatapacket.cpp:1908
XsDataPacket_rawAcceleration
XsUShortVector * XsDataPacket_rawAcceleration(const XsDataPacket *thisPtr, XsUShortVector *returnVal)
The raw accelerometer component of a data item.
Definition: xsdatapacket.cpp:554
XDI_MagneticField
@ XDI_MagneticField
Magnetic field data in a.u.
Definition: xsdataidentifier.h:173
XsDataPacket_setTemperature
void XsDataPacket_setTemperature(XsDataPacket *thisPtr, double temperature)
Adds or updates the temperature data in the datapacket.
Definition: xsdatapacket.cpp:1388
XsDataPacket_containsOrientationIncrement
int XsDataPacket_containsOrientationIncrement(const XsDataPacket *thisPtr)
Check if data item contains delta quaternion data.
Definition: xsdatapacket.cpp:826
XsDataPacket_containsRawGnssSatInfo
int XsDataPacket_containsRawGnssSatInfo(const XsDataPacket *thisPtr)
Returns 1 if data item contains RawGnssPvtData, 0 otherwise.
Definition: xsdatapacket.cpp:2182
XsDataPacket_rawData
XsScrData * XsDataPacket_rawData(const XsDataPacket *thisPtr, XsScrData *returnVal)
Return the raw data component of a data item.
Definition: xsdatapacket.cpp:717
coarseFactor
static const uint64_t coarseFactor
Definition: xsdatapacket.cpp:75
XsDataPacket_altitude
double XsDataPacket_altitude(const XsDataPacket *thisPtr)
The position altitude component of a data item.
Definition: xsdatapacket.cpp:1535
XsAnalogInData
Data from analog inputs from sensors.
Definition: xsanalogindata.h:71
XsDataPacket_setRawTemperature
void XsDataPacket_setRawTemperature(XsDataPacket *thisPtr, uint16_t temp)
Add/update raw temperature data for the item.
Definition: xsdatapacket.cpp:659
XDI_StatusByte
@ XDI_StatusByte
Status byte.
Definition: xsdataidentifier.h:193
XsSdiData
Contains StrapDown Integration (SDI) data.
Definition: xssdidata.h:88
XsDataPacket_containsRawGyroscopeTemperatureData
int XsDataPacket_containsRawGyroscopeTemperatureData(const XsDataPacket *thisPtr)
Check if data item contains raw gyroscope temperature data.
Definition: xsdatapacket.cpp:691
XsDataPacket_setOrientationQuaternion
void XsDataPacket_setOrientationQuaternion(XsDataPacket *thisPtr, const XsQuaternion *data, XsDataIdentifier coordinateSystem)
Add/update quaternion orientation Data for the item.
Definition: xsdatapacket.cpp:1011
XsDataIdentifier
XsDataIdentifier
Defines the data identifiers.
Definition: xsdataidentifier.h:84
XsDataPacket_calibratedData
XsCalibratedData * XsDataPacket_calibratedData(const XsDataPacket *thisPtr, XsCalibratedData *returnVal)
Return the calibrated Data component of a data item.
Definition: xsdatapacket.cpp:897
XS_RSSI_UNKNOWN
#define XS_RSSI_UNKNOWN
Definition: xsrssi.h:71
XsDataPacket_containsLatitudeLongitude
int XsDataPacket_containsLatitudeLongitude(const XsDataPacket *thisPtr)
Check if data item contains position latitude longitude data.
Definition: xsdatapacket.cpp:1514
XsDataPacket_containsVelocity
int XsDataPacket_containsVelocity(const XsDataPacket *thisPtr)
Check if data item contains velocity NED data.
Definition: xsdatapacket.cpp:1677
XsDataPacket_setMessage
void XsDataPacket_setMessage(XsDataPacket *thisPtr, const XsMessage *msg)
Overwrite the contents of the XsDataPacket with the contents of the supplied XsMessage.
Definition: xsdatapacket.cpp:2248
uint32_t
unsigned int uint32_t
Definition: pstdint.h:485
convertRawVector
static void convertRawVector(XsUShortVector const &input, XsDataIdentifier id, XsVector &returnVal)
Converts input vector input with data identifier id to output XsVector returnVal.
Definition: xsdatapacket.cpp:2458
XsDataPacket_setFreeAcceleration
void XsDataPacket_setFreeAcceleration(XsDataPacket *thisPtr, const XsVector *g)
Add/update free acceleration data for the item.
Definition: xsdatapacket.cpp:2034
XDI_RetransmissionMask
@ XDI_RetransmissionMask
Mask for the retransmission bit in the snapshot data.
Definition: xsdataidentifier.h:177
XsDataPacket_merge
XsDataPacket * XsDataPacket_merge(XsDataPacket *thisPtr, const XsDataPacket *other, int overwrite)
Merge the data items from other into the packet.
Definition: xsdatapacket.cpp:2206
XsDataPacket_setRateOfTurnHR
void XsDataPacket_setRateOfTurnHR(XsDataPacket *thisPtr, const XsVector *vec)
Add/update the RateOfTurnHR for the item.
Definition: xsdatapacket.cpp:2613
XDI_RawMag
@ XDI_RawMag
Raw magnetometer data.
Definition: xsdataidentifier.h:163
XsDataPacket_orientationMatrix
XsMatrix * XsDataPacket_orientationMatrix(const XsDataPacket *thisPtr, XsMatrix *returnVal, XsDataIdentifier coordinateSystem)
Return the orientation component of a data item as a orientation matrix.
Definition: xsdatapacket.cpp:1086
XsTriggerIndicationData
Data for a trigger indication message.
Definition: xstriggerindicationdata.h:89
XsDataPacket_containsGnssAge
int XsDataPacket_containsGnssAge(const XsDataPacket *thisPtr)
Returns 1 if data item contains GnssAge, 0 otherwise.
Definition: xsdatapacket.cpp:2157
XDI_GloveDataRight
@ XDI_GloveDataRight
Glove Data for Right Hand.
Definition: xsdataidentifier.h:187
XsDataPacket_setAwindaSnapshot
void XsDataPacket_setAwindaSnapshot(XsDataPacket *thisPtr, XsSnapshot const *data, int retransmission)
Sets the Awinda Snapshot part of the XsDataPacket.
Definition: xsdatapacket.cpp:2376
XsDataPacket_setAnalogIn1Data
void XsDataPacket_setAnalogIn1Data(XsDataPacket *thisPtr, const XsAnalogInData *data)
Add/update analog in 1 data for the item.
Definition: xsdatapacket.cpp:1414
XsReal
double XsReal
Defines the floating point type used by the Xsens libraries.
Definition: xstypedefs.h:73
signed_cast
static XsReal signed_cast(uint16_t v)
helper for XsDataPacket_convertRawVector
Definition: xsdatapacket.cpp:537
XsUShortVector
A vector containing 3 short values.
Definition: xsushortvector.h:77
XsRawGnssSatInfo
A container for GNSS Satellite Information.
Definition: xsrawgnsssatinfo.h:140
XsDataPacket_setCalibratedData
void XsDataPacket_setCalibratedData(XsDataPacket *thisPtr, const XsCalibratedData *data)
Add/update calibrated Data for the item.
Definition: xsdatapacket.cpp:923
XsDataPacket_setSampleTimeFine
void XsDataPacket_setSampleTimeFine(XsDataPacket *thisPtr, uint32_t counter)
Add/update sample tine fine data for the item.
Definition: xsdatapacket.cpp:1895
XsDataPacket_empty
int XsDataPacket_empty(const XsDataPacket *thisPtr)
Returns whether the datapacket is empty.
Definition: xsdatapacket.cpp:506
XsDataPacket_latitudeLongitude
XsVector * XsDataPacket_latitudeLongitude(const XsDataPacket *thisPtr, XsVector *returnVal)
The position latitude longitude component of a data item.
Definition: xsdatapacket.cpp:1505
XDI_DataFormatMask
@ XDI_DataFormatMask
Mask for extracting just the data format /sa XDI_SubFormat.
Definition: xsdataidentifier.h:91
XHI_Unknown
@ XHI_Unknown
Used as uninitialized or unknown side.
Definition: xshandid.h:79
DataPacketPrivate
struct XSNOEXPORT DataPacketPrivate
Definition: xsdatapacket.h:101
XsQuaternion::XsQuaternion_multiply
void XsQuaternion_multiply(const XsQuaternion *left, const XsQuaternion *right, XsQuaternion *dest)
Multiply left quaternion with right quaternion and put the result in dest. The parameters may point t...
Definition: xsquaternion.c:257
XsDataPacket_gnssPvtPulse
uint32_t XsDataPacket_gnssPvtPulse(const XsDataPacket *thisPtr)
Returns the timestamp of a PVT Pulse.
Definition: xsdatapacket.cpp:2125
XsDataPacket_gloveData
XsGloveData * XsDataPacket_gloveData(const XsDataPacket *thisPtr, XsGloveData *returnVal, XsHandId hand)
Return the glove data component of a data item.
Definition: xsdatapacket.cpp:1261
removeAllOrientations
static void removeAllOrientations(XsDataPacket *thisPtr)
Removes all orientations from the datapacket.
Definition: xsdatapacket.cpp:999
XsDataPacket_copy
void XsDataPacket_copy(XsDataPacket *copy, XsDataPacket const *src)
Copy the XsDataPacket to copy.
Definition: xsdatapacket.cpp:475
XsDataPacket_setOrientationIncrement
void XsDataPacket_setOrientationIncrement(XsDataPacket *thisPtr, const XsQuaternion *quat)
Add/update delta quaternion data for the item.
Definition: xsdatapacket.cpp:834
XsDataPacket_setGnssAge
void XsDataPacket_setGnssAge(XsDataPacket *thisPtr, uint8_t age)
Sets or updates the GnssAge value in the datapacket.
Definition: xsdatapacket.cpp:2165
XsDataPacket_fullSnapshot
XsSnapshot * XsDataPacket_fullSnapshot(const XsDataPacket *thisPtr, XsSnapshot *returnVal)
Returns the Full Snapshot part of the XsDataPacket.
Definition: xsdatapacket.cpp:2327
XsDataPacket_orientationEuler
XsEuler * XsDataPacket_orientationEuler(const XsDataPacket *thisPtr, XsEuler *returnVal, XsDataIdentifier coordinateSystem)
Return the orientation component of a data item as a euler angles.
Definition: xsdatapacket.cpp:1026
XDI_SubFormatDouble
@ XDI_SubFormatDouble
Double format.
Definition: xsdataidentifier.h:97
XsDataPacket_containsPressure
int XsDataPacket_containsPressure(const XsDataPacket *thisPtr)
Check if data item contains pressure data.
Definition: xsdatapacket.cpp:1175
XsDataPacket_containsPressureAge
int XsDataPacket_containsPressureAge(const XsDataPacket *thisPtr)
Check if data item contains pressure age data.
Definition: xsdatapacket.cpp:1183
XsDataPacket::d
struct XSNOEXPORT DataPacketPrivate * d
Definition: xsdatapacket.h:1538
XsDataPacket_status
uint32_t XsDataPacket_status(const XsDataPacket *thisPtr)
The status component of a data item.
Definition: xsdatapacket.cpp:1719
xsmatrix3x3.h
XDI_RawSigned
@ XDI_RawSigned
Tracker produces signed raw values, usually fixed behavior.
Definition: xsdataidentifier.h:158
XDI_Temperature
@ XDI_Temperature
Temperature.
Definition: xsdataidentifier.h:103
XDI_RawBlob
@ XDI_RawBlob
Raw blob data.
Definition: xsdataidentifier.h:166
XsDataPacket_triggerIndication
XsTriggerIndicationData * XsDataPacket_triggerIndication(const XsDataPacket *thisPtr, XsDataIdentifier triggerId, XsTriggerIndicationData *returnVal)
Returns the trigger indication data of a packet If the packet does not contain the requested data,...
Definition: xsdatapacket.cpp:1785
XsDataPacket_containsRateOfTurnHR
int XsDataPacket_containsRateOfTurnHR(const XsDataPacket *thisPtr)
Check if data item contains RateOfTurnHR.
Definition: xsdatapacket.cpp:2605
XsDataPacket_setAccelerationHR
void XsDataPacket_setAccelerationHR(XsDataPacket *thisPtr, const XsVector *vec)
Add/update the AccelerationHR for the item.
Definition: xsdatapacket.cpp:2588
XDI_GloveSnapshotRight
@ XDI_GloveSnapshotRight
Glove Snapshot for Right Hand.
Definition: xsdataidentifier.h:182
XsSize
size_t XsSize
XsSize must be unsigned number!
Definition: xstypedefs.h:74
XsMatrix3x3
A class that represents a fixed size (3x3) matrix.
Definition: xsmatrix3x3.h:95
XsPressure::m_pressureAge
uint8_t m_pressureAge
Age of pressure data in samples.
Definition: xspressure.h:134
XsDataPacket_containsVelocityIncrement
int XsDataPacket_containsVelocityIncrement(const XsDataPacket *thisPtr)
Check if data item contains delta velocity data.
Definition: xsdatapacket.cpp:773
XsDataPacket_velocityIncrement
XsVector * XsDataPacket_velocityIncrement(const XsDataPacket *thisPtr, XsVector *returnVal)
The delta velocity (deltaV) component of a data item.
Definition: xsdatapacket.cpp:765
xsdatapacket.h
genericSet
void genericSet(XsDataPacket *thisPtr, T const *val, XsDataIdentifier id)
Definition: xsdatapacket.cpp:278
XsDataPacket_containsRssi
int XsDataPacket_containsRssi(const XsDataPacket *thisPtr)
Returns whether the datapacket contains an rssi value.
Definition: xsdatapacket.cpp:2082
XsDataPacket_setSampleTime64
void XsDataPacket_setSampleTime64(XsDataPacket *thisPtr, uint64_t counter)
Add/update sample tine coarse data for the item.
Definition: xsdatapacket.cpp:1978
genericGet
T * genericGet(const XsDataPacket *thisPtr, T *returnVal, XsDataIdentifier id, T const &failValue=T())
Definition: xsdatapacket.cpp:266
XsDataPacket_setCorrectedMagneticField
void XsDataPacket_setCorrectedMagneticField(XsDataPacket *thisPtr, const XsVector *vec)
Add/update corrected magnetometer data for the item (ICC result).
Definition: xsdatapacket.cpp:952
XHI_LeftHand
@ XHI_LeftHand
The Left Hand.
Definition: xshandid.h:77
XsDataPacket_setRawBlob
void XsDataPacket_setRawBlob(XsDataPacket *thisPtr, const XsByteArray *data)
Sets the raw blob part of the XsDataPacket.
Definition: xsdatapacket.cpp:2563
XsDataPacket_containsCalibratedGyroscopeData
int XsDataPacket_containsCalibratedGyroscopeData(const XsDataPacket *thisPtr)
Check if data item contains calibrated gyroscope data.
Definition: xsdatapacket.cpp:853
XsPressure::m_pressure
double m_pressure
Pressure in Pascal.
Definition: xspressure.h:133
XsDataPacket_calibratedAcceleration
XsVector * XsDataPacket_calibratedAcceleration(const XsDataPacket *thisPtr, XsVector *returnVal)
The calibrated accelerometer component of a data item.
Definition: xsdatapacket.cpp:792
XsDataPacket_setPacketCounter8
void XsDataPacket_setPacketCounter8(XsDataPacket *thisPtr, uint8_t counter)
Add/update 8 bit packet counter data for the item.
Definition: xsdatapacket.cpp:1830
XsDataPacket_containsSampleTimeFine
int XsDataPacket_containsSampleTimeFine(const XsDataPacket *thisPtr)
Check if data item XsDataPacket_contains a sample time fine.
Definition: xsdatapacket.cpp:1887
XsDataPacket_calibratedMagneticField
XsVector * XsDataPacket_calibratedMagneticField(const XsDataPacket *thisPtr, XsVector *returnVal)
The calibrated magnetometer component of a data item.
Definition: xsdatapacket.cpp:872
XDI_CoordSysMask
@ XDI_CoordSysMask
Mask for the coordinate system part of the orientation data identifier.
Definition: xsdataidentifier.h:118
XsDataPacket_rawGyroscopeData
XsUShortVector * XsDataPacket_rawGyroscopeData(const XsDataPacket *thisPtr, XsUShortVector *returnVal)
The raw gyroscope component of a data item.
Definition: xsdatapacket.cpp:586
XsMessage
Structure for storing a single message.
Definition: xsmessage.h:202
XsDataPacket_containsSampleTimeCoarse
int XsDataPacket_containsSampleTimeCoarse(const XsDataPacket *thisPtr)
Check if data item XsDataPacket_contains a sample time coarse.
Definition: xsdatapacket.cpp:1916
XDI_DeltaQ
@ XDI_DeltaQ
DeltaQ SDI data.
Definition: xsdataidentifier.h:153
XDI_SubFormatMask
@ XDI_SubFormatMask
Determines, float, fp12.20, fp16.32, double output... (where applicable)
Definition: xsdataidentifier.h:93
XsDataPacket_itemCount
int XsDataPacket_itemCount(const XsDataPacket *thisPtr)
Returns the number of individual items in the XsDataPacket.
Definition: xsdatapacket.cpp:514
xsmath.h
XsDeviceId
Contains an Xsens device ID and provides operations for determining the type of device.
Definition: xsdeviceid.h:192
XsPressure
Pressure data.
Definition: xspressure.h:73
XsDataPacket_setRawGnssSatInfo
void XsDataPacket_setRawGnssSatInfo(XsDataPacket *thisPtr, const XsRawGnssSatInfo *data)
Sets or updates the RawGnssSatInfo value in the datapacket.
Definition: xsdatapacket.cpp:2190
XDI_FreeAcceleration
@ XDI_FreeAcceleration
Free acceleration output in m/s2.
Definition: xsdataidentifier.h:132
XsCalibratedData
Container for combined calibrated measurement data from accelerometers, gyroscopes and magnetometers.
Definition: xscalibrateddata.h:87
XsDataPacket_containsDetailedStatus
int XsDataPacket_containsDetailedStatus(const XsDataPacket *thisPtr)
Check if data item contains detailed status data.
Definition: xsdatapacket.cpp:1735
XsDataPacket::m_deviceId
XsDeviceId m_deviceId
The device Id to which the message belongs.
Definition: xsdatapacket.h:1540
XsDataPacket_analogIn1Data
XsAnalogInData * XsDataPacket_analogIn1Data(const XsDataPacket *thisPtr, XsAnalogInData *returnVal)
The analog in 1 component of a data item.
Definition: xsdatapacket.cpp:1397
unsigned_cast
static XsReal unsigned_cast(uint16_t v)
helper for XsDataPacket_convertRawVector
Definition: xsdatapacket.cpp:543
XsDataPacket_setUtcTime
void XsDataPacket_setUtcTime(XsDataPacket *thisPtr, const XsTimeInfo *data)
Add/update utc time data for the item.
Definition: xsdatapacket.cpp:2005
XsDataPacket_altitudeMsl
double XsDataPacket_altitudeMsl(const XsDataPacket *thisPtr)
The position altitude above MSL component of a data item.
Definition: xsdatapacket.cpp:1563
XsDataPacket_rawTemperature
uint16_t XsDataPacket_rawTemperature(const XsDataPacket *thisPtr)
The raw temperature component of a data item.
Definition: xsdatapacket.cpp:639
XsDataPacket_rawAccelerationConverted
XsVector * XsDataPacket_rawAccelerationConverted(const XsDataPacket *thisPtr, XsVector *returnVal)
The raw accelerometer component of a data item, converted to floating point values.
Definition: xsdatapacket.cpp:2499
xsrssi.h
XsDataPacket_privateCount
int XsDataPacket_privateCount()
Returns the number of private data items for all XsDataPacket combined currently in memory.
Definition: xsdatapacket.cpp:2622
XsDataPacket_setLatitudeLongitude
void XsDataPacket_setLatitudeLongitude(XsDataPacket *thisPtr, const XsVector *data)
Add/update position latitude longitude data for the item.
Definition: xsdatapacket.cpp:1524
XsScrData
Container for raw sensor measurement data.
Definition: xsscrdata.h:79
XDI_RetransmissionFlag
@ XDI_RetransmissionFlag
Bit indicating if the snapshot if from a retransmission.
Definition: xsdataidentifier.h:178
XsDataPacket_containsOrientation
int XsDataPacket_containsOrientation(const XsDataPacket *thisPtr)
Check if data item contains orientation Data of any kind.
Definition: xsdatapacket.cpp:1137
XDI_RawDeltaQ
@ XDI_RawDeltaQ
Raw deltaQ SDI data.
Definition: xsdataidentifier.h:164
XsDataPacket_setRawGyroscopeData
void XsDataPacket_setRawGyroscopeData(XsDataPacket *thisPtr, const XsUShortVector *vec)
Add/update raw gyroscope data for the item.
Definition: xsdatapacket.cpp:602
GenericSimple::set
static void set(XsDataPacket *thisPtr, T val, XsDataIdentifier id)
Definition: xsdatapacket.cpp:303
XsSnapshot
A container for Snapshot data.
Definition: xssnapshot.h:95
XsCalibratedData::m_mag
XsVector3 m_mag
Magnetometer data.
Definition: xscalibrateddata.h:91
XsDataPacket_setRawGnssPvtData
void XsDataPacket_setRawGnssPvtData(XsDataPacket *thisPtr, const XsRawGnssPvtData *r)
Sets or updates the RawGnssPvtData value in the datapacket.
Definition: xsdatapacket.cpp:2116
setRawVector
void setRawVector(XsDataPacket *thisPtr, const XsUShortVector *vec, XsDataIdentifier id, XsUShortVector XsScrData::*field)
Definition: xsdatapacket.cpp:249
XDI_DeltaV
@ XDI_DeltaV
DeltaV SDI data output.
Definition: xsdataidentifier.h:130
XsDataPacket_rawGyroscopeTemperatureDataConverted
XsVector * XsDataPacket_rawGyroscopeTemperatureDataConverted(const XsDataPacket *thisPtr, XsVector *returnVal)
The raw gyroscope temperature component of a data item, converted to floating point values.
Definition: xsdatapacket.cpp:2532
XsDataPacket_setFrameRange
void XsDataPacket_setFrameRange(XsDataPacket *thisPtr, const XsRange *r)
Sets or updates the frame range in the datapacket.
Definition: xsdatapacket.cpp:2063
XsDataPacket_setVelocityIncrement
void XsDataPacket_setVelocityIncrement(XsDataPacket *thisPtr, const XsVector *vec)
Add/update delta velocity data for the item.
Definition: xsdatapacket.cpp:781
XDI_AltitudeMsl
@ XDI_AltitudeMsl
Altitude at Mean Sea Level.
Definition: xsdataidentifier.h:141
XsEuler::XsEuler_fromQuaternion
void XsEuler_fromQuaternion(XsEuler *thisPtr, const XsQuaternion *quat)
Get an euler angle representation of the quaternion.
Definition: xseuler.c:103
XsDataPacket_sampleTime64
uint64_t XsDataPacket_sampleTime64(const XsDataPacket *thisPtr)
Return the full 64-bit sample time of a packet, combined from the fine and coarse sample times or rec...
Definition: xsdatapacket.cpp:1938
XsDataPacket_coordinateSystemOrientation
XsDataIdentifier XsDataPacket_coordinateSystemOrientation(const XsDataPacket *thisPtr)
Returns the coordinate system of the first orientation data of any kind in the packet.
Definition: xsdatapacket.cpp:1167
XsDataPacket_containsAnalogIn1Data
int XsDataPacket_containsAnalogIn1Data(const XsDataPacket *thisPtr)
Check if data item contains analog in 1 data.
Definition: xsdatapacket.cpp:1405
XsCalibratedData::m_acc
XsVector3 m_acc
Accelerometer data.
Definition: xscalibrateddata.h:89
XDI_FullSnapshot
@ XDI_FullSnapshot
Full snapshot.
Definition: xsdataidentifier.h:180
XsDataPacket_isAwindaSnapshotARetransmission
int XsDataPacket_isAwindaSnapshotARetransmission(const XsDataPacket *thisPtr)
Returns true if the contained Awinda Snapshot is marked as a retransmission.
Definition: xsdatapacket.cpp:2384
XsDataPacket_containsRawMagneticField
int XsDataPacket_containsRawMagneticField(const XsDataPacket *thisPtr)
Check if data item contains raw magnetometer data.
Definition: xsdatapacket.cpp:621
XsMatrix::XsMatrix_fromQuaternion
void XsMatrix_fromQuaternion(XsMatrix *thisPtr, const XsQuaternion *quat)
Get an orientation matrix representation of the quaternion.
Definition: xsmatrix.c:318
XsDataPacket_rawMagneticFieldConverted
XsVector * XsDataPacket_rawMagneticFieldConverted(const XsDataPacket *thisPtr, XsVector *returnVal)
The raw magnetometer component of a data item, converted to floating point values.
Definition: xsdatapacket.cpp:2521
XsDataPacket_packetCounter
uint16_t XsDataPacket_packetCounter(const XsDataPacket *thisPtr)
Return the packet/frame counter of a packet.
Definition: xsdatapacket.cpp:1844
XsDataPacket_frameRange
XsRange * XsDataPacket_frameRange(const XsDataPacket *thisPtr, XsRange *returnVal)
Returns the frame range contained in the datapacket.
Definition: xsdatapacket.cpp:2045
XsDataPacket_containsSampleTime64
int XsDataPacket_containsSampleTime64(const XsDataPacket *thisPtr)
Check if data item XsDataPacket contains a full 64-bit sample time.
Definition: xsdatapacket.cpp:1969
XsDataPacket_setRawAcceleration
void XsDataPacket_setRawAcceleration(XsDataPacket *thisPtr, const XsUShortVector *vec)
Add/update raw accelerometer data for the item.
Definition: xsdatapacket.cpp:575
XsEuler
Contains Euler Angle data and conversion from Quaternion.
Definition: xseuler.h:92
XDI_GloveSnapshotLeft
@ XDI_GloveSnapshotLeft
Glove Snapshot for Left Hand.
Definition: xsdataidentifier.h:181
XsDataPacket::m_etos
XsTimeStamp m_etos
Estimated Time of Sampling (live packets only)
Definition: xsdatapacket.h:1543
XDI_AltitudeEllipsoid
@ XDI_AltitudeEllipsoid
Altitude at ellipsoid.
Definition: xsdataidentifier.h:142
XsDataPacket_velocityIdentifier
XsDataIdentifier XsDataPacket_velocityIdentifier(const XsDataPacket *thisPtr)
Returns the data identifier of the first velocity data of any kind in the packet.
Definition: xsdatapacket.cpp:1699
XDI_Acceleration
@ XDI_Acceleration
Acceleration output in m/s2.
Definition: xsdataidentifier.h:131
XsDataPacket_containsPacketCounter8
int XsDataPacket_containsPacketCounter8(const XsDataPacket *thisPtr)
Check if data item contains an 8 bit packet counter.
Definition: xsdatapacket.cpp:1822
convertedVector
static XsVector * convertedVector(const XsDataPacket *thisPtr, XsVector *returnVal, XsDataIdentifier id, XsUShortVector XsScrData::*field)
Definition: xsdatapacket.cpp:2473
datapacket_p.h
XsDataPacket_setStoredLocationId
void XsDataPacket_setStoredLocationId(XsDataPacket *thisPtr, uint16_t data)
Add or update location ID for the item.
Definition: xsdatapacket.cpp:1362
XDI_SampleTimeFine
@ XDI_SampleTimeFine
Sample Time Fine.
Definition: xsdataidentifier.h:111
XsDataPacket_containsStatus
int XsDataPacket_containsStatus(const XsDataPacket *thisPtr)
Check if data item contains legacy status data.
Definition: xsdatapacket.cpp:1743
XDI_RawAccGyrMagTemp
@ XDI_RawAccGyrMagTemp
Raw acceleration, gyroscope, magnetometer and temperature data.
Definition: xsdataidentifier.h:159
XsDataPacket_containsCalibratedMagneticField
int XsDataPacket_containsCalibratedMagneticField(const XsDataPacket *thisPtr)
Check if data item contains calibrated magnetometer data.
Definition: xsdatapacket.cpp:880
XDI_MagneticFieldCorrected
@ XDI_MagneticFieldCorrected
Corrected Magnetic field data in a.u. (ICC result)
Definition: xsdataidentifier.h:174
XDI_PositionEcef
@ XDI_PositionEcef
Position in earth-centered, earth-fixed format.
Definition: xsdataidentifier.h:143
XsVector3
A class that represents a fixed size (3) vector.
Definition: xsvector3.h:95
XsDataPacket_correctedMagneticField
XsVector * XsDataPacket_correctedMagneticField(const XsDataPacket *thisPtr, XsVector *returnVal)
The corrected magnetometer component of a data item (ICC result).
Definition: xsdatapacket.cpp:936
XsDataPacket_awindaSnapshot
XsSnapshot * XsDataPacket_awindaSnapshot(const XsDataPacket *thisPtr, XsSnapshot *returnVal)
Returns the Awinda Snapshot part of the XsDataPacket.
Definition: xsdatapacket.cpp:2359
XsDataPacket_temperature
double XsDataPacket_temperature(const XsDataPacket *thisPtr)
The temperature component of a data item.
Definition: xsdatapacket.cpp:1370
XsDataPacket_setRssi
void XsDataPacket_setRssi(XsDataPacket *thisPtr, int r)
Sets or updates the rssi value in the datapacket.
Definition: xsdatapacket.cpp:2091
XsDataPacket_gnssAge
uint8_t XsDataPacket_gnssAge(const XsDataPacket *thisPtr)
Returns the age of the GNSS data (in samples)
Definition: xsdatapacket.cpp:2149
XsDataPacket_containsStoredLocationId
int XsDataPacket_containsStoredLocationId(const XsDataPacket *thisPtr)
Return non-zero if this data packet stores a location ID.
Definition: xsdatapacket.cpp:1354
XDI_Rssi
@ XDI_Rssi
Rssi information.
Definition: xsdataidentifier.h:195
XsDataPacket_setOrientationMatrix
void XsDataPacket_setOrientationMatrix(XsDataPacket *thisPtr, const XsMatrix *data, XsDataIdentifier coordinateSystem)
Add/update quaternion orientation Data for the item.
Definition: xsdatapacket.cpp:1127
XsDataPacket::m_toa
XsTimeStamp m_toa
Time Of Arrival (live packets only)
Definition: xsdatapacket.h:1541
XsDataPacket_containsCalibratedAcceleration
int XsDataPacket_containsCalibratedAcceleration(const XsDataPacket *thisPtr)
Check if data item contains calibrated accelerometer data.
Definition: xsdatapacket.cpp:800
XDI_GnssAge
@ XDI_GnssAge
Gnss age from the GNSS receiver.
Definition: xsdataidentifier.h:109
XDI_RawDeltaV
@ XDI_RawDeltaV
Raw deltaV SDI data.
Definition: xsdataidentifier.h:165
XsDataPacket_setSampleTimeCoarse
void XsDataPacket_setSampleTimeCoarse(XsDataPacket *thisPtr, uint32_t counter)
Add/update sample tine coarse data for the item.
Definition: xsdatapacket.cpp:1924
XsDataPacket_setAltitudeMsl
void XsDataPacket_setAltitudeMsl(XsDataPacket *thisPtr, double data)
Add/update altitude above MSL data for the item.
Definition: xsdatapacket.cpp:1581
XsDataPacket_containsTemperature
int XsDataPacket_containsTemperature(const XsDataPacket *thisPtr)
Check if data item contains temperature data.
Definition: xsdatapacket.cpp:1378
XsDataPacket_velocity
XsVector * XsDataPacket_velocity(const XsDataPacket *thisPtr, XsVector *returnVal, XsDataIdentifier coordinateSystem)
The velocity NWU component of a data item.
Definition: xsdatapacket.cpp:1593
XsDataPacket_setStatus
void XsDataPacket_setStatus(XsDataPacket *thisPtr, uint32_t data)
Add/update status data for the item.
Definition: xsdatapacket.cpp:1768
XDI_CoordSysNed
@ XDI_CoordSysNed
North East Down orientation output.
Definition: xsdataidentifier.h:120
XDI_AwindaSnapshot
@ XDI_AwindaSnapshot
Awinda type snapshot.
Definition: xsdataidentifier.h:179
XsGloveData::XsGloveData_destruct
void XsGloveData_destruct(struct XsGloveData *thisPtr)
Destruct an XsGloveData object.
Definition: xsglovedata.c:92
XsDataPacket_setGloveSnapshot
void XsDataPacket_setGloveSnapshot(XsDataPacket *thisPtr, XsGloveSnapshot const *data, int retransmission, XsHandId hand)
Sets the Glove Snapshot part of the XsDataPacket.
Definition: xsdatapacket.cpp:2441
XsDataPacket_containsUtcTime
int XsDataPacket_containsUtcTime(const XsDataPacket *thisPtr)
Check if data item contains utc time data.
Definition: xsdatapacket.cpp:1997
XDI_PressureAge
@ XDI_PressureAge
Age of a pressure sample, in packet counts.
Definition: xsdataidentifier.h:110
XsDataPacket_orientationIdentifier
XsDataIdentifier XsDataPacket_orientationIdentifier(const XsDataPacket *thisPtr)
Returns the data identifier of the first orientation data of any kind in the packet.
Definition: xsdatapacket.cpp:1147
XsDataPacket_rawGnssSatInfo
XsRawGnssSatInfo * XsDataPacket_rawGnssSatInfo(const XsDataPacket *thisPtr, XsRawGnssSatInfo *returnVal)
Returns a struct with RawGnssSatInfo.
Definition: xsdatapacket.cpp:2174
XDI_StatusWord
@ XDI_StatusWord
Status word.
Definition: xsdataidentifier.h:194
XsQuaternion::XsQuaternion_fromEulerAngles
void XsQuaternion_fromEulerAngles(XsQuaternion *thisPtr, const XsEuler *src)
Create a quaternion representation from euler angles.
Definition: xsquaternion.c:146
XsDataPacket_setPacketCounter
void XsDataPacket_setPacketCounter(XsDataPacket *thisPtr, uint16_t counter)
Add/update packet counter data for the item.
Definition: xsdatapacket.cpp:1869
XsDataPacket_containsAltitude
int XsDataPacket_containsAltitude(const XsDataPacket *thisPtr)
Check if data item contains position altitude data.
Definition: xsdatapacket.cpp:1544
XDI_EulerAngles
@ XDI_EulerAngles
Orientation in euler angles format.
Definition: xsdataidentifier.h:124
XDI_RawGyroTemp
@ XDI_RawGyroTemp
Raw gyroscope and temperature data.
Definition: xsdataidentifier.h:160
XDI_AccelerationHR
@ XDI_AccelerationHR
AccelerationHR output.
Definition: xsdataidentifier.h:133
XsDataPacket_containsRawGyroscopeData
int XsDataPacket_containsRawGyroscopeData(const XsDataPacket *thisPtr)
Check if data item contains raw gyroscope data.
Definition: xsdatapacket.cpp:594
XDI_VelocityXYZ
@ XDI_VelocityXYZ
Velocity in XYZ coordinate frame.
Definition: xsdataidentifier.h:190
XsUShortVector::m_data
unsigned short m_data[3]
vector component storage
Definition: xsushortvector.h:166
XsMessage_getDataShort
uint16_t XsMessage_getDataShort(XsMessage const *thisPtr, XsSize offset)
Returns the short value at offset in the data of the message.
Definition: xsmessage.c:492
XsTimeInfo
A structure for storing Time values.
Definition: xstimeinfo.h:87


xsens_mti_driver
Author(s):
autogenerated on Sun Sep 3 2023 02:43:20