m2mb API docs  25.30.002
m2mb API sets documentation
m2mb_types.h
Go to the documentation of this file.
1 /*===============================================================================================*/
2 /* >>> Copyright (C) Telit Communications S.p.A. Italy All Rights Reserved. <<< */
23 #ifndef M2M_M2MB_TYPES_H
24 #define M2M_M2MB_TYPES_H
25 
26 /* Include files ================================================================================*/
27 #if !defined(NOT_STD_TYPE)
28 /* here could be included */
29 #include <stdint.h>
30 #endif
31 
32 
33 /* Global declarations ==========================================================================*/
34 
35 
36 /* in case some parameter is not used , set it 0
37  e.g UNUSED( temp, res, 0 )
38 */
39 #define UNUSED_1( a ) ( void )a
40 #define UNUSED_2( a, b ) ( void )a; ( void )b
41 #define UNUSED_3( a, b, c ) ( void )a; ( void )b; ( void )c
42 #define UNUSED_4( a, b, c, d ) ( void )a; ( void )b; ( void )c; ( void )d
43 
44 
45 
46 
47 /* to align segment: size should be power of 2 */
48 #define M2MB_ALIGN( x , size ) ( ( ( MEM_W )(x) + size - 1 ) & ( ~( ( MEM_W )size - 1 ) ) )
49 
50 
51 #if !defined(NULL)
52 #define NULL ((void*)0)
53 #endif
54 
55 
56 #ifndef M2MB_MIN
57 #define M2MB_MIN( a, b ) ( ( (a) < (b) ) ? (a) : (b) )
58 #endif
59 
60 #ifndef M2MB_MAX
61 #define M2MB_MAX( a, b ) ( ( (a) > (b) ) ? (a) : (b) )
62 #endif
63 
64 
65 #ifndef _M2M_TYPE_H
66 #define MAX_CMD_ARG 8
67 #define ARG_LENGTH(...) ARG_LENGTH__(__VA_ARGS__)
68 #define ARG_LENGTH__(...) ARG_LENGTH_(,__VA_ARGS__, \
69  63, 62, 61, 60,\
70  59, 58, 57, 56, 55, 54, 53, 52, 51, 50,\
71  49, 48, 47, 46, 45, 44, 43, 42, 41, 40,\
72  39, 38, 37, 36, 35, 34, 33, 32, 31, 30,\
73  29, 28, 27, 26, 25, 24, 23, 22, 21, 20,\
74  19, 18, 17, 16, 15, 14, 13, 12, 11, 10,\
75  9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
76 
77 
78 
79 #define ARG_LENGTH_(_, \
80  _63, _62, _61, _60,\
81  _59, _58, _57, _56, _55, _54, _53, _52, _51, _50,\
82  _49, _48, _47, _46, _45, _44, _43, _42, _41, _40,\
83  _39, _38, _37, _36, _35, _34, _33, _32, _31, _30,\
84  _29, _28, _27, _26, _25, _24, _23, _22, _21, _20,\
85  _19, _18, _17, _16, _15, _14, _13, _12, _11, _10,\
86  _9, _8, _7, _6, _5, _4, _3, _2, _1, Count, ...) Count
87 
88 #endif /* _M2M_TYPE_H */
89 
90 /* to be used with CMDS_ARGS macro: get even arguments of __VA_ARGS__ */
91 #define ARG_EVEN(...) EVEN_DROP_TYPE(ARG_LENGTH(__VA_ARGS__),__VA_ARGS__)
92 #define EVEN_DROP_TYPE(n,...) EVEN_DROP_TYPE_(n,__VA_ARGS__)
93 #define EVEN_DROP_TYPE_(n,...) EVEN_DROP_TYPE_##n(__VA_ARGS__)
94 /* catches only second arg => even */
95 #define EVEN_DROP_TYPE_2(arg1,arg2,...) arg2
96 #define EVEN_DROP_TYPE_4(arg1,arg2,...) arg2, EVEN_DROP_TYPE_2(__VA_ARGS__)
97 #define EVEN_DROP_TYPE_6(arg1,arg2,...) arg2, EVEN_DROP_TYPE_4(__VA_ARGS__)
98 #define EVEN_DROP_TYPE_8(arg1,arg2,...) arg2, EVEN_DROP_TYPE_6(__VA_ARGS__)
99 #define EVEN_DROP_TYPE_10(arg1,arg2,...) arg2, EVEN_DROP_TYPE_8(__VA_ARGS__)
100 #define EVEN_DROP_TYPE_12(arg1,arg2,...) arg2, EVEN_DROP_TYPE_10(__VA_ARGS__)
101 #define EVEN_DROP_TYPE_14(arg1,arg2,...) arg2, EVEN_DROP_TYPE_12(__VA_ARGS__)
102 #define EVEN_DROP_TYPE_16(arg1,arg2,...) arg2, EVEN_DROP_TYPE_14(__VA_ARGS__)
103 #define EVEN_DROP_TYPE_18(arg1,arg2,...) arg2, EVEN_DROP_TYPE_16(__VA_ARGS__)
104 #define EVEN_DROP_TYPE_20(arg1,arg2,...) arg2, EVEN_DROP_TYPE_18(__VA_ARGS__)
105 #define EVEN_DROP_TYPE_22(arg1,arg2,...) arg2, EVEN_DROP_TYPE_20(__VA_ARGS__)
106 #define EVEN_DROP_TYPE_24(arg1,arg2,...) arg2, EVEN_DROP_TYPE_22(__VA_ARGS__)
107 #define EVEN_DROP_TYPE_26(arg1,arg2,...) arg2, EVEN_DROP_TYPE_24(__VA_ARGS__)
108 #define EVEN_DROP_TYPE_28(arg1,arg2,...) arg2, EVEN_DROP_TYPE_26(__VA_ARGS__)
109 #define EVEN_DROP_TYPE_30(arg1,arg2,...) arg2, EVEN_DROP_TYPE_28(__VA_ARGS__)
110 #define EVEN_DROP_TYPE_32(arg1,arg2,...) arg2, EVEN_DROP_TYPE_30(__VA_ARGS__)
111 #define EVEN_DROP_TYPE_34(arg1,arg2,...) arg2, EVEN_DROP_TYPE_32(__VA_ARGS__)
112 #define EVEN_DROP_TYPE_36(arg1,arg2,...) arg2, EVEN_DROP_TYPE_34(__VA_ARGS__)
113 #define EVEN_DROP_TYPE_38(arg1,arg2,...) arg2, EVEN_DROP_TYPE_36(__VA_ARGS__)
114 #define EVEN_DROP_TYPE_40(arg1,arg2,...) arg2, EVEN_DROP_TYPE_38(__VA_ARGS__)
115 
116 /* to be used with CMDS_ARGS macro: get odd arguments of __VA_ARGS__ */
117 #define ARG_ODD(...) ODD_DROP_TYPE(ARG_LENGTH(__VA_ARGS__),__VA_ARGS__)
118 #define ODD_DROP_TYPE(n,...) ODD_DROP_TYPE_(n,__VA_ARGS__)
119 #define ODD_DROP_TYPE_(n,...) ODD_DROP_TYPE_##n(__VA_ARGS__)
120 /* catches only first arg => odd : since they are related to CMDS_ARGS see below
121  number of args must be even: cmd and arg must be in pair */
122 #define ODD_DROP_TYPE_2(arg1,arg2,...) arg1
123 #define ODD_DROP_TYPE_4(arg1,arg2,...) arg1, ODD_DROP_TYPE_2(__VA_ARGS__)
124 #define ODD_DROP_TYPE_6(arg1,arg2,...) arg1, ODD_DROP_TYPE_4(__VA_ARGS__)
125 #define ODD_DROP_TYPE_8(arg1,arg2,...) arg1, ODD_DROP_TYPE_6(__VA_ARGS__)
126 #define ODD_DROP_TYPE_10(arg1,arg2,...) arg1, ODD_DROP_TYPE_8(__VA_ARGS__)
127 #define ODD_DROP_TYPE_12(arg1,arg2,...) arg1, ODD_DROP_TYPE_10(__VA_ARGS__)
128 #define ODD_DROP_TYPE_14(arg1,arg2,...) arg1, ODD_DROP_TYPE_12(__VA_ARGS__)
129 #define ODD_DROP_TYPE_16(arg1,arg2,...) arg1, ODD_DROP_TYPE_14(__VA_ARGS__)
130 #define ODD_DROP_TYPE_18(arg1,arg2,...) arg1, ODD_DROP_TYPE_16(__VA_ARGS__)
131 #define ODD_DROP_TYPE_20(arg1,arg2,...) arg1, ODD_DROP_TYPE_18(__VA_ARGS__)
132 #define ODD_DROP_TYPE_22(arg1,arg2,...) arg1, ODD_DROP_TYPE_20(__VA_ARGS__)
133 #define ODD_DROP_TYPE_24(arg1,arg2,...) arg1, ODD_DROP_TYPE_22(__VA_ARGS__)
134 #define ODD_DROP_TYPE_26(arg1,arg2,...) arg1, ODD_DROP_TYPE_24(__VA_ARGS__)
135 #define ODD_DROP_TYPE_28(arg1,arg2,...) arg1, ODD_DROP_TYPE_26(__VA_ARGS__)
136 #define ODD_DROP_TYPE_30(arg1,arg2,...) arg1, ODD_DROP_TYPE_28(__VA_ARGS__)
137 #define ODD_DROP_TYPE_32(arg1,arg2,...) arg1, ODD_DROP_TYPE_30(__VA_ARGS__)
138 #define ODD_DROP_TYPE_34(arg1,arg2,...) arg1, ODD_DROP_TYPE_32(__VA_ARGS__)
139 #define ODD_DROP_TYPE_36(arg1,arg2,...) arg1, ODD_DROP_TYPE_34(__VA_ARGS__)
140 #define ODD_DROP_TYPE_38(arg1,arg2,...) arg1, ODD_DROP_TYPE_36(__VA_ARGS__)
141 #define ODD_DROP_TYPE_40(arg1,arg2,...) arg1, ODD_DROP_TYPE_38(__VA_ARGS__)
142 
143 
144 /* to easily insert more than one command at once, in function like m2mb_xxx_conf
145  or typically m2mb_os_xx_setAttrItem(...) */
146 #define CMDS( ... ) ARG_LENGTH(__VA_ARGS__), __VA_ARGS__
147 
148 /*
149  To insert CMD and ARG of command as a pair to better control the process:
150  e.g.
151  CMDS_ARGS( CMD1, ARGofCMD1, CMD2, ARGofCMD2, ..., CMDn, ARGofCMDn )
152  cmds - arg pairs => (NCMDS+NARGS)/2 , CMDS , ARGS
153  since NCMDS = NARGS => ( NCMDS , CMDS , ARGS ) as usual
154  It checks automatically if num of args are even: if not a compilation error will arise
155 */
156 #define CMDS_ARGS( ... ) (ARG_LENGTH(__VA_ARGS__)/2), ARG_ODD(__VA_ARGS__), ARG_EVEN(__VA_ARGS__)
157 
158 
159 
160 #define ENUM_TO_INT(Prefix) \
161  MIN_ENUM_##Prefix=(int)0x80000000,\
162  MAX_ENUM_##Prefix=(int)0x7FFFFFFF
163 
164 #ifndef TRUE
165 #define TRUE 1
166 #endif
167 
168 #ifndef FALSE
169 #define FALSE 0
170 #endif
171 
172 #define kB (1024)
173 #define MB (kB * kB)
174 
175 /* Global typedefs ==============================================================================*/
176 
177 
178 #if ( !defined(_M2M_TYPE_H) || defined(TEST_IN_AZ) )
179 /* typedefs that indicates size and signedness */
180 typedef char CHAR; /* 8-bit plain char used for character data */
181 typedef float FLOAT32; /* 32-bit floating point */
182 typedef double FLOAT64; /* 64-bit extended floating point */
183 #if ( defined(NOT_STD_TYPE) && !defined(_M2M_TYPE_H) )
184 typedef signed char INT8; /* 8-bit signed integer, used for numeric data */
185 typedef signed short INT16; /* 16-bit signed integer */
186 typedef signed int INT32; /* 32-bit signed integer */
187 typedef signed long long INT64; /* 64-bit signed integer */
188 
189 typedef unsigned char UINT8; /* 8-bit unsigned integer, used for numeric data */
190 typedef unsigned short UINT16; /* 16-bit unsigned integer */
191 typedef unsigned int UINT32; /* 32-bit unsigned integer */
192 typedef unsigned long long UINT64; /* 64-bit unsigned integer */
193 
194 #elif ( !defined(_M2M_TYPE_H) )
195 typedef int8_t INT8; /* 8-bit signed integer, used for numeric data */
196 typedef int16_t INT16; /* 16-bit signed integer */
197 typedef int32_t INT32; /* 32-bit signed integer */
198 typedef int64_t INT64; /* 64-bit signed integer */
199 
200 typedef uint8_t UINT8; /* 8-bit unsigned integer, used for numeric data */
201 typedef uint16_t UINT16; /* 16-bit unsigned integer */
202 typedef uint32_t UINT32; /* 32-bit unsigned integer */
203 typedef uint64_t UINT64; /* 64-bit unsigned integer */
204 
205 //typedef uintmax_t MEM_W; /* memory width of bus memory : e.g 32 bits */
206 
207 #endif
208 
209 #endif
210 
211 typedef UINT32 MEM_W; /* memory width of bus memory : e.g 32 bits */
212 typedef UINT8 BOOLEAN;
213 typedef INT32 iHANDLE;
214 typedef UINT32 uiHANDLE;
215 
216 /* typedefs used by standard */
217 typedef UINT32 SIZE_T;
218 typedef INT32 SSIZE_T;
219 typedef UINT16 DEV_T;
220 typedef UINT16 MODE_T;
221 typedef INT32 OFF_T;
222 typedef UINT32 TIME_T;
223 typedef UINT32 INODE_T;
224 typedef UINT8 NLINK_T;
225 
226 typedef enum
227 {
228  M2MB_RESULT_NOT_SUPPORTED = -3,
229  M2MB_RESULT_SM_UNAVAILABLE = -2,
230  M2MB_RESULT_INVALID_ARG = -1,
231  M2MB_RESULT_FAIL = 0,
232  M2MB_RESULT_SUCCESS = 1
233 } M2MB_RESULT_E;
234 
235 typedef struct
236 {
237  void *pHandler; /*internal usage*/
239 
240 typedef void *HANDLE;
241 
242 #ifdef _WIN32
243 #undef errno
244 #endif // _WIN32
245 
246 /* Global functions =============================================================================*/
247 
248 #endif /* M2M_M2MB_TYPES_H */
249 
M2MB_HANDLER_T
Definition: m2mb_types.h:235