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