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



Page generated by Doxygen 1.8.6 for MRPT 1.5.6 Git: 4c65e84 Tue Apr 24 08:18:17 2018 +0200 at mar abr 24 08:26:17 CEST 2018