xref: /btstack/3rd-party/bluedroid/decoder/include/oi_osinterface.h (revision df25739fc3ea5a0a90f0f5925e6461d653697d2e)
1*df25739fSMilanka Ringwald /******************************************************************************
2*df25739fSMilanka Ringwald  *
3*df25739fSMilanka Ringwald  *  Copyright (C) 2014 The Android Open Source Project
4*df25739fSMilanka Ringwald  *  Copyright 2002 - 2004 Open Interface North America, Inc. All rights reserved.
5*df25739fSMilanka Ringwald  *
6*df25739fSMilanka Ringwald  *  Licensed under the Apache License, Version 2.0 (the "License");
7*df25739fSMilanka Ringwald  *  you may not use this file except in compliance with the License.
8*df25739fSMilanka Ringwald  *  You may obtain a copy of the License at:
9*df25739fSMilanka Ringwald  *
10*df25739fSMilanka Ringwald  *  http://www.apache.org/licenses/LICENSE-2.0
11*df25739fSMilanka Ringwald  *
12*df25739fSMilanka Ringwald  *  Unless required by applicable law or agreed to in writing, software
13*df25739fSMilanka Ringwald  *  distributed under the License is distributed on an "AS IS" BASIS,
14*df25739fSMilanka Ringwald  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15*df25739fSMilanka Ringwald  *  See the License for the specific language governing permissions and
16*df25739fSMilanka Ringwald  *  limitations under the License.
17*df25739fSMilanka Ringwald  *
18*df25739fSMilanka Ringwald  ******************************************************************************/
19*df25739fSMilanka Ringwald #ifndef _OI_OSINTERFACE_H
20*df25739fSMilanka Ringwald #define _OI_OSINTERFACE_H
21*df25739fSMilanka Ringwald /**
22*df25739fSMilanka Ringwald  @file
23*df25739fSMilanka Ringwald  * This file provides the platform-independent interface for functions for which
24*df25739fSMilanka Ringwald  * implementation is platform-specific.
25*df25739fSMilanka Ringwald  *
26*df25739fSMilanka Ringwald  * The functions in this header file define the operating system or hardware
27*df25739fSMilanka Ringwald  * services needed by the BLUEmagic 3.0 protocol stack. The
28*df25739fSMilanka Ringwald  * actual implementation of these services is platform-dependent.
29*df25739fSMilanka Ringwald  *
30*df25739fSMilanka Ringwald  */
31*df25739fSMilanka Ringwald 
32*df25739fSMilanka Ringwald /**********************************************************************************
33*df25739fSMilanka Ringwald   $Revision: #1 $
34*df25739fSMilanka Ringwald ***********************************************************************************/
35*df25739fSMilanka Ringwald 
36*df25739fSMilanka Ringwald #include "oi_stddefs.h"
37*df25739fSMilanka Ringwald #include "oi_time.h"
38*df25739fSMilanka Ringwald #include "oi_status.h"
39*df25739fSMilanka Ringwald #include "oi_modules.h"
40*df25739fSMilanka Ringwald 
41*df25739fSMilanka Ringwald /** \addtogroup Misc Miscellaneous APIs */
42*df25739fSMilanka Ringwald /**@{*/
43*df25739fSMilanka Ringwald 
44*df25739fSMilanka Ringwald #ifdef __cplusplus
45*df25739fSMilanka Ringwald extern "C" {
46*df25739fSMilanka Ringwald #endif
47*df25739fSMilanka Ringwald 
48*df25739fSMilanka Ringwald 
49*df25739fSMilanka Ringwald /**
50*df25739fSMilanka Ringwald  * Terminates execution.
51*df25739fSMilanka Ringwald  *
52*df25739fSMilanka Ringwald  * @param reason  Reason for termination
53*df25739fSMilanka Ringwald  */
54*df25739fSMilanka Ringwald void OI_FatalError(OI_STATUS reason);
55*df25739fSMilanka Ringwald 
56*df25739fSMilanka Ringwald /**
57*df25739fSMilanka Ringwald  * This function logs an error.
58*df25739fSMilanka Ringwald  *
59*df25739fSMilanka Ringwald  * When built for release mode, BLUEmagic 3 errors are logged to
60*df25739fSMilanka Ringwald  * this function. (in debug mode, errors are logged via
61*df25739fSMilanka Ringwald  * OI_Print()).
62*df25739fSMilanka Ringwald  *
63*df25739fSMilanka Ringwald  * @param module Module in which the error was detected (see
64*df25739fSMilanka Ringwald  *                oi_modules.h)
65*df25739fSMilanka Ringwald  * @param lineno Line number of the C file OI_SLOG_ERROR called
66*df25739fSMilanka Ringwald  * @param status Status code associated with the error event
67*df25739fSMilanka Ringwald  */
68*df25739fSMilanka Ringwald void OI_LogError(OI_MODULE module, OI_INT lineno, OI_STATUS status);
69*df25739fSMilanka Ringwald 
70*df25739fSMilanka Ringwald /**
71*df25739fSMilanka Ringwald  * This function initializes the debug code handling.
72*df25739fSMilanka Ringwald  *
73*df25739fSMilanka Ringwald  * When built for debug mode, this function performs platform
74*df25739fSMilanka Ringwald  * dependent initialization to handle message codes passed in
75*df25739fSMilanka Ringwald  * via OI_SetMsgCode().
76*df25739fSMilanka Ringwald  */
77*df25739fSMilanka Ringwald void OI_InitDebugCodeHandler(void);
78*df25739fSMilanka Ringwald 
79*df25739fSMilanka Ringwald 
80*df25739fSMilanka Ringwald /**
81*df25739fSMilanka Ringwald  * This function reads the time from the real time clock.
82*df25739fSMilanka Ringwald  *
83*df25739fSMilanka Ringwald  * All timing in BM3 is relative, typically a granularity
84*df25739fSMilanka Ringwald  * of 5 or 10 msecs is adequate.
85*df25739fSMilanka Ringwald  *
86*df25739fSMilanka Ringwald  * @param[out] now  Pointer to the buffer to which the current
87*df25739fSMilanka Ringwald  *       time will be returned
88*df25739fSMilanka Ringwald  */
89*df25739fSMilanka Ringwald void OI_Time_Now(OI_TIME *now);
90*df25739fSMilanka Ringwald 
91*df25739fSMilanka Ringwald /**
92*df25739fSMilanka Ringwald  * This function causes the current thread to sleep for the
93*df25739fSMilanka Ringwald  * specified amount of time. This function must be called
94*df25739fSMilanka Ringwald  * without the stack access token.
95*df25739fSMilanka Ringwald  *
96*df25739fSMilanka Ringwald  * @note BM3 corestack and profiles never suspend and never call
97*df25739fSMilanka Ringwald  * OI_Sleep. The use of OI_Sleep is limited to applications and
98*df25739fSMilanka Ringwald  * platform-specific code.
99*df25739fSMilanka Ringwald  *
100*df25739fSMilanka Ringwald  * If your port and applications never use OI_Sleep, this function can be left unimplemented.
101*df25739fSMilanka Ringwald  *
102*df25739fSMilanka Ringwald  * @param milliseconds  Number of milliseconds to sleep
103*df25739fSMilanka Ringwald  */
104*df25739fSMilanka Ringwald void OI_Sleep(OI_UINT32 milliseconds);
105*df25739fSMilanka Ringwald 
106*df25739fSMilanka Ringwald 
107*df25739fSMilanka Ringwald /**
108*df25739fSMilanka Ringwald  * Defines for message type codes.
109*df25739fSMilanka Ringwald  */
110*df25739fSMilanka Ringwald #define OI_MSG_CODE_APPLICATION               0   /**< Application output */
111*df25739fSMilanka Ringwald #define OI_MSG_CODE_ERROR                     1   /**< Error message output */
112*df25739fSMilanka Ringwald #define OI_MSG_CODE_WARNING                   2   /**< Warning message output */
113*df25739fSMilanka Ringwald #define OI_MSG_CODE_TRACE                     3   /**< User API function trace output */
114*df25739fSMilanka Ringwald #define OI_MSG_CODE_PRINT1                    4   /**< Catagory 1 debug print output */
115*df25739fSMilanka Ringwald #define OI_MSG_CODE_PRINT2                    5   /**< Catagory 2 debug print output */
116*df25739fSMilanka Ringwald #define OI_MSG_CODE_HEADER                    6   /**< Error/Debug output header */
117*df25739fSMilanka Ringwald 
118*df25739fSMilanka Ringwald /**
119*df25739fSMilanka Ringwald  * This function is used to indicate the type of text being output with
120*df25739fSMilanka Ringwald  * OI_Print(). For the Linux and Win32 platforms, it will set
121*df25739fSMilanka Ringwald  * the color of the text. Other possible uses could be to insert
122*df25739fSMilanka Ringwald  * HTML style tags, add some other message type indication, or
123*df25739fSMilanka Ringwald  * be completely ignored altogether.
124*df25739fSMilanka Ringwald  *
125*df25739fSMilanka Ringwald  * @param code  OI_MSG_CODE_* indicating setting the message type.
126*df25739fSMilanka Ringwald  */
127*df25739fSMilanka Ringwald void OI_SetMsgCode(OI_UINT8 code);
128*df25739fSMilanka Ringwald 
129*df25739fSMilanka Ringwald /**
130*df25739fSMilanka Ringwald  * All output from OI_Printf() and all debug output is sent to OI_Print.
131*df25739fSMilanka Ringwald  * Typically, if the platform has a console, OI_Print() is sent to stdout.
132*df25739fSMilanka Ringwald  * Embedded platforms typically send OI_Print() output to a serial port.
133*df25739fSMilanka Ringwald  *
134*df25739fSMilanka Ringwald  * @param str  String to print
135*df25739fSMilanka Ringwald  */
136*df25739fSMilanka Ringwald void OI_Print(OI_CHAR const *str);
137*df25739fSMilanka Ringwald 
138*df25739fSMilanka Ringwald /**
139*df25739fSMilanka Ringwald  *  In cases where OI_Print() is sending output to a logfile in addition to console,
140*df25739fSMilanka Ringwald  *  it is desirable to also put console input into the logfile.
141*df25739fSMilanka Ringwald  *  This function can be called by the console input process.
142*df25739fSMilanka Ringwald  *
143*df25739fSMilanka Ringwald  *  @note This is an optional API which is strictly
144*df25739fSMilanka Ringwald  *  between the platform-specific stack_console and osinterface
145*df25739fSMilanka Ringwald  *  modules. This API need only be implemented on those
146*df25739fSMilanka Ringwald  *  platforms where is serves a useful purpose, e.g., win32.
147*df25739fSMilanka Ringwald  *
148*df25739fSMilanka Ringwald  * @param str  Console input string
149*df25739fSMilanka Ringwald  */
150*df25739fSMilanka Ringwald 
151*df25739fSMilanka Ringwald void OI_Print_ConsoleInput(OI_CHAR const *str);
152*df25739fSMilanka Ringwald 
153*df25739fSMilanka Ringwald /**
154*df25739fSMilanka Ringwald  *  This function computes the CRC16 of the program image.
155*df25739fSMilanka Ringwald  */
156*df25739fSMilanka Ringwald OI_UINT16  OI_ProgramImageCRC16(void);
157*df25739fSMilanka Ringwald 
158*df25739fSMilanka Ringwald /**
159*df25739fSMilanka Ringwald  * Writes an integer to stdout in hex. This macro is intended
160*df25739fSMilanka Ringwald  * for selective use when debugging in small memory
161*df25739fSMilanka Ringwald  * configurations or other times when it is not possible to use
162*df25739fSMilanka Ringwald  * OI_DBGPRINT.
163*df25739fSMilanka Ringwald  *
164*df25739fSMilanka Ringwald  * @param n  the integer to print
165*df25739fSMilanka Ringwald  */
166*df25739fSMilanka Ringwald 
167*df25739fSMilanka Ringwald #define OI_Print_Int(n) \
168*df25739fSMilanka Ringwald { \
169*df25739fSMilanka Ringwald     static const OI_CHAR _digits[] = "0123456789ABCDEF"; \
170*df25739fSMilanka Ringwald     OI_CHAR _buf[9]; \
171*df25739fSMilanka Ringwald     OI_CHAR *_str = &_buf[8]; \
172*df25739fSMilanka Ringwald     OI_UINT32 _i = n; \
173*df25739fSMilanka Ringwald     *_str = 0; \
174*df25739fSMilanka Ringwald     do { *(--_str) = _digits[(_i & 0xF)]; _i >>= 4; } while (_i); \
175*df25739fSMilanka Ringwald     OI_Print(_str); \
176*df25739fSMilanka Ringwald }
177*df25739fSMilanka Ringwald 
178*df25739fSMilanka Ringwald /**
179*df25739fSMilanka Ringwald  *  Application Dynamic Memory allocation.
180*df25739fSMilanka Ringwald  *
181*df25739fSMilanka Ringwald  *  These APIs are provided for application use on those
182*df25739fSMilanka Ringwald  *  platforms which have no dynamic memory support. Memory is
183*df25739fSMilanka Ringwald  *  allocated from the pool-based heap managed by the stack's
184*df25739fSMilanka Ringwald  *  internal memory manager.
185*df25739fSMilanka Ringwald  */
186*df25739fSMilanka Ringwald void *OI_APP_Malloc(OI_INT32 size);
187*df25739fSMilanka Ringwald void OI_APP_Free(void *ptr);
188*df25739fSMilanka Ringwald 
189*df25739fSMilanka Ringwald /*****************************************************************************/
190*df25739fSMilanka Ringwald #ifdef __cplusplus
191*df25739fSMilanka Ringwald }
192*df25739fSMilanka Ringwald #endif
193*df25739fSMilanka Ringwald 
194*df25739fSMilanka Ringwald /**@}*/
195*df25739fSMilanka Ringwald 
196*df25739fSMilanka Ringwald #endif /* _OI_OSINTERFACE_H */
197*df25739fSMilanka Ringwald 
198