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