1/** 2 * \addtogroup common 3 * $Id: gigtypes.h 246063 2011-03-12 06:39:32Z rnuti $ 4 */ 5/*@{*/ 6 7/*************************************************** 8 * Header name: gigtypes.h 9 * 10 * Copyright 2006 Gigle Semiconductor as an unpublished work. 11 * All Rights Reserved. 12 * 13 * The information contained herein is confidential 14 * property of Company. The user, copying, transfer or 15 * disclosure of such information is prohibited except 16 * by express written agreement with Company. 17 * 18 * First written on 13/07/2006 by I. Barrera 19 * 20 ***************************************************/ 21/** \file gigtypes.h 22 * 23 * \brief This contains the definition of types 24 * 25 * Only general types that will be used for several 26 * modules must be defined here 27 * 28 **************************************************/ 29 30/* FILE-CSTYLED */ 31 32#ifndef GIGTYPES_H_ 33#define GIGTYPES_H_ 34 35/*************************************************** 36 * Public Defines Section 37 ***************************************************/ 38 39#define INIT_THROW 40 41/** \brief Boolean type */ 42typedef enum { 43 GIG_FALSE = 0, /**< Boolean false */ 44 GIG_TRUE = 1 /**< Boolean true */ 45} t_bool; 46 47/** \brief Number of possible Boolean values */ 48#define GIG_N_SWITCH (2) 49 50/** \brief Signed 8-bit integer */ 51typedef signed char t_int8; 52 53/** \brief Unsigned 8-bit integer */ 54typedef unsigned char t_uint8; 55 56/** \brief Signed 16-bit integer */ 57typedef signed short t_int16; 58 59/** \brief Unsigned 16-bit integer */ 60typedef unsigned short t_uint16; 61 62/** \brief Signed 32-bit integer */ 63typedef signed int t_int32; 64 65/** \brief Unsigned 32-bit integer */ 66typedef unsigned int t_uint32; 67 68/** \brief Signed 64-bit integer */ 69typedef signed long long t_int64; 70 71/** \brief Unsigned 64-bit integer */ 72typedef unsigned long long t_uint64; 73 74/** \brief type for names */ 75typedef char* t_name ; 76 77/** \brief type for integer/pointer data */ 78typedef long t_intptr ; 79 80/** \brief type for unsigned integer/pointer data */ 81typedef unsigned long t_uintptr ; 82 83/** \brief Swap two bytes inside a half word */ 84#define swap16(x) ( \ 85 (t_uint16)(((t_uint16)(x) & 0xff) << 8 | ((t_uint16)(x) & 0xff00) >> 8) \ 86) 87 88/** \brief Swap four bytes inside a word */ 89#define swap32(x) ( \ 90 (t_uint32)(((t_uint32)(x) & 0xff) << 24 | \ 91 ((t_uint32)(x) & 0xff00) << 8 | ((t_uint32)(x) & 0xff0000) >> 8 | \ 92 ((t_uint32)(x) & 0xff000000) >> 24) \ 93) 94 95#define u__(n) ((unsigned)(n)) /**< \internal */ 96 97#define BIT(n) (1U<<u__(n)) /**< \brief Return value with bit n */ 98 99#define BIT_SET(y, mask) \ 100 ((y) |= u__(mask)) /**< \brief Set given bits to 1 */ 101 102#define BIT_CLEAR(y, mask) \ 103 ((y) &= ~u__(mask)) /**< \brief Clear given bits to 0 */ 104 105#define BIT_FLIP(y, mask) \ 106 ((y) ^= u__(mask)) /**< \brief Invert given bits */ 107 108/** \brief Return bitmask with first n bits set to 1. E.g. 109 * BITMASK(3) = 00000111 110 */ 111#define BIT_MASK(len) (BIT(len)-1u) 112 113/** \brief Assigns value to y filtered by mask. \a Important: y is evaluated 114 * twice, once to read it's value and the other to write it. 115 */ 116#define BM_SET(y,value,mask) ((y)=((y)&~(mask))|((value)&(mask))) 117 118 119#define BF_MASK(start, len) ( BIT_MASK(len) << (start) ) 120#define BF_PREP(y, start, len) (((y) & BIT_MASK(len)) << (start)) 121#define BF_GET(y, start, len) (((y)>>(start)) & BIT_MASK(len)) 122#define BF_SET(y, x, start, len) ( (y) = ( (y) & ~BF_MASK(start, len) ) | BF_PREP(x, start, len) ) 123 124 125#define hex__(x) (0x##x##UL) /**< \internal */ 126/** \internal */ 127#define bin8__(x) ( \ 128 ((x) & 0x0000000FUL ? BIT(0) : 0) \ 129 | ((x) & 0x000000F0UL ? BIT(1) : 0) \ 130 | ((x) & 0x00000F00UL ? BIT(2) : 0) \ 131 | ((x) & 0x0000F000UL ? BIT(3) : 0) \ 132 | ((x) & 0x000F0000UL ? BIT(4) : 0) \ 133 | ((x) & 0x00F00000UL ? BIT(5) : 0) \ 134 | ((x) & 0x0F000000UL ? BIT(6) : 0) \ 135 | ((x) & 0xF0000000UL ? BIT(7) : 0)) 136 137/** \brief Easy writing of 8 bit binary literals. eg. 138 * 139 * BIN8(00110101) 140 */ 141#define BIN8(a) ((t_uint8)bin8__(hex__(a))) 142 143/** \brief Easy writing of 16 bit binary literals. eg. 144 * 145 * BIN16(00110101,00101111) 146 */ 147#define BIN16(a,b) ((t_uint16)BIN8(a) << 8 | BIN8(b)) 148 149/** \brief Easy writing of 32 bit binary literals. eg. 150 * 151 * BIN32(00110101,00101111,10101001,00001111) 152 */ 153#define BIN32(a,b,c,d) ((t_uint32)BIN16(a,b) << 16 | BIN16(c,d)) 154 155#else /*GIGTYPES_H_*/ 156#error "Header file __GIGTYPE_H__ has already been included!" 157#endif /*GIGTYPES_H_*/ 158 159/*@}*/ 160