MRPT  1.9.9
xsmessage.h
Go to the documentation of this file.
1 /* +------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | https://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2019, Individual contributors, see AUTHORS file |
6  | See: https://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See: https://www.mrpt.org/License |
8  +------------------------------------------------------------------------+ */
9 #ifndef XSMESSAGE_H
10 #define XSMESSAGE_H
11 
12 #include "pstdint.h"
13 #include "xsbytearray.h"
14 #include "xsdataidentifier.h"
15 #include "xstypesconfig.h"
16 #include "xsxbusmessageid.h"
17 
18 struct XsMessage;
19 struct XsMessageHeader;
20 
21 #ifdef __cplusplus
22 extern "C"
23 {
24 #else
25 #define XSMESSAGE_INITIALIZER \
26  { \
27  XSBYTEARRAY_INITIALIZER, 1, 0 \
28  }
29 typedef struct XsMessage XsMessage;
31 #endif
32 
35  XsMessage* thisPtr, XsSize dataSize);
37  XsMessage* thisPtr, XsMessage const* src);
38  XSTYPES_DLL_API void XsMessage_assign(XsMessage* thisPtr, XsSize dataSize);
40  XsMessage* thisPtr, XsSize msgSize, unsigned char const* src);
46  XsMessage const* thisPtr, XsSize offset);
48  XsMessage const* thisPtr);
58  XsMessage const* thisPtr, XsSize offset);
60  XsMessage const* thisPtr, XsSize offset);
62  XsMessage const* thisPtr, XsSize offset);
64  XsMessage const* thisPtr, XsSize offset);
66  XsMessage const* thisPtr, XsSize offset);
68  XsMessage* thisPtr, uint8_t value, XsSize offset);
70  XsMessage* thisPtr, uint16_t value, XsSize offset);
72  XsMessage* thisPtr, uint32_t value, XsSize offset);
74  XsMessage* thisPtr, float value, XsSize offset);
76  XsMessage* thisPtr, double value, XsSize offset);
78  XsMessage* thisPtr, double value, XsSize offset);
80  XsMessage* thisPtr, double value, XsSize offset);
82  XsMessage* thisPtr, const uint8_t* buffer, XsSize size, XsSize offset);
88  XsMessage const* thisPtr);
89  XSTYPES_DLL_API int XsMessage_empty(XsMessage const* thisPtr);
91  XsMessage* thisPtr, XsSize newSize);
94  XsMessage* thisPtr, XsXbusMessageId msgId);
96  XsMessage* thisPtr, XsSize count, XsSize offset);
98  XsMessage* thisPtr, XsSize count, XsSize offset);
100  XsMessage const* thisPtr, uint64_t outputSettings, double* dest,
101  XsSize offset, XsSize numValues);
103  XsMessage* thisPtr, uint64_t outputSettings, double const* data,
104  XsSize offset, XsSize numValues);
106  XsMessage const* thisPtr, XsDataIdentifier dataIdentifier, double* dest,
107  XsSize offset, XsSize numValues);
109  XsMessage* thisPtr, XsDataIdentifier dataIdentifier, double const* data,
110  XsSize offset, XsSize numValues);
112  XsMessage const* a, XsMessage const* b);
113 
114 #ifdef __cplusplus
115 } // extern "C"
116 #endif
117 
118 #define XS_PREAMBLE 0xFA
119 #define XS_EXTLENCODE 0xFF
120 
121 #define XS_LEN_MSGHEADER 4
122 #define XS_LEN_MSGEXTHEADER 6
123 #define XS_LEN_MSGHEADERCS 5
124 #define XS_LEN_MSGEXTHEADERCS 7
125 #define XS_LEN_CHECKSUM 1
126 #define XS_LEN_UNSIGSHORT 2
127 #define XS_LEN_UNSIGINT 4
128 #define XS_LEN_FLOAT 4
129 
130 // Maximum message/data length
131 #define XS_MAXDATALEN (8192 - XS_LEN_MSGEXTHEADERCS)
132 #define XS_MAXSHORTDATALEN 254
133 #define XS_MAXMSGLEN (XS_MAXDATALEN + XS_LEN_MSGEXTHEADERCS)
134 #define XS_MAXSHORTMSGLEN (XS_MAXSHORTDATALEN + XS_LEN_MSGHEADERCS)
135 #define XS_MAXGARBAGE (XS_MAXMSGLEN + 1)
136 
137 //////////////////////////////////////////////////////////////////////////////////////////
138 // different alignment commands for gcc / MSVS, the structure needs to be 1-byte
139 // aligned.
140 #ifdef _MSC_VER
141 #pragma pack(push, 1)
142 #ifndef PACK_POST
143 #define PACK_POST
144 #endif
145 #else
146 #ifndef PACK_POST
147 #define PACK_POST __attribute__((__packed__))
148 #endif
149 #endif
150 /*! \brief A message header
151  \details This structure is used to interpret the header of a message.
152 */
154 {
155  /** \brief The message preamble (always 0xFA) */
157  /** \brief The bus ID \sa XS_BID_MASTER XS_BID_BROADCAST XS_BID_MT */
159  /** \brief The message ID \sa XsXbusMessageId */
161  /** \brief The length of the message \details A length of 255 means extended
162  * length is used */
164  // lint --e{18}
165  //! \brief Contains optional extended length of message and first byte of
166  //! data buffer
167  union LengthData {
168  //! \brief Contains extended length information and first byte of data
169  //! buffer if normal length is 255
171  {
172  //! \brief The high and low byte of the extended length
174  {
175  /** \brief High byte of extended length */
177  /** \brief Low byte of extended length */
179  /** \brief Extended length, only valid if normal length is 255
180  */
181  } m_length;
182  /** \brief The first byte of the data buffer, the data buffer is
183  * always at least 1 byte since it has to contain the checksum, but
184  * it can be bigger. */
186  /** \brief The extended length, only valid if normal length is 255
187  */
188  } m_extended;
189  /** \brief The first byte of the data buffer if length < 255, the data
190  * buffer is always at least 1 byte since it has to contain the
191  * checksum, but it can be bigger. */
193  /** \brief Data or length and data */
194  } m_datlen;
195 } PACK_POST; // lint !e659
196 #ifdef _MSC_VER
197 #pragma pack(pop)
198 #endif
199 
200 //////////////////////////////////////////////////////////////////////////////////////////
201 //! \brief Structure for storing a single message.
202 struct XsMessage
203 {
204 #ifdef __cplusplus
205  /*! \brief Create a XsMessage object with the given data length and message
206  Id.
207 
208  The function allocates enough memory to hold an entire message with the
209  given
210  data length.
211  \param msgId The message Id that will be assigned to the
212  m_messageId field.
213  \param dataLength The length of the data in the message.
214  */
215  explicit XsMessage(
216  XsXbusMessageId msgId = XMID_InvalidMessage, XsSize dataLength = 0)
218  {
219  XsMessage_constructSized(this, dataLength);
220  XsMessage_setMessageId(this, msgId);
221  }
222 
223  /*! \brief Create a message from the given source string
224 
225  This is done through a simple memory copy. The number of bytes copied is
226  taken
227  from the data in the message (so the message is interpreted first).
228  Note that this does NOT recompute the checksum, nor is it checked.
229 
230  \param source The source string containing message data
231  \param size The size of the source string
232  */
235  {
236  XsMessage_load(this, size, source);
237  }
238 
239  //! \brief Copy constructor
240  XsMessage(const XsMessage& src)
241  : m_message(src.m_message),
242  m_autoUpdateChecksum(src.m_autoUpdateChecksum),
243  m_checksum(0)
244  {
245  updateChecksumPtr();
246  }
247 
248  //! Destroy the message
249  ~XsMessage() { XsMessage_destruct(this); }
250  //! \brief Clear all data in the message
251  void clear(void) { XsMessage_destruct(this); }
252  /*! \brief Test if this message is empty
253 
254  \returns true if this message is empty, false otherwise
255  */
256  bool empty(void) const { return 0 != XsMessage_empty(this); }
257  //! Return the busId header field.
258  uint8_t getBusId(void) const
259  {
260  const XsMessageHeader* hdr = XsMessage_getConstHeader(this);
261  if (!hdr) return 0;
262  return hdr->m_busId;
263  }
264 
265  /*! \copydoc XsMessage_constData
266  */
267  const uint8_t* getDataBuffer(XsSize offset = 0) const
268  {
269  return XsMessage_constData(this, offset);
270  }
271 
272  /*! \copydoc XsMessage_getDataByte
273  */
274  uint8_t getDataByte(XsSize offset = 0) const
275  {
276  return XsMessage_getDataByte(this, offset);
277  }
278 
279  /*! \copydoc XsMessage_getDataDouble
280  */
281  double getDataDouble(XsSize offset = 0) const
282  {
283  return XsMessage_getDataDouble(this, offset);
284  }
285 
286  /*! \copydoc XsMessage_getDataFloat
287  */
288  float getDataFloat(XsSize offset = 0) const
289  {
290  return XsMessage_getDataFloat(this, offset);
291  }
292 
293  /*! \copydoc XsMessage_getDataF1220
294  */
295  double getDataF1220(XsSize offset = 0) const
296  {
297  return XsMessage_getDataF1220(this, offset);
298  }
299 
300  /*! \copydoc XsMessage_getDataFP1632
301  */
302  double getDataFP1632(XsSize offset = 0) const
303  {
304  return XsMessage_getDataFP1632(this, offset);
305  }
306 
307  /*! \copydoc XsMessage_getDataLong
308  */
309  uint32_t getDataLong(XsSize offset = 0) const
310  {
311  return XsMessage_getDataLong(this, offset);
312  }
313 
314  /*! \copydoc XsMessage_getDataShort
315  */
316  uint16_t getDataShort(XsSize offset = 0) const
317  {
318  return XsMessage_getDataShort(this, offset);
319  }
320 
321  /*! \copydoc XsMessage_dataSize
322  */
323  XsSize getDataSize(void) const { return XsMessage_dataSize(this); }
324  //! Return the current value of the m_messageId field.
325  XsXbusMessageId getMessageId(void) const
326  {
327  const XsMessageHeader* hdr = XsMessage_getConstHeader(this);
328  if (!hdr) return XMID_InvalidMessage;
329  return (XsXbusMessageId)hdr->m_messageId;
330  }
331 
332  /*! \copydoc XsMessage_getMessageStart
333  */
334  const uint8_t* getMessageStart(void) const
335  {
336  return XsMessage_getMessageStart(this);
337  }
338 
339  /*! \copydoc XsMessage_getTotalMessageSize
340  */
341  XsSize getTotalMessageSize(void) const
342  {
343  return XsMessage_getTotalMessageSize(this);
344  }
345 
346  /*! \copydoc XsMessage_isChecksumOk
347  */
348  bool isChecksumOk(void) const { return 0 != XsMessage_isChecksumOk(this); }
349  /*! \brief Initialize the %XsMessage with the data from \a src
350 
351  \param msgSize the size of the data pointed to by src
352  \param src the data to load the message from
353 
354  \returns true if the checksum of the loaded message is OK.
355  */
356  bool loadFromString(const uint8_t* src, XsSize msgSize)
357  {
358  XsMessage_load(this, msgSize, src);
359  return isChecksumOk();
360  }
361 
362  /*! \copydoc XsMessage_recomputeChecksum
363  */
364  void recomputeChecksum(void) { XsMessage_recomputeChecksum(this); }
365  /*! \copydoc XsMessage_resizeData
366  */
367  void resizeData(XsSize newSize) { XsMessage_resizeData(this, newSize); }
368  /*! \copydoc XsMessage_setBusId
369  */
370  void setBusId(uint8_t busId) { XsMessage_setBusId(this, busId); }
371  /*! \copydoc XsMessage_setDataBuffer
372  */
373  void setDataBuffer(const uint8_t* buffer, XsSize size, XsSize offset = 0)
374  {
376  }
377 
378  /*! \copydoc XsMessage_setDataByte
379  */
380  void setDataByte(const uint8_t value, XsSize offset = 0)
381  {
383  }
384 
385  /*! \copydoc XsMessage_setDataDouble
386  */
387  void setDataDouble(const double value, XsSize offset = 0)
388  {
390  }
391 
392  /*! \copydoc XsMessage_setDataFloat
393  */
394  void setDataFloat(const float value, XsSize offset = 0)
395  {
397  }
398 
399  /*! \copydoc XsMessage_setDataF1220
400  */
401  void setDataF1220(const double value, XsSize offset = 0)
402  {
404  }
405 
406  /*! \copydoc XsMessage_setDataFP1632
407  */
408  void setDataFP1632(const double value, XsSize offset = 0)
409  {
411  }
412 
413  // void setDataFPValue(const uint64_t outputSettings, const double data,
414  // const XsSize offset = 0);
415  // void setDataFPValue(const uint64_t outputSettings, const double *data,
416  // XsSize offset, const uint16_t numValues);
417  // void setDataFPValue(const XsDataIdentifier dataIdentifier, const double
418  // data, const XsSize offset = 0);
419  // void setDataFPValue(const XsDataIdentifier dataIdentifier, const double
420  // *data, XsSize offset, const uint16_t numValues);
421 
422  /*! \copydoc XsMessage_setDataLong
423  */
424  void setDataLong(const uint32_t value, XsSize offset = 0)
425  {
427  }
428 
429  /*! \copydoc XsMessage_setDataShort
430  */
431  void setDataShort(const uint16_t value, XsSize offset = 0)
432  {
434  }
435 
436  /*! \copydoc XsMessage_setMessageId
437  */
438  void setMessageId(const XsXbusMessageId msgId)
439  {
440  XsMessage_setMessageId(this, msgId);
441  }
442 
443  //! Copy message src into this
444  XsMessage& operator=(const XsMessage& src)
445  {
446  if (this != &src) XsMessage_copy(this, &src);
447  return *this;
448  }
449 
450  /*! \copydoc XsMessage_deleteData */
451  void deleteData(XsSize count, XsSize offset = 0)
452  {
454  }
455 
456  /*! \copydoc XsMessage_insertData */
457  void insertData(XsSize count, XsSize offset = 0)
458  {
460  }
461 
462  /*! \copydoc XsMessage_getDataFPValues */
463  void getDataFPValue(
464  uint64_t outputSettings, double* dest, XsSize offset = 0,
465  XsSize numValues = 1) const
466  {
468  this, outputSettings, dest, offset, numValues);
469  }
470 
471  /*! \brief Return current data value as a double(64 bits), after converting
472  it from float, double, FP1632 or FP1220 depending on outputSettings
473 
474  \param outputSettings the output settings containing the current
475  floating/fixed point settings
476  \param offset the offset in the message payload at which to start reading
477 
478  \returns the double precision representation of the value at \a offset
479  */
480  double getDataFPValue(uint64_t outputSettings, XsSize offset = 0) const
481  {
482  double tmp;
483  XsMessage_getDataFPValues(this, outputSettings, &tmp, offset, 1);
484  return tmp;
485  }
486 
487  /*! \copydoc XsMessage_setDataFPValues */
488  void setDataFPValue(
489  uint64_t outputSettings, const double* data, XsSize offset = 0,
490  XsSize numValues = 1)
491  {
493  this, outputSettings, data, offset, numValues);
494  }
495 
496  /*! \brief Write a floating/fixed point value into to the data buffer,
497  conversion depends on outputSettings
498 
499  \param outputSettings MT output settings
500  \param data The data array to be written to the buffer.
501  \param offset Offset in the data buffer from where to start writing.
502 
503  \sa setDataFPValue(uint64_t, const double *, XsSize, XsSize)
504  */
505  void setDataFPValue(uint64_t outputSettings, double data, XsSize offset = 0)
506  {
507  XsMessage_setDataFPValues(this, outputSettings, &data, offset, 1);
508  }
509 
510  /*! \copydoc XsMessage_getDataFPValuesById */
511  void getDataFPValue(
512  XsDataIdentifier dataIdentifier, double* dest, XsSize offset = 0,
513  XsSize numValues = 1) const
514  {
516  this, dataIdentifier, dest, offset, numValues);
517  }
518 
519  /*! \brief Return current data values as double, conversion depends on
520  outputSetting
521 
522  \param dataIdentifier Data identifier containing data precision
523  \param offset offset in the data buffer from where to start reading.
524 
525  \returns the current data value as double
526  */
527  double getDataFPValue(
528  XsDataIdentifier dataIdentifier, XsSize offset = 0) const
529  {
530  double tmp;
531  XsMessage_getDataFPValuesById(this, dataIdentifier, &tmp, offset, 1);
532  return tmp;
533  }
534 
535  /*! \copydoc XsMessage_setDataFPValuesById */
536  void setDataFPValue(
537  XsDataIdentifier dataIdentifier, const double* data, XsSize offset = 0,
538  XsSize numValues = 1)
539  {
541  this, dataIdentifier, data, offset, numValues);
542  }
543 
544  /*! \brief Write a floating/fixed point value into to the data buffer,
545  conversion depends on outputSettings
546 
547  \param dataIdentifier Data Identifier
548  \param data The data array to be written to the buffer.
549  \param offset Offset in the data buffer from where to start writing.
550  */
551  void setDataFPValue(
552  XsDataIdentifier dataIdentifier, double data, XsSize offset = 0)
553  {
554  XsMessage_setDataFPValuesById(this, dataIdentifier, &data, offset, 1);
555  }
556 
557  /*! \brief Return true if \a other is identical to this */
558  inline bool operator==(const XsMessage& other) const
559  {
560  if (this == &other) return true;
561  return m_message == other.m_message;
562  }
563 
564  private:
565  void updateChecksumPtr()
566  {
567  *((uint8_t**)&m_checksum) =
569  }
570 
571 #endif
572 
575  uint8_t* const m_checksum; //! Points to the checksum to speed up automatic
576  //! checksum updates
577 };
578 
579 // some macros to help when constructing/parsing messages
580 #define swapEndian16(src) (((src) >> 8) | ((src) << 8))
581 #define swapEndian32(src) \
582  (((src) >> 24) | (((src) >> 8) & 0xFF00) | (((src) << 8) & 0xFF0000) | \
583  ((src) << 24))
584 #define swapEndian64(src) \
585  (((src >> 56) & 0xFFULL) | ((src >> 40) & 0xFF00ULL) | \
586  ((src >> 24) & 0xFF0000ULL) | ((src >> 8) & 0xFF000000ULL) | \
587  ((src << 8) & 0xFF00000000ULL) | ((src << 24) & 0xFF0000000000ULL) | \
588  ((src << 40) & 0xFF000000000000ULL) | ((src << 56)))
589 
590 #endif // file guard
XSTYPES_DLL_API int XsMessage_empty(XsMessage const *thisPtr)
Contains extended length information and first byte of data buffer if normal length is 255...
Definition: xsmessage.h:170
A message header.
Definition: xsmessage.h:153
XSTYPES_DLL_API double XsMessage_getDataFP1632(XsMessage const *thisPtr, XsSize offset)
union XsMessageHeader::LengthData m_datlen
GLuint GLuint GLsizei count
Definition: glext.h:3532
XSTYPES_DLL_API const uint8_t * XsMessage_constData(XsMessage const *thisPtr, XsSize offset)
XSTYPES_DLL_API XsSize XsMessage_getTotalMessageSize(XsMessage const *thisPtr)
XSTYPES_DLL_API void XsMessage_setMessageId(XsMessage *thisPtr, XsXbusMessageId msgId)
XSTYPES_DLL_API double XsMessage_getDataDouble(XsMessage const *thisPtr, XsSize offset)
XSTYPES_DLL_API uint32_t XsMessage_getDataLong(XsMessage const *thisPtr, XsSize offset)
unsigned __int16 uint16_t
Definition: rptypes.h:47
XSTYPES_DLL_API void XsMessage_setBusId(XsMessage *thisPtr, uint8_t busId)
XSTYPES_DLL_API void XsMessage_setDataFPValuesById(XsMessage *thisPtr, XsDataIdentifier dataIdentifier, double const *data, XsSize offset, XsSize numValues)
Contains optional extended length of message and first byte of data buffer.
Definition: xsmessage.h:167
XSTYPES_DLL_API XsMessageHeader * XsMessage_getHeader(XsMessage *)
GLuint buffer
Definition: glext.h:3928
XSTYPES_DLL_API void XsMessage_setDataFP1632(XsMessage *thisPtr, double value, XsSize offset)
XSTYPES_DLL_API void XsMessage_setDataByte(XsMessage *thisPtr, uint8_t value, XsSize offset)
XSTYPES_DLL_API const uint8_t * XsMessage_getMessageStart(XsMessage const *thisPtr)
#define PACK_POST
Definition: xsmessage.h:147
The high and low byte of the extended length.
Definition: xsmessage.h:173
uint8_t m_length
The length of the message.
Definition: xsmessage.h:163
GLintptr offset
Definition: glext.h:3936
struct XsByteArray XsByteArray
Definition: xsbytearray.h:26
int m_autoUpdateChecksum
Definition: xsmessage.h:574
uint8_t m_busId
The bus ID.
Definition: xsmessage.h:158
XSTYPES_DLL_API void XsMessage_setDataShort(XsMessage *thisPtr, uint16_t value, XsSize offset)
size_t XsSize
XsSize must be unsigned number!
Definition: xstypedefs.h:19
uint8_t m_data[1]
The first byte of the data buffer if length < 255, the data buffer is always at least 1 byte since it...
Definition: xsmessage.h:192
XsDataIdentifier
Defines the data identifiers.
XSTYPES_DLL_API uint8_t XsMessage_getDataByte(XsMessage const *thisPtr, XsSize offset)
GLuint src
Definition: glext.h:7397
XSTYPES_DLL_API void XsMessage_deleteData(XsMessage *thisPtr, XsSize count, XsSize offset)
XSTYPES_DLL_API void XsMessage_getDataFPValuesById(XsMessage const *thisPtr, XsDataIdentifier dataIdentifier, double *dest, XsSize offset, XsSize numValues)
XSTYPES_DLL_API void XsMessage_setDataBuffer(XsMessage *thisPtr, const uint8_t *buffer, XsSize size, XsSize offset)
unsigned char uint8_t
Definition: rptypes.h:44
XSTYPES_DLL_API void XsMessage_destruct(XsMessage *thisPtr)
uint8_t m_data[1]
The first byte of the data buffer, the data buffer is always at least 1 byte since it has to contain ...
Definition: xsmessage.h:185
XSTYPES_DLL_API void XsMessage_setDataF1220(XsMessage *thisPtr, double value, XsSize offset)
XSTYPES_DLL_API int XsMessage_compare(XsMessage const *a, XsMessage const *b)
Structure for storing a single message.
Definition: xsmessage.h:202
XSTYPES_DLL_API void XsMessage_load(XsMessage *thisPtr, XsSize msgSize, unsigned char const *src)
struct XsMessageHeader::LengthData::ExtendedLength::ExtendedParts m_length
GLubyte GLubyte b
Definition: glext.h:6372
XSTYPES_DLL_API double XsMessage_getDataF1220(XsMessage const *thisPtr, XsSize offset)
XSTYPES_DLL_API void XsMessage_copy(XsMessage *copy, XsMessage const *src)
XSTYPES_DLL_API const uint8_t * XsMessage_getDataBuffer(XsMessage const *thisPtr, XsSize offset)
XSTYPES_DLL_API const XsMessageHeader * XsMessage_getConstHeader(XsMessage const *thisPtr)
uint8_t m_preamble
The message preamble (always 0xFA)
Definition: xsmessage.h:156
XSTYPES_DLL_API void XsMessage_swap(XsMessage *a, XsMessage *b)
bool empty() const
Definition: ts_hash_map.h:190
XsXbusMessageId
Xsens Xbus Message Identifiers.
bool operator==(const mrpt::img::TCamera &a, const mrpt::img::TCamera &b)
Definition: TCamera.cpp:202
XSTYPES_DLL_API uint8_t XsMessage_computeChecksum(XsMessage const *thisPtr)
#define XSTYPES_DLL_API
Definition: xstypesconfig.h:9
struct XsMessageHeader::LengthData::ExtendedLength m_extended
unsigned __int64 uint64_t
Definition: rptypes.h:53
XSTYPES_DLL_API void XsMessage_getDataFPValues(XsMessage const *thisPtr, uint64_t outputSettings, double *dest, XsSize offset, XsSize numValues)
XSTYPES_DLL_API XsSize XsMessage_dataSize(XsMessage const *thisPtr)
XSTYPES_DLL_API void XsMessage_constructSized(XsMessage *thisPtr, XsSize dataSize)
uint8_t m_messageId
The message ID.
Definition: xsmessage.h:160
uint8_t *const m_checksum
Definition: xsmessage.h:575
XSTYPES_DLL_API void XsMessage_assign(XsMessage *thisPtr, XsSize dataSize)
XSTYPES_DLL_API void XsMessage_setDataFPValues(XsMessage *thisPtr, uint64_t outputSettings, double const *data, XsSize offset, XsSize numValues)
XSTYPES_DLL_API int XsMessage_isChecksumOk(XsMessage const *thisPtr)
XSTYPES_DLL_API float XsMessage_getDataFloat(XsMessage const *thisPtr, XsSize offset)
GLsizei GLsizei GLchar * source
Definition: glext.h:4097
uint8_t m_high
High byte of extended length.
Definition: xsmessage.h:176
XSTYPES_DLL_API void XsMessage_setDataFloat(XsMessage *thisPtr, float value, XsSize offset)
uint8_t m_low
Low byte of extended length.
Definition: xsmessage.h:178
GLsizei const GLfloat * value
Definition: glext.h:4134
GLsizeiptr size
Definition: glext.h:3934
struct XsMessage XsMessage
Definition: xsmessage.h:29
XSTYPES_DLL_API void XsMessage_construct(XsMessage *thisPtr)
XSTYPES_DLL_API void XsMessage_resizeData(XsMessage *thisPtr, XsSize newSize)
unsigned __int32 uint32_t
Definition: rptypes.h:50
GLsizei GLsizei GLenum GLenum const GLvoid * data
Definition: glext.h:3550
GLubyte GLubyte GLubyte a
Definition: glext.h:6372
XSTYPES_DLL_API void XsMessage_insertData(XsMessage *thisPtr, XsSize count, XsSize offset)
XSTYPES_DLL_API void XsMessage_setDataLong(XsMessage *thisPtr, uint32_t value, XsSize offset)
void clear()
Clear the contents of this container.
Definition: ts_hash_map.h:182
XSTYPES_DLL_API void XsMessage_setDataDouble(XsMessage *thisPtr, double value, XsSize offset)
XSTYPES_DLL_API void XsMessage_copyConstruct(XsMessage *thisPtr, XsMessage const *src)
XSTYPES_DLL_API uint16_t XsMessage_getDataShort(XsMessage const *thisPtr, XsSize offset)
XsByteArray m_message
Definition: xsmessage.h:573
XSTYPES_DLL_API void XsMessage_recomputeChecksum(XsMessage *thisPtr)



Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: 8fe78517f Sun Jul 14 19:43:28 2019 +0200 at lun oct 28 02:10:00 CET 2019