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_TIME_H 20ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define _OI_TIME_H 21ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** @file 22ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 23ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * This file provides time type definitions and interfaces to time-related functions. 24ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 25ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * The stack maintains a 64-bit real-time millisecond clock. The choice of 26ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * milliseconds is for convenience, not accuracy. 27ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 28ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * Timeouts are specified as tenths of seconds in a 32-bit value. Timeout values 29ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * specified by the Bluetooth specification are usually muliple seconds, so 30ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * accuracy to a tenth of a second is more than adequate. 31ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 32ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * This file also contains macros to convert between seconds and the Link 33ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * Manager's 1.28-second units. 34ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 35ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta */ 36ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 37ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/********************************************************************************** 38ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta $Revision: #1 $ 39ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta***********************************************************************************/ 40ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 41ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#include "oi_stddefs.h" 42ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 43ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 44ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** \addtogroup Misc Miscellaneous APIs */ 45ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/**@{*/ 46ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 47ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifdef __cplusplus 48ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Guptaextern "C" { 49ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif 50ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 51ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 52ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 53ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** 54ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * Within the core stack timeouts are specified in intervals of tenths of seconds 55ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta */ 56ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 57ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Guptatypedef OI_UINT16 OI_INTERVAL; 58ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define OI_INTERVALS_PER_SECOND 10 59ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define MSECS_PER_OI_INTERVAL (1000 / OI_INTERVALS_PER_SECOND) 60ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 61ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** maximum interval (54 min 36.7 sec) */ 62ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define OI_MAX_INTERVAL 0x7fff 63ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 64ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 65ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** 66ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * Macro to convert seconds to OI_INTERVAL time units 67ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta */ 68ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 69ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define OI_SECONDS(n) ((OI_INTERVAL) ((n) * OI_INTERVALS_PER_SECOND)) 70ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 71ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** 72ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * Macro to convert milliseconds to OI_INTERVAL time units (Rounded Up) 73ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta */ 74ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 75ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define OI_MSECONDS(n) ((OI_INTERVAL) ((n + MSECS_PER_OI_INTERVAL - 1) / MSECS_PER_OI_INTERVAL)) 76ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 77ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** 78ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * Macro to convert minutes to OI_INTERVAL time units 79ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta */ 80ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 81ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define OI_MINUTES(n) ((OI_INTERVAL) ((n) * OI_SECONDS(60))) 82ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 83ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** Convert an OI_INTERVAL to milliseconds. */ 84ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define OI_INTERVAL_TO_MILLISECONDS(i) ((i) * MSECS_PER_OI_INTERVAL) 85ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 86ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** 87ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * The stack depends on relative not absolute time. Any mapping between the 88ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * stack's real-time clock and absolute time and date is implementation-dependent. 89ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta */ 90ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 91ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Guptatypedef struct { 92ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_INT32 seconds; 93ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_INT16 mseconds; 94ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta} OI_TIME; 95ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 96ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** 97ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * Convert an OI_TIME to milliseconds. 98ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 99ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * @param t the time to convert 100ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 101ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * @return the time in milliseconds 102ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta */ 103ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaOI_UINT32 OI_Time_ToMS(OI_TIME *t); 104ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 105ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 106ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** 107ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * This function compares two time values. 108ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 109ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * @param T1 first time to compare. 110ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 111ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * @param T2 second time to compare. 112ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 113ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * @return 114ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta @verbatim 115ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta -1 if t1 < t2 116ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 0 if t1 = t2 117ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta +1 if t1 > t2 118ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta @endverbatim 119ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta */ 120ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 121ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaOI_INT16 OI_Time_Compare(OI_TIME *T1, 122ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_TIME *T2); 123ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 124ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 125ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** 126ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * This function returns the interval between two times to a granularity of 0.1 seconds. 127ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 128ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * @param Sooner a time value more recent that Later 129ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 130ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * @param Later a time value later than Sooner 131ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 132ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * @note The result is an OI_INTERVAL value so this function only works for time intervals 133ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * that are less than about 71 minutes. 134ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 135ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * @return the time interval between the two times = (Later - Sooner) 136ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta */ 137ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 138ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaOI_INTERVAL OI_Time_Interval(OI_TIME *Sooner, 139ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_TIME *Later); 140ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 141ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 142ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 143ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** 144ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * This function returns the interval between two times to a granularity of milliseconds. 145ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 146ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * @param Sooner a time value more recent that Later 147ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 148ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * @param Later a time value later than Sooner 149ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 150ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * @note The result is an OI_UINT32 value so this function only works for time intervals 151ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * that are less than about 50 days. 152ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 153ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * @return the time interval between the two times = (Later - Sooner) 154ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta */ 155ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 156ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaOI_UINT32 OI_Time_IntervalMsecs(OI_TIME *Sooner, 157ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta OI_TIME *Later); 158ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 159ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 160ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 161ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** 162ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * This function answers the question, Have we reached or gone past the target time? 163ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 164ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * @param pTargetTime target time 165ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * 166ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * @return TRUE means time now is at or past target time 167ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * FALSE means target time is still some time in the future 168ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta */ 169ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 170ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant GuptaOI_BOOL OI_Time_NowReachedTime(OI_TIME *pTargetTime); 171ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 172ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** 173ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * Convert seconds to the Link Manager 1.28-second units 174ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * Approximate by using 1.25 conversion factor. 175ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta */ 176ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 177ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define OI_SECONDS_TO_LM_TIME_UNITS(lmUnits) ((lmUnits)<4?(lmUnits):(lmUnits)-((lmUnits)>>2)) 178ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 179ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 180ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/** 181ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * Convert Link Manager 1.28-second units to seconds. 182ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * Approximate by using 1.25 conversion factor. 183ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta */ 184ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 185ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#define OI_LM_TIME_UNITS_TO_SECONDS(lmUnits) ((lmUnits) + ((lmUnits)>>2)) 186ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 187ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#ifdef __cplusplus 188ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta} 189ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif 190ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 191ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/**@}*/ 192ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 193ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/* Include for OI_Time_Now() prototype 194ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta * Must be included at end to obtain OI_TIME typedef 195ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta */ 196ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#include "oi_osinterface.h" 197ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 198ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta/*****************************************************************************/ 199ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta#endif /* _OI_TIME_H */ 200ce24765fe7620c34e8d88ed4f826c8a6917582b2Hemant Gupta 201