1 /****************************************************************************** 2 * 3 * Copyright 2014 The Android Open Source Project 4 * Copyright 2002 - 2004 Open Interface North America, Inc. All rights 5 * reserved. 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at: 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 * 19 ******************************************************************************/ 20 #ifndef OI_STDDEFS_H 21 #define OI_STDDEFS_H 22 /** 23 * @file 24 * This file contains BM3 standard type definitions. 25 * 26 */ 27 28 /******************************************************************************* 29 $Revision: #1 $ 30 ******************************************************************************/ 31 32 #include "oi_cpu_dep.h" 33 34 /** \addtogroup Misc Miscellaneous APIs */ 35 /**@{*/ 36 37 #ifdef __cplusplus 38 extern "C" { 39 #endif 40 41 #ifndef FALSE 42 #define FALSE 0 /* This define statement sets FALSE as a preprocessor alias for 0. */ 43 #endif 44 45 #ifndef TRUE 46 #define TRUE (!FALSE) /* This define statement sets TRUE as a preprocessor alias for !FALSE. */ 47 #endif 48 49 #ifdef HEW_TOOLCHAIN 50 #ifdef NULL 51 #undef NULL /* Override HEW toolchain NULL definition */ 52 #endif 53 #define NULL 0 /* HEW toolchain does not allow us to compare (void*) type to function pointer */ 54 #else 55 #ifndef NULL 56 #define NULL ((void*)0) /* This define statement sets NULL as a preprocessor alias for (void*)0 */ 57 #endif 58 #endif 59 60 /** 61 * @name Maximum and minimum values for basic types 62 * @{ 63 */ 64 #define OI_INT8_MIN ((int8_t)0x80) /* decimal value: -128 */ 65 #define OI_INT8_MAX ((int8_t)0x7F) /* decimal value: 127 */ 66 #define OI_INT16_MIN ((int16_t)0x8000) /* decimal value: -32768 */ 67 #define OI_INT16_MAX ((int16_t)0x7FFF) /* decimal value: 32767 */ 68 #define OI_INT32_MIN ((int32_t)0x80000000) /* decimal value: -2 147 483 648 */ 69 #define OI_INT32_MAX ((int32_t)0x7FFFFFFF) /* decimal value: 2 147 483 647 */ 70 #define OI_UINT8_MIN ((uint8_t)0) /* decimal value: 0 */ 71 #define OI_UINT8_MAX ((uint8_t)0xFF) /* decimal value: 255 */ 72 #define OI_UINT16_MIN ((uint16_t)0) /* decimal value: 0 */ 73 #define OI_UINT16_MAX ((uint16_t)0xFFFF) /* decimal value: 65535 */ 74 #define OI_UINT32_MIN ((uint32_t)0) /* decimal value: 0 */ 75 #define OI_UINT32_MAX ((uint32_t)0xFFFFFFFF) /* decimal value: 4 294 967 295 */ 76 77 /** 78 * @} 79 */ 80 81 /** 82 * @name Integer types required by the Service Discovery Protocol 83 * @{ 84 */ 85 86 /** unsigned 64-bit integer as a structure of two unsigned 32-bit integers */ 87 typedef struct { 88 uint32_t I1; /* most significant 32 bits */ 89 uint32_t I2; /* least significant 32 bits */ 90 } OI_UINT64; 91 92 #define OI_UINT64_MIN \ 93 { (uint32_t)0x00000000, (uint32_t)0x00000000 } 94 #define OI_UINT64_MAX \ 95 { (uint32_t)0XFFFFFFFF, (uint32_t)0XFFFFFFFF } 96 97 /* signed 64-bit integer as a structure of one unsigned 32-bit integer and one 98 * signed 32-bit integer 99 */ 100 typedef struct { 101 int32_t I1; /* most significant 32 bits as a signed integer */ 102 uint32_t I2; /* least significant 32 bits as an unsigned integer */ 103 } OI_INT64; 104 105 #define OI_INT64_MIN \ 106 { (int32_t)0x80000000, (uint32_t)0x00000000 } 107 #define OI_INT64_MAX \ 108 { (int32_t)0X7FFFFFFF, (uint32_t)0XFFFFFFFF } 109 110 /** unsigned 128-bit integer as a structure of four unsigned 32-bit integers */ 111 typedef struct { 112 uint32_t I1; /* most significant 32 bits */ 113 uint32_t I2; /* second-most significant 32 bits */ 114 uint32_t I3; /* third-most significant 32 bits */ 115 uint32_t I4; /* least significant 32 bits */ 116 } OI_UINT128; 117 118 #define OI_UINT128_MIN \ 119 { (uint32_t)0x00000000, (uint32_t)0x00000000, (uint32_t)0x00000000, (uint32_t)0x00000000 } 120 #define OI_UINT128_MAX \ 121 { (uint32_t)0XFFFFFFFF, (uint32_t)0XFFFFFFFF, (uint32_t)0XFFFFFFFF, (uint32_t)0XFFFFFFFF } 122 123 /* signed 128-bit integer as a structure of three unsigned 32-bit integers and 124 * one signed 32-bit integer */ 125 typedef struct { 126 int32_t I1; /* most significant 32 bits as a signed integer */ 127 uint32_t I2; /* second-most significant 32 bits as an unsigned integer */ 128 uint32_t I3; /* third-most significant 32 bits as an unsigned integer */ 129 uint32_t I4; /* least significant 32 bits as an unsigned integer */ 130 } OI_INT128; 131 132 #define OI_INT128_MIN \ 133 { (uint32_t)0x80000000, (uint32_t)0x00000000, (uint32_t)0x00000000, (uint32_t)0x00000000 } 134 #define OI_INT128_MAX \ 135 { (uint32_t)0X7FFFFFFF, (uint32_t)0XFFFFFFFF, (uint32_t)0XFFFFFFFF, (uint32_t)0XFFFFFFFF } 136 137 /** 138 * @} 139 */ 140 141 /** 142 * type for ASCII character data items 143 */ 144 typedef char OI_CHAR; 145 146 /** 147 * type for double-byte character data items 148 */ 149 typedef uint16_t OI_CHAR16; 150 151 /** 152 * types for UTF encoded strings. 153 */ 154 typedef uint8_t OI_UTF8; 155 typedef uint16_t OI_UTF16; 156 typedef uint32_t OI_UTF32; 157 158 /** 159 * @name Single-bit operation macros 160 * @{ 161 * In these macros, x is the data item for which a bit is to be tested or set 162 * and y specifies which bit is to be tested or set. 163 */ 164 165 /* This macro's value is true if the bit specified by y is set in data item x. 166 */ 167 #define OI_BIT_TEST(x, y) ((x) & (y)) 168 169 /* This macro's value is true if the bit specified by y is not set in data item 170 * x. 171 */ 172 #define OI_BIT_CLEAR_TEST(x, y) (((x) & (y)) == 0) 173 174 /** This macro sets the bit specified by y in data item x. */ 175 #define OI_BIT_SET(x, y) ((x) |= (y)) 176 177 /** This macro clears the bit specified by y in data item x. */ 178 #define OI_BIT_CLEAR(x, y) ((x) &= ~(y)) 179 180 /** @} */ 181 182 /** 183 * The OI_ARRAYSIZE macro is set to the number of elements in an array 184 * (instead of the number of bytes, which is returned by sizeof()). 185 */ 186 187 #ifndef OI_ARRAYSIZE 188 #define OI_ARRAYSIZE(a) (sizeof(a) / sizeof((a)[0])) 189 #endif 190 191 /** 192 * @name Preprocessor aliases for individual bit positions 193 * Bits are defined here only if they are not already defined. 194 * @{ 195 */ 196 197 #ifndef BIT0 198 199 #define BIT0 \ 200 0x00000001 /**< preprocessor alias for 32-bit value with bit 0 set, used to \ 201 specify this single bit */ 202 #define BIT1 \ 203 0x00000002 /**< preprocessor alias for 32-bit value with bit 1 set, used to \ 204 specify this single bit */ 205 #define BIT2 \ 206 0x00000004 /**< preprocessor alias for 32-bit value with bit 2 set, used to \ 207 specify this single bit */ 208 #define BIT3 \ 209 0x00000008 /**< preprocessor alias for 32-bit value with bit 3 set, used to \ 210 specify this single bit */ 211 #define BIT4 \ 212 0x00000010 /**< preprocessor alias for 32-bit value with bit 4 set, used to \ 213 specify this single bit */ 214 #define BIT5 \ 215 0x00000020 /**< preprocessor alias for 32-bit value with bit 5 set, used to \ 216 specify this single bit */ 217 #define BIT6 \ 218 0x00000040 /**< preprocessor alias for 32-bit value with bit 6 set, used to \ 219 specify this single bit */ 220 #define BIT7 \ 221 0x00000080 /**< preprocessor alias for 32-bit value with bit 7 set, used to \ 222 specify this single bit */ 223 #define BIT8 \ 224 0x00000100 /**< preprocessor alias for 32-bit value with bit 8 set, used to \ 225 specify this single bit */ 226 #define BIT9 \ 227 0x00000200 /**< preprocessor alias for 32-bit value with bit 9 set, used to \ 228 specify this single bit */ 229 #define BIT10 \ 230 0x00000400 /**< preprocessor alias for 32-bit value with bit 10 set, used to \ 231 specify this single bit */ 232 #define BIT11 \ 233 0x00000800 /**< preprocessor alias for 32-bit value with bit 11 set, used to \ 234 specify this single bit */ 235 #define BIT12 \ 236 0x00001000 /**< preprocessor alias for 32-bit value with bit 12 set, used to \ 237 specify this single bit */ 238 #define BIT13 \ 239 0x00002000 /**< preprocessor alias for 32-bit value with bit 13 set, used to \ 240 specify this single bit */ 241 #define BIT14 \ 242 0x00004000 /**< preprocessor alias for 32-bit value with bit 14 set, used to \ 243 specify this single bit */ 244 #define BIT15 \ 245 0x00008000 /**< preprocessor alias for 32-bit value with bit 15 set, used to \ 246 specify this single bit */ 247 #define BIT16 \ 248 0x00010000 /**< preprocessor alias for 32-bit value with bit 16 set, used to \ 249 specify this single bit */ 250 #define BIT17 \ 251 0x00020000 /**< preprocessor alias for 32-bit value with bit 17 set, used to \ 252 specify this single bit */ 253 #define BIT18 \ 254 0x00040000 /**< preprocessor alias for 32-bit value with bit 18 set, used to \ 255 specify this single bit */ 256 #define BIT19 \ 257 0x00080000 /**< preprocessor alias for 32-bit value with bit 19 set, used to \ 258 specify this single bit */ 259 #define BIT20 \ 260 0x00100000 /**< preprocessor alias for 32-bit value with bit 20 set, used to \ 261 specify this single bit */ 262 #define BIT21 \ 263 0x00200000 /**< preprocessor alias for 32-bit value with bit 21 set, used to \ 264 specify this single bit */ 265 #define BIT22 \ 266 0x00400000 /**< preprocessor alias for 32-bit value with bit 22 set, used to \ 267 specify this single bit */ 268 #define BIT23 \ 269 0x00800000 /**< preprocessor alias for 32-bit value with bit 23 set, used to \ 270 specify this single bit */ 271 #define BIT24 \ 272 0x01000000 /**< preprocessor alias for 32-bit value with bit 24 set, used to \ 273 specify this single bit */ 274 #define BIT25 \ 275 0x02000000 /**< preprocessor alias for 32-bit value with bit 25 set, used to \ 276 specify this single bit */ 277 #define BIT26 \ 278 0x04000000 /**< preprocessor alias for 32-bit value with bit 26 set, used to \ 279 specify this single bit */ 280 #define BIT27 \ 281 0x08000000 /**< preprocessor alias for 32-bit value with bit 27 set, used to \ 282 specify this single bit */ 283 #define BIT28 \ 284 0x10000000 /**< preprocessor alias for 32-bit value with bit 28 set, used to \ 285 specify this single bit */ 286 #define BIT29 \ 287 0x20000000 /**< preprocessor alias for 32-bit value with bit 29 set, used to \ 288 specify this single bit */ 289 #define BIT30 \ 290 0x40000000 /**< preprocessor alias for 32-bit value with bit 30 set, used to \ 291 specify this single bit */ 292 #define BIT31 \ 293 0x80000000 /**< preprocessor alias for 32-bit value with bit 31 set, used to \ 294 specify this single bit */ 295 296 #endif /* BIT0 et al */ 297 298 /** @} */ 299 300 #ifdef __cplusplus 301 } 302 #endif 303 304 /**@}*/ 305 306 /*****************************************************************************/ 307 #endif /* OI_STDDEFS_H */ 308