Zen API
Home
Topics
Types
Files
All
Classes
Files
Functions
Variables
Typedefs
Friends
Macros
Modules
Pages
kApiCfg.h
Go to the documentation of this file.
1
10
#ifndef K_API_API_CFG_H
11
#define K_API_API_CFG_H
12
13
/* Detect language. */
14
#if defined __cplusplus
15
# define K_CPP
16
#endif
17
18
/* Detect the compiler family; fall back to GCC as default. */
19
#if defined(_MSC_VER)
20
# define K_MSVC
21
#elif defined(__TI_COMPILER_VERSION__)
22
# define K_TI_CCS
23
#else
24
# define K_GCC
25
#endif
26
27
/* Detect the OS; fall back to non-specific POSIX as default. */
28
#if defined(_WIN32) || defined(_WIN64)
29
# define K_WINDOWS
30
#elif defined(__TMS320C6X__)
31
# define K_TI_BIOS
32
# define K_DSP_BIOS
/* old definition, provided for compatibility with FS<=6.1.33.x */
33
#elif defined(_WRS_KERNEL)
34
# define K_VX_KERNEL
35
#else
36
# define K_POSIX
37
# if defined(__linux__)
38
# define K_LINUX
39
# endif
40
# if defined(__APPLE__)
41
# define K_DARWIN
42
# endif
43
# if defined(__QNXNTO__)
44
# define K_QNX
45
# endif
46
#endif
47
48
/* Code profiling always enabled in debug builds. */
49
#if defined(K_DEBUG)
50
# define K_PROFILE
51
#endif
52
53
#if defined(K_DEBUG)
54
# define K_DEBUG_ENABLED (1)
55
#else
56
# define K_DEBUG_ENABLED (0)
57
#endif
58
59
#if defined(K_PROFILE)
60
# define K_PROFILE_ENABLED (1)
61
#else
62
# define K_PROFILE_ENABLED (0)
63
#endif
64
65
/*
66
* Include some C standard headers that we heavily rely on. This list is subject to change;
67
* dependent code should not assume that these headers will always be included here.
68
*/
69
#if defined(K_MSVC) && defined(K_DEBUG)
70
# define _CRTDBG_MAP_ALLOC
71
# include <stdlib.h>
72
# include <crtdbg.h>
73
#else
74
# include <stdlib.h>
75
#endif
76
77
#include <stdarg.h>
78
#include <stddef.h>
79
#include <string.h>
80
81
/* Utilty macros for stringizing macro arguments. */
82
#define xkStringize(X) #X
83
#define xkStringizeDefine(X) xkStringize(X)
84
85
/*
86
* Detect pointer size; raise an eror if the pointer size cannot be detected. The behaviour
87
* can be overridden by defining K_POINTER_SIZE as a compiler flag.
88
*/
89
#if !defined(K_POINTER_SIZE)
90
# if defined(_WIN64) || defined(WIN64)
91
# define K_POINTER_SIZE (8)
92
# elif defined(_WIN32) || defined(WIN32)
93
# define K_POINTER_SIZE (4)
94
# elif defined(__SIZEOF_POINTER__)
95
# define K_POINTER_SIZE (__SIZEOF_POINTER__)
96
# elif defined(__LP64__) || defined(__LLP64__) || defined(__SILP64__)
97
# define K_POINTER_SIZE (8)
98
# elif defined(__LP32__) || defined(__ILP32__)
99
# define K_POINTER_SIZE (4)
100
# elif defined(_TMS320C6X)
101
# define K_POINTER_SIZE (4)
102
# else
103
# error "Pointer size not detected; define K_POINTER_SIZE as compiler flag."
104
# endif
105
#endif
106
107
#if (K_POINTER_SIZE == 8)
108
# define K_POINTER_SHIFT (3)
109
#elif (K_POINTER_SIZE == 4)
110
# define K_POINTER_SHIFT (2)
111
#endif
112
113
/*
114
* Detect endianness; fall back to little endian as default. The behaviour can be overridden
115
* by defining K_ENDIANNESS as a compiler flag.
116
*/
117
#if !defined(K_ENDIANNESS)
118
# if defined(K_GCC) && defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
119
# define K_ENDIANNESS (kENDIANNESS_BIG)
120
# else
121
# define K_ENDIANNESS (kENDIANNESS_LITTLE)
122
# endif
123
#endif
124
125
#if defined(K_CPP)
126
# define kExtern extern "C"
127
#else
128
# define kExtern extern
129
#endif
130
131
#if defined(K_GCC)
132
# define K_ATTRIBUTE_UNUSED __attribute__((unused))
133
#else
134
# define K_ATTRIBUTE_UNUSED
135
#endif
136
137
/* Define primitive data types and calling conventions. */
138
#if defined(K_MSVC)
139
140
# define xkCall __stdcall
141
# define xkDlCall __cdecl
142
143
# define kExportFx(TYPE) kExtern __declspec(dllexport) TYPE kCall
144
# define kImportFx(TYPE) kExtern __declspec(dllimport) TYPE kCall
145
146
# define kExportCx(TYPE) kExtern __declspec(dllexport) TYPE xkDlCall
147
# define kImportCx(TYPE) kExtern __declspec(dllimport) TYPE xkDlCall
148
149
# define kInFx(TYPE) kExtern TYPE kCall
150
# define kInCx(TYPE) kExtern TYPE kCall
151
152
# define kExportDx(TYPE) __declspec(dllexport) TYPE
153
# define kImportDx(TYPE) __declspec(dllimport) TYPE
154
155
# define kInDx(TYPE) TYPE
156
157
# if _MSC_VER >= 1500
158
# define kInline __inline
159
# else
160
# define kInline
161
# endif
162
163
typedef
unsigned
__int8 xk8u;
164
typedef
unsigned
__int16 xk16u;
165
typedef
unsigned
__int32 xk32u;
166
typedef
unsigned
__int64 xk64u;
167
typedef
__int8 xk8s;
168
typedef
__int16 xk16s;
169
typedef
__int32 xk32s;
170
typedef
__int64 xk64s;
171
typedef
float
xk32f;
172
typedef
double
xk64f;
173
typedef
char
xkChar;
174
typedef
unsigned
char
xkByte;
175
176
# define xk64U(CONSTANT) (CONSTANT##ui64)
177
# define xk64S(CONSTANT) (CONSTANT##i64)
178
179
#elif defined(K_TI_CCS)
180
181
# define xkCall
182
# define xkDlCall
183
184
# define kExportFx(TYPE) kExtern TYPE kCall
185
# define kImportFx(TYPE) kExtern TYPE kCall
186
187
# define kExportCx(TYPE) kExtern TYPE kDlCall
188
# define kImportCx(TYPE) kExtern TYPE kDlCall
189
190
# define kInFx(TYPE) kExtern TYPE kCall
191
# define kInCx(TYPE) kExtern TYPE kCall
192
193
# define kExportDx(TYPE) TYPE
194
# define kImportDx(TYPE) TYPE
195
196
# define kInDx(TYPE) TYPE
197
198
# define kInline inline
199
200
typedef
unsigned
char
xk8u;
201
typedef
unsigned
short
xk16u;
202
typedef
unsigned
int
xk32u;
203
typedef
unsigned
long
long
xk64u;
204
typedef
signed
char
xk8s;
205
typedef
signed
short
xk16s;
206
typedef
signed
int
xk32s;
207
typedef
signed
long
long
xk64s;
208
typedef
float
xk32f;
209
typedef
double
xk64f;
210
typedef
char
xkChar;
211
typedef
unsigned
char
xkByte;
212
213
# define xk64U(CONSTANT) (CONSTANT##LLU)
214
# define xk64S(CONSTANT) (CONSTANT##LL)
215
216
#else
217
218
# define xkCall
219
# define xkDlCall
220
221
# define kExportFx(TYPE) kExtern TYPE kCall
222
# define kImportFx(TYPE) kExtern TYPE kCall
223
224
# define kExportCx(TYPE) kExtern TYPE kDlCall
225
# define kImportCx(TYPE) kExtern TYPE kDlCall
226
227
# define kInFx(TYPE) kExtern TYPE kCall
228
# define kInCx(TYPE) kExtern TYPE kCall
229
230
# define kExportDx(TYPE) TYPE
231
# define kImportDx(TYPE) TYPE
232
233
# define kInDx(TYPE) TYPE
234
235
# define kInline inline
236
237
typedef
unsigned
char
xk8u;
238
typedef
unsigned
short
xk16u;
239
typedef
unsigned
int
xk32u;
240
typedef
unsigned
long
long
xk64u;
241
typedef
signed
char
xk8s;
242
typedef
signed
short
xk16s;
243
typedef
signed
int
xk32s;
244
typedef
signed
long
long
xk64s;
245
typedef
float
xk32f;
246
typedef
double
xk64f;
247
typedef
char
xkChar;
248
typedef
unsigned
char
xkByte;
249
250
# define xk64U(CONSTANT) (CONSTANT##LLU)
251
# define xk64S(CONSTANT) (CONSTANT##LL)
252
253
#endif
254
255
#define xkInlineFx(TYPE) static kInline TYPE kCall
256
257
#if (K_POINTER_SIZE == 4)
258
259
typedef
xk32u xkSize;
260
# define xkSIZE_MAX k32U_MAX
261
262
typedef
xk32s xkSSize;
263
# define xkSSIZE_MIN k32S_MIN
264
# define xkSSIZE_MAX k32S_MAX
265
266
#elif (K_POINTER_SIZE == 8)
267
268
typedef
xk64u xkSize;
269
# define xkSIZE_MAX k64U_MAX
270
271
typedef
xk64s xkSSize;
272
# define xkSSIZE_MIN k64S_MIN
273
# define xkSSIZE_MAX k64S_MAX
274
275
#endif
276
277
#define kALIGN_ANY (3)
278
#define kALIGN_ANY_SIZE (1 << kALIGN_ANY)
279
280
#define kVarArgList va_list
281
282
#if defined(K_MSVC) || defined(K_TI_CCS)
283
# define kVarArgList_Start(ARG_PTR, PREV_PARAM) va_start(ARG_PTR, PREV_PARAM)
284
# define kVarArgList_End(ARG_PTR) va_end(ARG_PTR)
285
# define kVarArgList_Copy(ARG_PTR, SOURCE) ((ARG_PTR) = (SOURCE))
286
# define kVarArgList_Next(ARG_PTR, TYPE) va_arg(ARG_PTR, TYPE)
287
#else
288
# define kVarArgList_Start(ARG_PTR, PREV_PARAM) va_start(ARG_PTR, PREV_PARAM)
289
# define kVarArgList_End(ARG_PTR) va_end(ARG_PTR)
290
# define kVarArgList_Copy(ARG_PTR, SOURCE) va_copy(ARG_PTR, SOURCE)
291
# define kVarArgList_Next(ARG_PTR, TYPE) va_arg(ARG_PTR, TYPE)
292
#endif
293
294
295
/* Deprecation support. */
296
#if !defined(K_NO_DEPRECATION)
297
# if defined(K_MSVC)
298
# define xkDeprecate(SYMBOL) __pragma(deprecated(SYMBOL))
299
# else
300
# define xkDeprecate(SYMBOL)
301
# endif
302
#else
303
# define xkDeprecate(SYMBOL)
304
#endif
305
306
/* Warning support. */
307
#if defined(K_MSVC)
308
309
# define xkWarn(MESSAGE) __pragma(message(__FILE__ "(" xkStringizeDefine(__LINE__) "): warning: " MESSAGE))
310
311
#elif defined(K_GCC)
312
313
# define xkWarnHelper(x) _Pragma (#x)
314
# define xkWarn(MESSAGE) xkWarnHelper(GCC warning MESSAGE)
315
316
#else
317
318
# define xkWarn(MESSAGE)
319
320
#endif
321
322
/* Software breakpoint support. */
323
#if defined(K_DEBUG) && defined(K_MSVC)
324
# define xkDebugBreak() __debugbreak()
325
#else
326
# define xkDebugBreak()
327
#endif
328
329
#if defined (K_CPP)
330
# define kBeginCHeader() extern "C" {
331
# define kEndCHeader() }
332
#else
333
# define kBeginCHeader()
334
# define kEndCHeader()
335
#endif
336
337
338
/*
339
* Some source files require platform library headers to be included. And, at least
340
* for Windows, there can sometimes exist complicated rules about the particular order
341
* in which headers have to be included. The K_PLATFORM symbol helps to deal with
342
* these issues.
343
*
344
* Any kApi source file that requires platform headers should have #define K_PLATFORM as the
345
* first line in the source file. This ensures that the most common platform headers are
346
* included here, in the correct order.
347
*/
348
#if defined(K_PLATFORM)
349
350
/*
351
* Common for all platforms.
352
*/
353
# include <assert.h>
354
355
/*
356
* Platform specific includes.
357
*/
358
# if defined(K_WINDOWS)
359
# include <winsock2.h>
360
# include <ws2tcpip.h>
361
# include <iphlpapi.h>
362
# include <windows.h>
363
# include <process.h>
364
# endif
365
# if defined(K_TI_BIOS)
366
# include <xdc/std.h>
367
# include <xdc/runtime/Types.h>
368
# include <xdc/runtime/Error.h>
369
# include <ti/sysbios/BIOS.h>
370
# include <ti/sysbios/knl/Clock.h>
371
# include <ti/sysbios/knl/Semaphore.h>
372
# include <ti/sysbios/knl/Task.h>
373
kBeginCHeader()
374
# include <netmain.h>
375
# include <nettools/nettools.h>
376
# include <nettools/inc/inet.h>
377
kEndCHeader()
378
# endif
379
# if defined(K_VX_KERNEL)
380
# include <vxWorks.h>
381
# include <sysLib.h>
382
# include <kernelLib.h>
383
# include <loadLib.h>
384
# include <intLib.h>
385
# include <symLib.h>
386
# include <sysSymTbl.h>
387
# include <taskLib.h>
388
# include <inline/semLibInline.h>
389
# include <unldLib.h>
390
# include <stdioLib.h>
391
# include <strLib.h>
392
# include <sockLib.h>
393
# include <inetLib.h>
394
# include <ioLib.h>
395
# include <fioLib.h>
396
# include <selectLib.h>
397
# include <netinet/in.h>
398
# include <netinet/tcp.h>
399
# include <wrapper/wrapperHostLib.h>
400
# include <netdb.h>
401
# include <sys/socket.h>
402
# include <net/if.h>
403
# include <net/if_ll.h>
404
# include <net/ethernet.h>
405
# include <ipnet/ipioctl.h>
406
# endif
407
# if defined(K_POSIX)
408
# include <errno.h>
409
# include <unistd.h>
410
# include <pthread.h>
411
# include <semaphore.h>
412
# include <sys/types.h>
413
# include <sys/stat.h>
414
# if defined(K_QNX)
415
# include <fcntl.h>
416
# else
417
# include <sys/fcntl.h>
418
# endif
419
# include <sys/socket.h>
420
# include <sys/select.h>
421
# include <sys/ioctl.h>
422
# include <sys/time.h>
423
# include <sys/timeb.h>
424
# include <netinet/in.h>
425
# include <netinet/tcp.h>
426
# include <dlfcn.h>
427
# include <dirent.h>
428
# include <net/if.h>
429
# include <netdb.h>
430
# endif
431
# if defined(K_DARWIN)
432
# include <ifaddrs.h>
433
# include <mach-o/dyld.h>
434
# include <libkern/OSAtomic.h>
435
# endif
436
# if defined (K_LINUX)
437
# include <signal.h>
438
# include <sys/prctl.h>
439
# include <sys/wait.h>
440
# include <linux/sockios.h>
441
# include <linux/ethtool.h>
442
# endif
443
#endif
444
445
#if defined(K_VX_KERNEL)
446
typedef
xk32s xkAtomic32s;
447
typedef
xkSSize xkAtomicPointer;
448
#else
449
typedef
volatile
xk32s xkAtomic32s;
450
typedef
void
*
volatile
xkAtomicPointer;
451
#endif
452
453
#if defined(K_PLATFORM)
454
# if defined(K_WINDOWS)
455
# define K_OS_INFINITE INFINITE
456
typedef
DWORD kThreadId;
457
# elif defined(K_TI_BIOS)
458
# define K_OS_INFINITE ti_sysbios_BIOS_WAIT_FOREVER
459
typedef
ti_sysbios_knl_Task_Handle kThreadId;
460
# elif defined(K_VX_KERNEL)
461
# define K_OS_INFINITE WAIT_FOREVER
462
typedef
TASK_ID kThreadId;
463
# elif defined(K_POSIX)
464
# define K_OS_INFINITE kINFINITE
/* no special "infinite" value */
465
typedef
pthread_t kThreadId;
466
# endif
467
#endif
468
469
#if defined(K_VX_KERNEL)
470
# if defined(K_MAIN_DYNAMIC)
471
# undef kMain
472
# define kMain kMain_Dynamic
473
# else
474
# undef kMain
475
# define kMain kMain
476
# endif
477
# define kMAIN_DYNAMIC "kMain_Dynamic"
478
#else
479
# define kMAIN_DYNAMIC "kMain"
480
#endif
481
482
483
/*
484
* Deprecated (Stage 1): not recommended for further use, but not yet announced via kDeprecate
485
*/
486
487
#if defined (K_CPP)
488
489
//[Deprecated] No longer required; provided that any C functions are properly annotated.
490
//Use kBeginCHeader/kEndCHeader to include a C header from C++ if the header was not desiged to support C++.
491
# define kBeginHeader() extern "C" {
492
493
//[Deprecated] No longer required; provided that any C functions are properly annotated.
494
//Use kBeginCHeader/kEndCHeader to include a C header from C++ if the header was not desiged to support C++.
495
# define kEndHeader() }
496
497
#else
498
499
//[Deprecated] No longer required; provided that any C functions are properly annotated.
500
//Use kBeginCHeader/kEndCHeader to include a C header from C++ if the header was not desiged to support C++.
501
# define kBeginHeader()
502
503
//[Deprecated] No longer required; provided that any C functions are properly annotated.
504
//Use kBeginCHeader/kEndCHeader to include a C header from C++ if the header was not desiged to support C++.
505
# define kEndHeader()
506
507
#endif
508
509
//[Deprecated] Replace with kVarArgList_Start
510
#define kVarArgList_Start_ kVarArgList_Start
511
512
//[Deprecated] Replace with kVarArgList_End
513
#define kVarArgList_End_ kVarArgList_End
514
515
//[Deprecated] Replace with kVarArgList_Copy
516
#define kVarArgList_Copy_ kVarArgList_Copy
517
518
//[Deprecated] Replace with kVarArgList_Next
519
#define kVarArgList_Next_ kVarArgList_Next
520
521
#endif
kApiCfg.h
This site is best viewed with Firefox. Copyright (C) 2003-2016 by LMI Technologies.