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