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