| /****************************************************************************** |
| * |
| * Copyright 2014 The Android Open Source Project |
| * Copyright 2002 - 2004 Open Interface North America, Inc. All rights |
| * reserved. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at: |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| ******************************************************************************/ |
| #ifndef OI_STDDEFS_H |
| #define OI_STDDEFS_H |
| /** |
| * @file |
| * This file contains BM3 standard type definitions. |
| * |
| */ |
| |
| /******************************************************************************* |
| $Revision: #1 $ |
| ******************************************************************************/ |
| |
| #include "oi_cpu_dep.h" |
| |
| /** \addtogroup Misc Miscellaneous APIs */ |
| /**@{*/ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #ifndef FALSE |
| #define FALSE \ |
| 0 /**< This define statement sets FALSE as a preprocessor alias for 0. */ |
| #endif |
| |
| #ifndef TRUE |
| #define TRUE \ |
| (!FALSE) /**< This define statement sets TRUE as a preprocessor alias for \ |
| !FALSE. */ |
| #endif |
| |
| #ifdef HEW_TOOLCHAIN |
| #ifdef NULL |
| #undef NULL /**< Override HEW toolchain NULL definition */ |
| #endif |
| #define NULL \ |
| 0 /**< HEW toolchain does not allow us to compare (void*) type to function \ |
| pointer */ |
| #else |
| #ifndef NULL |
| #define NULL \ |
| ((void*)0) /**< This define statement sets NULL as a preprocessor alias \ |
| for (void*)0 */ |
| #endif |
| #endif |
| |
| /** |
| * @name Maximum and minimum values for basic types |
| * @{ |
| */ |
| #define OI_INT8_MIN ((int8_t)0x80) /**< decimal value: -128 */ |
| #define OI_INT8_MAX ((int8_t)0x7F) /**< decimal value: 127 */ |
| #define OI_INT16_MIN ((int16_t)0x8000) /**< decimal value: -32768 */ |
| #define OI_INT16_MAX ((int16_t)0x7FFF) /**< decimal value: 32767 */ |
| #define OI_INT32_MIN \ |
| ((int32_t)0x80000000) /**< decimal value: -2,147,483,648 \ |
| */ |
| #define OI_INT32_MAX \ |
| ((int32_t)0x7FFFFFFF) /**< decimal value: 2,147,483,647 \ |
| */ |
| #define OI_UINT8_MIN ((uint8_t)0) /**< decimal value: 0 */ |
| #define OI_UINT8_MAX ((uint8_t)0xFF) /**< decimal value: 255 */ |
| #define OI_UINT16_MIN ((uint16_t)0) /**< decimal value: 0 */ |
| #define OI_UINT16_MAX ((uint16_t)0xFFFF) /**< decimal value: 65535 */ |
| #define OI_UINT32_MIN ((uint32_t)0) /**< decimal value: 0 */ |
| #define OI_UINT32_MAX \ |
| ((uint32_t)0xFFFFFFFF) /**< decimal value: 4,294,967,295 */ |
| |
| /** |
| * @} |
| */ |
| |
| /** |
| * @name Integer types required by the Service Discovery Protocol |
| * @{ |
| */ |
| |
| /** unsigned 64-bit integer as a structure of two unsigned 32-bit integers */ |
| typedef struct { |
| uint32_t I1; /**< most significant 32 bits */ |
| uint32_t I2; /**< least significant 32 bits */ |
| } OI_UINT64; |
| |
| #define OI_UINT64_MIN \ |
| { (uint32_t)0x00000000, (uint32_t)0x00000000 } |
| #define OI_UINT64_MAX \ |
| { (uint32_t)0XFFFFFFFF, (uint32_t)0XFFFFFFFF } |
| |
| /* signed 64-bit integer as a structure of one unsigned 32-bit integer and one |
| * signed 32-bit integer |
| */ |
| typedef struct { |
| int32_t I1; /**< most significant 32 bits as a signed integer */ |
| uint32_t I2; /**< least significant 32 bits as an unsigned integer */ |
| } OI_INT64; |
| |
| #define OI_INT64_MIN \ |
| { (int32_t)0x80000000, (uint32_t)0x00000000 } |
| #define OI_INT64_MAX \ |
| { (int32_t)0X7FFFFFFF, (uint32_t)0XFFFFFFFF } |
| |
| /** unsigned 128-bit integer as a structure of four unsigned 32-bit integers */ |
| typedef struct { |
| uint32_t I1; /**< most significant 32 bits */ |
| uint32_t I2; /**< second-most significant 32 bits */ |
| uint32_t I3; /**< third-most significant 32 bits */ |
| uint32_t I4; /**< least significant 32 bits */ |
| } OI_UINT128; |
| |
| #define OI_UINT128_MIN \ |
| { \ |
| (uint32_t)0x00000000, (uint32_t)0x00000000, (uint32_t)0x00000000, \ |
| (uint32_t)0x00000000 \ |
| } |
| #define OI_UINT128_MAX \ |
| { \ |
| (uint32_t)0XFFFFFFFF, (uint32_t)0XFFFFFFFF, (uint32_t)0XFFFFFFFF, \ |
| (uint32_t)0XFFFFFFFF \ |
| } |
| |
| /* signed 128-bit integer as a structure of three unsigned 32-bit integers and |
| * one signed 32-bit integer */ |
| typedef struct { |
| int32_t I1; /**< most significant 32 bits as a signed integer */ |
| uint32_t I2; /**< second-most significant 32 bits as an unsigned integer */ |
| uint32_t I3; /**< third-most significant 32 bits as an unsigned integer */ |
| uint32_t I4; /**< least significant 32 bits as an unsigned integer */ |
| } OI_INT128; |
| |
| #define OI_INT128_MIN \ |
| { \ |
| (uint32_t)0x80000000, (uint32_t)0x00000000, (uint32_t)0x00000000, \ |
| (uint32_t)0x00000000 \ |
| } |
| #define OI_INT128_MAX \ |
| { \ |
| (uint32_t)0X7FFFFFFF, (uint32_t)0XFFFFFFFF, (uint32_t)0XFFFFFFFF, \ |
| (uint32_t)0XFFFFFFFF \ |
| } |
| |
| /** |
| * @} |
| */ |
| |
| /** |
| * type for ASCII character data items |
| */ |
| typedef char OI_CHAR; |
| |
| /** |
| * type for double-byte character data items |
| */ |
| typedef uint16_t OI_CHAR16; |
| |
| /** |
| * types for UTF encoded strings. |
| */ |
| typedef uint8_t OI_UTF8; |
| typedef uint16_t OI_UTF16; |
| typedef uint32_t OI_UTF32; |
| |
| /** |
| * @name Single-bit operation macros |
| * @{ |
| * In these macros, x is the data item for which a bit is to be tested or set |
| * and y specifies which bit is to be tested or set. |
| */ |
| |
| /* This macro's value is true if the bit specified by y is set in data item x. |
| */ |
| #define OI_BIT_TEST(x, y) ((x) & (y)) |
| |
| /* This macro's value is true if the bit specified by y is not set in data item |
| * x. |
| */ |
| #define OI_BIT_CLEAR_TEST(x, y) (((x) & (y)) == 0) |
| |
| /** This macro sets the bit specified by y in data item x. */ |
| #define OI_BIT_SET(x, y) ((x) |= (y)) |
| |
| /** This macro clears the bit specified by y in data item x. */ |
| #define OI_BIT_CLEAR(x, y) ((x) &= ~(y)) |
| |
| /** @} */ |
| |
| /** |
| * The OI_ARRAYSIZE macro is set to the number of elements in an array |
| * (instead of the number of bytes, which is returned by sizeof()). |
| */ |
| |
| #ifndef OI_ARRAYSIZE |
| #define OI_ARRAYSIZE(a) (sizeof(a) / sizeof((a)[0])) |
| #endif |
| |
| /** |
| * @name Preprocessor aliases for individual bit positions |
| * Bits are defined here only if they are not already defined. |
| * @{ |
| */ |
| |
| #ifndef BIT0 |
| |
| #define BIT0 \ |
| 0x00000001 /**< preprocessor alias for 32-bit value with bit 0 set, used to \ |
| specify this single bit */ |
| #define BIT1 \ |
| 0x00000002 /**< preprocessor alias for 32-bit value with bit 1 set, used to \ |
| specify this single bit */ |
| #define BIT2 \ |
| 0x00000004 /**< preprocessor alias for 32-bit value with bit 2 set, used to \ |
| specify this single bit */ |
| #define BIT3 \ |
| 0x00000008 /**< preprocessor alias for 32-bit value with bit 3 set, used to \ |
| specify this single bit */ |
| #define BIT4 \ |
| 0x00000010 /**< preprocessor alias for 32-bit value with bit 4 set, used to \ |
| specify this single bit */ |
| #define BIT5 \ |
| 0x00000020 /**< preprocessor alias for 32-bit value with bit 5 set, used to \ |
| specify this single bit */ |
| #define BIT6 \ |
| 0x00000040 /**< preprocessor alias for 32-bit value with bit 6 set, used to \ |
| specify this single bit */ |
| #define BIT7 \ |
| 0x00000080 /**< preprocessor alias for 32-bit value with bit 7 set, used to \ |
| specify this single bit */ |
| #define BIT8 \ |
| 0x00000100 /**< preprocessor alias for 32-bit value with bit 8 set, used to \ |
| specify this single bit */ |
| #define BIT9 \ |
| 0x00000200 /**< preprocessor alias for 32-bit value with bit 9 set, used to \ |
| specify this single bit */ |
| #define BIT10 \ |
| 0x00000400 /**< preprocessor alias for 32-bit value with bit 10 set, used to \ |
| specify this single bit */ |
| #define BIT11 \ |
| 0x00000800 /**< preprocessor alias for 32-bit value with bit 11 set, used to \ |
| specify this single bit */ |
| #define BIT12 \ |
| 0x00001000 /**< preprocessor alias for 32-bit value with bit 12 set, used to \ |
| specify this single bit */ |
| #define BIT13 \ |
| 0x00002000 /**< preprocessor alias for 32-bit value with bit 13 set, used to \ |
| specify this single bit */ |
| #define BIT14 \ |
| 0x00004000 /**< preprocessor alias for 32-bit value with bit 14 set, used to \ |
| specify this single bit */ |
| #define BIT15 \ |
| 0x00008000 /**< preprocessor alias for 32-bit value with bit 15 set, used to \ |
| specify this single bit */ |
| #define BIT16 \ |
| 0x00010000 /**< preprocessor alias for 32-bit value with bit 16 set, used to \ |
| specify this single bit */ |
| #define BIT17 \ |
| 0x00020000 /**< preprocessor alias for 32-bit value with bit 17 set, used to \ |
| specify this single bit */ |
| #define BIT18 \ |
| 0x00040000 /**< preprocessor alias for 32-bit value with bit 18 set, used to \ |
| specify this single bit */ |
| #define BIT19 \ |
| 0x00080000 /**< preprocessor alias for 32-bit value with bit 19 set, used to \ |
| specify this single bit */ |
| #define BIT20 \ |
| 0x00100000 /**< preprocessor alias for 32-bit value with bit 20 set, used to \ |
| specify this single bit */ |
| #define BIT21 \ |
| 0x00200000 /**< preprocessor alias for 32-bit value with bit 21 set, used to \ |
| specify this single bit */ |
| #define BIT22 \ |
| 0x00400000 /**< preprocessor alias for 32-bit value with bit 22 set, used to \ |
| specify this single bit */ |
| #define BIT23 \ |
| 0x00800000 /**< preprocessor alias for 32-bit value with bit 23 set, used to \ |
| specify this single bit */ |
| #define BIT24 \ |
| 0x01000000 /**< preprocessor alias for 32-bit value with bit 24 set, used to \ |
| specify this single bit */ |
| #define BIT25 \ |
| 0x02000000 /**< preprocessor alias for 32-bit value with bit 25 set, used to \ |
| specify this single bit */ |
| #define BIT26 \ |
| 0x04000000 /**< preprocessor alias for 32-bit value with bit 26 set, used to \ |
| specify this single bit */ |
| #define BIT27 \ |
| 0x08000000 /**< preprocessor alias for 32-bit value with bit 27 set, used to \ |
| specify this single bit */ |
| #define BIT28 \ |
| 0x10000000 /**< preprocessor alias for 32-bit value with bit 28 set, used to \ |
| specify this single bit */ |
| #define BIT29 \ |
| 0x20000000 /**< preprocessor alias for 32-bit value with bit 29 set, used to \ |
| specify this single bit */ |
| #define BIT30 \ |
| 0x40000000 /**< preprocessor alias for 32-bit value with bit 30 set, used to \ |
| specify this single bit */ |
| #define BIT31 \ |
| 0x80000000 /**< preprocessor alias for 32-bit value with bit 31 set, used to \ |
| specify this single bit */ |
| |
| #endif /* BIT0 et al */ |
| |
| /** @} */ |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| /**@}*/ |
| |
| /*****************************************************************************/ |
| #endif /* OI_STDDEFS_H */ |