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