netmsgs  1.2.2
RoadNarrows Robotics Network Messaging Package
netmsgs.h
Go to the documentation of this file.
1 ///////////////////////////////////////////////////////////////////////////////
2 //
3 // File: netmsgs.h
4 //
5 /*!
6  * \file
7  *
8  * $LastChangedDate: 2010-07-31 08:48:56 -0600 (Sat, 31 Jul 2010) $
9  * $Rev: 521 $
10  *
11  * \brief Network Messaging declarations.
12  *
13  * \note This file must be swig-able to generate a python extension module.
14  *
15  * \author Robin Knight (robin.knight@roadnarrows.com)
16  *
17  * \copyright
18  * \h_copy 2009-2017. RoadNarrows LLC.\n
19  * http://www.roadnarrows.com\n
20  * All Rights Reserved
21  */
22 // Permission is hereby granted, without written agreement and without
23 // license or royalty fees, to use, copy, modify, and distribute this
24 // software and its documentation for any purpose, provided that
25 // (1) The above copyright notice and the following two paragraphs
26 // appear in all copies of the source code and (2) redistributions
27 // including binaries reproduces these notices in the supporting
28 // documentation. Substantial modifications to this software may be
29 // copyrighted by their authors and need not follow the licensing terms
30 // described here, provided that the new terms are clearly indicated in
31 // all files where they apply.
32 //
33 // IN NO EVENT SHALL THE AUTHOR, ROADNARROWS LLC, OR ANY MEMBERS/EMPLOYEES
34 // OF ROADNARROW LLC OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY
35 // PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
36 // DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION,
37 // EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF
38 // THE POSSIBILITY OF SUCH DAMAGE.
39 //
40 // THE AUTHOR AND ROADNARROWS LLC SPECIFICALLY DISCLAIM ANY WARRANTIES,
41 // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
42 // FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN
43 // "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO
44 // PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
45 //
46 ///////////////////////////////////////////////////////////////////////////////
47 
48 
49 #ifndef _NETMSGS_H
50 #define _NETMSGS_H
51 
52 #include <stdio.h>
53 
54 #include "rnr/rnrconfig.h"
55 
56 #ifndef SWIG
57 C_DECLS_BEGIN
58 #endif
59 
60 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61 // Base Defines and Types
62 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63 
64 /*!
65  * \ingroup man_libnetmsgs_ecodes NetMsgs Error Codes
66  *
67  * NetMsgs package-wide error codes.
68  * \{
69  */
70 #define NM_OK 0 ///< not an error, success
71 
72 #define NM_ECODE_GEN 1 ///< general, unspecified error
73 #define NM_ECODE_NOMEM 2 ///< not enough buffer memory available
74 #define NM_ECODE_ARCH_NOTSUP 3 ///< machine architecture not supported
75 #define NM_ECODE_RANGE 4 ///< field size or value out-of-range
76 #define NM_ECODE_FTYPE 5 ///< unknown field type
77 #define NM_ECODE_EMSG 6 ///< bad message
78 #define NM_ECODE_MSGID 7 ///< bad/unknown message id
79 
80 #define NM_ECODE_INTERNAL 8 ///< internal inconsistency or bug
81 #define NM_ECODE_BADEC 9 ///< internal inconsistency or bug
82 #define NM_ECODE_NUMOF 10 ///< number of error codes
83 
84 /*! \} */
85 
86 /*!
87  * Message Encoding Type Enumeration
88  */
89 typedef enum
90 {
91  NMEncodingFlat, ///< flat (no field header and fixed size) encoding
92  NMEncodingITV, ///< id-type-value encoding
93  NMEncodingCLI, ///< command-line interface encoding (future)
94  NMEncodingNumOf ///< number of different encodings supported
95 } NMEncoding_T;
96 
97 /*!
98  * Message Byte Ordering Type Enumeration
99  */
100 typedef enum
101 {
102  NMEndianBig, ///< Most Significant Byte first
103  NMEndianLittle, ///< Least Significant Byte first
104  NMEndianNative ///< native processor order
105 } NMEndian_T;
106 
107 /*!
108  * Message Field Type Code Enumeration
109  */
110 typedef enum
111 {
112  NMFTypeNone = 0, ///< no field type -
113  NMFTypePadTr = 0, ///< translated pad type for packed stream
114 
115  // enum value message field C data type
116  // ---- ----- ------------- ------------
117  NMFTypeBool = '?', ///< 8-bit bool 0/1 bool_t
118  NMFTypeU8 = 'B', ///< unsigned 8-bit integer unsigned char
119  NMFTypeByte = 'B', ///< U8 alias
120  NMFTypeF64 = 'F', ///< 64-bit IEEE 754 FPN double
121  NMFTypeDouble = 'F', ///< F64 alias
122  NMFTypeU16 = 'H', ///< unsigned 16-bit integer unsigned short
123  NMFTypeUShort = 'H', ///< U16 alias
124  NMFTypeU32 = 'I', ///< unsigned 32-bit integer unsigned int
125  NMFTypeUInt = 'I', ///< U32 alias
126  NMFTypeP64 = 'P', ///< 64-bit pointer (overloaded) void*
127  NMFTypeLongPointer = 'P', ///< P64 alias
128  NMFTypeU64 = 'Q', ///< unsigned 64-bit integer unsigned long long
129  NMFTypeULongLong = 'Q', ///< U64 alias
130  NMFTypeVector = '[', ///< one dimensional array VType[]
131  NMFTypeS8 = 'b', ///< signed 8-bit integer signed char
132  NMFTypeSChar = 'b', ///< S8 alias
133  NMFTypeChar = 'c', ///< 8-bit ASCII characters char
134  NMFTypeF32 = 'f', ///< 32-bit IEEE 754 FPN float
135  NMFTypeFloat = 'f', ///< F32 alias
136  NMFTypeS16 = 'h', ///< signed 16-bit integer short
137  NMFTypeShort = 'h', ///< S16 alias
138  NMFTypeS32 = 'i', ///< signed 32-bit integer int
139  NMFTypeInt = 'i', ///< S32 alias
140  NMFTypeP32 = 'p', ///< 32-bit pointer (overloaded) void*
141  NMFTypePointer = 'p', ///< P32 alias
142  NMFTypeS64 = 'q', ///< signed 64-bit integer long long
143  NMFTypeLongLong = 'q', ///< S64 alias
144  NMFTypeString = 's', ///< string char[]
145  NMFTypePad = 'x', ///< pad internal field type
146  NMFTypeStruct = '{', ///< structure struct T
147 
148  NMFTypeNumOf = 18 ///< number of
149 } NMFType_T;
150 
151 /*!
152  * \brief Returns true if field type is a compoound type.
153  *
154  * \param ft Field type.
155  */
156 #define NMFTYPE_IS_COMPOUND(ft) \
157  (((ft)==NMFTypeString) || ((ft)==NMFTypeStruct) || ((ft)==NMFTypeVector))
158 
159 /*!
160  * \brief Returns true if field type is a simple type.
161  *
162  * \param ft Field type.
163  */
164 #define NMFTYPE_IS_SIMPLE(ft) (!NMFTYPE_IS_COMPOUND(ft))
165 
166 
167 /*!
168  * Message packed field value lengths in bytes.
169  */
170 // base
171 #define NMFVAL_LEN_CHAR 1 ///< character field length
172 #define NMFVAL_LEN_U8 1 ///< unsigned 8-bit field value length
173 #define NMFVAL_LEN_S8 1 ///< signed 8-bit field value length
174 #define NMFVAL_LEN_BOOL 1 ///< boolean field length
175 #define NMFVAL_LEN_U16 2 ///< unsigned 16-bit field value length
176 #define NMFVAL_LEN_S16 2 ///< signed 16-bit field value length
177 #define NMFVAL_LEN_U32 4 ///< unsigned 32-bit field value length
178 #define NMFVAL_LEN_S32 4 ///< signed 32-bit field value length
179 #define NMFVAL_LEN_U64 8 ///< unsigned 64-bit field value length
180 #define NMFVAL_LEN_S64 8 ///< signed 64-bit field value length
181 #define NMFVAL_LEN_F32 4 ///< 32-bit floating-point number field val len
182 #define NMFVAL_LEN_F64 8 ///< 64-bit floating-point number field val len
183 #define NMFVAL_LEN_P32 4 ///< 32-bit pointer field value length
184 #define NMFVAL_LEN_P64 8 ///< 64-bit pointer field value length
185 
186 // derived and aliases
187 #define NMFVAL_LEN_BYTE NMFVAL_LEN_U8 ///< unsigned char field length
188 #define NMFVAL_LEN_SCHAR NMFVAL_LEN_S8 ///< signed char field length
189 #define NMFVAL_LEN_USHORT NMFVAL_LEN_U16 ///< unsigned short field length
190 #define NMFVAL_LEN_SHORT NMFVAL_LEN_S16 ///< short field length
191 #define NMFVAL_LEN_UINT NMFVAL_LEN_U32 ///< signed int field length
192 #define NMFVAL_LEN_INT NMFVAL_LEN_U32 ///< unsigned int field length
193 #define NMFVAL_LEN_ULONGLONG NMFVAL_LEN_U64 ///< signed long long field length
194 #define NMFVAL_LEN_LONGLONG NMFVAL_LEN_U64 ///< unsigned long long field len
195 #define NMFVAL_LEN_FLOAT NMFVAL_LEN_F32 ///< float field length
196 #define NMFVAL_LEN_DOUBLE NMFVAL_LEN_F64 ///< double field length
197 #define NMFVAL_LEN_POINTER NMFVAL_LEN_P32 ///< 4-byte void* field length
198 #define NMFVAL_LEN_LONGPOINTER NMFVAL_LEN_P64 ///< 8-byte void* field length
199 
200 // complex
201 #define NMFVAL_LEN_STRING 0 ///< char[] variable field length
202 #define NMFVAL_LEN_MAX_STRING 255 ///< max string length (excluding null)
203 #define NMFVAL_LEN_STRUCT 0 ///< struct T variable field length
204 #define NMFVAL_LEN_VECTOR 0 ///< VType[[] variable field length
205 #define NMFVAL_LEN_MAX_VECTOR 255 ///< max vector field length (num of items)
206 
207 
208 #define NMFVAL_PAD ((byte_t)NMFTypePadTr) ///< pad field value same as tr id
209 
210 #define NMMSG_ID_NONE 0 ///< no message id (reserved)
211 #define NMFID_NONE 0 ///< no field id (reserved)
212 
213 /*!
214  * ITV Messge and Field encodings/decodings.
215  */
216 #define NMITV_MSGID_SIZE 2 ///< 2 byte message id size
217 #define NMITV_FID_SIZE 1 ///< 1 byte field id size
218 #define NMITV_FTYPE_SIZE 1 ///< 1 byte field type size
219 #define NMITV_FCOUNT_SIZE 1 ///< 1 byte field count size
220 
221 /*! message leading number of bytes for message header (msgid, fcount) */
222 #define NMITV_MSGHDR_SIZE (NMITV_MSGID_SIZE + NMITV_FCOUNT_SIZE)
223 
224 /*! number of bytes in header to identify and quatify field (fid, ftype) */
225 #define NMITV_FHDR_SIZE_BASE (NMITV_FID_SIZE + NMITV_FTYPE_SIZE)
226 
227 /*! number of bytes in simple field header (fid, ftype) */
228 #define NMITV_FHDR_SIZE_SIMPLE NMITV_FHDR_SIZE_BASE
229 
230 /*! number of bytes in string field header (fid, ftype, count) */
231 #define NMITV_FHDR_SIZE_STRING (NMITV_FHDR_SIZE_BASE + NMITV_FCOUNT_SIZE)
232 
233 /*! number of bytes in struct field header (fid, ftype, count) */
234 #define NMITV_FHDR_SIZE_STRUCT (NMITV_FHDR_SIZE_BASE + NMITV_FCOUNT_SIZE)
235 
236 /*! number of bytes in vector field header (fid, ftype, count, vtype) */
237 #define NMITV_FHDR_SIZE_VECTOR \
238  (NMITV_FHDR_SIZE_BASE + NMITV_FCOUNT_SIZE + NMITV_FTYPE_SIZE)
239 
240 //
241 // Exclude the following low-level C specific interface from python swig.
242 //
243 #ifndef SWIG
244 
245 //
246 // Forward declarations and pointers
247 //
248 struct _nm_field_def_struct; ///< field def struct
249 struct _nm_msg_def_struct; ///< msg def struct
250 typedef const struct _nm_field_def_struct *NMFieldDef_P; ///< field def pointer
251 typedef const struct _nm_msg_def_struct *NMMsgDef_P; ///< msg def pointer
252 
253 /*
254  * Bit flags used in definitions.
255  */
256 #define NMBITS_HAS_MIN 0x01 ///< field has a minimum value
257 #define NMBITS_HAS_MAX 0x02 ///< field has a maximum value
258 #define NMBITS_HAS_CONST 0x04 ///< field has a constant value
259 
260 /*!
261  * This padding field definition specific information.
262  */
263 typedef struct
264 {
265  size_t m_uCount; ///< number of pad bytes
267 
268 /*!
269  * This A [un]signed 8-bit integer field definition specific information.
270  */
271 typedef struct
272 {
273  byte_t m_bits; ///< field constraint valid bits
274  byte_t m_valMin; ///< field minimum value constraint
275  byte_t m_valMax; ///< field maximum value constraint
276  byte_t m_valConst; ///< field constant value contraint
278 
279 /*!
280  * This A [un]signed 16-bit integer field definition specific information.
281  */
282 typedef struct
283 {
284  byte_t m_bits; ///< field constraint valid bits
285  ushort_t m_valMin; ///< field minimum value constraint
286  ushort_t m_valMax; ///< field maximum value constraint
287  ushort_t m_valConst; ///< field constant value contraint
289 
290 /*!
291  * This [un]signed 32-bit integer field definition specific information.
292  */
293 typedef struct
294 {
295  byte_t m_bits; ///< field constraint valid bits
296  uint_t m_valMin; ///< field minimum value constraint
297  uint_t m_valMax; ///< field maximum value constraint
298  uint_t m_valConst; ///< field constant value contraint
300 
301 /*!
302  * This [un]signed 64-bit integer field definition specific information.
303  */
304 typedef struct
305 {
306  byte_t m_bits; ///< field constraint valid bits
307  ulonglong_t m_valMin; ///< field minimum value constraint
308  ulonglong_t m_valMax; ///< field maximum value constraint
309  ulonglong_t m_valConst; ///< field constant value contraint
311 
312 /*!
313  * This 32-bit floating-point number field definition specific information.
314  */
315 typedef struct
316 {
317  byte_t m_bits; ///< field constraint valid bits
318  float m_valMin; ///< field minimum value constraint
319  float m_valMax; ///< field maximum value constraint
320  float m_valConst; ///< field constant value contraint
322 
323 /*!
324  * This 64-bit floating-point number field definition specific information.
325  */
326 typedef struct
327 {
328  byte_t m_bits; ///< field constraint valid bits
329  double m_valMin; ///< field minimum value constraint
330  double m_valMax; ///< field maximum value constraint
331  double m_valConst; ///< field constant value contraint
333 
334 /*!
335  * This string field definition specific information.
336  */
337 typedef struct
338 {
339  size_t m_uMaxCount; ///< maximum number of characters sans null char
340  const char *m_sConst; ///< string constant value (NULL if no const)
342 
343 /*!
344  * This strcuture field definition specific information.
345  * (equivalent to a submessage)
346  */
347 typedef NMMsgDef_P NMFieldThisStruct_T;
348 
349 /*!
350  * This vector field definition specific information
351  */
352 typedef struct
353 {
354  size_t m_uMaxCount; ///< maximum number of vector elements
355  size_t m_uElemSize; ///< vector element storage size
356  NMFieldDef_P m_pThisElem; ///< vector element specific info
358 
359 /*!
360  * This field definition specific information.
361  */
362 typedef union
363 {
364  NMFieldThisPad_T m_pad; ///< pad field specific info
365  NMFieldThisU8_T m_u8; ///< [unsigned] 8-bit integer specific info
366  NMFieldThisU16_T m_u16; ///< [unsigned] 16-bit integer specific info
367  NMFieldThisU32_T m_u32; ///< [unsigned] 32-bit integer specific info
368  NMFieldThisU64_T m_u64; ///< [unsigned] 64-bit integer specific info
369  NMFieldThisF32_T m_f32; ///< 32-bit fpn specific info
370  NMFieldThisF64_T m_f64; ///< 64-bit fpn specific info
371  NMFieldThisString_T m_string; ///< string field specific info
372  NMFieldThisStruct_T m_struct; ///< struct field specific info
373  NMFieldThisVector_T m_vector; ///< vector field specific info
374 } NMFieldThis_T;
375 
376 /*!
377  * Message Field Definition Type
378  */
379 typedef struct _nm_field_def_struct
380 {
381  const char *m_sFName; ///< field string name
382  uint_t m_eFId; ///< filed id (message/struct unique)
383  NMFType_T m_eFType; ///< field type
384  size_t m_uOffset; ///< member offset in assoc msg structure
385  NMFieldThis_T m_this; ///< specific field information
386 } NMFieldDef_T;
387 
388 /*!
389  * Generalized Message Vector Field Structure Type
390  */
391 typedef struct
392 {
393  size_t m_uCount; ///< number of items in vector
394  union
395  {
396  void *m_pAlign; ///< force alignment
397  byte_t *m_buf; ///< the vector
398  } u; ///< aligned buffer union
399 } NMVec_T;
400 
401 /*!
402  * Message Definition Type
403  */
404 typedef struct _nm_msg_def_struct
405 {
406  const char *m_sMsgName; ///< message/struct string name
407  uint_t m_eMsgId; ///< message id (globally unique)
408  size_t m_uCount; ///< number of message fields
409  const NMFieldDef_T *m_pFields; ///< pointer to array of msg field definitions
410 } NMMsgDef_T;
411 
412 #endif // not SWIG
413 
414 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
415 // Utilities Function Prototypes
416 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
417 
418 extern const char *nmStrError(int ecode);
419 
420 //
421 // Exclude the following low-level C specific interface from python swig.
422 //
423 #ifndef SWIG
424 
425 extern void nmPrintBuf(FILE *fp,
426  const char *sPreface,
427  byte_t buf[],
428  size_t uCount,
429  size_t uNLFreq,
430  uint_t uCol);
431 
432 extern void nmPrintBits(FILE *fp,
433  const char *sPreface,
434  ulonglong_t uVal,
435  uint_t uMsb,
436  uint_t uCnt);
437 
438 extern size_t nmGetFieldValSize(NMFType_T eFType);
439 
440 extern const NMFieldDef_T *nmFindFieldDef(const NMMsgDef_T *pMsgDef,
441  byte_t byFId);
442 
443 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
444 // Base Packing Function Prototypes
445 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
446 
447 extern int nmPackU8(byte_t val,
448  byte_t buf[], size_t bufSize, NMEndian_T eEndian);
449 
450 extern int nmPackU16(ushort_t val,
451  byte_t buf[], size_t bufSize, NMEndian_T eEndian);
452 
453 extern int nmPackU32(uint_t val,
454  byte_t buf[], size_t bufSize, NMEndian_T eEndian);
455 
456 extern int nmPackU64(ulonglong_t val,
457  byte_t buf[], size_t bufSize, NMEndian_T eEndian);
458 
459 extern int nmPackS64(long long val,
460  byte_t buf[], size_t bufSize, NMEndian_T eEndian);
461 
462 extern int nmPackF32(float val,
463  byte_t buf[], size_t bufSize, NMEndian_T eEndian);
464 
465 extern int nmPackF64(double val,
466  byte_t buf[], size_t bufSize, NMEndian_T eEndian);
467 
468 extern int nmPackP32(void *val,
469  byte_t buf[], size_t bufSize, NMEndian_T eEndian);
470 
471 extern int nmPackP64(void *val,
472  byte_t buf[], size_t bufSize, NMEndian_T eEndian);
473 
474 extern int nmPackBuf(byte_t bufSrc[], size_t uCount,
475  byte_t buf[], size_t bufSize, NMEndian_T eEndian);
476 
477 
478 #ifdef SWIG
479 #define INLINE_IN_H
480 #endif
481 
482 /*!
483  * \brief Pack a signed 8-bit byte into the message buffer.
484  *
485  * \copydoc doc_params_pack_std
486  * \copydoc doc_return_pack_std
487  */
488 INLINE_IN_H int nmPackS8(signed char val,
489  byte_t buf[], size_t bufSize, NMEndian_T eEndian)
490 {
491  return nmPackU8((byte_t)val, buf, bufSize, eEndian);
492 }
493 
494 /*!
495  * \brief Pack a signed 16-bit integer into the message buffer.
496  *
497  * \copydoc doc_params_pack_std
498  * \copydoc doc_return_pack_std
499  */
500 INLINE_IN_H int nmPackS16(short val,
501  byte_t buf[], size_t bufSize, NMEndian_T eEndian)
502 {
503  return nmPackU16((ushort_t)val, buf, bufSize, eEndian);
504 }
505 
506 /*!
507  * \brief Pack a signed 32-bit integer into the message buffer.
508  *
509  * \copydoc doc_params_pack_std
510  * \copydoc doc_return_pack_std
511  */
512 INLINE_IN_H int nmPackS32(int val,
513  byte_t buf[], size_t bufSize, NMEndian_T eEndian)
514 {
515  return nmPackU32((uint_t)val, buf, bufSize, eEndian);
516 }
517 
518 /*!
519  * \brief Pack a one byte value into the message buffer.
520  *
521  * Alias for nmPackU8().
522  *
523  * \copydoc doc_params_pack_std
524  * \copydoc doc_return_pack_std
525  */
526 INLINE_IN_H int nmPackByte(byte_t val,
527  byte_t buf[], size_t bufSize, NMEndian_T eEndian)
528 {
529  return nmPackU8((byte_t)val, buf, bufSize, eEndian);
530 }
531 
532 /*!
533  * \brief Pack a signed char integer value into the message buffer.
534  *
535  * Alias for nmPackS8().
536  *
537  * \copydoc doc_params_pack_std
538  * \copydoc doc_return_pack_std
539  */
540 INLINE_IN_H int nmPackSChar(signed char val,
541  byte_t buf[], size_t bufSize, NMEndian_T eEndian)
542 {
543  return nmPackU8((byte_t)val, buf, bufSize, eEndian);
544 }
545 
546 /*!
547  * \brief Pack a 8-bit ASCII character into the message buffer.
548  *
549  * \copydoc doc_params_pack_std
550  * \copydoc doc_return_pack_std
551  */
552 INLINE_IN_H int nmPackChar(char val,
553  byte_t buf[], size_t bufSize, NMEndian_T eEndian)
554 {
555  return nmPackU8((byte_t)val, buf, bufSize, eEndian);
556 }
557 
558 /*!
559  * \brief Pack a boolean value into the message buffer.
560  *
561  * \copydoc doc_params_pack_std
562  * \copydoc doc_return_pack_std
563  */
564 INLINE_IN_H int nmPackBool(bool_t val,
565  byte_t buf[], size_t bufSize, NMEndian_T eEndian)
566 {
567  val &= 0xff; // clear unused upper bits
568  return nmPackU8((byte_t)val, buf, bufSize, eEndian);
569 }
570 
571 /*!
572  * \brief Pack an unsigned short integer into the message buffer.
573  *
574  * Alias for nmPackU16().
575  *
576  * \copydoc doc_params_pack_std
577  * \copydoc doc_return_pack_std
578  */
579 INLINE_IN_H int nmPackUShort(ushort_t val,
580  byte_t buf[], size_t bufSize, NMEndian_T eEndian)
581 {
582  return nmPackU16((ushort_t)val, buf, bufSize, eEndian);
583 }
584 
585 /*!
586  * \brief Pack an signed short integer into the message buffer.
587  *
588  * Alias for nmPackS16().
589  *
590  * \copydoc doc_params_pack_std
591  * \copydoc doc_return_pack_std
592  */
593 INLINE_IN_H int nmPackShort(short val,
594  byte_t buf[], size_t bufSize, NMEndian_T eEndian)
595 {
596  return nmPackU16((ushort_t)val, buf, bufSize, eEndian);
597 }
598 
599 /*!
600  * \brief Pack an unsigned int integer into the message buffer.
601  *
602  * Alias for nmPackU32().
603  *
604  * \copydoc doc_params_pack_std
605  * \copydoc doc_return_pack_std
606  */
607 INLINE_IN_H int nmPackUInt(uint_t val,
608  byte_t buf[], size_t bufSize, NMEndian_T eEndian)
609 {
610  return nmPackU32((uint_t)val, buf, bufSize, eEndian);
611 }
612 
613 /*!
614  * \brief Pack an signed int integer into the message buffer.
615  *
616  * Alias for nmPackS32().
617  *
618  * \copydoc doc_params_pack_std
619  * \copydoc doc_return_pack_std
620  */
621 INLINE_IN_H int nmPackInt(int val,
622  byte_t buf[], size_t bufSize, NMEndian_T eEndian)
623 {
624  return nmPackU32((uint_t)val, buf, bufSize, eEndian);
625 }
626 
627 /*!
628  * \brief Pack an unsigned long integer into the message buffer.
629  *
630  * Alias for nmPackU32() or nmPackU64() depending on sizeof(ulong_t).
631  *
632  * \copydoc doc_params_pack_std
633  * \copydoc doc_return_pack_std
634  */
635 INLINE_IN_H int nmPackULong(ulong_t val,
636  byte_t buf[], size_t bufSize, NMEndian_T eEndian)
637 {
638  return sizeof(ulong_t) == 4?
639  nmPackU32((uint_t)val, buf, bufSize, eEndian):
640  nmPackU64((ulonglong_t)val, buf, bufSize, eEndian);
641 }
642 
643 /*!
644  * \brief Pack an signed long integer into the message buffer.
645  *
646  * Alias for nmPackS32() or nmPackS64() depending on sizeof(long).
647  *
648  * \copydoc doc_params_pack_std
649  * \copydoc doc_return_pack_std
650  */
651 INLINE_IN_H int nmPackLong(long val,
652  byte_t buf[], size_t bufSize, NMEndian_T eEndian)
653 {
654  return sizeof(long) == 4?
655  nmPackS32((int)val, buf, bufSize, eEndian):
656  nmPackS64((long long)val, buf, bufSize, eEndian);
657 }
658 
659 /*!
660  * \brief Pack an unsigned long long integer into the message buffer.
661  *
662  * Alias for nmPackU64().
663  *
664  * \copydoc doc_params_pack_std
665  * \copydoc doc_return_pack_std
666  */
667 INLINE_IN_H int nmPackULongLong(ulonglong_t val,
668  byte_t buf[], size_t bufSize, NMEndian_T eEndian)
669 {
670  return nmPackU64((ulonglong_t)val, buf, bufSize, eEndian);
671 }
672 
673 /*!
674  * \brief Pack an signed long long integer into the message buffer.
675  *
676  * Alias for nmPackS64().
677  *
678  * \copydoc doc_params_pack_std
679  * \copydoc doc_return_pack_std
680  */
681 INLINE_IN_H int nmPackLongLong(long long val,
682  byte_t buf[], size_t bufSize, NMEndian_T eEndian)
683 {
684  return nmPackS64((long long)val, buf, bufSize, eEndian);
685 }
686 
687 /*!
688  * \brief Pack a (overloaded) void* pointer into the message buffer.
689  *
690  * Alias for nmPackP32() or nmPackP64() depending on sizeof(void*).
691  *
692  * \note Pointer is always packed in native byte order.
693  *
694  * \copydoc doc_params_pack_std
695  * \copydoc doc_return_pack_std
696  */
697 INLINE_IN_H int nmPackPointer(void *val,
698  byte_t buf[], size_t bufSize, NMEndian_T eEndian)
699 {
700  return sizeof(void*) == 4?
701  nmPackP32(val, buf, bufSize, eEndian):
702  nmPackP64(val, buf, bufSize, eEndian);
703 }
704 
705 
706 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
707 // Base Unpacking Function Prototypes
708 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
709 
710 extern int nmUnpackU8(byte_t buf[], size_t bufSize,
711  byte_t *pVal, NMEndian_T eEndian);
712 
713 extern int nmUnpackU16(byte_t buf[], size_t bufSize,
714  ushort_t *pVal, NMEndian_T eEndian);
715 
716 extern int nmUnpackU32(byte_t buf[], size_t bufSize,
717  uint_t *pVal, NMEndian_T eEndian);
718 
719 extern int nmUnpackU64(byte_t buf[], size_t bufSize,
720  ulonglong_t *pVal, NMEndian_T eEndian);
721 
722 extern int nmUnpackS64(byte_t buf[], size_t bufSize,
723  long long *pVal, NMEndian_T eEndian);
724 
725 extern int nmUnpackF32(byte_t buf[], size_t bufSize,
726  float *pVal, NMEndian_T eEndian);
727 
728 extern int nmUnpackF64(byte_t buf[], size_t bufSize,
729  double *pVal, NMEndian_T eEndian);
730 
731 extern int nmUnpackP32(byte_t buf[], size_t bufSize,
732  void *pVal, NMEndian_T eEndian);
733 
734 extern int nmUnpackP64(byte_t buf[], size_t bufSize,
735  void *pVal, NMEndian_T eEndian);
736 
737 extern int nmUnpackBuf(byte_t buf[], size_t bufSize,
738  byte_t bufDst[], size_t uCount,
739  NMEndian_T eEndian);
740 
741 /*!
742  * \brief Unpack a signed 8-bit byte from the message buffer.
743  *
744  * \copydoc doc_params_unpack_std
745  * \copydoc doc_return_unpack_std
746  */
747 INLINE_IN_H int nmUnpackS8(byte_t buf[], size_t bufSize,
748  signed char *pVal, NMEndian_T eEndian)
749 {
750  return nmUnpackU8(buf, bufSize, (byte_t *)pVal, eEndian);
751 }
752 
753 /*!
754  * \brief Unpack a signed 16-bit integer from the message buffer.
755  *
756  * \copydoc doc_params_unpack_std
757  * \copydoc doc_return_unpack_std
758  */
759 INLINE_IN_H int nmUnpackS16(byte_t buf[], size_t bufSize,
760  short *pVal, NMEndian_T eEndian)
761 {
762  return nmUnpackU16(buf, bufSize, (ushort_t *)pVal, eEndian);
763 }
764 
765 /*!
766  * \brief Unpack a signed 32-bit integer from the message buffer.
767  *
768  * \copydoc doc_params_unpack_std
769  * \copydoc doc_return_unpack_std
770  */
771 INLINE_IN_H int nmUnpackS32(byte_t buf[], size_t bufSize,
772  int *pVal, NMEndian_T eEndian)
773 {
774  return nmUnpackU32(buf, bufSize, (uint_t *)pVal, eEndian);
775 }
776 
777 /*!
778  * \brief Unpack one byte from the message buffer.
779  *
780  * Alias for nmUnpackU8().
781  *
782  * \copydoc doc_params_unpack_std
783  * \copydoc doc_return_unpack_std
784  */
785 INLINE_IN_H int nmUnpackByte(byte_t buf[], size_t bufSize,
786  byte_t *pVal, NMEndian_T eEndian)
787 {
788  return nmUnpackU8(buf, bufSize, (byte_t *)pVal, eEndian);
789 }
790 
791 /*!
792  * \brief Unpack an signed short integer from the message buffer.
793  *
794  * Alias for nmUnpackS8().
795  *
796  * \copydoc doc_params_unpack_std
797  * \copydoc doc_return_unpack_std
798  */
799 INLINE_IN_H int nmUnpackSChar(byte_t buf[], size_t bufSize,
800  signed char *pVal, NMEndian_T eEndian)
801 {
802  return nmUnpackU8(buf, bufSize, (byte_t *)pVal, eEndian);
803 }
804 
805 /*!
806  * \brief Unpack an 8-bit ASCII character from the message buffer.
807  *
808  * \copydoc doc_params_unpack_std
809  * \copydoc doc_return_unpack_std
810  */
811 INLINE_IN_H int nmUnpackChar(byte_t buf[], size_t bufSize,
812  char *pVal, NMEndian_T eEndian)
813 {
814  return nmUnpackU8(buf, bufSize, (byte_t *)pVal, eEndian);
815 }
816 
817 /*!
818  * \brief Unpack a boolean value from the message buffer.
819  *
820  * \copydoc doc_params_unpack_std
821  * \copydoc doc_return_unpack_std
822  */
823 INLINE_IN_H int nmUnpackBool(byte_t buf[], size_t bufSize,
824  bool_t *pVal, NMEndian_T eEndian)
825 {
826  *pVal = 0; // clear all sizeof(int) bits
827  return nmUnpackU8(buf, bufSize, (byte_t *)pVal, eEndian);
828 }
829 
830 /*!
831  * \brief Unpack an unsigned short integer from the message buffer.
832  *
833  * Alias for nmUnpackU16().
834  *
835  * \copydoc doc_params_unpack_std
836  * \copydoc doc_return_unpack_std
837  */
838 INLINE_IN_H int nmUnpackUShort(byte_t buf[], size_t bufSize,
839  ushort_t *pVal, NMEndian_T eEndian)
840 {
841  return nmUnpackU16(buf, bufSize, (ushort_t *)pVal, eEndian);
842 }
843 
844 /*!
845  * \brief Unpack an signed short integer from the message buffer.
846  *
847  * Alias for nmUnpackS16().
848  *
849  * \copydoc doc_params_unpack_std
850  * \copydoc doc_return_unpack_std
851  */
852 INLINE_IN_H int nmUnpackShort(byte_t buf[], size_t bufSize,
853  short *pVal, NMEndian_T eEndian)
854 {
855  return nmUnpackU16(buf, bufSize, (ushort_t *)pVal, eEndian);
856 }
857 
858 /*!
859  * \brief Unpack an unsigned int integer from the message buffer.
860  *
861  * Alias for nmUnpackU32().
862  *
863  * \copydoc doc_params_unpack_std
864  * \copydoc doc_return_unpack_std
865  */
866 INLINE_IN_H int nmUnpackUInt(byte_t buf[], size_t bufSize,
867  uint_t *pVal, NMEndian_T eEndian)
868 {
869  return nmUnpackU32(buf, bufSize, (uint_t *)pVal, eEndian);
870 }
871 
872 /*!
873  * \brief Unpack an signed int integer from the message buffer.
874  *
875  * Alias for nmUnpackS32().
876  *
877  * \copydoc doc_params_unpack_std
878  * \copydoc doc_return_unpack_std
879  */
880 INLINE_IN_H int nmUnpackInt(byte_t buf[], size_t bufSize,
881  int *pVal, NMEndian_T eEndian)
882 {
883  return nmUnpackU32(buf, bufSize, (uint_t *)pVal, eEndian);
884 }
885 
886 /*!
887  * \brief Unpack an unsigned long integer from the message buffer.
888  *
889  * Alias for nmUnpackU32() or nmUnpackU64() depending on sizeof(ulong_t).
890  *
891  * \copydoc doc_params_unpack_std
892  * \copydoc doc_return_unpack_std
893  */
894 INLINE_IN_H int nmUnpackULong(byte_t buf[], size_t bufSize,
895  ulong_t *pVal, NMEndian_T eEndian)
896 {
897  return sizeof(ulong_t) == 4?
898  nmUnpackU32(buf, bufSize, (uint_t *)pVal, eEndian):
899  nmUnpackU64(buf, bufSize, (ulonglong_t *)pVal, eEndian);
900 }
901 
902 /*!
903  * \brief Unpack an signed long integer from the message buffer.
904  *
905  * Alias for nmUnpackS32() or nmUnpackS64() depending on sizeof(long).
906  *
907  * \copydoc doc_params_unpack_std
908  * \copydoc doc_return_unpack_std
909  */
910 INLINE_IN_H int nmUnpackLong(byte_t buf[], size_t bufSize,
911  long *pVal, NMEndian_T eEndian)
912 {
913  return sizeof(ulong_t) == 4?
914  nmUnpackS32(buf, bufSize, (int *)pVal, eEndian):
915  nmUnpackS64(buf, bufSize, (long long *)pVal, eEndian);
916 }
917 
918 /*!
919  * \brief Unpack an unsigned long long integer from the message buffer.
920  *
921  * Alias for nmUnpackU64().
922  *
923  * \copydoc doc_params_unpack_std
924  * \copydoc doc_return_unpack_std
925  */
926 INLINE_IN_H int nmUnpackULongLong(byte_t buf[], size_t bufSize,
927  ulonglong_t *pVal, NMEndian_T eEndian)
928 {
929  return nmUnpackU64(buf, bufSize, (ulonglong_t *)pVal, eEndian);
930 }
931 
932 /*!
933  * \brief Unpack an signed long long integer from the message buffer.
934  *
935  * Alias for nmUnpackS64().
936  *
937  * \copydoc doc_params_unpack_std
938  * \copydoc doc_return_unpack_std
939  */
940 INLINE_IN_H int nmUnpackLongLong(byte_t buf[], size_t bufSize,
941  long long *pVal, NMEndian_T eEndian)
942 {
943  return nmUnpackS64(buf, bufSize, (long long *)pVal, eEndian);
944 }
945 
946 /*!
947  * \brief Unpack a (overloaded)void* pointer from the message buffer.
948  *
949  * Alias for nmUnpackP32() or nmUnpackP64() depending on sizeof(void*).
950  *
951  * \note Pointer is always unpacked in native byte order.
952  *
953  * \copydoc doc_params_unpack_std
954  * \copydoc doc_return_unpack_std
955  */
956 INLINE_IN_H int nmUnpackPointer(byte_t buf[], size_t bufSize,
957  void *pVal, NMEndian_T eEndian)
958 {
959  return sizeof(void*) == 4?
960  nmUnpackP32(buf, bufSize, pVal, NMEndianNative):
961  nmUnpackP64(buf, bufSize, pVal, NMEndianNative);
962 }
963 
964 
965 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
966 // Id-Type-Value Packing and Unpacking Function Prototypes
967 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
968 
969 extern int nmPackITVMsg(const NMMsgDef_T *pMsgDef,
970  void *pStruct,
971  byte_t buf[],
972  size_t bufSize,
973  NMEndian_T eEndian);
974 
975 extern int nmPackITVMsgDebug(const NMMsgDef_T *pMsgDef,
976  void *pStruct,
977  byte_t buf[],
978  size_t bufSize,
979  NMEndian_T eEndian);
980 
981 extern int nmUnpackITVMsg(const NMMsgDef_T *pMsgDef,
982  byte_t buf[],
983  size_t uMsgLen,
984  void *pStruct,
985  NMEndian_T eEndian);
986 
987 extern int nmUnpackITVMsgDebug(const NMMsgDef_T *pMsgDef,
988  byte_t buf[],
989  size_t uMsgLen,
990  void *pStruct,
991  NMEndian_T eEndian);
992 
993 extern uint_t nmGetITVMsgId(byte_t buf[], size_t uMsgLen, NMEndian_T eEndian);
994 
995 
996 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
997 // Flat Packing and Unpacking Function Prototypes
998 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
999 
1000 extern int nmPackFlatMsg(const NMMsgDef_T *pMsgDef,
1001  void *pStruct,
1002  byte_t buf[],
1003  size_t bufSize,
1004  NMEndian_T eEndian);
1005 
1006 extern int nmPackFlatMsgDebug(const NMMsgDef_T *pMsgDef,
1007  void *pStruct,
1008  byte_t buf[],
1009  size_t bufSize,
1010  NMEndian_T eEndian);
1011 
1012 extern int nmUnpackFlatMsg(const NMMsgDef_T *pMsgDef,
1013  byte_t buf[],
1014  size_t uMsgLen,
1015  void *pStruct,
1016  NMEndian_T eEndian);
1017 
1018 extern int nmUnpackFlatMsgDebug(const NMMsgDef_T *pMsgDef,
1019  byte_t buf[],
1020  size_t uMsgLen,
1021  void *pStruct,
1022  NMEndian_T eEndian);
1023 
1024 #endif // not SWIG
1025 
1026 
1027 #ifndef SWIG
1028 C_DECLS_END
1029 #endif
1030 
1031 
1032 #endif // _NETMSGS_H
int nmPackP64(void *val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack a 64-bit pointer into the message buffer.
Definition: nmLibPack.c:1160
INLINE_IN_H int nmPackLong(long val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an signed long integer into the message buffer.
Definition: netmsgs.h:651
INLINE_IN_H int nmUnpackPointer(byte_t buf[], size_t bufSize, void *pVal, NMEndian_T eEndian)
Unpack a (overloaded)void* pointer from the message buffer.
Definition: netmsgs.h:956
int nmPackF32(float val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack a 32-bit float into the message buffer.
Definition: nmLibPack.c:957
int nmUnpackU16(byte_t buf[], size_t bufSize, ushort_t *pVal, NMEndian_T eEndian)
Unpack an unsigned 16-bit integer from the message buffer.
Definition: nmLibPack.c:1256
INLINE_IN_H int nmUnpackUInt(byte_t buf[], size_t bufSize, uint_t *pVal, NMEndian_T eEndian)
Unpack an unsigned int integer from the message buffer.
Definition: netmsgs.h:866
64-bit IEEE 754 FPN double
Definition: netmsgs.h:120
byte_t m_bits
field constraint valid bits
Definition: netmsgs.h:284
S8 alias.
Definition: netmsgs.h:132
unsigned 8-bit integer unsigned char
Definition: netmsgs.h:118
const struct _nm_field_def_struct * NMFieldDef_P
msg def struct
Definition: netmsgs.h:250
int nmUnpackFlatMsgDebug(const NMMsgDef_T *pMsgDef, byte_t buf[], size_t uMsgLen, void *pStruct, NMEndian_T eEndian)
Unpack a Flat message, tracing unpacking to stderr.
uint_t nmGetITVMsgId(byte_t buf[], size_t uMsgLen, NMEndian_T eEndian)
Get ITV message id from input buffer.
32-bit IEEE 754 FPN float
Definition: netmsgs.h:134
unsigned 64-bit integer unsigned long long
Definition: netmsgs.h:128
int nmUnpackBuf(byte_t buf[], size_t bufSize, byte_t bufDst[], size_t uCount, NMEndian_T eEndian)
Unpack a byte buffer from the message buffer.
Definition: nmLibPack.c:1735
byte_t m_valMin
field minimum value constraint
Definition: netmsgs.h:274
NMFieldThisU8_T m_u8
[unsigned] 8-bit integer specific info
Definition: netmsgs.h:365
structure struct T
Definition: netmsgs.h:146
size_t m_uMaxCount
maximum number of vector elements
Definition: netmsgs.h:354
NMFieldThisVector_T m_vector
vector field specific info
Definition: netmsgs.h:373
int nmUnpackF64(byte_t buf[], size_t bufSize, double *pVal, NMEndian_T eEndian)
Unpack a 64-bit float from the message buffer.
Definition: nmLibPack.c:1517
int nmPackFlatMsgDebug(const NMMsgDef_T *pMsgDef, void *pStruct, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an Flat message, tracing message packing to stderr.
INLINE_IN_H int nmUnpackS32(byte_t buf[], size_t bufSize, int *pVal, NMEndian_T eEndian)
Unpack a signed 32-bit integer from the message buffer.
Definition: netmsgs.h:771
uint_t m_valMax
field maximum value constraint
Definition: netmsgs.h:297
NMFieldThisString_T m_string
string field specific info
Definition: netmsgs.h:371
const char * nmStrError(int ecode)
Get the error string describing the BotSense error code.
Definition: nmLibUtils.c:114
int nmPackU32(uint_t val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an unsigned 32-bit integer into the message buffer.
Definition: nmLibPack.c:791
int nmUnpackS64(byte_t buf[], size_t bufSize, long long *pVal, NMEndian_T eEndian)
Unpack an signed 64-bit integer from the message buffer.
Definition: nmLibPack.c:1391
NMMsgDef_P NMFieldThisStruct_T
Definition: netmsgs.h:347
INLINE_IN_H int nmPackSChar(signed char val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack a signed char integer value into the message buffer.
Definition: netmsgs.h:540
signed 32-bit integer int
Definition: netmsgs.h:138
byte_t m_bits
field constraint valid bits
Definition: netmsgs.h:328
Most Significant Byte first.
Definition: netmsgs.h:102
int nmUnpackF32(byte_t buf[], size_t bufSize, float *pVal, NMEndian_T eEndian)
Unpack a 32-bit float from the message buffer.
Definition: nmLibPack.c:1472
float m_valMin
field minimum value constraint
Definition: netmsgs.h:318
INLINE_IN_H int nmPackBool(bool_t val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack a boolean value into the message buffer.
Definition: netmsgs.h:564
NMFType_T m_eFType
field type
Definition: netmsgs.h:383
string char[]
Definition: netmsgs.h:144
ulonglong_t m_valMin
field minimum value constraint
Definition: netmsgs.h:307
uint_t m_eMsgId
message id (globally unique)
Definition: netmsgs.h:407
float m_valMax
field maximum value constraint
Definition: netmsgs.h:319
U16 alias.
Definition: netmsgs.h:123
size_t m_uCount
number of message fields
Definition: netmsgs.h:408
INLINE_IN_H int nmPackByte(byte_t val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack a one byte value into the message buffer.
Definition: netmsgs.h:526
flat (no field header and fixed size) encoding
Definition: netmsgs.h:91
byte_t m_bits
field constraint valid bits
Definition: netmsgs.h:273
NMFieldThisStruct_T m_struct
struct field specific info
Definition: netmsgs.h:372
INLINE_IN_H int nmPackUInt(uint_t val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an unsigned int integer into the message buffer.
Definition: netmsgs.h:607
S64 alias.
Definition: netmsgs.h:143
native processor order
Definition: netmsgs.h:104
INLINE_IN_H int nmPackUShort(ushort_t val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an unsigned short integer into the message buffer.
Definition: netmsgs.h:579
ushort_t m_valConst
field constant value contraint
Definition: netmsgs.h:287
double m_valMax
field maximum value constraint
Definition: netmsgs.h:330
INLINE_IN_H int nmUnpackULongLong(byte_t buf[], size_t bufSize, ulonglong_t *pVal, NMEndian_T eEndian)
Unpack an unsigned long long integer from the message buffer.
Definition: netmsgs.h:926
U64 alias.
Definition: netmsgs.h:129
int nmPackITVMsgDebug(const NMMsgDef_T *pMsgDef, void *pStruct, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an ITV message, tracing message packing to stderr.
8-bit ASCII characters char
Definition: netmsgs.h:133
translated pad type for packed stream
Definition: netmsgs.h:113
int nmUnpackU64(byte_t buf[], size_t bufSize, ulonglong_t *pVal, NMEndian_T eEndian)
Unpack an unsigned 64-bit integer from the message buffer.
Definition: nmLibPack.c:1320
const struct _nm_msg_def_struct * NMMsgDef_P
msg def pointer
Definition: netmsgs.h:251
signed 64-bit integer long long
Definition: netmsgs.h:142
NMFieldThis_T m_this
specific field information
Definition: netmsgs.h:385
S32 alias.
Definition: netmsgs.h:139
INLINE_IN_H int nmPackULongLong(ulonglong_t val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an unsigned long long integer into the message buffer.
Definition: netmsgs.h:667
8-bit bool 0/1 bool_t
Definition: netmsgs.h:117
INLINE_IN_H int nmPackChar(char val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack a 8-bit ASCII character into the message buffer.
Definition: netmsgs.h:552
const NMFieldDef_T * nmFindFieldDef(const NMMsgDef_T *pMsgDef, byte_t byFId)
Find the field definition in the message definition, given the field id.
Definition: nmLibUtils.c:235
int nmUnpackITVMsgDebug(const NMMsgDef_T *pMsgDef, byte_t buf[], size_t uMsgLen, void *pStruct, NMEndian_T eEndian)
Unpack a ITV message, tracing unpacking to stderr.
int nmPackU8(byte_t val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an unsigned 8-bit byte into the message buffer.
Definition: nmLibPack.c:745
INLINE_IN_H int nmUnpackS8(byte_t buf[], size_t bufSize, signed char *pVal, NMEndian_T eEndian)
Unpack a signed 8-bit byte from the message buffer.
Definition: netmsgs.h:747
INLINE_IN_H int nmUnpackSChar(byte_t buf[], size_t bufSize, signed char *pVal, NMEndian_T eEndian)
Unpack an signed short integer from the message buffer.
Definition: netmsgs.h:799
32-bit pointer (overloaded) void*
Definition: netmsgs.h:140
INLINE_IN_H int nmUnpackBool(byte_t buf[], size_t bufSize, bool_t *pVal, NMEndian_T eEndian)
Unpack a boolean value from the message buffer.
Definition: netmsgs.h:823
size_t m_uMaxCount
maximum number of characters sans null char
Definition: netmsgs.h:339
INLINE_IN_H int nmPackPointer(void *val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack a (overloaded) void* pointer into the message buffer.
Definition: netmsgs.h:697
64-bit pointer (overloaded) void*
Definition: netmsgs.h:126
INLINE_IN_H int nmPackLongLong(long long val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an signed long long integer into the message buffer.
Definition: netmsgs.h:681
INLINE_IN_H int nmUnpackInt(byte_t buf[], size_t bufSize, int *pVal, NMEndian_T eEndian)
Unpack an signed int integer from the message buffer.
Definition: netmsgs.h:880
float m_valConst
field constant value contraint
Definition: netmsgs.h:320
command-line interface encoding (future)
Definition: netmsgs.h:93
NMFieldThisU32_T m_u32
[unsigned] 32-bit integer specific info
Definition: netmsgs.h:367
INLINE_IN_H int nmUnpackShort(byte_t buf[], size_t bufSize, short *pVal, NMEndian_T eEndian)
Unpack an signed short integer from the message buffer.
Definition: netmsgs.h:852
const char * m_sFName
field string name
Definition: netmsgs.h:381
int nmPackS64(long long val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an signed 64-bit integer into the message buffer.
Definition: nmLibPack.c:885
INLINE_IN_H int nmUnpackLong(byte_t buf[], size_t bufSize, long *pVal, NMEndian_T eEndian)
Unpack an signed long integer from the message buffer.
Definition: netmsgs.h:910
INLINE_IN_H int nmPackInt(int val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an signed int integer into the message buffer.
Definition: netmsgs.h:621
size_t m_uCount
number of pad bytes
Definition: netmsgs.h:265
NMFType_T
Definition: netmsgs.h:110
struct _nm_msg_def_struct NMMsgDef_T
byte_t m_bits
field constraint valid bits
Definition: netmsgs.h:317
struct _nm_field_def_struct NMFieldDef_T
size_t nmGetFieldValSize(NMFType_T eFType)
Get the field value byte size.
Definition: nmLibUtils.c:209
NMEndian_T
Definition: netmsgs.h:100
signed 8-bit integer signed char
Definition: netmsgs.h:131
void * m_pAlign
force alignment
Definition: netmsgs.h:396
P32 alias.
Definition: netmsgs.h:141
const char * m_sMsgName
message/struct string name
Definition: netmsgs.h:406
const char * m_sConst
string constant value (NULL if no const)
Definition: netmsgs.h:340
F32 alias.
Definition: netmsgs.h:135
int nmPackU16(ushort_t val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an unsigned 16-bit integer into the message buffer.
Definition: nmLibPack.c:762
one dimensional array VType[]
Definition: netmsgs.h:130
id-type-value encoding
Definition: netmsgs.h:92
INLINE_IN_H int nmPackS32(int val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack a signed 32-bit integer into the message buffer.
Definition: netmsgs.h:512
NMFieldDef_P m_pThisElem
vector element specific info
Definition: netmsgs.h:356
INLINE_IN_H int nmUnpackLongLong(byte_t buf[], size_t bufSize, long long *pVal, NMEndian_T eEndian)
Unpack an signed long long integer from the message buffer.
Definition: netmsgs.h:940
double m_valMin
field minimum value constraint
Definition: netmsgs.h:329
INLINE_IN_H int nmUnpackULong(byte_t buf[], size_t bufSize, ulong_t *pVal, NMEndian_T eEndian)
Unpack an unsigned long integer from the message buffer.
Definition: netmsgs.h:894
const NMFieldDef_T * m_pFields
pointer to array of msg field definitions
Definition: netmsgs.h:409
NMEncoding_T
Definition: netmsgs.h:89
no field type -
Definition: netmsgs.h:112
uint_t m_valMin
field minimum value constraint
Definition: netmsgs.h:296
int nmPackF64(double val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack a 64-bit float into the message buffer.
Definition: nmLibPack.c:1013
size_t m_uElemSize
vector element storage size
Definition: netmsgs.h:355
INLINE_IN_H int nmUnpackUShort(byte_t buf[], size_t bufSize, ushort_t *pVal, NMEndian_T eEndian)
Unpack an unsigned short integer from the message buffer.
Definition: netmsgs.h:838
size_t m_uCount
number of items in vector
Definition: netmsgs.h:393
int nmUnpackU32(byte_t buf[], size_t bufSize, uint_t *pVal, NMEndian_T eEndian)
Unpack an unsigned 32-bit integer from the message buffer.
Definition: nmLibPack.c:1288
NMFieldThisF32_T m_f32
32-bit fpn specific info
Definition: netmsgs.h:369
unsigned 32-bit integer unsigned int
Definition: netmsgs.h:124
Least Significant Byte first.
Definition: netmsgs.h:103
NMFieldThisU64_T m_u64
[unsigned] 64-bit integer specific info
Definition: netmsgs.h:368
pad internal field type
Definition: netmsgs.h:145
INLINE_IN_H int nmPackS8(signed char val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack a signed 8-bit byte into the message buffer.
Definition: netmsgs.h:488
U32 alias.
Definition: netmsgs.h:125
U8 alias.
Definition: netmsgs.h:119
F64 alias.
Definition: netmsgs.h:121
int nmUnpackP64(byte_t buf[], size_t bufSize, void *pVal, NMEndian_T eEndian)
Unpack a 64-bit pointer from the message buffer.
Definition: nmLibPack.c:1678
S16 alias.
Definition: netmsgs.h:137
byte_t m_bits
field constraint valid bits
Definition: netmsgs.h:306
void nmPrintBuf(FILE *fp, const char *sPreface, byte_t buf[], size_t uCount, size_t uNLFreq, uint_t uCol)
Pretty print buffer to opened file stream.
Definition: nmLibUtils.c:138
ushort_t m_valMin
field minimum value constraint
Definition: netmsgs.h:285
byte_t m_valMax
field maximum value constraint
Definition: netmsgs.h:275
ulonglong_t m_valMax
field maximum value constraint
Definition: netmsgs.h:308
byte_t m_bits
field constraint valid bits
Definition: netmsgs.h:295
NMFieldThisU16_T m_u16
[unsigned] 16-bit integer specific info
Definition: netmsgs.h:366
byte_t m_valConst
field constant value contraint
Definition: netmsgs.h:276
INLINE_IN_H int nmPackShort(short val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an signed short integer into the message buffer.
Definition: netmsgs.h:593
int nmPackFlatMsg(const NMMsgDef_T *pMsgDef, void *pStruct, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an Flat message.
ulonglong_t m_valConst
field constant value contraint
Definition: netmsgs.h:309
INLINE_IN_H int nmPackULong(ulong_t val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an unsigned long integer into the message buffer.
Definition: netmsgs.h:635
NMFieldThisPad_T m_pad
pad field specific info
Definition: netmsgs.h:364
int nmUnpackU8(byte_t buf[], size_t bufSize, byte_t *pVal, NMEndian_T eEndian)
Unpack an unsigned 8-bit byte from the message buffer.
Definition: nmLibPack.c:1239
ushort_t m_valMax
field maximum value constraint
Definition: netmsgs.h:286
INLINE_IN_H int nmUnpackS16(byte_t buf[], size_t bufSize, short *pVal, NMEndian_T eEndian)
Unpack a signed 16-bit integer from the message buffer.
Definition: netmsgs.h:759
number of
Definition: netmsgs.h:148
double m_valConst
field constant value contraint
Definition: netmsgs.h:331
size_t m_uOffset
member offset in assoc msg structure
Definition: netmsgs.h:384
int nmPackBuf(byte_t bufSrc[], size_t uCount, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack a byte buffer into the message buffer.
Definition: nmLibPack.c:1215
int nmUnpackFlatMsg(const NMMsgDef_T *pMsgDef, byte_t buf[], size_t uMsgLen, void *pStruct, NMEndian_T eEndian)
Unpack a Flat message.
INLINE_IN_H int nmUnpackByte(byte_t buf[], size_t bufSize, byte_t *pVal, NMEndian_T eEndian)
Unpack one byte from the message buffer.
Definition: netmsgs.h:785
NMFieldThisF64_T m_f64
64-bit fpn specific info
Definition: netmsgs.h:370
INLINE_IN_H int nmPackS16(short val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack a signed 16-bit integer into the message buffer.
Definition: netmsgs.h:500
uint_t m_valConst
field constant value contraint
Definition: netmsgs.h:298
INLINE_IN_H int nmUnpackChar(byte_t buf[], size_t bufSize, char *pVal, NMEndian_T eEndian)
Unpack an 8-bit ASCII character from the message buffer.
Definition: netmsgs.h:811
byte_t * m_buf
the vector
Definition: netmsgs.h:397
int nmPackITVMsg(const NMMsgDef_T *pMsgDef, void *pStruct, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an ITV message.
P64 alias.
Definition: netmsgs.h:127
int nmPackU64(ulonglong_t val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an unsigned 64-bit integer into the message buffer.
Definition: nmLibPack.c:823
void nmPrintBits(FILE *fp, const char *sPreface, ulonglong_t uVal, uint_t uMsb, uint_t uCnt)
Pretty print bits in value.
Definition: nmLibUtils.c:174
unsigned 16-bit integer unsigned short
Definition: netmsgs.h:122
signed 16-bit integer short
Definition: netmsgs.h:136
uint_t m_eFId
filed id (message/struct unique)
Definition: netmsgs.h:382
int nmUnpackP32(byte_t buf[], size_t bufSize, void *pVal, NMEndian_T eEndian)
Unpack a 32-bit pointer from the message buffer.
Definition: nmLibPack.c:1648
int nmUnpackITVMsg(const NMMsgDef_T *pMsgDef, byte_t buf[], size_t uMsgLen, void *pStruct, NMEndian_T eEndian)
Unpack a ITV message.
number of different encodings supported
Definition: netmsgs.h:94
int nmPackP32(void *val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack a 32-bit pointer into the message buffer.
Definition: nmLibPack.c:1113