TSP: The Transport Sample Protocol



Main Page | Modules | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

tsp_abs_types.h

Go to the documentation of this file.
00001 
00038 #ifndef  __TSP_ABS_TYPES_H
00039 #define  __TSP_ABS_TYPES_H 1
00040 
00041 #define TSP_LITTLE_ENDIAN 1234
00042 #define TSP_BIG_ENDIAN    4321
00043 #define TSP_PDP_ENDIAN    3412          /* unused, need specific PDP check */   
00044 
00045 /* This include should offers all the types like uint16_t and others */
00046 /* Choose to base TSP on the STANDARD POSIX types */
00047 #include <sys/types.h>
00048 
00049 /*** Platform specific ***/
00050 
00051 /* SUN / sparc|i386 (32/64 bits) */
00052 #if  defined(__sun)
00053 # define TSP_BYTE_ORDER TSP_BIG_ENDIAN
00054 # define TSP_SYSTEM_HAVE_GETHRTIME
00055 # define TSP_SYSTEM_HAVE_NANOSLEEP
00056 # define TSP_HAVE_INT64 1
00057 # if  defined(__sparcv9)
00058 #   define TSP_INT64_CONSTANT(val)  (val##L)
00059 #   define TSP_GUINT64_FORMAT "lu"
00060 # else /* not sparcv9, an old one */
00061 #   define TSP_INT64_CONSTANT(val)  (val##LL)
00062 #   define TSP_GUINT64_FORMAT "llu"
00063     /* Old sparc lacks from simple types, need to do it by our own */
00064 #   ifndef _SYS_INT_TYPES_H 
00065 #       ifndef _UINT16_T
00066                 typedef unsigned short   uint16_t;
00067 #               define _UINT16_T
00068 #       endif
00069 #       ifndef _INT16_T
00070                 typedef short   int16_t;
00071 #               define _INT16_T
00072 #       endif
00073 #       ifndef _UINT32_T
00074                 typedef unsigned long   uint32_t;
00075 #               define _UINT32_T
00076 #       endif
00077 #       ifndef _INT32_T
00078                 typedef long   int32_t;
00079 #               define _INT32_T
00080 #       endif
00081 #       ifndef _UINT64_T
00082                 typedef u_longlong_t    uint64_t;
00083 #               define _UINT64_T
00084 #       endif
00085 #       ifndef _INT64_T
00086                 typedef longlong_t    int64_t;
00087 #               define _INT64_T
00088 #       endif
00089 #   endif /* Exists SYS_TYPES_H */ 
00090 # endif /* ! sparcv9 */
00091 #endif /* SUN */
00092 
00093 
00094 /* Linux / Intel */
00095 #if defined (__linux__) &&  defined (__i386__) 
00096 # include <stdint.h>
00097 # define TSP_BYTE_ORDER TSP_LITTLE_ENDIAN
00098 # define TSP_INT64_CONSTANT(val)  (val##LL)
00099 # define TSP_GUINT64_FORMAT "llu"
00100 # define TSP_SYSTEM_HAVE_NANOSLEEP 1
00101 # define TSP_HAVE_INT64 1
00102 #endif /* Linux / Intel */
00103 
00104 
00105 /* OSF1 / Alpha */
00106 #if defined (__osf__) && defined (__alpha)
00107 # include <inttypes.h>
00108 # define TSP_INT64_CONSTANT(val)  (val##L)
00109 # define TSP_BYTE_ORDER TSP_LITTLE_ENDIAN
00110 # define TSP_GUINT64_FORMAT "lu"
00111 # define TSP_SYSTEM_HAVE_NANOSLEEP 1
00112 # define TSP_HAVE_INT64 1
00113 #endif /* OSF1 / Alpha */
00114 
00115 /* VXWORKS */
00116 #if  defined (VXWORKS)
00117 # define TSP_BYTE_ORDER TSP_BIG_ENDIAN
00118 # define TSP_GUINT64_FORMAT "llu"
00119 # undef TSP_SYSTEM_HAVE_GETHRTIME 
00120 # define TSP_SYSTEM_HAVE_NANOSLEEP
00121 # define TSP_HAVE_INT64 1
00122 # define TSP_INT64_CONSTANT(val)  (val##LL)
00123 #       ifndef _UINT64_T
00124                 typedef unsigned long long    uint64_t;
00125 #               define _UINT64_T
00126 #       endif
00127 #       ifndef _INT64_T
00128                 typedef long long    int64_t;
00129 #               define _INT64_T
00130 #       endif
00131 #endif /* VXWORKS */
00132 
00133 /* OpenBSD / i386 (32 bits) (From Fred&Co) */
00134 #if defined (__OpenBSD__) &&  defined (__i386__)
00135 # define TSP_INT64_CONSTANT(val)  (val##LL)
00136 # define TSP_BYTE_ORDER TSP_LITTLE_ENDIAN
00137 # define TSP_GUINT64_FORMAT "llu"
00138 # define TSP_SYSTEM_HAVE_NANOSLEEP
00139 # define TSP_HAVE_INT64 1
00140 
00141 /* Standard C types not defined in OBSD at the moment */
00142 typedef int8_t  int_least8_t;
00143 typedef int16_t int_least16_t;
00144 typedef int32_t int_least32_t;
00145 typedef int64_t int_least64_t; 
00146 
00147 #endif /* OpenBSD / i386 */
00148 
00149 /*-----------------------------------------------------*/
00150 
00151 #ifndef NULL
00152 #define NULL    ((void*) 0)
00153 #endif
00154 
00155 #ifndef FALSE
00156 #define FALSE   (0)
00157 #endif
00158 
00159 #ifndef TRUE
00160 #define TRUE    (!FALSE)
00161 #endif
00162 
00163 #undef  ABS
00164 #define ABS(a)     (((a) < 0) ? -(a) : (a))
00165 
00166 
00167 /* =================================================
00168  * Warning : All this macro were stolen from GLIB
00169  * Thanks to those people who makes so beautiful things
00170  * But we didn't want to oblige people to link TSP with glib
00171  * So our choice is POSIX types + renammed macro
00172  * this header defines TSP_BYTE_ORDER which expands to one of
00173  * the below macros.
00174  */
00175 
00176 #if TSP_BYTE_ORDER == TSP_BIG_ENDIAN
00177 
00178 #define TSP_INT16_TO_BE(val)    ((int16_t) (val))
00179 #define TSP_UINT16_TO_BE(val)   ((uint16_t) (val))
00180 #define TSP_INT16_TO_LE(val)    ((int16_t) TSP_UINT16_SWAP_LE_BE (val))
00181 #define TSP_UINT16_TO_LE(val)   (TSP_UINT16_SWAP_LE_BE (val))
00182 #define TSP_INT32_TO_BE(val)    ((int32_t) (val))
00183 #define TSP_UINT32_TO_BE(val)   ((uint32_t) (val))
00184 #define TSP_INT32_TO_LE(val)    ((int32_t) TSP_UINT32_SWAP_LE_BE (val))
00185 #define TSP_UINT32_TO_LE(val)   (TSP_UINT32_SWAP_LE_BE (val))
00186 #define TSP_INT64_TO_BE(val)    ((int64_t) (val))
00187 #define TSP_UINT64_TO_BE(val)   ((uint64_t) (val))
00188 #define TSP_INT64_TO_LE(val)    ((int64_t) TSP_UINT64_SWAP_LE_BE (val))
00189 #define TSP_UINT64_TO_LE(val)   (TSP_UINT64_SWAP_LE_BE (val))
00190 
00191 #define TSP_LONG_TO_LE(val)     ((long_t) TSP_INT32_TO_LE (val))
00192 #define TSP_ULONG_T_TO_LE(val)  ((ulong_t) TSP_UINT32_TO_LE (val))
00193 #define TSP_LONG_TO_BE(val)     ((long_t) TSP_INT32_TO_BE (val))
00194 #define TSP_ULONG_T_TO_BE(val)  ((ulong_t) TSP_UINT32_TO_BE (val))
00195 
00196 #define TSP_INT_TO_LE(val)      ((int) TSP_INT32_TO_LE (val))
00197 #define TSP_UINT_TO_LE(val)     ((uint_t) TSP_UINT32_TO_LE (val))
00198 #define TSP_INT_TO_BE(val)      ((int) TSP_INT32_TO_BE (val))
00199 #define TSP_UINT_TO_BE(val)     ((uint_t) TSP_UINT32_TO_BE (val))
00200 
00201 #endif
00202 
00203 #if TSP_BYTE_ORDER == TSP_LITTLE_ENDIAN
00204 
00205 #define TSP_INT16_TO_LE(val)    ((int16_t) (val))
00206 #define TSP_UINT16_TO_LE(val)   ((uint16_t) (val))
00207 #define TSP_INT16_TO_BE(val)    ((int16_t) TSP_INT16_SWAP_LE_BE (val))
00208 #define TSP_UINT16_TO_BE(val)   (TSP_UINT16_SWAP_LE_BE (val))
00209 #define TSP_INT32_TO_LE(val)    ((int32_t) (val))
00210 #define TSP_UINT32_TO_LE(val)   ((uint32_t) (val))
00211 #define TSP_INT32_TO_BE(val)    ((int32_t) TSP_UINT32_SWAP_LE_BE (val))
00212 #define TSP_UINT32_TO_BE(val)   (TSP_UINT32_SWAP_LE_BE (val))
00213 #define TSP_INT64_TO_LE(val)    ((int64_t) (val))
00214 #define TSP_UINT64_TO_LE(val)   ((uint64_t) (val))
00215 #define TSP_INT64_TO_BE(val)    ((int64_t) TSP_UINT64_SWAP_LE_BE (val))
00216 #define TSP_UINT64_TO_BE(val)   (TSP_UINT64_SWAP_LE_BE (val))
00217 
00218 #define TSP_LONG_TO_LE(val)     ((long_t) TSP_INT32_TO_LE (val))
00219 #define TSP_ULONG_TO_LE(val)    ((ulong_t) TSP_INT32_TO_LE (val))
00220 #define TSP_LONG_TO_BE(val)     ((long_t) TSP_INT32_TO_BE (val))
00221 #define TSP_ULONG_TO_BE(val)    ((ulong_t) TSP_INT32_TO_BE (val))
00222 
00223 #define TSP_INT_TO_LE(val)      ((int) TSP_INT32_TO_LE (val))
00224 #define TSP_UINT_TO_LE(val)     ((uint_t) TSP_UINT32_TO_LE (val))
00225 #define TSP_INT_TO_BE(val)      ((int) TSP_INT32_TO_BE (val))
00226 #define TSP_UINT_TO_BE(val)     ((uint_t) TSP_UINT32_TO_BE (val))
00227 
00228 #endif
00229 
00230 /* Basic bit swapping functions
00231  */
00232 #define TSP_UINT16_SWAP_LE_BE_CONSTANT(val)     ((uint16_t) ( \
00233     (((uint16_t) (val) & (uint16_t) 0x00ffU) << 8) | \
00234     (((uint16_t) (val) & (uint16_t) 0xff00U) >> 8)))
00235 #define TSP_UINT32_SWAP_LE_BE_CONSTANT(val)     ((uint32_t) ( \
00236     (((uint32_t) (val) & (uint32_t) 0x000000ffU) << 24) | \
00237     (((uint32_t) (val) & (uint32_t) 0x0000ff00U) <<  8) | \
00238     (((uint32_t) (val) & (uint32_t) 0x00ff0000U) >>  8) | \
00239     (((uint32_t) (val) & (uint32_t) 0xff000000U) >> 24)))
00240 
00241 #  define TSP_UINT16_SWAP_LE_BE(val) (TSP_UINT16_SWAP_LE_BE_CONSTANT (val))
00242 #  define TSP_UINT32_SWAP_LE_BE(val) (TSP_UINT32_SWAP_LE_BE_CONSTANT (val))
00243 
00244 #ifdef TSP_HAVE_INT64
00245 #  define TSP_UINT64_SWAP_LE_BE_CONSTANT(val)   ((uint64_t) ( \
00246       (((uint64_t) (val) &                                              \
00247         (uint64_t) TSP_INT64_CONSTANT(0x00000000000000ffU)) << 56) |    \
00248       (((uint64_t) (val) &                                              \
00249         (uint64_t) TSP_INT64_CONSTANT(0x000000000000ff00U)) << 40) |    \
00250       (((uint64_t) (val) &                                              \
00251         (uint64_t) TSP_INT64_CONSTANT(0x0000000000ff0000U)) << 24) |    \
00252       (((uint64_t) (val) &                                              \
00253         (uint64_t) TSP_INT64_CONSTANT(0x00000000ff000000U)) <<  8) |    \
00254       (((uint64_t) (val) &                                              \
00255         (uint64_t) TSP_INT64_CONSTANT(0x000000ff00000000U)) >>  8) |    \
00256       (((uint64_t) (val) &                                              \
00257         (uint64_t) TSP_INT64_CONSTANT(0x0000ff0000000000U)) >> 24) |    \
00258       (((uint64_t) (val) &                                              \
00259         (uint64_t) TSP_INT64_CONSTANT(0x00ff000000000000U)) >> 40) |    \
00260       (((uint64_t) (val) &                                              \
00261         (uint64_t) TSP_INT64_CONSTANT(0xff00000000000000U)) >> 56)))
00262 #    define TSP_UINT64_SWAP_LE_BE(val) (TSP_UINT64_SWAP_LE_BE_CONSTANT(val))
00263 #endif
00264 
00265 /* The G*_TO_?E() macros are defined in glibconfig.h.
00266  * The transformation is symmetric, so the FROM just maps to the TO.
00267  */
00268 #define TSP_INT16_FROM_LE(val)  (TSP_INT16_TO_LE (val))
00269 #define TSP_UINT16_FROM_LE(val) (TSP_UINT16_TO_LE (val))
00270 #define TSP_INT16_FROM_BE(val)  (TSP_INT16_TO_BE (val))
00271 #define TSP_UINT16_FROM_BE(val) (TSP_UINT16_TO_BE (val))
00272 #define TSP_INT32_FROM_LE(val)  (TSP_INT32_TO_LE (val))
00273 #define TSP_UINT32_FROM_LE(val) (TSP_UINT32_TO_LE (val))
00274 #define TSP_INT32_FROM_BE(val)  (TSP_INT32_TO_BE (val))
00275 #define TSP_UINT32_FROM_BE(val) (TSP_UINT32_TO_BE (val))
00276 
00277 #ifdef TSP_HAVE_INT64
00278 #  define TSP_INT64_FROM_LE(val)        (TSP_INT64_TO_LE (val))
00279 #  define TSP_UINT64_FROM_LE(val)       (TSP_UINT64_TO_LE (val))
00280 #  define TSP_INT64_FROM_BE(val)        (TSP_INT64_TO_BE (val))
00281 #  define TSP_UINT64_FROM_BE(val)       (TSP_UINT64_TO_BE (val))
00282 #endif
00283 
00284 #define TSP_LONG_FROM_LE(val)   (TSP_LONG_TO_LE (val))
00285 #define TSP_ULONG_FROM_LE(val)  (TSP_ULONG_TO_LE (val))
00286 #define TSP_LONG_FROM_BE(val)   (TSP_LONG_TO_BE (val))
00287 #define TSP_ULONG_FROM_BE(val)  (TSP_ULONG_TO_BE (val))
00288 
00289 #define TSP_INT_FROM_LE(val)    (TSP_INT_TO_LE (val))
00290 #define TSP_UINT_FROM_LE(val)   (TSP_UINT_TO_LE (val))
00291 #define TSP_INT_FROM_BE(val)    (TSP_INT_TO_BE (val))
00292 #define TSP_UINT_FROM_BE(val)   (TSP_UINT_TO_BE (val))
00293 
00294 #endif /*ABS_TYPES_H*/
Framework Home Page.

Beware !! TSP wave is coming...