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