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