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